控制算法:PID控制

(一):前言

        PID控制是一种简单但是可靠的控制算法,但是市面上大部分讲自动控制的书对这个问题讲的过于复杂了。一上来就是一大堆数学公式正常人都受不了啊,这篇文章我希望使用一种较为简单的方法来解释PID控制。

(二):比例系数P

        假如说我要控制一个烧烤炉,我要控制炉内的温度维持在100摄氏度,控制方法是加煤或者减煤。那么我们很容易就想到,如果温度低了就要加煤,如果温度高了就要减煤。我们也很容易想到,如果温度太低,加煤就要多加一点,如果温度太高,减煤也要多减一点。我们还可以很容易想到,如果炉子的温度不高不低刚刚好是100°时,我们既不用加煤也不用减煤。将以上三点用一个式子来表达就是:加煤的量=一个数*温度差

        这里说的一个数指的就是PID控制力的比例系数P,这个系数是根据实际系统调优调出来的,用烧烤炉的例子来说,如果小炉子,可以选择每差一度加一块煤,如果是像烧制瓷器的大炉子,完全可以选择每差一度加一吨煤,这都是具体情况具体分析的。

(三):微分系数D

  然而对于一个系统而言,只有比例系数P是不够的。因为烧烤炉很可能存在这样一种情况,现在的温度是99℃,然后我加了一斤煤,结果加完以后温度就跑到了101℃,按照P常数,我又从里面减了一斤煤,结果温度又变回了99℃,这样的结果就是我的温度在99和101之间来回跳动就是达不到我要的100,这种情况用专业术语叫做不收敛。显然在这种情况下仅仅只有一个比例系数P已经不能满足我们的控制需要了。这时候我们可以引入一个微分系数D。

  积分系数D主要解决系统的不收敛问题。怎么解决不收敛问题呢,很简单,只要保证系统单位时间内的变化量越来越小就好,如果某一时刻加的煤太多了导致温度上升很快,下一时刻就少加点。由微分系统控制的输入量=一个数*控制变量的变化率。这个数就是微分系数D。

  继续讲烧烤炉的例子,最开始温度是99℃,我加了一斤煤,温度到了101℃,按照P控制,我们接下来应该减去一斤煤,同时控制变量的变化率是2,假设D是0.25,那么该时刻对煤的变化量是-1+2*0.25=-0.5,也就是减去半斤煤,然后下一时刻,炉子的温度就可以到100℃了。

(四):积分系数I

  在烧烤炉中还可能存在这样一种情况,就是现在炉子的温度是99℃,然后我加了一斤煤,但是这时候炉子内有一斤煤刚好烧完,这就相当于我这一斤煤没有加,然后下一时刻炉子的温度还是99℃,然后我又加了一斤煤,然后又有一斤煤正好烧完......这样的结果是我的炉子永远就到不了100℃了。为了解决这种问题,我们又引入了积分系数I。

  积分系数I主要解决的是系统的系统误差问题。就是说由于某些原因,我的炉子使用PD控制最后温度不发生变化的时候(专业上叫稳态),我的温度其实是达不到我需要的100℃,这时候存在的误差是无法修正的,而且这个误差会随着时间的推移一直存在。如果我们将这个误差按照时间累加起来,随着时间推移它会变成一个很大的数,这个很大的数就代表着系统误差。我们用一个常数I乘以这个很大的数,最后得到的结果就是我们需要的解决系统误差的输入量。

  继续回到烧烤炉的例子,现在是99℃,我加了一斤煤,温度没变,温度误差是1,误差累加是1;我又加了一斤煤,温度还是没变,温度误差还是1,但是误差累加变成了2;我加了十次以后,温度还是没变,但是这时候的误差累加已经到了10,这个时候我就知道,哦原来煤加少了,接下来就要多加点煤,所以第十一次,我加的煤就是1+1=2斤煤,第一个1是PD控制得到的量,第二个1是由误差累加我才知道要多加的量。第十一次加完煤之后,炉子的温度终于到了100℃。在这种情况下,我才真正实现了一个好的控制。

 

 

        煤=一个数*温度差

你可能感兴趣的:(机器人算法)