013、加速度计原理与数据读取
飞控算法从入门到精通 · 013 | 加速度计原理与数据读取
一、从一次炸机说起
去年夏天,我在调试一架四轴穿越机。飞控是自研的STM32F405板子,MPU6050传感器。PID参数调了三天,悬停稳得像块砖。结果那天下午,刚解锁推油,飞机猛地向左翻滚,直接砸进草丛。检查日志发现,加速度计Z轴输出在起飞瞬间跳变到-2.3g,持续了200ms。当时我以为是传感器坏了,换了一片MPU6050,问题依旧。后来才意识到——加速度计在电机启动时被振动干扰,而我读取数据的时序和滤波策略全错了。
这个坑,今天必须讲清楚。
二、加速度计到底在测什么
很多人以为加速度计测的是“运动加速度”,比如你推油门时飞机向上的加速。这是错的。加速度计测的是比力——传感器自身感受到的惯性力与重力的矢量和。静止时,它测到的是1g的重力加速度;自由落体时,它测到的是0g。
数学上,加速度计的输出可以写成:
[
a_{measured} = a_{body} - g
]
其中 (a_{body}) 是物体本身的加速度,(g) 是重力矢量。注意这个减号——当飞机水平静止时,(a_{body}=0),所以测到的是 (-g),即Z轴向上为负。但大多数传感器手册会告诉你,静止时Z轴输出约为+1g,这是因为芯片内部做了符号反转,或者你安装方向不同。别纠结正负,看数据手册的坐标系定义就行。
真正要命的是:加速度计对振动极其敏感。电机转动产生的几百Hz振动,会直接叠加在输出上。你读
