【PID】控制原理与程序实现详解
目录
1.PID基本原理
2.离散PID和程序实现思路
3.PID程序实现框架
设置调控周期T是三种方法:
1.PID基本原理
如果被控对象是电机,则目标值是转速,输出值是PWM,实际值电机通过编码器测速返回的速度值;
从公式可以清楚地看见PID是基于误差调控的算法
比例项:
Kp表示调节力度,太小系统响应慢,太大系统超调严重,甚至自激振荡
不能单单通过Kp消除稳态误差
只有比例项控制时
1.假设电机没有摩擦,目标速度=期望速度
2.此时误差为0,Kp为0,输出为0,即给电机的驱动力为0,电机匀速旋转
3.但是电机必然由于摩擦力减速,产生误差
4.误差越大,比例项输出越大,电机驱动力度越大
5.电机驱动力和摩擦力平衡,电机不再减速,误差不再增大,驱动力不再增大,系统达到稳态
电机在运转时会受到摩擦、机械负载等因素的影响,这时候要让电机保持某个速度,就需要持续的输出力来抵消这些阻力。如果比例控制产生的控制量刚好等于维持当前速度所需的力,那么系统就会稳定下来,不再改变速度。
积分项:
微分项:
容易超调和来回振荡的被控对象可以加入D(微分项)
2.离散PID和程序实现思路
位置式PID与增量式PID公式
位置式PID是离散式PID的基本格式,位置式PID适合大部分场景:调温,调速,位置控制,姿态控制等。
增量式PID只和本次,上次,上上次的误差有关。
3.PID程序实现框架
确定一个调控周期T,每隔时间T,程序执行一次PID调控;
调控周期T的长短要根据被控对象和传感器或者其他情况而定,电机,飞行器,平衡车这些就要调控快一点,但是也不可以无限快,比如MPU6050是5ms采集一次数据,T是1ms没有意义。
设置调控周期T是三种方法:
优点:代码简单,适合只需要PID调控的项目使用;
弊端:一直在while循环会造成程序阻塞,Delay延时也不准确;
使用定时器的中断实现T
优点:T准确,不阻塞main函数,有利于多个功能互不干扰地运行;
弊端:要注意硬件资源访问冲突问题,即同一个硬件不能在main函数中读取数据,又在中断中读取数据,这样会造成资源访问冲突;
程序较复杂的时候可以使用这种方法,添加一个标志位,中断只是置位flag;
避免了硬件资源访问冲突的问题;
弊端:main函数不能阻塞,否则会造成PID调控无法及时执行;
位置式PID程序实现:
增量式PID程序实现(控制器内积分,输出全量)
注:控制器内积分是对输出进行积分
旋转编码器:使用AD实现,配置好ADC相关参数,开启ADC,等待ADC采集完成,读取ADC的返回值;