PID控制器概述
PID控制器是自动控制领域一种常见的控制器,其简单易设计的结构和良好的鲁棒性使得其在工业控制中较为常见。PID三个字母分别代表了比例(proportion)、积分(integration)和微分(differential)。
补充知识:
控制器是针对被控对象而言的,一个典型的开环控制系统可以用方框图表示如下:
外界的输入通过系统内的控制器调整后,加到被控对象上,对被控对象造成影响后,被控对象产生输出。
在自动控制领域,我们往往将被控对象进行拉普拉斯变换后再进行研究,因此,无论是控制器还是被控对象,用方框图表示时,方框的内容都可以是拉氏变换后的方程。
PID控制器的分类
上文已经提到了开环控制系统,在介绍PID控制器之前,我们再介绍闭环控制系统:
闭环控制系统看起来与开环控制器相似,增加了一个“闭环”,通过这一条闭环将被控对象的输出反馈到输入端,并与输入端进行比较,以检测是否达到控制效果,同时与输入进行整合后作为控制器的“新一轮”输入,此“新一轮”的输入即包含了对“上一轮”输出结果的借鉴。通过不断的“输出——反馈”,最终使控制器将被控对象的输出控制到一个合理的范围。
本文讨论离散的数字PID。
位置式PID
位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值,位置式PID适用于执行机构不带积分部件的对象。
# 位置式PID
class PID:
def __init__(self, P=0.2, I=0.0, D=0.0):
self.kp = P
self.ki = I
self.kd = D
self.uPrevious = 0
self.uCurent = 0
self.setValue = 0
self.lastErr = 0
self.preLastErr = 0
self.errSum = 0
self.errSumLimit = 10
# 位置式PID
def pidPosition(self, curValue):
err = self.setValue - curValue
dErr = err - self.lastErr
self.preLastErr = self.lastErr
self.lastErr = err
self.errSum += err
outPID = self.kp * err + (self.ki * self.errSum) + (self.kd * dErr)
return outPID
增量式PID
增量式PID控制,数字PID控制算法的一种基本形式,是通过对控制量的增量(本次控制量和上次控制量的差值)进行PID控制的一种控制算法。是一种递推式的算法。
一般来讲,增量式PID采用递推的思想,每次只输出控制增量,即对应执行机构位置的变化量,故机器发生故障时影