笔记 / 嵌入式PID控制理论闭环控制算法

PID 是工程界用得最多的闭环控制算法——不依赖被控对象建模,只盯住”目标值 − 实际值”的误差,用比例、积分、微分三路线性组合去消灭它。FOC 磁场定向控制的 C 语言实现 里电流环、速度环用的正是它的 PI 子集;数字 PID 的采样节拍通常由 单片机定时器与中断系统详解 的定时器中断给出。

一、PID 控制的基本原理

将偏差的比例(Proportion)、积分(Integral)和微分(Differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称为 PID 控制器。总结如下:

  1. PID 是比例(Proportional)、积分(Integral)、微分(Differential)的缩写
  2. PID 是一种闭环控制算法,它动态改变施加到被控对象的输出值(Out),使得被控对象某一物理量的实际值(Actual)能够快速、准确、稳定地跟踪到指定的目标值(Target)
  3. PID 是一种基于误差(Error)调控的算法,其中规定:误差 = 目标值 − 实际值,PID 的任务是使误差始终为 0
  4. PID 对被控对象模型要求低,无需建模——即使被控对象内部运作规律不明确,PID 也能进行调控

1.1 模拟 PID 控制原理

先看一个例子。图 1 是一个小功率直流电机的调速系统:给定速度 n0(t)n_0(t) 与实际转速 n(t)n(t) 比较,其差值 e(t)=n0(t)−n(t)e(t) = n_0(t) - n(t) 经 PID 控制器调整后输出电压控制信号 u(t)u(t),u(t)u(t) 经功率放大后驱动直流电动机改变其转速。

图 1 小功率直流电机调速系统:给定转速 n₀(t) 与反馈回来的实际转速 n(t) 在比较器处相减得偏差 e(t),送入 PID 控制器产生控制电压 u(t),经功率放大器驱动直流电动机,测速装置把转速 n(t) 反馈回输入端构成闭环

图 1:小功率直流电机调速系统。

常规的模拟 PID 控制系统原理框图如图 2 所示,系统由模拟 PID 控制器和被控对象组成。图中 r(t)r(t) 是给定值,y(t)y(t) 是系统的实际输出值,给定值与实际输出值构成控制偏差:

e(t)=r(t)−y(t)e(t) = r(t) - y(t)

e(t)e(t) 作为 PID 控制器的输入,控制器的输出 u(t)u(t) 作为被控对象的输入,所以模拟 PID 控制器的控制规律为:

u(t)=Kp[e(t)+1Ti∫0te(t) dt+Tdde(t)dt]u(t) = K_p\left[e(t) + \frac{1}{T_i}\int_0^t e(t)\,dt + T_d\frac{de(t)}{dt}\right]

其中:

  • KpK_p —— 控制器的比例系数
  • TiT_i —— 控制器的积分时间,也称积分时间常数
  • TdT_d —— 控制器的微分时间,也称微分时间常数

图 2 模拟 PID 控制系统原理框图:偏差 e(t)=r(t)−y(t) 并联送入比例 Kp、积分 1/Ti·∫、微分 Td·d/dt 三个环节,求和后得控制量 u(t) 驱动被控对象;对象输出 y(t) 经测量反馈到输入端与 r(t) 比较

图 2:模拟 PID 控制系统原理框图——比例、积分、微分三路并联求和。

1.2 PID 控制器各环节介绍

比例部分(P)

数学表达:Kp⋅e(t)K_p \cdot e(t)。

在模拟 PID 控制器中,比例环节对偏差瞬间作出反应:偏差一旦产生,控制器立即产生控制作用,使控制量向减少偏差的方向变化。控制作用的强弱取决于比例系数——比例系数越大,控制作用越强,过渡过程越快,控制过程的静态偏差也就越小;但比例系数越大也越容易产生振荡、破坏系统的稳定性,故比例系数的选择必须恰当,才能兼顾过渡时间短、静差小而又稳定。

比例项功能总结:

  1. 只含有比例项的 PID 输出值:out(t)=Kp⋅error(t)out(t) = K_p \cdot error(t)
  2. 比例项的输出值仅取决于当前时刻的误差,与历史时刻无关——当前存在误差时,比例项输出一个与误差呈正比的值;当前不存在误差时,比例项输出 0
  3. KpK_p 越大,比例项权重越大,系统响应越快,但超调也会随之增加
  4. 纯比例项控制时,系统一般会存在稳态误差;KpK_p 越大,稳态误差越小

积分部分(I)

数学表达:

KpTi∫0te(t) dt\frac{K_p}{T_i}\int_0^t e(t)\,dt

只要存在偏差,积分的控制作用就不断增加;只有在偏差 e(t)=0e(t) = 0 时,积分才是一个常数,控制作用才是一个不再增加的常数。可见积分部分可以消除系统的偏差(稳态误差)。

积分环节的调节作用虽然会消除静态误差,但也会降低系统的响应速度、增加系统的超调量。TiT_i 越大,积分的积累作用越弱,系统在过渡过程中不易产生振荡;但增大 TiT_i 会减慢静态误差的消除过程,消除偏差所需的时间较长,不过可以减少超调量、提高系统的稳定性。TiT_i 较小时积分作用较强,系统过渡过程中有可能产生振荡,但消除偏差所需的时间较短。所以必须根据实际控制的具体要求来确定 TiT_i。

微分部分(D)

数学表达:

Kp⋅Tdde(t)dtK_p \cdot T_d\frac{de(t)}{dt}

实际的控制系统除了希望消除静态误差外,还要求加快调节过程。在偏差出现的瞬间、或偏差变化的瞬间,不但要对偏差量做出立即响应(比例环节的作用),而且要根据偏差的变化趋势预先给出适当的纠正——为此在 PI 控制器的基础上加入微分环节,形成 PID 控制器。

微分环节的作用是阻止偏差的变化,它根据偏差的变化趋势(变化速度)进行控制:偏差变化得越快,微分控制器的输出就越大,并能在偏差值变大之前进行修正。微分作用的引入有助于减小超调量、克服振荡、使系统趋于稳定,特别对高阶系统非常有利,它加快了系统的跟踪速度。

微分的作用对输入信号的噪声很敏感,对噪声较大的系统一般不用微分,或在微分起作用之前先对输入信号进行滤波。微分部分的作用由微分时间常数 TdT_d 决定:TdT_d 越大,抑制偏差变化的作用越强;TdT_d 越小,反抗偏差变化的作用越弱。适当地选择 TdT_d 可以使微分作用达到最优。

二、PID 算法的数字表示

计算机进入控制领域后,人们将模拟 PID 控制规律作适当变换引入计算机,用软件实现 PID 控制,即数字 PID 控制。数字式 PID 控制算法分为位置式 PID 和增量式 PID 两类。

由于计算机控制是一种采样控制,它只能根据采样时刻的偏差计算控制量,不能像模拟控制那样连续输出,所以模拟 PID 中的积分项和微分项都不能直接使用,必须进行离散化处理。

积分项的离散化——用矩形法数值积分近似代替积分:

积分项离散化示意:绿色 error(t) 曲线在 0~8T 区间下的面积,用 8 个宽为 T、高为 error(kT) 的蓝色矩形面积之和近似;每个采样点 kT 对应一个矩形

曲线下的面积近似为所有矩形面积之和:

∫0terror(t) dt≈T⋅error(0)+T⋅error(1)+⋯+T⋅error(8)=T∑j=0ke(jT)\int_0^t error(t)\,dt \approx T \cdot error(0) + T \cdot error(1) + \cdots + T \cdot error(8) = T\sum_{j=0}^{k} e(jT)

微分项的离散化——用一阶后向差分近似代替微分,即用相邻两个采样点连线的斜率代替瞬时斜率:

微分项离散化示意:曲线在采样点 5T 处的导数,用经过 (4T, e(4T)) 与 (5T, e(5T)) 两个采样点的连线斜率近似,即 (e(5T)−e(4T))/T

d e(kT)dt≈e(kT)−e((k−1)T)T\frac{d\,e(kT)}{dt} \approx \frac{e(kT) - e((k-1)T)}{T}

归纳起来,离散化处理的方法为:以 TT 作为采样周期,kk 作为采样序号,离散采样时刻 kTkT 对应连续时间 tt,可作如下近似变换:

t≈kT(k=0,1,2,⋯ )t \approx kT \quad (k = 0, 1, 2, \cdots)

∫0te(t) dt≈T∑j=0ke(jT)\int_0^t e(t)\,dt \approx T\sum_{j=0}^{k} e(jT)

de(t)dt≈e(kT)−e((k−1)T)T\frac{de(t)}{dt} \approx \frac{e(kT) - e((k-1)T)}{T}

(为表示方便,下文将 e(kT)e(kT) 简写成 eke_k。)

2.1 位置式 PID 算法

将上面的近似变换代入模拟 PID 公式,得到离散的 PID 表达式(表达式-1):

uk=Kpek+KpTTi∑j=0kej+KpTdT[ek−ek−1]u_k = K_p e_k + \frac{K_p T}{T_i}\sum_{j=0}^{k} e_j + \frac{K_p T_d}{T}\left[e_k - e_{k-1}\right]

或者写成系数归并后的形式(表达式-2):

uk=Kpek+Ki∑j=0kej+Kd[ek−ek−1]u_k = K_p e_k + K_i\sum_{j=0}^{k} e_j + K_d\left[e_k - e_{k-1}\right]

其中:

  • kk —— 采样序号,k=0,1,2,⋯k = 0, 1, 2, \cdots
  • uku_k —— 第 kk 次采样时刻的计算机输出值
  • eke_k —— 第 kk 次采样时刻输入的偏差值
  • ek−1e_{k-1} —— 第 k−1k-1 次采样时刻输入的偏差值
  • KiK_i —— 积分系数,Ki=KpTTiK_i = \dfrac{K_p T}{T_i}
  • KdK_d —— 微分系数,Kd=KpTdTK_d = \dfrac{K_p T_d}{T}

如果采样周期足够小,表达式-1/2 的近似计算可以获得足够精确的结果,离散控制过程与连续过程十分接近。

算法特点:表达式-1/2 是直接按模拟 PID 控制规律的定义进行计算的,给出了全部控制量的大小,因此被称为全量式或位置式 PID 控制算法。缺点是:全量输出使每次输出均与过去状态有关,计算时要对 eke_k 进行累加,工作量大;且计算机输出的 uku_k 对应的是执行机构的实际位置,一旦计算机出现故障,uku_k 的大幅度变化会引起执行机构的大幅度变化,有可能造成严重的生产事故,这在实际生产中是不允许的。

2.2 增量式 PID 算法

所谓增量式 PID,指数字控制器的输出只是控制量的增量 Δuk\Delta u_k。当执行机构需要的控制量是增量、而不是位置量的绝对数值时,可以使用增量式 PID 控制算法。

增量式可由表达式-2 推导:先写出第 k−1k-1 个采样时刻的输出值(表达式-3):

uk−1=Kpek−1+Ki∑j=0k−1ej+Kd[ek−1−ek−2]u_{k-1} = K_p e_{k-1} + K_i\sum_{j=0}^{k-1} e_j + K_d\left[e_{k-1} - e_{k-2}\right]

表达式-1 与表达式-3 相减并整理,就得到增量式 PID 控制算法(表达式-4):

Δuk=Aek+Bek−1+Cek−2\Delta u_k = A e_k + B e_{k-1} + C e_{k-2}

其中:

A=Kp+Ki+Kd,B=−(Kp+2Kd),C=KdA = K_p + K_i + K_d, \quad B = -(K_p + 2K_d), \quad C = K_d

由表达式-4 可见:采样周期 TT 恒定时,一旦确定 AA、BB、CC,只要使用前后三次测量的偏差值,就可以求出控制量。增量式与位置式相比计算量小得多,因此在实际中得到广泛的应用。位置式控制算法也可以由增量式推出递推计算公式:

uk=uk−1+Δuku_k = u_{k-1} + \Delta u_k

上式就是目前在计算机控制中广泛应用的数字递推 PID 控制算法。

三、几点观察

  • “积分常数”指的是 TiT_i、不是 KiK_i:原文 1.2.2 一节说”积分常数越大,积分的积累作用越弱”——这说的是积分时间 TiT_i(TiT_i 在分母上,越大积分作用越弱);而离散化后的积分系数 Ki=KpT/TiK_i = K_p T / T_i 与之反向(TiT_i 越大 KiK_i 越小)。读这段时把”积分常数”统一理解为 TiT_i 才不自相矛盾,本页已代为统一。
  • 增量式系数可以自行验证:把 Δuk=uk−uk−1\Delta u_k = u_k - u_{k-1} 按定义展开,Kp(ek−ek−1)+Kiek+Kd(ek−2ek−1+ek−2)K_p(e_k - e_{k-1}) + K_i e_k + K_d(e_k - 2e_{k-1} + e_{k-2}),合并同类项正好得到 AA、BB、CC 的取值——原文推导无误。
  • 数字微分对噪声的敏感度与 1/T1/T 成正比:后向差分的分子 ek−ek−1e_k - e_{k-1} 是两拍相减,测量噪声近似不相关、相减后方差翻倍;TT 越小,除以 TT 放大回去的倍数越大。原文 1.2.3 说”噪声大的系统不用微分、先滤波”,在数字域里这条更硬。
  • 位置式的两个工程缺陷对应增量式的两个卖点:eke_k 累加工作量大 → 增量式只用三拍误差;故障时 uku_k 跳变打坏执行机构 → 增量式输出的是 Δu\Delta u,故障影响被一阶截断。递推式 uk=uk−1+Δuku_k = u_{k-1} + \Delta u_k 取两者折中,但要注意 uk−1u_{k-1} 的累加器仍需做积分限幅抗饱和。

素材来源:本文为微信公众号「ZephyrOS嵌入式操作系统」2026-09-04 文章《PID算法的基本原理和数学描述》的整理存档。原文 13 张纯公式截图已改写为 KaTeX 排版(公式截图带 CSDN @irrftang 等水印,原作来自 CSDN),4 张示意图保留原图(PNG 转无损 WebP,像素零差异)。