第四节:微分控制(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之前位置误差来回晃了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参数整定步骤
我个人的整定流程是这样的,供大家参考:
- 先关掉D,把P和I调到系统稳定,但允许有一点超调。
- 从0开始慢慢加D,每次增加0.1~0.5,观察系统响应。
- 看波形:用示波器或上位机看位置/速度波形。如果超调明显减小且没有振荡,说明D加对了。
- 听声音:电机有没有高频啸叫?如果有,说明D过大或噪声被放大了。
- 检查静止状态:系统停在目标位置时,输出有没有抖动?如果有,优先检查传感器噪声。
一个小技巧:
如果你没有示波器,可以用耳朵听。电机在静止时如果有“滋滋”的高频声,十有八九是D参数过大或者噪声问题。我靠这个办法在现场快速定位过好几次问题。
六、总结一下
D控制是个好东西,但用不好就是双刃剑。它的核心价值在于“预判”和“刹车”,能显著提升系统的动态响应。但代价是对噪声敏感,需要配合滤波措施使用。
记住三点:
- D不是越大越好,合适才是王道
- 噪声问题优先从源头解决(屏蔽、滤波)
- 整定顺序永远是P→I→D,别跳步
好了,微分控制就聊到这里。下一节咱们讲PID参数的综合整定方法,到时候会结合一个完整的案例来演示。各位回去可以拿自己的系统试试,有问题随时交流。
公众号:蓝海资料掘金营,微信deep3321