本次学习参考b站up:DR_CAN
1.闭环控制
以煮水为例子,在家里的智能水壶总能在水温到达100°时,关闭加热系统。如果没有闭环控制,那这水就被一直加热下去。100°是我们的目标量,通过传感器我们时刻了解温度大小,温度不够加热器(执行器)便继续加热。
那么在偏差量与执行量间有一种控制算法,便是pid
2.pid是什么
pid由三部分组成:比列项(P)+微分项(I)+积分项(D)
1.比列环节
偏差量(e) = 目标量 - 当前实际量;
比列P = 偏差量*比列系数Kp(因为传感器所感知量即偏差量的计算与执行量可能不是同一个单位,因此需要一个值完成转化和放大缩小)
但只有比列项是无法达到设定值的,因为其始终存在一个稳态误差,数学方面的推导参考
b站upDR_CAN【自动控制原理】6_比例积分控制器_PI控制(非常厉害)
而在matlab(simulink)中体现则是:
首先创建一个simulink的简单反馈系统,matlab中已有pid模块,直接使用即可
这里我们将i和d增益都调为0,通过示波器观察误差值(偏差量)与比列项。
从上图我们不难看出比列项始终无法消除这个误差(误差没有趋向于0)
由此只有比列项的缺点是:其数值固定,无法动态调整
那么通过时间的维度,动态调整,便有了下面的积分环节和微分环节
2.积分环节
由上面的仿真结果来看,比列项过小,那便需要积分项的帮助
偏差量(e) = 目标量 - 当前实际量;
积分量I = I + 偏差量*积分系数Ki(即Ki*误差的积分)
但积分量在系统意外和错误下,会被积累到无限大,因此需要设置积分上下限。
那么在simulink中:
复制粘贴一下,将下面的积分增益改为5,所得仿真结果
通过上图可以看出,误差逐渐趋向于0
那么将两次结果的误差和输入进行对比
从上图我们也可以看出在比列积分控制下,误差基本消失,但在前期的振荡更强,并且在达到稳定状态的时间要大于比列控制的 ,那么为了消除前期的振荡,便有了微分环节
3.微分环节
当前偏差量(e) = 目标量 - 当前实际量;
微分量D = (当前偏差量 - 上一次的偏差量)*Kd
当前偏差量 - 上一次的偏差量(可能等于下一次偏差量的结果),微分环节相当于预测未来了
这里的微分环节有效抑制了在比列环节调整过大的问题。
那么在simulink中将三种进行对比:
从上图我们可以看到,pid三者相加后,无论是在稳定时间和前期振荡幅频都表现得更加出色
那么微分没有缺点了吗?
在输入的三种比较中,有微分控制的在一开始会有一个初始超高的变化,那么就要考虑元器件本身的物理特性。