夜雨聆风学习资料网

ARTICLE · 1095252

PD控制算法的数学原理、应用方法与软件实现

PD控制算法的数学原理、应用方法与软件实现

摘要

比例-微分(Proportional-Derivative, PD)控制是经典PID控制家族中的重要成员,其核心特征在于省略积分环节,仅保留比例与微分作用。比例项提供与误差成正比的即时校正,微分项则提供与误差变化率成正比的超前预测,二者协同可显著增加系统阻尼、减小超调、加快响应。PD控制特别适用于需要快速动态响应且允许一定稳态误差的高动态系统,如机器人关节伺服、无人机姿态控制、磁悬浮系统、倒立摆等。本文从连续域传递函数出发,系统推导PD控制器的数学原理,分析其频域特性与相位超前机理,探讨微分环节对噪声的敏感性及其工程处理方法,给出数字离散化的多种实现形式,并结合FOC位置环和机器人关节控制的具体应用,提供完整的C语言实现方案。

关键词:PD控制;微分先行;不完全微分;相位超前;位置伺服;嵌入式控制

1 引言

在经典PID控制的三项作用中,比例项(P)反映当前误差的大小,积分项(I)反映误差的历史累积,微分项(D)则反映误差的未来趋势。三者分别对应"现在、过去、未来"的调控逻辑。PID控制因其完备性而成为工业控制的标准方案,但在许多实际场景中,并非三项都必需。

PD控制(令Ki = 0) 是一类重要的PID简化形式。其典型应用背景为:
  1. 被控对象本身已含积分特性:若对象传递函数中已包含1/s1/s环节(如位置控制系统中的速度到位置积分),则控制器无需再引入积分。此时若强行加积分,会形成双积分导致系统相位裕度不足甚至不稳定。

  2. 积分作用会引入滞后:积分环节在低频段提供无穷增益以消除稳态误差,但同时引入90°相位滞后,降低系统的相位裕度。对于需要快速响应的场合,这一滞后是有害的。

  3. 微分作用提供相位超前:微分环节在频域上提供相位超前(最大90°),可补偿对象或比例环节的相位滞后,增加系统的稳定裕度,从而允许采用更高的比例增益,加快响应。

PD控制最具代表性的应用是位置控制系统。以电机位置环为例:电机的机械模型为"转矩→角速度→角度"的双积分环节。若采用纯P控制,闭环为二阶系统,阻尼不足,容易出现振荡;引入D控制后,阻尼显著增加,可实现无超调的快速定位。这正是PD控制在伺服系统中的经典用法。

本文将从数学原理、频域特性、数字实现、应用方法四个维度,系统阐述PD控制算法。

2 PD控制器的数学原理

2.1 连续域传递函数

PD控制器的输入为误差信号:

其中r(t)为参考给定,y(t)为被控量实测值。控制器的输出为:

其中Kp为比例增益,Ki为微分增益。对两端取拉普拉斯变换,得到连续域传递函数:

其中Td = Kd/Kp称为微分时间常数,物理意义为微分作用与比例作用等量所需的"超前时间"。值得注意的是,理想的PD控制器传递函数中,分子次数等于分母次数(均为1次),其高频增益为:

这意味着理想PD控制器不是真有理函数,对无穷大频率的增益为无穷大。在实际系统中,这会放大高频噪声,导致执行机构抖动,甚至激发未建模的高频动态。因此,工程实现中必须引入低通滤波,形成实际PD控制器(也称"带滤波的PD"或"不完全微分PD"):

其中α为滤波系数,通常取0.05∼0.2。分母1+αTds对应一个低通滤波器,截止频率为1/(αTd),将高频增益限制在Kp(1+1/α))以内。这一处理使得PD控制器成为真有理函数,物理可实现。

2.2 频域特性分析

将s=jω代入理想PD传递函数,得频率响应:

由此可得幅频与相频特性:

幅频特性:

相频特性:

由上述表达式可得以下重要结论:
  1. 相位超前:PD控制器的相位在[0,π/2)之间,始终为正,即输出相位超前于输入。最大超前角为90°(纯微分环节)。这是PD控制增加系统阻尼、提升稳定裕度的根本原因。

  2. 低频段:当ω≪Kp/Kd时,∣GPD∣≈Kp,比例环节主导,增益趋于常数。

  3. 高频段:当ω≫Kp/Kd时,∣GPD∣≈Kdω,微分环节主导,增益随频率线性增大——这正是噪声放大的根源。

  4. 转折频率:ωc=Kp/Kd=1/Td是比例作用与微分作用相等的频率点。在该频率处,相位超前恰好为45°。

  5. 相位超前峰值:对于实际PD控制器,由于低通滤波的存在,相位超前在某个频率处达到峰值,随后因滤波器相位滞后而下降。峰值超前角与滤波系数α有关:

α越小,最大超前角越接近90°,但高频增益越大。这是设计PD控制器时需权衡的核心矛盾。

2.3 时域响应分析

比例环节的作用:

比例输出up=Kpe,与误差成正比。增大KpK可加快响应速度、减小稳态误差,但过大会引起超调和振荡。比例环节的物理本质是"误差越大,纠正力度越大"。然而,纯比例控制在有惯性的系统中,由于输出始终滞后于误差变化,必然存在稳态误差或振荡。

