拿到一颗加速度传感器的数据手册,翻到灵敏度那一栏,经常会看到这样的参数:16384 LSB/g,或者 0.061 mg/LSB。这两个写法说的是同一件事,但很多工程师第一次看到时都会愣一下--这到底怎么换算成实际的加速度?
本文把这个问题说清楚。从单位含义到实际代码换算,一步步来。
加速度传感器里的"g"不是克,是重力加速度的单位,1g ≈ 9.8 m/s²。传感器静止平放时,Z轴方向会读到约1g的重力分量,X轴和Y轴接近0g。
量程(Full Scale Range,FSR)决定了传感器能测量的最大加速度范围。常见量程有 ±2g、±4g、±8g、±16g。量程越大,能测的冲击越强,但分辨率会相应降低。
LSB(Least Significant Bit,最低有效位)是数字传感器输出的最小单位。一颗16位ADC的加速度传感器,输出范围是 -32768 到 +32767,共65536个数字刻度。
把量程 ±2g 分成65536份,每份就是:
灵敏度 = 量程总范围 / 2^位数 = 4g / 65536 ≈ 0.000061 g/LSB = 0.061 mg/LSB
反过来写就是:
1g 对应的 LSB 数 = 1 / 0.000061 ≈ 16384 LSB/g
这就是为什么 MPU-6050 在 ±2g 量程下,灵敏度标注为 16384 LSB/g。
以 MPU-6050 为例,16位输出,四档量程对应的灵敏度如下:
| 量程 | 灵敏度(LSB/g) | 分辨率(mg/LSB) | 典型应用 |
|---|---|---|---|
| ±2g | 16384 | 0.061 | 姿态检测、计步 |
| ±4g | 8192 | 0.122 | 可穿戴、运动追踪 |
| ±8g | 4096 | 0.244 | 振动监测、跌落检测 |
| ±16g | 2048 | 0.488 | 冲击检测、工业振动 |
量程扩大一倍,灵敏度减半,分辨率也随之降低一倍。这是个硬约束,没有办法绕过去。
从传感器读出的原始数据是一个有符号整数(int16),换算成g值的公式很简单:
加速度(g)= 原始数据(int16)/ 灵敏度(LSB/g)
举个例子:MPU-6050 配置为 ±2g 量程,X轴读出原始值 8192,那么:
加速度 = 8192 / 16384 = 0.5g
换算成 m/s²:
0.5g × 9.8 m/s² = 4.9 m/s²
读取 MPU-6050 加速度数据的典型写法:
#define SENSITIVITY_2G 16384.0f
int16_t raw_x = (int16_t)((buf[0] << 8) | buf[1]);
float accel_x_g = raw_x / SENSITIVITY_2G;
float accel_x_ms2 = accel_x_g * 9.80665f;
注意除数要用浮点数(加 .0f),否则整数除法会丢失精度。
这是实际开发中最常见的坑。传感器上电后默认量程通常是 ±2g,但如果代码里用了 ±8g 的灵敏度(4096 LSB/g)去换算,读出来的数值会偏小4倍。
排查方法:把传感器平放,Z轴读数应该接近1g(约9.8 m/s²)。如果读出来是0.25g或者4g,说明灵敏度配置有问题。
不同厂商、不同型号的加速度传感器,ADC位数和灵敏度标注方式可能不同。
| 型号 | ADC位数 | ±2g灵敏度 | 接口 |
|---|---|---|---|
| MPU-6050 | 16位 | 16384 LSB/g | I2C |
| ADXL345 | 13位 | 256 LSB/g | I2C/SPI |
| LIS3DH | 16位 | 1 mg/digit(±2g) | I2C/SPI |
| ICM-42688-P | 16位 | 16384 LSB/g | I2C/SPI |
| QMI8658C | 16位 | 16384 LSB/g | I2C/SPI |
ADXL345 是13位ADC,±2g量程下灵敏度只有256 LSB/g,分辨率比16位传感器低很多。LIS3DH 的标注方式不同,用 mg/digit 表示,1 mg/digit 等价于 1000 LSB/g,换算时要注意单位。
灵敏度高(量程小)不代表测量精度高,还要看噪声密度(Noise Density)。噪声密度的单位是 μg/√Hz,表示每赫兹带宽内的噪声水平。
实际有效分辨率取决于:
MPU-6050 的噪声密度约为 400 μg/√Hz,在100Hz带宽下,噪声约为 4mg RMS。这意味着即使量程设为 ±2g,实际能分辨的最小变化也在几毫克量级,而不是理论上的 0.061mg。
数据手册里的灵敏度参数通常有三个值:典型值(Typ)、最小值(Min)、最大值(Max)。实际出货的芯片灵敏度会在这个范围内波动,这就是灵敏度误差(Sensitivity Error),通常在 ±1% 到 ±3% 之间。
对精度要求高的应用(比如工业倾角仪),需要在出厂时做灵敏度校准,把每颗芯片的实际灵敏度存入EEPROM,运行时用校准值换算。
消费电子产品一般直接用典型值,误差在可接受范围内。
需要加速度传感器选型支持?颖特新科技提供 MPU-6050、ICM-42688-P、QMI8658C 等主流型号现货,支持样品申请。
灵敏度(LSB/g)= 2^(ADC位数) / 量程总范围。量程越小,灵敏度越高,分辨率越好,但能测的最大加速度也越小。实际换算时,用原始int16数据除以灵敏度即得g值。
开发时最容易踩的坑是量程配置和灵敏度不匹配--上电后记得验证一下静止状态下的合向量是否等于1g,能省去很多调试时间。
相关阅读:加速度传感器选型指南 | MEMS加速度传感器工作原理 | IMU传感器选型:六轴与九轴的区别