058、PID控制中的微分先行与滤波
飞控算法从入门到精通 | 058、PID控制中的微分先行与滤波一、一次炸机让我重新认识微分项去年调试一架四轴,悬停时一切正常,但只要切到定高模式,电机就开始高频抖动,三秒后直接翻倒炸机。拆下日志一看,高度通道的微分项输出像心电图一样剧烈跳动,峰值达到正常值的五倍。当时我第一反应是“增益调小点”,但调低之后响应又变得迟钝,定高时高度波动超过半米。后来才意识到,问题出在微分项对噪声的放大效应上。飞控里的高度数据来自气压计,本身就带±0.5米的随机噪声,再经过微分运算,噪声被进一步放大。更致命的是,传统PID结构里微分项直接作用于误差信号,一旦设定值发生阶跃变化(比如遥控器突然推高),微分项会瞬间输出一个巨大的尖峰,这就是所谓的“微分冲击”。那次炸机之后,我花了整整两周研究微分先行和滤波方案。今天这篇笔记,就是把当时踩过的坑和最终落地的方案整理出来。二、微分先行到底在解决什么问题先看传统PID的微分项公式:u_d = Kd * (e(k) - e(k-1)) / dt这里的e(k) = 设定值 - 反馈值。问题出在:当设定值突变时,e(k)会瞬间跳变,微分项输出一个巨大的脉冲。在飞控里,这个脉冲会直接驱动电机加速,轻则震荡,重则炸机。微分先行的核心思路是:只对反馈值做微分,不对设定值做微分。换句话说,微分项只关心“被控量变化有多快”,而不关心“设定值变化有多快”。公式变成:u_d = Kd *