极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14606|回复: 3

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

[复制链接]
发表于 2013-3-27 17:24:08 | 显示全部楼层 |阅读模式
本帖最后由 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 | 显示全部楼层
同样电机卡死问题,求解答。。。。
回复 支持 反对

使用道具 举报

发表于 2014-3-19 10:31:24 | 显示全部楼层
直流电机pwm调速,当角度倾斜很小时,Output也很小,输出的电压就会在死区之内,电机不转。我也是这个问题,不知道是不是应该换个减速比小的直流电机。否则怎么办呢?一直困惑?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-3 04:21 , Processed in 0.038683 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表