3、过载传感器原理:加速度计工作原理、陀螺仪与加速度计组合、传感器数据融合基础

好,咱们进入第三讲。这一讲聊传感器,具体说就是过载测量用的加速度计和陀螺仪。

说实话,我刚开始做飞控那会儿,觉得传感器嘛,不就是读个数据嘛,有啥好讲的?后来被现实狠狠教育了一顿——传感器数据不准,你算法再牛也白搭。所以这一章,咱们把传感器原理掰开揉碎了讲清楚。

3.1 加速度计工作原理

加速度计测量的是什么?很多人以为是「速度变化率」,其实不对。它测的是比力(Specific Force),也就是物体受到的惯性力与重力的合力,再除以质量。说白了,就是单位质量上受到的力。

你想想看,一个静止放在桌面上的加速度计,它读出来的是多少?是0吗?不是。它读出来的是1g,方向竖直向上。为什么?因为桌面给它一个向上的支撑力,抵消了重力。加速度计测到的就是这个支撑力产生的加速度。

我当年在调试四旋翼的时候,就踩过这个坑。飞机平放在桌上,加速度计Z轴读数应该是-1g(取决于坐标系定义),结果我读出来是-0.85g。我还以为是传感器坏了,折腾了半天,最后发现是桌面没放平,有个小坡度。嗯,从那以后,我每次做标定都会先检查水平基准。

核心要点:加速度计不能区分重力加速度和运动加速度。这是所有后续数据融合问题的根源。

常见的加速度计有几种类型:

  • 压阻式:利用硅微悬臂梁的压阻效应。结构简单,但温漂大。我早期做的一个小项目用过,温度一变读数就飘,后来果断换了。
  • 电容式:利用质量块位移改变电容值。精度高、功耗低,是目前MEMS加速度计的主流方案。像MPU6050、ADXL345都是这种。
  • 谐振式:利用质量块改变谐振频率。精度最高,但成本也高,一般用在惯性导航级别。

咱们飞控上用的,基本都是电容式MEMS加速度计。它的核心结构就是一个微小的质量块,连着弹簧,外面是固定电极。当有加速度时,质量块偏移,电容变化,通过检测电路转换成电压信号。

这里有个关键参数——带宽。加速度计的带宽决定了它能测量多快的加速度变化。飞控用的加速度计,带宽一般在100Hz到1kHz之间。带宽太高,噪声大;带宽太低,响应慢。我个人习惯选200Hz左右的,够用又不至于太吵。

小技巧:实际使用中,加速度计输出通常要加低通滤波。截止频率我一般设在20-50Hz,因为机体振动的高频分量远高于这个范围。我曾经试过不滤波直接拿数据做姿态解算,结果姿态角抖得像筛糠一样。

3.2 陀螺仪与加速度计组合

加速度计能测姿态吗?理论上可以。通过重力在三个轴上的分量,可以算出俯仰角和横滚角。但问题来了——它测不了偏航角。为什么?因为偏航轴和重力方向平行,重力分量给不出任何偏航信息。

而且加速度计对运动加速度敏感。飞机一加速,加速度计读到的就不是重力了,算出来的姿态就全错了。这就是为什么光靠加速度计不行。

陀螺仪呢?它测量角速度,对角速度积分就能得到角度。但积分有累积误差,时间一长就漂得没边了。我记得有一次做长航时测试,纯陀螺积分跑了10分钟,偏航角漂了30多度,简直离谱。

所以,这两兄弟得配合着用:

传感器 优点 缺点
加速度计 长期稳定,不漂移 对运动加速度敏感,不能测偏航
陀螺仪 动态响应快,能测三轴角速度 积分有漂移,长期不准

说白了,加速度计负责「长期准」,陀螺仪负责「短期稳」。两者互补,缺一不可。

实际飞控中,陀螺仪和加速度计通常是封装在一起的,比如MPU6050、ICM-20602这些IMU芯片。它们内部有ADC、温度补偿、数字滤波,直接输出数字量,用I2C或SPI读取就行。

我建议大家在选型时注意一下量程。加速度计量程一般选±2g到±16g,陀螺仪选±250°/s到±2000°/s。固定翼飞机机动不大,±4g和±500°/s就够了。但做特技飞行的,量程得选大一些。我有个朋友做穿越机,用的±16g和±2000°/s,炸机记录仪里能看到瞬间过载到12g,吓人。

