提前说说
开学到一个周之前基本也没什么,一直到这个星期好多了。看了好几天的知识,感觉有点无聊。刚好前几天学姐给我们发了平衡小车的资料,所以我就想在这几天好好玩一下,加上国庆假期,最坏情况应该也是把硬件搭建好。看了学长和网上的博客,发现平衡小车的难点在于调节P,I,D参数,这个估计我也要话一段时间吧。这个项目先看,回头问问小伙伴看看他们谁闲着,不忙的就找他们一起做了,^ —^
那么,开始吧!
PID初学习
PID 由 3 个单元组成,分别是比例(P)单元、积分(I)单元、微分(D)单位。在工程实践中,一般 P 是必须的,所以衍生出许多组合的PID 控制器,如 PD、PI、PID 等。
在我们的微处理器里面,因为控制器是通过软件实现其控制算法的,所以必须对模拟调节器进行离散化处理,这样它只需根据采样时刻的偏差值计算控制量。因此,我们需要使用离散的差分方程代替连续的微分方程。
假定采样时间很短时(比如 10ms),可做如下处理:
1) 用一介差分代替一介微分;
2) 用累加代替积分。
高中的数学和高数都有讲过,当自变量分为无穷小块的时候,弧形的面积可以近似为这些无穷个长方体面积之和。
1.位置闭环控制
位置闭环控制就是根据编码器的脉冲累加测量电机的位置信息,并与目标值
进行比较,得到控制偏差,然后通过对偏差的比例、积分、微分进行控制,使偏差趋向于零的过程。
根据位置式离散 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 代表输出
C代码
int Position_PID (int Encoder,int Target)
{
static float Bias,Pwm,Integral_bias,Last_Bias;
Bias=Encoder-Target; //计算偏差
Integral_bias+=Bias; //求出偏差的积分
Pwm=Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias);
Last_Bias=Bias; //保存上一次偏差
return Pwm; //输出
}
此时我们就知道这个编码器的作用是什么了,如上图所示,编码器会不断返回数据,每次获得的测量值和偏差值进行比对。通过公式Pwm =Kp* e(k)+Ki *∑e(k)+Kd[e(k)-e(k-1)]计算,返回合适的PWM给电机,从而进行速度的控制。
参数整定
首先我们需要明确我们的控制目标,也就是满足控制系统的 3 个要求:
1 稳定性
2 快速性
3 准确性
具体的评估指标有最大超调量、上升时间、静差等。
例图:
1.最大超调量是响应曲线的最大峰值与稳态值的差,是评估系统稳定性的一个
重要指标;
2.上升时间是指响应曲线从原始工作状态出发,第一次到达输出稳态值所需的时间,是评估系统快速性的一个重要指标;
3.静差是被控量的稳定值与给定值之差,一般用于衡量系统的准确性,具体可以参考上图的解析。
P 用于提高响应速度、I 用于减小静差、D 用于抑制震荡。
一些细节:静差是在P小时出现的,当P量很大时,静差基本为0。而P值很小且I为0时,可能就会出现静差。
震荡:当P值过大时,往往会出现震荡,此时就需要调整D值来减小震荡。当P值很小时,震荡的幅度也不是很大。当然微分控制D也是有弊端的,此时响应速度会变慢。
位置控制的调节经验可以总结为:先只使用 P 控制,增大 P 系数至系统震荡
之后加入微分控制以增大阻尼,消除震荡之后再根据系统对响应和静差等的具体
要求,调节 P 和 I 参数。
1.速度闭环控制
速度闭环控制就是根据单位时间获取的脉冲数(这里使用了 M 法测速)测量
电机的速度信息,并与目标值进行比较,得到控制偏差,然后通过对偏差的比例、积分、微分进行控制,使偏差趋向于零的过程。
根据增量式离散 PID 公式
Pwm +=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]
e(k):本次偏差
e(k-1):上一次的偏差
e(k-2):上上次的偏差
Pwm 代表增量输出
在我们的速度控制闭环系统里面只使用 PI 控制,因此对 PID 控制器可简化
为以下公式:
Pwm +=Kp[e(k)-e(k-1)]+Ki*e(k)
C代码
int Incremental_PI (int Encoder,int Target)
{
static float Bias,Pwm,Last_bias;
Bias=Encoder-Target; //计算偏差
Pwm+=Velocity_KP*(Bias-Last_bias)+Velocity_KI*Bias; //增量式 PI 控制器
Last_bias=Bias; //保存上一次偏差
return Pwm; //增量输出
}
速度控制就是控制电机的速度,根据设定的加速度斜率,在最短时间内达到你设定的速度。位置控制就是控制电机转过多大距离(用脉冲量控制),达到位置自动停止,根据设定参数,电机自动改变速度。两种控制方式均是闭环控制,即电机尾部有编码器和伺服驱动器连接