六、总结:PID算法让平衡车“稳如泰山”​

六、总结:PID算法让平衡车“稳如泰山”​

🗒初墨 ​🍊Hello,各位好,我是面包!

想让平衡车像杂技演员一样稳稳站立?PID算法就是它的“平衡大师”!今天,我们从底层原理到实战应用,深度剖析PID算法如何让平衡车“稳如泰山”,并揭秘其背后的数学与物理奥秘!

一、PID算法:平衡车的“三招制胜法宝” ​平衡车的速度环PID代码c/**************************************************************************

Function: Speed PI control

Input : encoder_left:Left wheel encoder reading;encoder_right:Right wheel encoder reading

Output : Speed control PWM

函数功能:速度控制PWM

入口参数:encoder_left:左轮编码器读数;encoder_right:右轮编码器读数

返回 值:速度控制PWM

**************************************************************************/

int Velocity(int encoder_left,int encoder_right)

{

float Velocity_Kp=160,Velocity_Ki=0.8; //速度环PI参数

static float velocity,Encoder_Least,Encoder_bias;

static float Encoder_Integral;

//=============速度PI控制器=======================//

Encoder_Least =0-(encoder_left+encoder_right);

//获取最新速度偏差==测量速度(左右编码器之和)-目标速度(此处为零)

Encoder_bias *= 0.8; //一阶低通滤波器

Encoder_bias += Encoder_Least*0.2; //一阶低通滤波器

//相当于上次偏差的0.8 + 本次偏差的0.2,减缓速度差值,减少对直立的干扰

Encoder_Integral +=Encoder_bias; //积分出位移 积分时间:10ms

if(Encoder_Integral>10000) Encoder_Integral=10000; //积分限幅

if(Encoder_Integral<-10000) Encoder_Integral=-10000; //积分限幅

velocity=-Encoder_bias*Velocity_Kp-Encoder_Integral*Velocity_Ki; //速度控制

if(Turn_Off(Angle_Balance)==1||Flag_Stop==1) Encoder_Integral=0; //电机关闭后清除积分

return velocity;

}12345678910111213141516171819202122232425261. 比例控制(P):快速响应,及时纠偏 ​原理:偏差越大,纠正力度越大。比如平衡车速度慢了,P控制会立即加大电机输出。数学表达:u(t)=Kp⋅e(t)u(t) = K_{p} \cdot e(t) u(t)=K​p​​⋅e(t)

其中u(t)u(t)u(t)是控制量,KpK_pK​p​​是比例系数,e(t)e(t)e(t)是偏差。

效果:快速减小偏差,但容易“矫枉过正”,导致震荡。2. 积分控制(I):消除稳态误差,精准到位 ​原理:累积历史偏差,解决“残留误差”。比如平衡车长时间速度偏低,I控制会逐步增加电机输出。数学表达:u(t)=Ki⋅∫0te(τ)dτu(t) = K_i \cdot \int_0^t e(\tau) \, d\tau u(t)=K​i​​⋅∫​0​t​​e(τ)dτ

其中KiK_iK​i​​是积分系数。

效果:消除稳态误差,但响应慢,容易“积分饱和”。3. 微分控制(D):预测未来,防止震荡 ​原理:根据偏差变化率,提前调整控制量。比如平衡车速度变化过快,D控制会抑制电机输出。数学表达:u(t)=Kd⋅de(t)dtu(t) = K_d \cdot \frac{de(t)}{dt} u(t)=K​d​​⋅​dt​​de(t)​​

其中KdK_dK​d​​是微分系数。

效果:抑制震荡,但容易放大噪声。二、平衡车站稳的物理原理:倒立摆的“力学魔法” ​1. 倒立摆模型:平衡车的“力学基石” ​模型描述:平衡车可以简化为一个倒立摆,重心在支点上方,处于不稳定平衡状态。力学分析: 当车身倾斜时,重力会产生一个力矩,使车身继续倾倒。电机通过驱动轮子产生反向力矩,抵消重力力矩,使车身恢复直立。2. 控制目标:保持直立与速度稳定 ​直立控制:通过PID算法调整电机输出,抵消车身倾斜力矩。速度控制:通过PID算法调整电机输出,保持车速稳定。三、代码层推理解析:平衡车的“速度环魔法” ​1. 偏差计算:速度环的“指南针” ​cEncoder_Least = 0 - (encoder_left + encoder_right); // 计算速度偏差1解读:encoder_left和encoder_right是左右轮编码器读数,Encoder_Least表示当前速度与目标速度(0)的偏差。2. 低通滤波:平滑数据的“降噪神器” ​cEncoder_bias *= 0.8; // 上次偏差的80%

Encoder_bias += Encoder_Least * 0.2; // 本次偏差的20%12解读:用一阶低通滤波器平滑速度偏差,减少噪声对控制的干扰。3. 积分限幅:防止“积分饱和”的“安全阀” ​cif(Encoder_Integral > 10000) Encoder_Integral = 10000; // 上限

if(Encoder_Integral < -10000) Encoder_Integral = -10000; // 下限12解读:限制积分值的范围,防止控制量过大导致系统不稳定。4. 速度控制:输出PWM的“魔法公式” ​cvelocity = -Encoder_bias * Velocity_Kp - Encoder_Integral * Velocity_Ki;1解读:结合比例和积分控制,计算最终的速度控制量。四、PID调参:平衡车的“炼丹术” ​1. 比例系数(Kp) ​作用:决定纠偏力度。调参技巧:从小到大逐步增加,直到系统快速响应但不过度震荡。2. 积分系数(Ki) ​作用:消除稳态误差。调参技巧:从0开始增加,直到稳态误差消失,但避免积分饱和。3. 微分系数(Kd) ​作用:抑制震荡。调参技巧:在P和I调好后加入,逐步增加直到震荡消失。五、避坑指南:PID调参的“防翻车手册” ​震荡过大:降低Kp或增加Kd。响应过慢:增加Kp或Ki。积分饱和:限制积分值范围或降低Ki。六、总结:PID算法让平衡车“稳如泰山” ​比例控制:快速纠偏,响应迅速。积分控制:消除误差,精准到位。微分控制:抑制震荡,稳定系统。掌握这三招,你的平衡车不仅能站稳,还能像杂技演员一样玩出花样!快去试试吧!🎯

相关推荐

怎么拆钢琴

怎么拆钢琴

📅 08-08 👁️ 5629
怎么画好看的卡通女孩?漫画卡通女孩绘画技巧分享
NFC功能如何充值ETC

NFC功能如何充值ETC

📅 08-17 👁️ 8822