微分环节的作用:

微分环节的核心价值在于提供阻尼。从能量角度看,微分项消耗系统的"动能",抑制振荡。这类似于机械系统中的阻尼器:速度越快,阻尼力越大。

微分环节的局限:

  1. 对稳态误差无贡献:当系统进入稳态,de/dt=0,微分项消失,无法消除稳态误差。这是PD控制与PI控制的根本区别。

  2. 放大高频噪声:微分运算本质是高通滤波,对噪声极为敏感。若反馈信号含有白噪声,微分输出将剧烈波动。

  3. 离散化误差:数字实现时,微分用差分近似,采样周期Ts越大,近似误差越大。

2.4 PD控制与系统阻尼的关系

以一个典型的二阶系统为例,说明PD控制如何增加阻尼。

设被控对象为:

(例如电机的"转矩→角速度→角度"模型,τ为机械时间常数)。

采用P控制时,闭环特征方程为:

即:
引入PD控制后,闭环特征方程变为:
即:
对比标准形式:
关键结论:微分增益Kd直接进入阻尼项。增大Kd可独立于Kp提高阻尼比,从而实现"高自然频率 + 高阻尼"的理想组合——快速响应且无超调。这正是PD控制在位置伺服中不可替代的原因。

3 PD控制器的参数整定

3.1 整定目标

PD参数整定的目标是在响应速度与稳定性之间取得平衡:

  • 快速性:上升时间短;

  • 稳定性:超调量小、无振荡;

  • 鲁棒性:对参数摄动和噪声不敏感。

3.2 极点配置法

对于模型已知的系统,可通过极点配置直接计算

Kp和Kd。以2.4节的二阶对象为例:给定期望阻尼比ζ(通常取0.7~1.0)和期望自然频率ωn,则:

注意:若计算结果Kd<0,说明对象本身已有足够阻尼,无需微分,或ωn取值过高。此时应减小ωn或改用纯P控制。

3.3 临界比例度法

类似Ziegler-Nichols方法,先令Kd=0,增大Kp至系统等幅振荡,记录临界增益Ku和振荡周期Tu。对于PD控制器:

该方法无需对象模型,适合现场调试,但整定结果通常偏保守。

3.4 相位裕度法

在频域中指定期望的相位裕度PM和穿越频率ωc,通过Bode图设计Kp和Kd:

相位裕度法的优点是直接与稳定性指标关联,适合对鲁棒性要求高的场合。

3.5 经验整定规则

  • 先P后D:先令Kd=0,整定Kp至响应快速但略有超调;再逐渐增大Kd,直至超调消除、响应平稳。

  • Kd不宜过大:过大的Kd会使输出对噪声敏感,且可能激发机械共振。

  • Td的经验值:Td通常取对象时间常数的0.1~0.5倍。若Td过大,微分作用过强,系统对噪声敏感;若过小,阻尼效果不足。

4 数字离散化实现

4.1 理想PD的离散化

采用后向欧拉法近似微分:

得到离散PD控制律:

这一形式称为位置式PD,输出为绝对量。

另一种形式是增量式PD:

增量式输出为控制量的变化,适合需要速率控制的执行机构。

4.2 微分先行的实现

核心问题:直接对误差e=r−y求微分,会同时微分给定r和反馈y。若给定rr发生阶跃变化,微分项将出现无穷大的脉冲(理论上),实际表现为输出剧烈冲击。这一现象称为"微分冲击"(Derivative Kick)。

解决方案:微分先行(Derivative on Measurement),即只对反馈量y求微分,不对给定r求微分:

由于e=r−y,当rr为常数时,de/dt=−dy/dt,两种形式等价;但当rr突变时,微分先行的输出平滑,无冲击。
在位置伺服中,给定rr通常来自轨迹规划器的阶跃或斜坡输出,微分先行是必须的。

4.3 不完全微分(带低通滤波)

为抑制高频噪声,在微分项后串联一阶低通滤波器:

离散化(采用后向欧拉或Tustin):
令:
则递推公式为:

参数说明:

  • α越小,滤波截止频率越高,微分作用越强,但噪声抑制越弱;

  • α越大,滤波截止频率越低,噪声抑制越强,但微分作用被削弱。

工程中α通常取0.05~0.2。当α=0时,退化为理想PD。

4.4 采样周期的影响

数字PD控制中,微分项的离散化误差与Ts成正比。Ts过大时:

  • 微分近似误差大,动态性能下降;

  • 差分会放大量化噪声。

经验准则:Ts应小于对象最小时间常数的1/5~1/10。对于位置伺服,若机械时间常数为10 ms,Ts应取1~2 ms。

4.5 定点实现要点

在无FPU的MCU上,PD控制器需用定点实现。关键要点:

Q格式选择:

  • 位置、速度等物理量用Q15或Q12;

  • 微分增益Kd/Ts可能很大,需用Q格式表示,注意动态范围;

  • 微分项累加可能溢出,需用int32中间量。

除法避免:Kd/Ts在初始化时预先计算并存储,避免运行时除法。

饱和保护:微分项在给定突变时可能瞬时很大,需对微分输出单独限幅。

