求助: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的数据也是放在中断的,为什么开始上电有时候不能正确读出? 你的问题解决了么?我也遇到类似的问题,只要电机不供电就没问题,电机一供电不到一分钟就死掉了,电机只朝一个方向转。 同样电机卡死问题,求解答。。。。 直流电机pwm调速,当角度倾斜很小时,Output也很小,输出的电压就会在死区之内,电机不转。我也是这个问题,不知道是不是应该换个减速比小的直流电机。否则怎么办呢?一直困惑?
页:
[1]