前面的文章已经介绍过什么是pid了,现在再回顾一下:
PID:是过程控制中常用的一种针对某个对象或者参数进行自动控制的一种算法。
这一篇分享不打算再深究pid的理论知识,如果有不懂或者对pid感兴趣的朋友,可以自行查阅资料,或者看我前面的文章。
这次分享一下pid算法的常见实现和流程。主要简单分享一下pid的模拟控制实现和数字控制实现。
1. PID的模拟控制
在以前,计算机系统没这么发达的时候,那个时候很多的系统是通过硬件电子的方式去实现的。如果有观察过一些老物件的话,会发现以前那个时代的很多电子式的控制系统,都是很巨大很笨重的,里面满满的都是电子元器件。
到了后面计算机技术发展迅猛,很多的系统可以依靠软件算法实现了,也极大地减少了系统的元器件电子的使用,使得很多系统功能强大的同时还体积小巧轻便。
比如下图这个模拟反馈控制系统的示意图:
上图是一个简单的模拟闭环反馈控制系统,它可以实现将被控量通过反馈回路反馈到输入端,从而对被控量和期望输出值进行比较,形成一个闭环的自动控制系统。
图中的模拟调节器的意思就是控制规律的方案是通过模拟硬件的方式来实现的,如果想要调整系统的控制规律就需要修改调节器的硬件。这就是模拟控制系统的意思。
而模拟PID的实现也是通过模拟电子器件搭建的电路实现的,通过电子元器件的方式实现比例、积分、微分单元,然后整合在一块组成一个控制系统,这就是模拟PID了。如下的示意图:
模拟PID的微分方程如下:
而PID调节器的传递函数如下:
2. PID的数字控制
数字控制系统是以微型计算机作为控制器,通过软件的方式来实现控制规律的一种控制系统。当我们想要改变控制器的控制规律,一般只要通过改变相应的程序或者软件参数即可以实现改变控制规律。
数字控制系统的示意图如下:
通过数字控制实现的PID的差分方程如下:
3. 数字PID算法的两种类型 — 位置式、增量式
数字PID:指的是PID控制算法的实现是通过计算机软件程序实现的,计算机需要对输入的连续信号进行采集,然后通过量化作为控制器的输入参数,从而经过算法的调节实现目标对象的控制。
PID控制算法在计算机系统中,一般都是采用的数值逼近的方法进行的。因为在很多的系统中,它一般都是连续的,而计算机要进行运算就要依靠计算机的运算,计算机的运算是离散的。所以想要让计算机能够实现PID算法程序,就必须要将PID算法的连续函数进行离散化,从而能够在计算中通过软件算法的方式实现。
一般而言,计算机实现PID算法的时候,在采样周期很小的时候,积分部分可以用对误差求和的方式代替,微分部分可以用差商的方式代替,从而实现将连续的PID算法的差分方程进行离散化,能够通过计算机实现。
数字PID主要有两种:位置式PID和增量式PID
3.1、位置式PID
位置式PID:指的是PID控制器经过运算输出的Uk是被控对象的实际控制量大小。
这个概念是不是咋一看有点拗口?不理解?别急,举个例子看看就知道了。
打个比方:我要进行一个阀门的控制,从而控制流体的流量大小。假设阀门的开度位置为0~100,当前阀门的开度在位置20的地方。现在我希望加大流体的流量,通过修改设定值,PID通过调节,最终输出控制量Uk=80,即这个时候阀门的开度要到80的位置。这就是位置式PID输出的是对被控对象的实际控制量大小的理解。
再来位置式PID的离散公式。如下:
式中:
通过进一步整理,可以表示为:
其中:
Kp- 比例系数Ki- 积分系数;Ki = Kp*T/Ti;Kd- 微分系数;Kd = Kp*Td/T;T:采样时间Ti:积分时间Td:微分时间
从上面的公式可以看出,位置式PID只需要计算第K次和K-1次的误差即可,并且控制器会对偏差进行累加,也就是控制器的每次输出Uk都和过去的状态有关。
这也会带来一些问题,因为位置pid的输出Uk和以前的状态有关,如果控制器出现异常,那么可能会导致Uk的输出大幅变化,导致执行机构的状态大幅变化,严重的话可能会导致严重的生产事故。
另外,因为位置PID要对偏差进行累积,所以会导致系统的运算量变大,这对于运算性能不够好的计算机也是一种负担。
3.2、增量式PID
增量式PID:指的是控制器的输出是对被控对象的增量∆Uk,而不是实际的控制量大小。
怎么去理解增量式PID呢?
打个比方:比如我要控制一个步进电机转动的角度,步进电机转动之后所在的位置没有达到我们期望的位置,但是又快要接近了,这个时候PID控制器输出的是变化的增量,而不是实际的控制量。
这么说吧,假如我希望步进电机转动到角度120°,现在是115°了,所以只要再增加+5°的输出角度即可。如果因为控制超了,到了123°的位置,这个时候只要减少-3°即可。所以这种情况下控制的输出是增量变化,而不是实际的控制量大小。
增量式PID的离散公式如下:
整理如下:
式中:
从增量式PID的离散公式可以看到:增量式PID跟n时刻、n-1时刻、n-2时刻的偏差都有关系,但是不会对偏差进行累积,所以相比位置式PID的计算量要小,也不会跟过去的偏差有关联,所以控制的稳定性会更好。
4. 数字PID算法的程序流程
上面分享了数字PID的离散化公式,代码也是有实现的,但是因为暂时还没整理好,就留着下次分享的时候再放上来吧。这里先放PID算法的程序流程图,其实说到这里,PID的算法也已经可以自己去实现了。
(1)位置式PID的算法实现的流程图
(2)增量式PID的算法实现流程图