一、概念
PID控制是一种广泛应用于工业控制系统中的反馈控制算法,其名称来源于比例(Proportional)、积分(Integral)和微分(Derivative)三个控制作用。PID控制通过这三种控制作用的组合来调节系统的输出,使其达到期望的目标值。PID结构简单、易于实现、鲁棒性强,在温度控制、压力控制、流量控制、位置控制等各种工业场景中发挥了重要作用。例如,我们常用来设置固定温度煮茶的养生壶,其内置的温控模块往往就会采用PID控制。
二、原理
PID控制器的总输出是比例、积分和微分三部分的综合,具体如下。
1、比例控制(P)
比例控制是根据当前误差的大小来调整控制输出。误差是指系统的实际输出与期望输出之间的差值。比例控制的作用是使控制输出与误差成正比,公式为:
其中,是比例增益,e(t)是在时刻 t 的误差。
2、积分控制(I)
积分控制是根据误差随时间的累积来调整控制输出。它的作用是消除系统的稳态误差,即使得长期的误差趋于零。积分控制的公式为:
其中,是积分增益,公式剩下的部分是从时刻 0 到时刻 t 的误差积分。
3、微分控制(D)
微分控制是根据误差的变化率来调整控制输出。它的作用是预测误差的变化趋势,从而提前进行调整,减少超调和振荡。微分控制的公式为:
其中,是微分增益,公式其余部分是误差的导数。
4、总体公式
由此,PID控制器的输出公式为:
PID控制器的性能取决于三个增益参数的选择,调节这些参数的过程称为PID调节。常用的调节方法包括经验法、Ziegler-Nichols法、自动调节法(如遗传算法、粒子群优化)等。
三、python实现
这里,我们构建一个简单的PID控制算法,模拟养生壶的水温加热过程。运行程序之后可以看到,随着迭代次数的增加,水温趋于稳定并收敛于我们期望的设定温度。
class PID:
def __init__(self, Kp, Ki, Kd):
self.Kp = Kp # 比例系数(反应速度)
self.Ki = Ki # 积分系数(消除残留误差)
self.Kd = Kd # 微分系数(抑制震荡)
self.last_error = 0
self.integral = 0
def compute(self, setpoint, current):
error = setpoint - current # 当前误差
self.integral += error # 累积误差
derivative = error - self.last_error # 误差变化趋势
output = (self.Kp * error +
self.Ki * self.integral +
self.Kd * derivative) # 三部分合力
self.last_error = error
return output
# 模拟使用(目标40℃,初始35℃)
pid = PID(Kp=0.8, Ki=0.05, Kd=0.2)
current_temp = 35
for _ in range(30):
control = pid.compute(40, current_temp)
# 模拟加热效果(控制量影响温度变化)
current_temp += control * 0.5
print(f"当前温度:{current_temp:.1f}℃")