5 PD控制器的应用方法

5.1 位置伺服系统

位置伺服是PD控制最典型的应用。以电机位置环为例,控制结构如下:

  • 最内环:电流环(PI控制);

  • 中间环:速度环(PI控制);

  • 最外环:位置环(P或PD控制)。

当速度环已提供足够的阻尼时,位置环可仅用P控制。但若速度环带宽不足或需要更高的位置跟踪精度,位置环加入D控制可显著改善动态性能:

其中
为速度环指令。微分项可视为"速度前馈"的一部分,但更准确地说,它提供的是位置误差的阻尼作用。ωref
注意:在级联控制中,位置环的D控制与速度环的PI控制存在功能重叠。若速度环已能快速跟踪速度指令,位置环的D项作用有限。因此,PD位置环更多见于速度环缺失或带宽较低的场景(如步进电机的位置控制)。

5.2 机器人关节控制

机器人关节通常采用"位置+速度+电流"三环结构。在关节空间轨迹跟踪中,PD控制配合重力补偿可实现对期望轨迹的渐近跟踪:

其中q为关节角度,g(q)为重力补偿项。PD控制提供轨迹跟踪的反馈校正,重力补偿提供前馈。这种"PD + 前馈"结构是机器人控制的经典方案,其稳定性可由Lyapunov方法严格证明。

优点:PD控制不依赖精确的机器人动力学模型,鲁棒性强;配合重力补偿可消除稳态误差。

5.3 无人机姿态控制

四旋翼无人机的姿态控制通常采用PD或PID控制。姿态角(滚转、俯仰、偏航)的动力学近似为二阶系统,PD控制可直接配置阻尼:

其中ϕ为滚转角,τϕ为滚转力矩。由于姿态控制要求快速响应,且陀螺仪噪声较大,微分项需配合低通滤波使用。

5.4 磁悬浮与倒立摆

磁悬浮系统和倒立摆是典型的不稳定系统,其线性化模型含有一个右半平面极点。这类系统必须引入反馈才能稳定。PD控制通过比例项提供恢复力、微分项提供阻尼,可使不稳定系统稳定:

对于倒立摆,Kp需大于临界值才能将右半平面极点移至左半平面;Kd则确保足够的阻尼。这类系统的PD参数可通过极点配置精确计算。

5.5 PD控制与PI控制的组合

在许多应用中,PD与PI并非互斥,而是组合使用:

  • 串级控制:外环PI(消除稳态误差)+ 内环PD(提供阻尼);

  • 并联控制:PID控制器中,D项用于阻尼,I项用于消除稳态误差;

  • 前馈+PD:前馈提供主要控制量,PD仅做误差校正。

5.6 应用场景对比

表5-1 PD控制在不同应用中的参数特点

应用
被控对象
采样频率
微分滤波
整定方法
电机位置环
双积分
1~5 kHz
必需
极点配置
机器人关节
非线性二阶
1~2 kHz
必需
PD+重力补偿
无人机姿态
二阶
500 Hz~2 kHz
必需
极点配置
磁悬浮
不稳定一阶
10~50 kHz
可选
极点配置
倒立摆
不稳定二阶
1~5 kHz
必需
极点配置

6 PD控制器的软件实现

6.1 头文件定义

/** * @file    foc_pd.h * @brief   PD控制器接口定义 * @note    支持微分先行、不完全微分、输出限幅 */#ifndef FOC_PD_H#define FOC_PD_H#include"foc_types.h"/** * @brief PD控制器结构体 */typedef struct {    /* 可配置参数 */    foc_real_t kp;          /* 比例增益 */    foc_real_t kd;          /* 微分增益 */    foc_real_t ts;          /* 采样周期,单位秒 */    /* 不完全微分滤波参数 */    foc_real_t alpha;       /* 滤波系数,0 表示无滤波 */    foc_real_t beta;        /* 滤波递推系数(由 alpha 计算) */    foc_real_t gamma;       /* 微分项系数(由 kd, alpha, ts 计算) */    /* 限幅参数 */    foc_real_t out_max;     /* 输出上限 */    foc_real_t out_min;     /* 输出下限 */    foc_real_t d_max;       /* 微分项单独限幅(可选) */    /* 内部状态 */    foc_real_t err_prev;    /* 上一拍误差 */    foc_real_t fdb_prev;    /* 上一拍反馈(微分先行时使用) */    foc_real_t d_state;     /* 微分项滤波状态 */    foc_real_t out;         /* 上一拍输出 */} foc_pd_t;/** * @brief 初始化PD控制器 * @param pd      控制器实例 * @param kp      比例增益 * @param kd      微分增益 * @param ts      采样周期(秒) * @param alpha   微分滤波系数(0 表示无滤波,推荐 0.05~0.2) * @param out_min 输出下限 * @param out_max 输出上限 */voidfoc_pd_init(foc_pd_t *pd, foc_real_t kp, foc_real_t kd, foc_real_t ts,                 foc_real_t alpha, foc_real_t out_min, foc_real_t out_max);/** * @brief PD计算(对误差微分,简单版) * @param pd   控制器实例 * @param ref  参考给定 * @param fdb  反馈值 * @return     控制器输出 * @note  该版本对给定突变会产生微分冲击,仅适用于给定平滑的场合 */foc_real_tfoc_pd_calc(foc_pd_t *pd, foc_real_t ref, foc_real_t fdb);/** * @brief PD计算(微分先行,推荐) * @param pd   控制器实例 * @param ref  参考给定 * @param fdb  反馈值 * @return     控制器输出 * @note  仅对反馈微分,避免给定突变引起的冲击 */foc_real_tfoc_pd_calc_dom(foc_pd_t *pd, foc_real_t ref, foc_real_t fdb);/** * @brief 复位PD控制器 */voidfoc_pd_reset(foc_pd_t *pd);#endif/* FOC_PD_H */

