最近跟一个同事聊天,他说自己一直用位置式PID,从没在实际项目里用过增量式PID,感觉两者好像没啥区别?
一番讨论下来,倒让我忍不住多想了几层。
一、“万能”的PID
PID是一种极其经典的控制算法,凭借简单易用的特点在工程中广泛应用,影响力也很大。为什么说它简单易用呢?
只要你对PID的主要参数如何影响系统理解得足够到位,完全可以通过手动试凑获得一套合适的参数参考,对非控制类专业的工程师也非常友好。
还有一个重要原因:PID算法在大多数系统里表现出很高的稳定性、鲁棒性和可靠性。有过PID调参经验的朋友大概都有同感——哪怕随手给一组参数,也能获得不错的控制效果。
于是在很多工程师眼里,PID就成了“万能”的东西,适用场景看起来特别广。但世间总有一条规律:熊掌和鱼不可兼得。PID虽然适应性很宽,但面对某些特定场景,未必是最优解。
正因为大家在实际应用中需求五花八门,一度涌现出很多PID的变种——在特定场景下优化,或者与其他控制方法结合,从而达到更好的控制效果。比如微分先行PID、PID与智能控制算法的融合等等。
要是PID实在没法满足要求,也不能硬撑着,就得考虑另寻更匹配的控制策略,比如现在挺火的自抗扰控制技术。
二、PID的底层理解
PID算法主要由三项构成:比例(P)‑积分(I)‑微分(D)。连续时间域下的表达式为:

从这个公式能看出来,PID是一个非常纯粹的数学表述。既然是数学表述,自然可以用数学工具去分析——拉氏变换一下,得到传递函数,再结合控制理论方法,与被控对象一起分析系统的稳定性、准确性和快速性,从而在性能上逼近最优。这个设计过程不是本文重点,就不展开了。
当初刚接触PID时,有一句话特别能展现它的魅力:P、I、D分别对应着当前、过去和未来。
P压制当前的误差;I累积历史的误差,以此消除静差;D则根据误差的变化率进行补偿。从表达式上,很容易就能体会到这几层意思。
三、数字PID的两种形态
前面聊的是连续域里的PID,早期常通过模拟电路实现,尤其是在那些没有数字芯片的嵌入式系统里还经常能见到。
随着数字系统,特别是单片机系统的普及,数字PID得到了更广的应用。为大家所熟知的两类数字PID,便是位置式PID和增量式PID。
多数教材都会介绍这两种形式,通常一上来就说,位置式PID和历史状态强相关,过去会影响当前的控制输出;而增量式PID只和最近的几次误差有关。
位置式PID的表达式如下:

而增量式PID可以通过位置式做一次相邻周期相减得到:

最终获得增量式PID的表达式:

这么一看,增量式PID只和最近两次误差有关,不会存在累积误差,那是不是增量式就一定更好?如果真是这样,又为什么要介绍位置式PID呢?
也有的伙计在程序里用的是增量式PID的表达式,毕竟增量式PID输出只是控制量的增量,最后还得把输出累加,这跟位置式根本没多大区别。
于是不少初学者,甚至用过好几年PID的工程师,心里都会存着这个疑问。
实际上,两种数字PID的应用场景是有区别的。增量式PID只输出控制量的增量,主要用在执行机构自带积分部件的被控对象上;而位置式PID输出的是实际的控制量,适用于不带积分环节的执行机构。
当然,如果你非要在不带积分环节的系统中强行使用增量式PID,也可以,最后用数字积分处理一下再输出。但这样和位置式PID结果没有差异,增量式的优势并没有发挥出来——因为真正纯增量式PID中,执行机构的积分环节是连续物理过程,离散的数字积分是无法比拟的。
|