走完江科大STM32标准库之路之后就开启了PID之路。PID算法:就是“比例(proportional)、积分(integral)、微分(derivative)”,是一种常见的“保持稳定”控制算法。
个人理解的PID就是一个“跟随”算法。
让被控对象,比如温度,水位,速度,高度,压力等到达我们期望的值,并且保持住。
PID在实际使用中更像一个数学的二元函数,你只要输入你想要的值,当前值,在调节好参数的情况下,无需关心内部过程,直接使用PID算出的结果值送入到执行机构即可。
PID有3个值,设定值(期望值,给定值),实际值(测量值),输出值(结果值)。
常规的模拟PID控制系统原理框图如下所示:
因此可以得出e(t)和u(t)的关系:
说实话这些公式确实不太好理解,只有上手实践才知道其中的意思,于是我就准备了编码电机进行调参,如速度与位置的控制。
具体配置如下:
PWMA | 定时器2通道一 |
VM | 12V |
AIN1 | PB12 |
AIN2 | PB13 |
STBY | 3V |
AO1 | M1 |
AO2 | M2 |
C1 | 定时器3通道一 |
C2 | 定时器3通道二 |
首先进行位置式PID定速控制:
主要代码如下
电机是输出值最大为-100~100,实际值最大为-180~180,所以Kp大约在0.5左右。
比例作用是对偏差瞬间作出反应。偏差一旦产生控制器立即产生控制作用,使控制量向减少偏差的方向变化。 控制作用的强弱取决于比例系数Kp, 比例系数Kp越大,控制作用越强,则过渡过程越快,控制过程的静态偏差也就越小;但是Kp越大,也越容易产生振荡, 破坏系统的稳定性。 故而,比例系数Kp选择必须恰当,才能过渡时间少,静差小而又稳定的效果。