6.2 实现文件

/** * @file    foc_pd.c * @brief   PD控制器实现 * @note    支持不完全微分与微分先行 */#include"foc_pd.h"/** * @brief 初始化PD控制器 * * 参数计算说明: *   不完全微分的离散递推公式为: *     u_d[k] = beta * u_d[k-1] + gamma * (e[k] - e[k-1]) *   其中: *     beta  = alpha * Td / (alpha * Td + Ts) *     gamma = Kd / (alpha * Td + Ts) *   而 Td = Kd / Kp,故: *     beta  = alpha * Kd / (alpha * Kd + Kp * Ts) *     gamma = Kp * Kd / (alpha * Kd + Kp * Ts) * *   当 alpha = 0 时: *     beta  = 0 *     gamma = Kd / Ts */voidfoc_pd_init(foc_pd_t *pd, foc_real_t kp, foc_real_t kd, foc_real_t ts,                 foc_real_t alpha, foc_real_t out_min, foc_real_t out_max){    pd->kp = kp;    pd->kd = kd;    pd->ts = ts;    pd->alpha = alpha;    pd->out_min = out_min;    pd->out_max = out_max;    pd->d_max = out_max;    /* 微分项默认限幅与输出相同,可后续修改 */    /* 预计算滤波递推系数 */    if (alpha > FOC_ZERO) {        foc_real_t denom = alpha * kd + kp * ts;        pd->beta  = alpha * kd / denom;        pd->gamma = kp * kd / denom;    } else {        /* 无滤波:理想微分 */        pd->beta  = FOC_ZERO;        pd->gamma = kd / ts;    }    /* 状态清零 */    pd->err_prev = FOC_ZERO;    pd->fdb_prev = FOC_ZERO;    pd->d_state  = FOC_ZERO;    pd->out      = FOC_ZERO;}/** * @brief PD计算(对误差微分) * @param pd  控制器实例 * @param ref 参考给定 * @param fdb 反馈值 * @return    控制器输出 * * 算法步骤: *   1. 计算误差 e = ref - fdb *   2. 计算误差增量 de = e - e_prev *   3. 微分项滤波更新:d_state = beta * d_state + gamma * de *   4. 微分项限幅 *   5. 输出:u = Kp * e + d_state *   6. 输出限幅 */foc_real_tfoc_pd_calc(foc_pd_t *pd, foc_real_t ref, foc_real_t fdb){    /* 步骤1:误差 */    foc_real_t e = ref - fdb;    /* 步骤2:误差增量 */    foc_real_t de = e - pd->err_prev;    /* 步骤3:微分项滤波更新 */    pd->d_state = pd->beta * pd->d_state + pd->gamma * de;    /* 步骤4:微分项限幅(防止给定突变时微分项过大) */    foc_real_t d_out = pd->d_state;    if (d_out > pd->d_max) d_out = pd->d_max;    if (d_out < -pd->d_max) d_out = -pd->d_max;    /* 步骤5:合成输出 */    foc_real_t u = pd->kp * e + d_out;    /* 步骤6:输出限幅 */    if (u > pd->out_max) u = pd->out_max;    if (u < pd->out_min) u = pd->out_min;    /* 保存状态 */    pd->err_prev = e;    pd->out = u;    return u;}/** * @brief PD计算(微分先行) * @param pd  控制器实例 * @param ref 参考给定 * @param fdb 反馈值 * @return    控制器输出 * * 与 foc_pd_calc 的区别: *   - 比例项仍作用于误差 e = ref - fdb *   - 微分项作用于反馈 -fdb,即 u_d = -Kd * d(fdb)/dt *   - 当 ref 突变时,微分项不受影响,输出平滑 * * 算法步骤: *   1. 误差 e = ref - fdb(仅用于比例项) *   2. 反馈增量 dfdb = fdb - fdb_prev *   3. 微分项滤波更新:d_state = beta * d_state - gamma * dfdb *      (注意负号:微分先行对反馈微分,符号与误差微分相反) *   4. 输出:u = Kp * e + d_state */foc_real_tfoc_pd_calc_dom(foc_pd_t *pd, foc_real_t ref, foc_real_t fdb){    /* 步骤1:误差(仅用于比例项) */    foc_real_t e = ref - fdb;    /* 步骤2:反馈增量 */    foc_real_t dfdb = fdb - pd->fdb_prev;    /* 步骤3:微分项滤波更新     * 微分先行的微分项为 -Kd * d(fdb)/dt     * 离散化并滤波后:d_state = beta * d_state - gamma * dfdb     */    pd->d_state = pd->beta * pd->d_state - pd->gamma * dfdb;    /* 步骤4:微分项限幅 */    foc_real_t d_out = pd->d_state;    if (d_out > pd->d_max) d_out = pd->d_max;    if (d_out < -pd->d_max) d_out = -pd->d_max;    /* 步骤5:合成输出 */    foc_real_t u = pd->kp * e + d_out;    /* 步骤6:输出限幅 */    if (u > pd->out_max) u = pd->out_max;    if (u < pd->out_min) u = pd->out_min;    /* 保存状态 */    pd->fdb_prev = fdb;    pd->out = u;    return u;}/** * @brief 复位PD控制器 * @param pd 控制器实例 */voidfoc_pd_reset(foc_pd_t *pd){    pd->err_prev = FOC_ZERO;    pd->fdb_prev = FOC_ZERO;    pd->d_state  = FOC_ZERO;    pd->out      = FOC_ZERO;}