注意:陀螺仪对振动非常敏感。安装时要加减震垫,或者用软连接。我曾经因为安装太硬,陀螺仪输出全是振动噪声,飞控完全没法用。后来换了硅胶减震柱,问题解决。

3.3 传感器数据融合基础

好,现在我们有加速度计和陀螺仪的数据了。怎么把它们融合成一个可靠的姿态估计?

最经典的方法就是互补滤波。思路很简单:

  • 陀螺仪积分得到的角度,经过高通滤波,保留短期动态
  • 加速度计计算得到的角度,经过低通滤波,保留长期稳定
  • 两者相加,得到融合后的角度

公式长这样:

angle = (0.98) * (angle + gyro * dt) + (0.02) * acc_angle

这里的0.98和0.02就是权重系数,加起来等于1。系数怎么选?取决于你对陀螺仪的信任程度。信任度高,权重就大一些。我一般从0.98开始调,然后看实际效果。

互补滤波实现简单,计算量小,在8位单片机上都能跑。但它有个缺点——不能处理加速度计受运动加速度干扰的情况。飞机一加速,加速度计算出来的角度就错了,融合结果也会跟着偏。

更高级的方法是卡尔曼滤波。它把陀螺仪作为状态预测,加速度计作为观测更新,通过协方差矩阵动态调整两者的权重。说白了,卡尔曼滤波能根据当前的运动状态,自动决定「更信谁」。

卡尔曼滤波的五个核心公式,我简单列一下:

// 预测
x_pred = A * x + B * u
P_pred = A * P * A^T + Q

// 更新
K = P_pred * H^T * (H * P_pred * H^T + R)^(-1)
x = x_pred + K * (z - H * x_pred)
P = (I - K * H) * P_pred

看着复杂,其实核心就两个参数:Q(过程噪声协方差)和R(测量噪声协方差)。Q大,表示你更相信测量值;R大,表示你更相信预测值。调参就是调这两个矩阵。

我刚开始用卡尔曼滤波的时候,调Q和R调了整整一周。后来发现一个规律:Q的对角线元素设成陀螺仪噪声的方差,R设成加速度计噪声的方差,然后微调一下就能用。嗯,这个经验值省了我不少时间。

经验之谈:对于大多数飞控应用,互补滤波已经够用了。卡尔曼滤波的优势在强机动或高精度场景下才体现出来。不要为了炫技而用卡尔曼,简单有效才是王道。

还有一种方法是Mahony滤波,它基于四元数和PI控制器,在姿态估计领域很流行。它的核心思想是用加速度计和磁力计的误差来修正陀螺仪的漂移。实现起来比卡尔曼简单,效果又比互补滤波好,算是一个折中方案。

我画了一张图,帮你理清这三种方法的关系:

传感器数据融合方法对比 互补滤波 卡尔曼滤波 Mahony滤波 ✅ 实现简单 ✅ 计算量小 ❌ 抗干扰差 ❌ 不能自适应 ✅ 精度高 ✅ 自适应强 ❌ 实现复杂 ❌ 调参困难 ✅ 折中方案 ✅ 基于四元数 ✅ 无奇异点 ❌ 需磁力计 适用场景 低算力MCU 简单飞控 适用场景 高精度导航 强机动飞行 适用场景 无人机飞控 机器人姿态 复杂度递增 →

实际项目中怎么选?我个人的经验是:

  • 如果MCU算力有限(比如STM32F103级别),用互补滤波就够了
  • 如果要做高精度导航,上卡尔曼滤波
  • 如果做无人机飞控,Mahony滤波是个很好的平衡点

最后说一句,传感器数据融合没有银弹。每种方法都有它的适用场景,关键是你得理解它的假设和局限。我曾经在一个项目里硬套卡尔曼滤波,结果因为模型建得不对,效果还不如互补滤波。后来老老实实回去分析传感器特性,重新建模,才把问题解决。

嗯,这一讲就到这里。传感器是飞控的「眼睛」,把眼睛擦亮了,后面的控制才能做好。


专注资料整理