第四节:微分控制(D)实战——D控制的作用与特点

各位工程师朋友,咱们今天聊聊微分控制。说实话,很多初学者对D参数又爱又怕。爱的是它能“预判未来”,怕的是它会把系统搞出高频抖动。我在现场调试时,见过不少人一上来就给D加得很大,结果电机嗡嗡响,编码器数据乱跳……嗯,今天咱们就把D控制彻底讲透。

一、D控制到底在干什么?

先问大家一个问题:为什么有了PI还不够?

你想想看,P控制看“现在偏差有多大”,I控制看“过去偏差累积了多少”。但系统未来会怎么走?它俩都不知道。D控制就是干这个的——它看的是“偏差变化的速度”。

说白了,D控制相当于一个“刹车”。当偏差正在快速减小时,D会提前输出一个反向力,防止系统冲过头。我在做伺服电机定位时,如果没有D,位置到达目标后总会来回晃几下,加上合适的D,一次到位,干净利落。

核心公式:

u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt

其中 de(t)/dt 就是偏差的变化率。Kd越大,对变化的反应越敏感。

二、D参数对系统动态响应的影响

我在项目中总结过D参数的作用,用一张图就能看明白:

D参数对系统响应的影响 无D(超调大) 合适D(快速稳定) D过大(振荡) 目标值 位置 时间

从这张图能看出三个规律:

  • D太小(或无D):系统超调大,需要多次振荡才能稳定。我在调一个龙门架时,没加D之前位置误差来回晃了3次才停住。
  • D合适:系统快速到达目标,几乎没有超调。这是最理想的状态。
  • D过大:系统开始高频振荡,甚至发散。我曾经在调一个高速贴片机时,D加多了,电机直接发出刺耳的尖叫声……

我的调试习惯:

先调P让系统稳定,再调I消除静差,最后加D抑制超调。D的初始值我一般设为P的1/10到1/5,然后慢慢往上加,直到系统响应变快且不振荡为止。

三、微分噪声放大问题——D控制的“阿喀琉斯之踵”

这是D控制最让人头疼的地方。为什么?因为微分运算本质上是对信号求导,而噪声信号往往是高频的。你想想看,一个高频噪声的导数会是什么?会被放大!

举个例子:假设你的位置反馈信号上有一个0.1mm的随机噪声,频率是100Hz。经过微分后,这个噪声会被放大到 0.1 * 2π * 100 ≈ 62.8 mm/s 的速度误差。这还只是一个噪声点,如果连续出现,输出就会剧烈抖动。

我曾经踩过的坑:

有一次调试一个精密转台,编码器分辨率很高,但信号线屏蔽没做好。我加了D之后,电机在静止时都在微微抖动。查了半天才发现是编码器信号被工频干扰了。后来加了低通滤波器,问题才解决。

四、如何应对微分噪声?

这里分享几个我在项目中验证过的方法:

方法 原理 适用场景 注意事项
低通滤波 在微分前对信号做一阶或二阶低通滤波 噪声频率远高于系统带宽 滤波会引入相位滞后,D的效果会打折扣
不完全微分 在D环节串联一个惯性环节 大多数通用场合 需要调整惯性时间常数,我一般取0.01~0.1秒
微分先行 只对反馈信号微分,不对给定微分 给定信号有阶跃变化时 能避免给定突变带来的冲击
硬件滤波 在传感器信号线上加RC滤波或磁环 现场干扰严重时 成本低,效果直接,我每次调试必带磁环

代码示例:不完全微分实现

// 不完全微分算法
float Kd = 0.5;          // 微分增益
float Tf = 0.02;         // 滤波时间常数(秒)
float Ts = 0.001;        // 采样周期(1ms)
float prev_error = 0;
float prev_derivative = 0;

float incomplete_derivative(float error) {
    // 计算原始微分
    float raw_derivative = (error - prev_error) / Ts;
    // 一阶低通滤波
    float alpha = Ts / (Tf + Ts);
    float filtered_derivative = alpha * raw_derivative + (1 - alpha) * prev_derivative;
    
    prev_error = error;
    prev_derivative = filtered_derivative;
    
    return Kd * filtered_derivative;
}

五、实战中的D参数整定步骤

我个人的整定流程是这样的,供大家参考:

  1. 先关掉D,把P和I调到系统稳定,但允许有一点超调。
  2. 从0开始慢慢加D,每次增加0.1~0.5,观察系统响应。
  3. 看波形:用示波器或上位机看位置/速度波形。如果超调明显减小且没有振荡,说明D加对了。
  4. 听声音:电机有没有高频啸叫?如果有,说明D过大或噪声被放大了。
  5. 检查静止状态:系统停在目标位置时,输出有没有抖动?如果有,优先检查传感器噪声。

一个小技巧:

如果你没有示波器,可以用耳朵听。电机在静止时如果有“滋滋”的高频声,十有八九是D参数过大或者噪声问题。我靠这个办法在现场快速定位过好几次问题。

六、总结一下

D控制是个好东西,但用不好就是双刃剑。它的核心价值在于“预判”和“刹车”,能显著提升系统的动态响应。但代价是对噪声敏感,需要配合滤波措施使用。

记住三点:

  • D不是越大越好,合适才是王道
  • 噪声问题优先从源头解决(屏蔽、滤波)
  • 整定顺序永远是P→I→D,别跳步

好了,微分控制就聊到这里。下一节咱们讲PID参数的综合整定方法,到时候会结合一个完整的案例来演示。各位回去可以拿自己的系统试试,有问题随时交流。


公众号:蓝海资料掘金营,微信deep3321