6.3 代码详细分析

结构体设计:

foc_pd_t中预计算了beta和gamma,避免运行时重复计算。d_state保存微分项的滤波状态,是"不完全微分"实现的关键——它相当于对微分信号做了一阶低通滤波。

初始化函数的参数计算:

不完全微分的递推公式来源于对连续传递函数
的离散化。推导过程:
将传递函数改写为:
交叉相乘:
时域形式:
整理得:
即:
将Td=Kd/Kp代入,得代码中的β和γ表达式。

微分先行与误差微分的对比:

  • foc_pd_calc对误差ee微分,微分项为Kd⋅de/dt;

  • foc_pd_calc_dom对反馈yy微分,微分项为−Kd⋅dy/dt。

当给定r为常数时,两者完全等价。但当r突变时,前者的微分项会出现脉冲,后者则平滑。这是微分先行的核心优势。

微分项限幅:

d_max为微分项单独设置的限幅。即使alpha较大(滤波较强),给定突变仍可能产生较大的微分输出。单独限幅可进一步保护执行机构。工程中d_max通常设为输出限幅的0.5~1.0倍。

符号的细节:

在foc_pd_calc_dom中,微分项为- gamma * dfdb,负号不可省略。因为微分先行的微分项本质是−Kd⋅d(fdb)/dt,而dfdb是反馈的增量,故需加负号。

6.4 使用示例

/** * @file    pd_position_demo.c * @brief   PD位置环使用示例 */#include"foc_pd.h"#include<stdio.h>intmain(void){    /* 初始化PD控制器:     * Kp = 10.0, Kd = 0.05, Ts = 1ms     * alpha = 0.1(不完全微分)     * 输出限幅 ±100     */    foc_pd_t pd;    foc_pd_init(&pd, 10.0f, 0.05f, 0.001f, 0.1f, -100.0f, 100.0f);    pd.d_max = 50.0f;   /* 微分项限幅 */    /* 模拟:给定阶跃 1.0,观察输出 */    foc_real_t ref = 1.0f;    foc_real_t fdb = 0.0f;    for (int k = 0; k < 100; ++k) {        /* 模拟被控对象:简单积分环节,每拍增加 u*Ts */        foc_real_t u = foc_pd_calc_dom(&pd, ref, fdb);        fdb += u * 0.001f;   /* 对象模型:dy/dt = u */        if (k % 10 == 0) {            printf("k=%3d, fdb=%.4f, u=%.4f\n", k, fdb, u);        }    }    return 0;}

预期行为:给定阶跃后,PD输出先快速上升(比例+微分作用),随着反馈接近给定,微分项减弱,输出下降,最终稳定在给定附近。由于没有积分项,若对象存在稳态增益小于1,最终会有稳态误差。

7 PD控制器的工程实践问题

7.1 噪声抑制

微分项对噪声的放大是PD控制最需关注的问题。抑制方法包括:

  1. 不完全微分:在微分项后串联低通滤波器,是最常用的方法;

  2. 对反馈滤波:在进入PD之前对反馈信号做低通滤波,效果与不完全微分类似,但会引入额外相位滞后;

  3. 降低采样频率:适度降低Ts可减少高频噪声的混叠,但会降低控制带宽;

  4. 选用低噪声传感器:从源头减少噪声,如使用高分辨率编码器、差分信号传输。

权衡:滤波越强,噪声抑制越好,但相位超前越弱,阻尼效果越差。工程中需根据噪声水平选择滤波强度

7.2 微分冲击的避免

微分冲击是PD控制中常见的问题:当给定突变时,微分项产生巨大脉冲,导致执行机构冲击。解决方法:

  1. 微分先行:只对反馈微分,不对给定微分。这是最常用的方法,在4.2节已详细论述。

  2. 给定信号平滑:对给定信号做斜坡限制或低通滤波,使给定不出现阶跃。例如在位置伺服中,用S型曲线或梯形速度规划替代阶跃给定。

  3. 设定值加权:引入设定值加权系数bb,仅对部分给定微分:

当b=0时退化为微分先行;当b=1时为标准PD。工程中bb通常取0~0.5。

  1. 微分项限幅:即使有微分先行,反馈噪声仍可能引起微分项波动,对微分项单独限幅可保护执行机构。

