xysfwm 发表于 2013-3-27 17:24:08

求助:l298n驱动模块和mpu6050自平衡车协调的问题

本帖最后由 xysfwm 于 2013-3-28 10:04 编辑

       我的平衡车,电源上电后陀螺仪的数据有时候测不出来,表现出的现象就是电机安一个方向转,转动车子,电机转动方向不会发生变化,,,有时候运行一段时间也能正常,有时候就能正常,转动车子电机正反装会变化,有时候有效,有时候失效。我很不理解造成这种情况的原因。还有就是当正反转的频率稍快些,但也不是很快的那种,我的L298n驱动班就会掉电,必须重新打开总电源才能正常上电。这个现象不正常,但我不知道是何原因。我的电源是12v,3000ma的锂电池,用的7805降到5v给单片机供电,电源并有470uf的电解滤波。
      6050有时候开始不能正确读数,但是等一段时间后就能正确读数了。
       我用的stc12c5a60s2单片机12m晶振。我的程序段如下:

void Motor_pwm(char pwm_l, char pwm_r)
{       if(pwm_l<0)                                                   //负角度
           {pwm_l =-pwm_l;                                           //变为正角度
          INT1=1;                                                          //左电机正转
                INT2=0;
                }
           else
           {   INT1=0;                                           //正角度,反转
                        INT2=1;
                }
          if(pwm_r<0)                                                       
           {pwm_r =-pwm_r;                                                  //右电机正转
          INT3=1;
                INT4=0;
                }
           else
           {   INT3=0;                                                   //右电机反转
                        INT4=1;
                }
        CCAP0H=150-3*pwm_l;                                                        //值越小,占空比越大,转速也快,
        CCAP1H=150-3*pwm_r;
          
}

void main()
{          
       
       InitMPU6050();                                           //初始化 mpu6050
        PWM_init();                                                       //               初始化 PCA/PWM寄存器
        Time_init() ;                                                //初始化定时器
        delay();
       
        while(1)
   {       

        Angle_char=(char)(Angle+0.5);                               //把角度值浮点类型强制转化为有符号char
        if(Angle_char>50||Angle_char<-50)           //角度大于41或小于41,关闭电机
           {   INT1=1;
                   INT2=1;
                   INT3=1;
                   INT4=1;
               }
        PWM_L=Angle_char;                                          //左电机pwm值
        PWM_R=Angle_char;                                          //右电机pwm值
         }
}
void Time1_int() interrupt 3
{       
       
        TH1=(65536-10000)/256;   //10ms
        TL1=(65536-10000)%256;
       
        Angle_Calcu();            //读取mpu6050的角度值
        Motor_pwm(PWM_L,PWM_R); //左右电机pwm调节
}

mpu 6050的数据处理就是卡尔曼滤波,整合的,那段就不贴了,。就这2个程序是不是有什么问题?求懂得人给我解答下,感激不尽!!!

   还有就是为什么很多人的6050的数据读取要放在定时器中段里进行,中断程序不是不应该放大段的程序?
我的6050的数据也是放在中断的,为什么开始上电有时候不能正确读出?

葱拌豆腐 发表于 2013-4-1 21:42:55

你的问题解决了么?我也遇到类似的问题,只要电机不供电就没问题,电机一供电不到一分钟就死掉了,电机只朝一个方向转。

一杯沙漏 发表于 2013-4-16 20:50:03

同样电机卡死问题,求解答。。。。

ab0298 发表于 2014-3-19 10:31:24

直流电机pwm调速,当角度倾斜很小时,Output也很小,输出的电压就会在死区之内,电机不转。我也是这个问题,不知道是不是应该换个减速比小的直流电机。否则怎么办呢?一直困惑?
页: [1]
查看完整版本: 求助:l298n驱动模块和mpu6050自平衡车协调的问题