这一节聊聊PID使用中的一些实际问题。为了限制篇幅,很多细节没有展开,以后有机会专门做一节细讲PID的编程。 PID算法主要的三种形式 下面三种PID算法的形式是目前比较主流的。其中形式1为并行式,也称独立式;形式2为标准式,也称理想式,是最常见的;形式3为串行式,比较少见。这三种形式在数学上是等价的。 第一种形式的PID三个参数是相互独立的,其好处是可以取消任意一项的作用。比如只想保留积分I的作用,则可以把Kp和Kd都设为0。 第二种形式的I和D是相互独立的,但是它们都与Kp有关系。调整Kp,会导致P、I和D项的改变。 而第三种形式PID三者相互有关系。第二和第三种非独立形式的好处是只要调整一个参数即可改变PID整体性能。 既然三种形式在数学上是等价的,选择哪一种完全取决于个人喜好和熟悉程度(除非你想取消P的作用,那就只能选择第一种形式了)。 不完全微分 上述三种形式虽然是标准的PID公式,但是在实际应用中,更多见的可能是下面的形式: 这个式子与前面的区别是在微分项加了一个一阶低通滤波器。这种形式也称为不完全微分,其主要目的是减少微分冲击。如果想取消滤波作用,可以把滤波时间tf设为0,则公式就变为标准形式了。关于滤波器和不完全微分,在之前的视频中都已有介绍,这里不再重复了。 以下公式摘自西门子S7-1500 PID手册, 其中y为输出,w为设定值,x为反馈值,a为微分项滤波时间,b为比例项设定值权重,c为微分项设定值权重(b和c的取值范围是0-1)。 可见其形式又有点不一样,从该式子可见:
西门子的PID实现是比较全面的,但只凭一个公式还不能展现PID的全部,还有诸如前馈、串级、操作模式、无扰切换、积分饱,输出信号类型和很多辅助功能等的考虑。 PID操作模式 PID控制器可能存在多种操作模式,下面介绍主要的几个:
无扰切换 无扰切换是指PID在各种模式来回切换中,其输出不会突变。实现PID无扰切换的原则是使得切换后的PID输出是在切换前的输出的基础上作调整。 实现无扰切换有多种不同的方法,在不同的模式下所使用的方法也可能不同。其中“限制PID输出变化率”是比较常见的一种,其好处是它对所有模式都适用,而且在改变了PID参数的情况下,也能保证平缓输出。其实现原理是使得PID输出按照一定的变化率增加或者减少,比如5%/秒,如果要求PID输出从0%到100%,整个过程需要20秒才能完成。 另外一种从自动到手动的无扰切换是:当PID控制器在自动模式下,手动设定值应实时跟随PID的输出(即把PID输出持续写入到手动设定值)。这样在切换后,PID的输出就能保持在切换前一刻的输出值。 而从手动到自动的无扰切换,这里介绍两种方法:
抗积分饱和 积分项是对误差的累积,只要误差不等于0,积分的结果会随着时间越来越大(误差大于0时)或者越来越小(误差小于0时),直到无穷。当然PID的输出不可能无穷,一般有效的输出范围是0%-100%或者-100%到+100%,也可以由用户自定义。当PID输出达到饱和状态时,此时就不能允许积分向超出饱和的方向继续进行下去了,这种措施叫做抗积分饱和。 抗积分饱和的方法也是有多种,最直接的一种是当输出饱和时,如果输出仍然有超出饱和方向的趋势(误差与控制信号同方向),则停止积分计算。 另外一种更常用的抗积分饱和的方法是当输出饱和时,重新折算积分项。与无扰切换的思路类似,这种方法是对积分项进行重新折算,使得输出不超出饱和值。这种方法能更快地退出饱和状态。 PID程序的调用 手册上推荐在循环中断里调用PID程序,即按照严格的等间隔时间调用,从而保证每次相等的采样时间。如果采样时间不等,而PID又以固定的采样时间计算,以积分为例,会导致每次采样的计算结果有偏差,并且偏差也是会被累加的,时间越长,偏差就会越大。 如果不在循环中断里调用PID程序,也可以每次计算采样时间,PID则以每次计算得到的采样时间来作运算。 关于这部分内容,详情可见之前的视频《积分数学基础》。 综上可见,PID的实现有很多细节需要注意,要自行编程实现一个比较完整的PID算法并不简单,即使使用现成的库程序,也要好好理解这些细节,才能用好。而且并不是所有PID库程序都提供所有细节的实现,有时候需要自行编程,所以理解这些思路也很重要。 |
|