我们在学习接触PID时,多数人对所谓的传递函数不感兴趣,毕竟实际的系统中,又哪有那么多可以准确确定传递函数的系统呢,所以就特别需要对PID的参数进行通俗易懂的解释。
举例如下:
一、假设我们面对的系统是一个简单的水箱也为控制,要从空水箱注水直到达到某个液位高度,而你能控制的变量就是注水水龙头的开关大小,那么这个简单的数学模型就是:
u=dx,其中x为液位,u为水龙头开度大小,对于这个简单的系统,我们只需要一个比例环节就能实现:
u=Kp*e 其中e是误差值,u是水龙头开度。
说白了,就是水箱液位举例预定高度远的时候,水龙头开大点(Kp不变,u变大),离得近的时候,就开小点,随着液位逐步接近预定的高度,逐渐关掉水龙头,此时Kp的大小代表了水龙头的粗细,越粗调的越快,这也就是所谓的:
增大比例系数,一般会加快系统响应的规律,如下图所示:
二、引入积分
假设这个水箱不斤斤是装水的容器,还需要持续稳定的给用户供水,那么这个系统的数学模型就需要再增加一项:
u-c = dx,这里c是一个正的常数。
这时候我们发现如果控制器只有一个比例环节,那么当系统稳定,也就是dx=0,(特别注意,这里的稳定并不是达到目标,而是系统稳定在某个液位,但是又没到目标液位),也就是:
u=Kp*e=c
e = c/Kp
e在系统稳定时不为0,而是不变,这里要特别清楚,液位举例我们想要的高度总是差那么一点点,那么这个固定差,就是所谓的稳态误差,或者叫静态误差,这个时候c是固定的,所以Kp越大,e越小,这就是所谓的:
增大比例系数P在又静态误差的情况下有利于减小静差,如下图:
但是从上面的式子 e = c/Kp可以看出,即便Kp再大,它毕竟在分母上,e只能是接近于0,不可能为0,况且P太大,会有震荡,那怎么办呢,然后就有人自然会想到,我再加一个水龙头就行了,水箱漏掉多少水,我就给他补多少水,那么这里增加的第二个水龙头的补水功能,就是下面所说的积分作用。
我们把比例环节+积分环节的表达式变为:
积分环节的意义就相当于刚刚增加的那个水龙头,这个水龙头的开关规则是水位比预定高度低,就一直的往大拧(正向误差累加),比预定高度高了,就往小了拧(反向误差也是累计),有人可能会疑惑,这里不管是往大了拧还是往小了拧,不都是会一直往里补水,难道就不是肯定会补大了吗?这里有个小弯,注意情景,这个时候水箱还一直漏水呢,所以积分会补大,但是也会往小了补,虽然都是补,只要参数选择合适,不会一直补大了,因为误差是有正负的。所以这么一操作,静态误差就没有了,这也就是所谓的积分环节可以消除系统静差。
积分项里有一个积分时间常数,其实就是表示积分环节米敢赌的那个系数Ki = Kp/Ti,这个Ti就是积分常数,其实可以理解成做累计误差求和的频率,频率越大,累加的作用越大,积分的作用也就越大,频率和时间是倒数关系,所以从上面的式子也能看出来,Ti时间常数越大,积分环节的系数越小,积分环节也就越不敏感,也就是第二个水龙头越细。在具体写程序代码时,可以结合着PID的采样时间来写,毕竟数字PID的积分项表达式就是T/Ti。
当用比例+积分,也就是用两个水龙头注水时,在没有达到预定高度前,第二个积分环节的水龙头是一致往大了拧的,因为一直是正向误差累加,只不过往大拧的幅度小了,但是整体趋势是往大拧,一直等到达到预定高度的时候,它恰好拧到了最大,由于惯性的作用,自然而然注水就会注多了,而多出来的这部分水就叫做超调,第二个水龙头越粗,也就是积分时间常数越小(在分母上),I越大,多注的水就越多,不过它调到恰好等于漏水速度的时间就会越快,但是同时会有更多的波折,于是老师告诉我们一个规律:增大积分时间有利于减小超调,减小震荡,使系统的稳定性增加,但是系统静差消除的时间会变长。所以我们在写程序算法时,积分时间常数Ti不能太小,积分系数I不能太大,越小越平稳,系统越平滑,当然要找到一个平衡点。如下图所示:
上图中Ti=10时,曲线更平滑(Ti并不是最终的I)。
接下来我们来看点有意思的东西,还是上面的系统,假设我们选择使用相同的积分时间常数,但是选择不同的比例系数会如何呢,如下图所示:
上面的图会有些疑问,因为按照前面对Kp的分析过大的比例系数会使系统有较大的超调,并产生震荡,使稳定性变坏,但是上面的图里怎么比例大的范儿超调小呢?其实这个也很好解释,上面的PI控制超调出现的原因是积分这个水龙头在达到目标液位时也是恰好开到了最大,而比例这个水龙头越粗,那么它在超出目标液位时,对超调的抑制也就越明显,因为此时Kp这个水龙头是往负方向调节的,积分毕竟有惯性,反应没那么快,而比例则立刻往反方向调,所以P和I的合力才会P大反而超调越小。
这里需要特别注意的是:PID参数整定只是根据普遍经验总结的,并不是定律,而是一般规律,它针对某个具体的系统不一定完全适用,所以只要理解大方向即可,没有万能公式,即便是书本上,也是不同系统,不同的传递函数。
三、微分
微分的作用是阻尼,也就是根据现在的趋势去判断未来,进而来阻碍未来可能出现过调的趋势,相当于是提前踩点刹车,但是又不全踩刹车,所以总结为:
微分环节的主要作用是响应过程中抑制偏差任何方向的变化,注意任何二字,响应大了就往回拉一点,响应小了,就往大了补点。
微分常数不能过大,否则会使响应过程提前制动,反而延长了调节时间,其实很多的系统本身就有很大的阻尼性,比如要加热一缸水,或者整个区域的供暖系统,温度本身就是大的滞后环节,加不加微分都没太大意义,毕竟很多时候误差的误差是很小,或者是0(温度很长时间多不变)的。
感谢阅读。
喜欢的朋友可以关注我,我会持续更新机器人设计、控制相关内容:)