微分冲击的量化分析:

7.3 微分项的噪声敏感性

微分项对噪声的放大倍数与频率成正比。设反馈信号含幅值为An, 频率为fn的噪声,则微分输出幅值为:

抑制方法:

  1. 不完全微分:如4.3节所述,在微分项后串联低通滤波器;

  2. 反馈滤波:在反馈进入PD之前先做低通滤波;

  3. 降低Kd:牺牲部分阻尼性能换取噪声抑制;

  4. 提高传感器分辨率:从源头减少量化噪声;

  5. 合理选择采样频率:过高的Ts会引入更多高频噪声,适度的采样频率反而有益。

滤波强度与相位超前的权衡:

不完全微分的滤波系数αα决定了噪声抑制与相位超前的平衡:

  • α=0:无滤波,最大相位超前90°,但噪声放大最严重;

  • α=0.1:最大相位超前约65°,噪声抑制约20 dB;

  • α=0.2:最大相位超前约50°,噪声抑制约30 dB;

  • α=0.5:最大相位超前约30°,噪声抑制约40 dB。

工程中α通常取0.05~0.2。若噪声严重,可适当增大α,但需同时增大Kd以补偿微分作用的削弱。

7.4 微分项的离散化方法对比

微分项的离散化有多种方法,各有特点:

(1)后向欧拉法:

优点:简单,只依赖上一拍;缺点:相位超前略小于理想微分,且在Nyquist频率处增益不为零。

(2)Tustin(双线性)法:
优点:频率特性更接近理想微分;缺点:需要额外的历史状态,且可能引入高频振荡。
(3)差分法(前向欧拉):
需要未来值,不可实现,仅用于理论分析。

(4)带滤波的微分(推荐):

如4.3节所述,将微分与低通滤波合并,得到:

该方法兼顾了微分作用和噪声抑制,是工程首选。

对比总结:

方法
实现复杂度
相位超前
噪声抑制
推荐场景
后向欧拉
低
中
无
噪声小的场合
Tustin
中
高
无
精度要求高的场合
带滤波
中
中
强
通用推荐
微分先行+滤波
中
中
强
给定突变的场合

7.5 采样周期对PD控制的影响

数字PD控制的性能与采样周期Ts密切相关。Ts的选择需权衡以下因素:

(1)微分近似误差:

后向欧拉法的微分近似误差为O(Ts)。Ts越大,微分项与实际变化率偏差越大。对于快速变化的信号,误差尤其明显。

(2)噪声混叠:
采样频率fs=1/Ts决定了可无混叠采集的信号带宽(Nyquist频率fs/2)。若反馈信号含有高于fs/2的噪声,将混叠到低频,无法通过滤波消除。因此Ts越小,混叠风险越低。

(3)量化噪声:

数字系统中,反馈信号的量化步长为Δ。差分会放大量化噪声:

Ts越小,量化噪声放大越严重。这与微分近似误差的要求相反。

(4)计算负载:

Ts越小,CPU负载越重。在嵌入式系统中,需在性能与资源之间平衡。

经验准则:

  • Ts应小于对象最小时间常数的1/10;

  • 对于位置伺服,Ts通常取0.5~2 ms;

  • 对于电流环,Ts等于PWM周期(50~100 μs);

  • 对于无人机姿态控制,Ts取0.5~2 ms。

7.6 PD控制器的抗饱和问题

虽然PD控制器没有积分项,不存在传统意义上的积分饱和,但仍存在微分饱和和比例饱和问题:

比例饱和:当误差较大时,Kpe可能超出执行机构范围。此时输出被限幅,等效于减小了比例增益,可能导致响应变慢。

微分饱和:当误差快速变化时,Kde˙可能瞬间很大,导致输出冲击。

处理方法:

  1. 输出限幅:如6.2节代码所示,对最终输出限幅;

  2. 微分项单独限幅:对微分项设置比输出更严格的限幅;

  3. 误差限幅:对进入PD的误差做限幅,避免大误差时比例项过大;

  4. 增益调度:在大误差时减小Kp,小误差时恢复,避免饱和。

7.7 无扰切换

与PI控制器类似,PD控制器在模式切换时也可能产生冲击。由于PD没有积分器,切换冲击主要来自微分项的状态不连续。

处理方法:

  1. 状态预置:切换前将fdb_prev和d_state预置为当前值;

  2. 输出渐变:切换后一段时间内,将新旧控制器输出按比例混合;

  3. 微分先行:由于微分项只依赖反馈,切换给定不影响微分状态。

/** * @brief 预置PD状态,实现无扰切换 * @param pd       控制器实例 * @param fdb      当前反馈值 * @param d_target 期望的微分项初始值 */void foc_pd_preset(foc_pd_t *pd, foc_real_t fdb, foc_real_t d_target){    pd->fdb_prev = fdb;    pd->err_prev = FOC_ZERO;    pd->d_state  = d_target;    pd->out      = FOC_ZERO;}

7.8 定点实现要点

在无FPU的MCU上,PD控制器需用Q15或Q31定点实现。

Q格式选择:

  • 误差e用Q15(范围[−1,1));

  • 微分项系数γ可能很大(Kd/Ts),需用Q15或更高精度;

  • 滤波系数ββ在[0,1)内,用Q15表示;

  • 微分状态dstate累加可能溢出,用int32。

