PID算法改进
- 积分限幅:限制积分幅度,防止积分深度饱和
- 积分分离:误差小于一个限度才开始积分,反之则去掉积分部分
- 变速积分:根据误差的大小调整积分的速度
- 不完全微分:给微分项加入一阶惯性单元(低通滤波器)
- 微分先行:将对误差的微分替换为对实际值的微分
- 输出偏移:在非0输出时,给输出值加一个固定偏移
- 输入死区:误差小于一个限度时不进行调控
积分限幅
要解决的问题:如果执行器因为卡住、断电、损坏等原因不能消除误差,则误差积分会无限制加大,进而达到深度饱和状态,此时PID控制器会持续输出最大的调控力,即使后续执行器恢复正常,PID控制器在短时间内也会维持最大的调控力,直到误差积分从深度饱和状态退出
积分限幅实现思路:对误差积分或积分项输出进行判断,如果幅值超过指定阈值,则进行限制
积分饱和只会出现在位置式PID里
积分分离
要解决的问题:积分项作用一般位于调控后期,用来消除持续的误差,调控前期一般误差较大且不需要积分项作用,如果此时仍然进行积分,则调控进行到后期时,积分项可能已经累积了过大的调控力,这会导致超调
积分分离实现思路:对误差大小进行判断,如果误差绝对值小于指定阈值,则加入积分项作用,反之,则直接将误差积分清零或不加入积分项作用
变速积分
要解决的问题:如果积分分离阈值没有设定好,被控对象正好在阈值之外停下来,则此时控制器完全没有积分作用,误差不能消除
变速积分实现思路:变速积分是积分分离的升级版,变速积分需要设计一个函数值随误差绝对值增大而减小的函数,函数值作为调整系数,用于调整误差积分的速度或积分项作用的强度
微分先行
要解决的问题:普通PID的微分项对误差进行微分,当目标值大幅度跳变时,误差也会瞬间大幅度跳变,这会导致微分项突然输出一个很大的调控力,如果系统的目标值频繁大幅度切换,则此时的微分项不利于系统稳定
微分先行实现思路:将对误差的微分替换为对实际值的微分
不完全微分
要解决的问题:普通PID的微分项对误差进行微分,当目标值大幅度跳变时,误差也会瞬间大幅度跳变,这会导致微分项突然输出一个很大的调控力,如果系统的目标值频繁大幅度切换,则此时的微分项不利于系统稳定
微分先行实现思路:将对误差的微分替换为对实际值的微分
α为滤波强度
输出偏移
要解决的问题:对于一些启动需要一定力度的执行器,若输出值较小,执行器可能完全无动作,这可能会引起调控误差,同时会降低系统响应速度
输出偏移实现思路:若输出值为0,则正常输出0,不进行调控;若输出值非0,则给输出值加一个固定偏移,跳过执行器无动作的阶段
输入死区
要解决的问题:在某些系统中,输入的目标值或实际值有微小的噪声波动,或者系统有一定的滞后,这些情况可能会导致执行器在误差很小时频繁调控,不能最终稳定下来
输入死区实现思路:若误差绝对值小于一个限度,则固定输出0,不进行调控