2、MEMS加速度计:工作原理与选型实战
各位同学好,今天我们来聊聊MEMS加速度计。这东西在手机、无人机、汽车里到处都是。我做了十几年传感器系统,选型踩过的坑能写本书。今天就把核心干货倒给你们。
2.1 工作原理:电容式 vs 压阻式
MEMS加速度计说白了就是个微型弹簧秤。里面有个可移动的微结构,加速度一来,它就动。怎么检测这个位移?主流就两种路子。
2.1.1 电容式加速度计
这是目前最主流的方案。结构像个平行板电容器,中间极板是活动的。加速度让极板间距变化,电容值就跟着变。
核心优势:
- 灵敏度高——能测到微小的加速度变化
- 温漂小——温度稳定性比压阻式好一个数量级
- 功耗低——适合电池供电的设备
缺点:
- 需要专门的检测电路(电容变化量极小)
- 抗电磁干扰能力一般
2.1.2 压阻式加速度计
这种结构里,微悬臂梁上贴着压敏电阻。加速度让梁弯曲,电阻值变化,通过惠斯通电桥输出。
特点:
- 响应快——适合高频冲击测量
- 输出线性度好——不需要复杂的校准
- 但温漂大——温度一变,零位就飘
2.2 关键参数:别被数据手册忽悠了
选加速度计,不能只看量程。我见过太多人只看量程和分辨率,结果系统做出来一塌糊涂。下面这三个参数,你必须吃透。
2.2.1 量程
量程就是能测的最大加速度值。单位是g(1g=9.8m/s²)。
- ±2g:适合倾角测量、手势识别
- ±4g~±8g:适合运动追踪、车辆动态
- ±16g以上:适合冲击检测、碰撞测试
我建议选量程时留30%余量。比如你测最大2g的运动,选±4g的芯片。为什么?因为量程边缘的线性度通常较差。
2.2.2 噪声密度
这个参数很多人忽略,但它决定了你能测多小的信号。单位是μg/√Hz。
举个例子:
- ADXL345的噪声密度约300μg/√Hz
- LSM6DSO能做到80μg/√Hz
如果你要测0.1g的微弱振动,噪声密度大的芯片会把信号淹没。我做过一个桥梁振动监测项目,用了ADXL345,结果低频噪声太大,根本没法用。后来换了低噪声的芯片,数据才干净。
2.2.3 零偏稳定性
零偏就是加速度为0时,芯片输出不为0。零偏稳定性衡量这个偏差随时间的变化。
- 消费级:几十mg(比如MPU6050)
- 工业级:几mg
- 战术级:小于0.1mg
做倾角测量时,零偏稳定性直接决定精度。1mg的零偏漂移,换算成倾角大约是0.057度。如果你要做0.1度精度的倾角仪,零偏稳定性必须优于1.7mg。
2.3 主流芯片对比:ADXL345、MPU6050、LSM6DSO
这三款芯片我全用过,各有各的脾气。直接上对比表。
| 参数 | ADXL345 | MPU6050 | LSM6DSO |
|---|---|---|---|
| 量程 | ±2/4/8/16g | ±2/4/8/16g | ±2/4/8/16g |
| 噪声密度 | ~300μg/√Hz | ~400μg/√Hz | ~80μg/√Hz |
| 零偏稳定性 | ~20mg | ~30mg | ~5mg |
| 功耗 | 23μA(测量模式) | 3.6mA(含陀螺仪) | 0.55mA(高性能模式) |
| 接口 | SPI/I²C | I²C | SPI/I²C |
| 内置功能 | FIFO、活动检测 | 陀螺仪+DMP | FIFO、机器学习核 |
| 价格 | ~$2 | ~$3 | ~$4 |
2.3.1 ADXL345——老将出马
ADI的经典产品,出货量巨大。优点是功耗极低,23μA就能跑。我做过一个纽扣电池供电的跌倒检测设备,用ADXL345能跑半年。
适合场景:低功耗、低成本、对噪声不敏感的应用。
缺点:噪声大,零偏漂移明显。做倾角测量需要定期校准。
2.3.2 MPU6050——六轴一体
InvenSense的明星产品,集成了三轴加速度计和三轴陀螺仪。自带DMP(数字运动处理器),可以直接输出四元数。
适合场景:需要姿态解算的无人机、机器人。
缺点:功耗高(陀螺仪一开就3.6mA),噪声也不小。而且I²C接口速度慢,读取数据帧率受限。
2.3.3 LSM6DSO——后起之秀
ST的新一代产品,性能全面超越前两者。噪声密度只有80μg/√Hz,零偏稳定性5mg。还内置了机器学习核,可以自己训练活动识别模型。
适合场景:高性能运动追踪、工业振动监测、可穿戴设备。
缺点:价格稍贵,配置寄存器多,上手需要时间。
2.4 实战:加速度计初始化代码
以LSM6DSO为例,我给你们写个初始化代码。嗯,这里要注意,ST的芯片配置寄存器特别多,我当年第一次用的时候看了三天数据手册。
// LSM6DSO 初始化示例(基于STM32 HAL库)
void LSM6DSO_Init(void)
{
uint8_t data;
// 1. 复位芯片
data = 0x01;
HAL_I2C_Mem_Write(&hi2c1, LSM6DSO_ADDR, CTRL3_C, 1, &data, 1, 100);
HAL_Delay(10);
// 2. 设置加速度计为高性能模式,±4g量程
data = 0x44; // ODR=416Hz, ±4g
HAL_I2C_Mem_Write(&hi2c1, LSM6DSO_ADDR, CTRL1_XL, 1, &data, 1, 100);
// 3. 设置陀螺仪为高性能模式,2000dps量程
data = 0x5C; // ODR=416Hz, 2000dps
HAL_I2C_Mem_Write(&hi2c1, LSM6DSO_ADDR, CTRL2_G, 1, &data, 1, 100);
// 4. 使能FIFO
data = 0x02; // FIFO模式:流模式
HAL_I2C_Mem_Write(&hi2c1, LSM6DSO_ADDR, FIFO_CTRL1, 1, &data, 1, 100);
// 5. 读取WHO_AM_I确认通信正常
HAL_I2C_Mem_Read(&hi2c1, LSM6DSO_ADDR, WHO_AM_I, 1, &data, 1, 100);
if(data != 0x6C) {
// 通信失败,处理错误
Error_Handler();
}
}
2.5 选型总结
最后给你们个选型流程图,按这个走基本不会错。
- 先看功耗:电池供电?选ADXL345或LSM6DSO的低功耗模式
- 再看精度:需要测微弱振动?LSM6DSO是唯一选择
- 然后看功能:需要陀螺仪?MPU6050或LSM6DSO
- 最后看预算:成本敏感?ADXL345最便宜
好了,这一章就到这里。下一章我们讲陀螺仪,那个更刺激,因为零偏漂移会让你怀疑人生。到时候我给你们讲个无人机炸机的故事。