乘法与移位:

/* Q15乘法 */staticinlineint32_tq15_mul(int16_t a, int16_t b){    return ((int32_t)a * (int32_t)b) >> 15;}/* PD计算(定点版) */int16_tfoc_pd_calc_q15(foc_pd_t *pd, int16_t ref, int16_t fdb){    int16_t e = ref - fdb;                          /* Q15 */    int16_t de = e - pd->err_prev;                  /* Q15 */    /* d_state = beta * d_state + gamma * de */    int32_t d_new = q15_mul(pd->beta, (int16_t)pd->d_state)                  + q15_mul(pd->gamma, de);    /* 饱和到Q15 */    if (d_new > 32767) d_new = 32767;    if (d_new < -32768) d_new = -32768;    pd->d_state = d_new;    /* u = kp * e + d_state */    int32_t u = q15_mul(pd->kp, e) + pd->d_state;    if (u > pd->out_max) u = pd->out_max;    if (u < pd->out_min) u = pd->out_min;    pd->err_prev = e;    return (int16_t)u;}

关键点:

  • 所有乘法用int32中间量;

  • 微分状态累加后立即饱和,防止溢出;

  • 输出限幅在最后一步执行。

7.9 参数在线调整

在某些应用中,需要根据工况在线调整PD参数:

(1)增益调度:

根据转速、负载或位置,查表选择预设参数组:

typedef struct {    foc_real_t kp;    foc_real_t kd;} pd_gain_t;/* 根据速度区间选择PD参数 */const pd_gain_t gain_table[] = {    {10.0f, 0.02f},   /* 低速:小Kp,小Kd */    {15.0f, 0.05f},   /* 中速 */    {20.0f, 0.08f},   /* 高速:大Kp,大Kd */};voidpd_schedule(foc_pd_t *pd, uint8_t speed_zone){    pd->kp = gain_table[speed_zone].kp;    pd->kd = gain_table[speed_zone].kd;    /* 重新计算 beta, gamma */    foc_pd_recalc_coeff(pd);}

(2)自适应调整:

根据误差大小调整Kd:大误差时增大Kd加快响应,小误差时减小Kd抑制噪声。

foc_real_tkd_adaptive(foc_real_t e_abs){    if (e_abs > 0.5f) return 0.1f;   /* 大误差:强微分 */    if (e_abs > 0.1f) return 0.05f;  /* 中误差 */    return 0.02f;                     /* 小误差:弱微分,抗噪声 */}

7.10 调试与监控

PD控制器的调试需要观察以下变量:

  • 误差e:判断跟踪性能;

  • 比例项Kpe:判断比例增益是否合适;

  • 微分项ud:判断微分作用是否合理,是否有噪声问题;

  • 输出u:判断是否饱和、是否平滑。

调试步骤:

  1. 令Kd=0,逐渐增大Kp,观察响应;

  2. 当响应接近临界振荡时,固定Kp;

  3. 逐渐增大Kd,观察超调是否减小、响应是否更平稳;

  4. 若输出噪声明显,减小Kd或增大α;

  5. 若仍有超调,适当减小Kp或增大Kd。

在线监控工具:

  • 使用DAC输出变量,示波器观察;

  • 通过串口上传数据,PC端绘图;

  • 使用SWO(Serial Wire Output)实时跟踪;

  • 使用ST MotorControl SDK、TI InstaSPIN等工具的示波功能。

8 PD控制与其他控制方法的结合

8.1 PD + 前馈控制

前馈控制根据给定信号或扰动信号直接产生控制量,不依赖反馈。PD + 前馈是高性能伺服的标准结构:

前馈的作用:将系统的跟踪误差减小到接近零,PD仅需处理模型误差和外部扰动。

8.2 PD + 积分(PID)

虽然PD本身不含积分,但在很多应用中,稳态误差不可接受。此时在PD基础上加入积分项,形成PID:

PID的结构:

  • P:快速响应;

  • I:消除稳态误差;

  • D:增加阻尼。

PID参数整定的顺序:先整定P和D,使系统有良好的动态响应;再加入I,消除稳态误差。加I时需注意抗积分饱和。

8.3 PD + 干扰观测器

干扰观测器(Disturbance Observer, DOB)估计外部扰动和模型误差,并将估计值前馈补偿:

DOB的引入使PD控制对扰动不敏感,同时不引入积分带来的相位滞后。这是高性能伺服中替代积分作用的现代方法。

8.4 PD + 滑模控制

滑模控制(Sliding Mode Control, SMC)通过设计滑模面,使系统状态在滑模面上运动。PD控制可视为一种线性滑模:

8.5 PD + 模型预测控制

模型预测控制(MPC)在每个采样周期求解有限时域优化问题。PD控制可作为MPC的终端控制器,保证闭环稳定性。这种组合在高端伺服中逐渐应用。

9 PD控制器的完整应用案例

9.1 直流电机位置伺服

系统描述:

  • 直流电机,转动惯量J=0.001 kg⋅m2;

  • 转矩常数Kt=0.1 N⋅m/A;

  • 粘性摩擦;

  • 位置传感器分辨率:4096线编码器。

