目录
一、PID原理讲解
PID(Proportional-Integral-Derivative)闭环控制是一种常用的控制系统设计方法,用于调节系统的输出以使其接近或达到期望值。PID控制器基于系统的当前状态与期望状态之间的误差来调整控制量,包括三个主要参数:比例增益(Proportional)、积分时间(Integral)、微分时间(Derivative)。
1. 比例增益(Proportional):
- 作用:比例项根据当前误差的大小直接调节控制输出,使系统更快地接近期望值,但容易导致系统超调和稳定性问题。
- 调节方法:增大比例增益会加快系统响应速度,但可能导致振荡和超调;减小比例增益会减少振荡,但系统响应速度会变慢。
2. 积分时间(Integral):
- 作用:积分项用于消除稳态误差,通过积累误差来调节控制输出,确保系统稳定在期望值附近。
- 调节方法:增大积分时间可以减小稳态误差,但可能导致响应速度变慢和振荡;减小积分时间可能导致系统稳定性差,但响应速度会更快。
3. 微分时间(Derivative):
- 作用:微分项根据误差的变化速度来调节控制输出,有助于抑制振荡和提高系统的稳定性。
- 调节方法:增大微分时间可以减少振荡和提高系统稳定性,但可能会导致过度反应;减小微分时间可能使系统对噪声更敏感。
二、PID控制原理图
三、位置式PID公式
四、参考代码(一)
可以依照实际场景选择具体需要三个参数之中的哪些参数,具体参数作用上面有解释,还有就是具体的参数也需要参照具体场景进行调整。代码(一)为PI闭环控制。
/***************************************************************************
函数功能:电机的PID闭环控制
入口参数:左右电机的编码器值
返回值 :电机的PWM
***************************************************************************/
int Velocity_A(int TargetVelocity, int CurrentVelocity)
{
int Bias; //定义相关变量
static int ControlVelocityA, Last_biasA; //静态变量,函数调用结束后其值依然存在
Bias=TargetVelocity-CurrentVelocity; //求速度偏差
ControlVelocityA+=Velcity_Ki*(Bias-Last_biasA)+Velcity_Kp*Bias; //增量式PI控制器
//Velcity_Kp*(Bias-Last_bias) 作用为限制加速度
//Velcity_Ki*Bias 速度控制值由Bias不断积分得到 偏差越大加速度越大
Last_biasA=Bias;
if(ControlVelocityA>3600) ControlVelocityA=3600;
else if(ControlVelocityA<-3600) ControlVelocityA=-3600;
return ControlVelocityA; //返回速度控制值
}
五、参考代码(二)
函数说明:
函数功能:位置式PID控制器
入口参数:编码器测量位置信息,目标位置
返回值:电机PWM
根据位置式离散PID公式
pwm=Kp*e(k)+Ki*∑e(k)+Kd[e(k)-e(k-1)]
e(k)代表本次偏差
e(k-1)代表上一次的偏差
∑e(k)代表e(k)以及之前的偏差的累积和;其中k为1,2,,k;
pwm代表输出
int Position_PID (int position,int target)
{
static float Bias,Pwm,Integral_bias,Last_Bias;
Bias=target-position; //计算偏差
Integral_bias+=Bias; //求出偏差的积分
if(Integral_bias>3000)Integral_bias=3000;
if(Integral_bias<-3000)Integral_bias=-3000;
Pwm=Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias); //位置式PID控制器
Last_Bias=Bias; //保存上一次偏差
return Pwm; //增量输出
}
标签:int,Integral,PID,闭环控制,bias,Bias,积分,MSPM0G3057
From: https://blog.csdn.net/m0_72838674/article/details/141072736