智能平衡车如何控制快慢,电动智能平衡车怎样调平衡

首页 > 实用技巧 > 作者:YD1662024-02-02 07:38:55

void Angle_Calculate() { int16_t AngleControlOut_P,AngleControlOut_D; angle_Accel = (A_Z-AZ_ZERO); angle_Accel*=0.0039f; angle_Accel = asin(angle_Accel); angle_Accel*=500; Gyro_Now = (T_Y-TY_OFFSET) * TY_Ratio; 第 26 页 共 47 页 Erjie_Lvbo(angle_Accel,Gyro_Now); if(FilterSwitch==0) myfilter=QingHua_AngleCalaulate; else if(FilterSwitch==1)myfilter=Yijie_Lvbo; else if(FilterSwitch==2) myfilter=Erjie_Lvbo; else if(FilterSwitch==3) myfilter=Kalman_Filter; if(FilterSwitch==3) { myfilter(angle_Accel,Gyro_Now); ZL.error=angle_now_kal-(Balance_Point); } else { myfilter(angle_Accel,Gyro_Now); ZL.error=angle_now-(Balance_Point); } AngleControlOut_P=-(int16_t)(ZL.P*ZL.error); AngleControlOut_D=-(int16_t)(ZL.D*Gyro_Now); if(AngleControlOut_D>500) AngleControlOut_D=500;//对微分项限幅 else if(AngleControlOut_D<-500) AngleControlOut_D=-500; AngleControlOut=AngleControlOut_P AngleControlOut_D; if(AngleControlOut>800) AngleControlOut=800; else if(AngleControlOut<-800) AngleControlOut=-800; } 3.4.4 速度控制

直立车模的速度控制方法与普通车模的速度控制方法不同, 因为普通车模的电机只需要控制转动, 而直立车模的电机输出是平衡控制、 速度控制、 方向控制三部分之间的叠加。

因为直立系统的首要任务是保持直立, 当车模倾角发生改变, 车模就会在直立控制的作
用下向倾斜方向运动。 速度控制就是利用了直立系统的这种特性。

改变车模倾角有两种方法:

(1) 改变车模直立控制的目标角度, 直立控制 PD 算法中, 有一个目标倾角, 当目
标倾角不是真正的平衡位置倾角时, 车模会一直运动。 通过编码器测量转速, 形成
速度反馈回路, 就可以使用 PID 算法进行速度调节。

(2) 给电机施加干扰输出。 在直立过程中, 如果增加或者减少电机输出, 车模就很难维持平衡, 在直立控制的作用下, 车模就会运行。 通过编码器测量转速, 形成速度反馈回路, 就可以使用 PID 算法进行速度调节。

学长设计的系统中,使用第二种方法对速度进行控制, 因为第二种方法对直立的影响较小,可以提高系统的稳定性, 但是速度控制的灵敏度没有第一种高。

智能平衡车如何控制快慢,电动智能平衡车怎样调平衡(9)

void Speed_Calculate() { SP.goal=(t1-t1_mid)/10; if(SP.goal>50) SP.goal=50; else if(SP.goal<-30) SP.goal=-30; SpeedControlOut_Old=SpeedControlOut; SP.error=(SP.goal)-(Speed_L Speed_R)/2; SP.error_sum =SP.error; if(SP.error_sum>200) SP.error_sum=200;//积分限幅 else if(SP.error_sum<-200) SP.error_sum=-200; SpeedControlOut=-(int16_t)((SP.P)*SP.error SP.I*SP.error_sum); if(SpeedControlOut>300) SpeedControlOut=300;//速度环输出限幅 else if(SpeedControlOut<-300) SpeedControlOut=-300; } 3.4.5 方向控制

直立车模的转向是通过两轮的差速来完成的, 转向控制使用 PD 算法, 小车不具备自主识别路径的功能, 因此 PD 算法的输入参数使用遥控器完成。 为了改善转向的动态特性, 避免振荡, 对 PD 算法做了修改, 微分项的因子不再使用传统的 e(t) -e(t-1) ,而是使用陀螺仪的 X 轴, 因为陀螺仪输出灵敏度更高。

智能平衡车如何控制快慢,电动智能平衡车怎样调平衡(10)

void Direction_Calculate(int16_t bias) { DIR.last_error=DIR.error; DIR.error=bias/6-dmp_yaw; DIR.error_sum =DIR.error; if(DIR.error_sum>2000) DIR.error_sum=2000; else if(DIR.error_sum<-2000) DIR.error_sum=-2000; DirectionControlOut_Old=DirectionControlOut; DirectionControlOut = DIR.P*DIR.error DIR.I*DIR.error_sum DIR.D*(T_X-TX_OFFSET); DirectionControlOut_Old=DirectionControlOut; DirectionControlOut=bias*0.15f; if(DirectionControlOut>300) DirectionControlOut=300; else if(DirectionControlOut<-300) DirectionControlOut=-300; }

完整代码可进群免费领取。

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

点击这里找小助理0元领取:

智能平衡车如何控制快慢,电动智能平衡车怎样调平衡(11)

上一页123末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.