2-2 PID-代码部分
目录
1、位置式PID定速控制
(1)按键控制PWM驱动电机(在主程序中)
(2)编码器测速(定时器中断)
(3)加入PID闭环控制
1)主程序
2)定时器中断函数
3)调试Kp,Ki,Kd的值
4)通过串口观察波形来调参比较直观
2、增量式PID定速控制
3、位置式PID定位置控制
4、增量式PID定位置控制
1、位置式PID定速控制
(1)按键控制PWM驱动电机(在主程序中)
(2)编码器测速(定时器中断)
编码器的读取周期和PID调控周期最好保持一致,可做到最大化利用编码器的分辨率
(3)加入PID闭环控制
1)主程序
按键不再控制PWM,而是控制Target
2)定时器中断函数
3)调试Kp,Ki,Kd的值
调试过程中可能会出现按一下按键,电机满转的现象,原因是电机和编码器的极性相反(给电机一个正向驱动力,编码器测速的值却是负的,计算公式就会认为应该加大Out使速度为正,此时本来我们想要的负反馈就变成了正反馈,即误差变得更大了,最终电机满转),将它们都改成顺时针为正或者都为逆时针为正就行了
Kp的数量级由(输出范围/输入范围)确定,即Out/Actual,如100/180大概等于零点几,则K的数量级大概就是0.几
Target的值可适当加大一点范围[-100,100]设成[-150,150]:由于电位器显示的值有点抖动,因此没必要把范围设置的那么死
4)通过串口观察波形来调参比较直观
最后可根据波形考虑是否要加入Kd,下面的情况就需要加入Kd
Kp,Ki,Kd都为0时,Out为0,电机速度为0
2、增量式PID定速控制
Error2表示上上次误差
用PD控制
Kp,Ki,Kd都为0时,ΔOut为0,但Out不为0,电机速度不为0(维持在当前值)
增量式PID的输出限幅的同时,也同时对积分进行了限幅,因此不存在积分饱和的问题
增量式PID适合自动控制和手动控制切换的场景
3、位置式PID定位置控制
定速控制:Actual给的是实际速度;让转盘以指定速度转动
定位置控制:Actual给的是实际位置;让转盘转指定的角度
4、增量式PID定位置控制
在增量式PID定速控制代码基础上将=改成+=;
增量式PID的Out比较依赖上一次Out,如果上一次的Out是错误的,那么增量式PID后续的调节就会持续受到这个错误影响,没有积分项的增量式PID,容易出现实际值与目标值偏移的问题,增量式PID的Ki最好不要设为0。