原因:陀螺的数据滞后了。
自己写飞控PID控制时发现,只要加一点点P时都会加速振荡,怎么修改P都无法达到稳定状态。
首先怀疑的是电机的方向弄反了,把电机反向后,增加P能减少一点点的振荡次数,但也无法达到稳定状。
同时也发现D的运算结果会有0交替出现。微分出现0,说明运算时,数据没有变化还时上次的数据, 也就是说数据没有跟上。
但是芯片手册上说这个陀螺仪是有200Hz输出的。然后去找原始数据。
原始数据是根据状态寄存器的状态来判断,然而状态来的频率远没有达到200Hz,去掉状态判断直接拿数据时,更新频率反而能达到200Hz了。
拿到原始数据后会经过低通滤波,滤波后的数据再给PID控制器。
问题就出在滤波算法那里,滤波的截止频率没设计好的话,会严重影响数据的实时性。