控制结构:

  • 电流环(PI):带宽2 kHz;

  • 位置环(PD):带宽30 Hz。

位置环设计:

忽略摩擦,位置对象为:

(速度指令到位置)。若速度环带宽足够,位置环的PD控制:
闭环特征方程:

这是一阶系统,无超调。但若考虑速度环的延迟(近似为τω=1/(2π⋅2000)≈80 μs),位置对象变为:

采用PD控制,闭环特征方程:
对比标准形式:
Kd为负值,说明速度环延迟很小,无需微分。实际上,若速度环带宽远高于位置环,位置环仅用P控制即可。
加入微分的情况:若速度环带宽降至200 Hz(τω=800 μs),则:
此时Kd为正,微分作用有效,可改善阻尼。

9.2 机器人单关节PD控制

系统描述:
控制律:
参数整定:
性能分析:

9.3 四旋翼姿态PD控制

系统描述:
控制律:
参数整定:

噪声分析:

陀螺仪噪声引起的微分输出幅值:

相对于典型控制力矩(0.1 N·m)约为1.4%,可接受。若噪声更大,需加入低通滤波。

滤波设计:
滤波截止频率低于姿态环带宽(10 rad/s ≈ 1.6 Hz的6倍),可有效抑制噪声。

9.4 磁悬浮系统PD控制

系统描述:
线性化模型:
特征方程:
PD控制:
闭环特征方程:
对比标准形式:
稳定条件:
即比例增益必须足够大,才能将右半平面极点移到左半平面。
参数选择:

10 PD控制器的性能局限与改进

10.1 稳态误差

PD控制对阶跃给定和常值扰动存在稳态误差。以位置控制为例,若对象为:

(电流到速度),位置环采用PD控制:
闭环传递函数:
单位阶跃响应的稳态值:
实际上,若对象含积分环节(位置是速度的积分),则阶跃给定下稳态误差为零。若对象不含积分,则存在稳态误差:
消除方法:引入积分环节(即PID),或加入前馈补偿。

10.2 对周期性扰动的抑制

PD控制器对周期性扰动(如电机的齿槽转矩、机器人的关节摩擦)抑制能力有限。原因在于PD在扰动频率处的增益有限。

改进方案:引入重复控制(Repetitive Control)或谐振控制器,在特定频率处提供高增益。

10.3 对模型不确定性的鲁棒性

PD控制依赖对象模型进行参数整定。当对象参数(如惯量、摩擦)发生显著变化时,性能下降。

改进方案:

  1. 增益调度:根据工况在线调整PD参数;

  2. 自适应控制:在线辨识对象参数,实时更新PD增益;

  3. 鲁棒控制:设计时考虑参数不确定性,保证在参数范围内稳定。

10.4 与先进控制的对比

控制方法
优点
缺点
适用场景
PD
简单、鲁棒、无需模型
有稳态误差、对周期扰动抑制弱
通用位置/姿态控制
PID
消除稳态误差
积分饱和、相位滞后
需要零稳态误差的场合
滑模
强鲁棒性
抖振、需要切换项
不确定性强、扰动大
MPC
处理约束、多变量
计算量大、依赖模型
高端伺服、牵引驱动
自适应
适应参数变化
实现复杂、可能不稳定
参数大范围变化的场合

11 结论

PD控制算法是经典PID控制家族中的重要成员,其核心特征在于比例项提供即时校正、微分项提供超前预测。本文从连续域传递函数出发,系统分析了PD控制器的频域特性和时域响应,深入阐述了微分环节增加系统阻尼、提升稳定裕度的机理,并指出了微分对噪声敏感这一固有局限及其工程解决方法。

主要结论如下:

  1. 数学原理:PD控制器的传递函数GPD(s)=Kp(1+Tds),提供相位超前,最大超前角90°。理想PD不是真有理函数,工程中必须引入低通滤波形成实际PD。

  2. 参数整定:极点配置法适用于模型已知的场合,可精确指定ζ和ωn;经验法则"先P后D"适用于现场调试。

  3. 数字实现:微分项采用后向欧拉法离散化,配合不完全微分滤波。微分先行避免给定突变的冲击。代码实现需注意微分项限幅、输出限幅和定点溢出。

  4. 工程实践:噪声抑制、微分冲击避免、采样周期选择、抗饱和处理、无扰切换是PD控制器的关键问题。不完全微分是噪声抑制的核心手段。

  5. 应用方法:PD控制适用于位置伺服、机器人关节、无人机姿态、磁悬浮、倒立摆等需要快速动态响应和良好阻尼的场合。与PI控制、前馈控制、干扰观测器结合可进一步提升性能。

  6. 性能局限:PD控制存在稳态误差,对周期性扰动抑制能力有限。需要通过积分、谐振控制、自适应等方法改进。

  7. 软件架构:模块化设计、面向对象风格、中断安全、单元测试是嵌入式PD控制器的工程实现要点。

PD控制器以其简洁的数学形式、清晰的物理意义和良好的工程性能,在运动控制、机器人、航空航天等领域占据不可替代的地位。掌握PD控制的原理与实现,是控制工程师的基本功。

相关学习资料