1. 课程导入
MEMS加速度计已经广泛嵌入手机、可穿戴设备、无人机、汽车电子、工业监测与结构健康检测系统中。它体积小、功耗低、成本可控,但真正把一颗加速度计变成“可用的数据源”,并不是简单地把传感器焊到板子上、读几个寄存器那么简单。采集工程关注的,是从物理运动到数字样本之间的完整链路:传感器如何感知加速度,模拟信号如何被调理与采样,数字接口如何配置与读取,数据如何校准、缓存、传输并最终进入上位机或嵌入式算法。本课程围绕这条链路展开,帮助学习者建立从器件到系统的工程视角。
一、学习目标:从“会读寄存器”到“能交付数据”
本课程的学习目标不是停留在会调用某个库函数读取三轴数值,而是让学习者具备独立设计、调试和评估MEMS加速度计采集系统的能力。具体包括:理解加速度计的核心参数与物理含义,能够根据量程、带宽、噪声密度、零偏稳定性等指标选择合适器件;掌握SPI/I²C数字接口的时序与配置方法,能够正确设置ODR、量程、滤波器和中断;理解采样定理、抗混叠滤波、同步采样与时间戳的重要性;能够完成零偏、灵敏度、轴间正交误差的校准;能够把原始LSB数据转换为具有物理单位的加速度值,并评估噪声、漂移与动态范围;最终能够把采集数据稳定地送入上位机、SD卡、BLE或边缘算法中。
二、核心概念:物理量、电信号与数字样本的映射
MEMS加速度计的核心是一个微机械惯性质量块。当传感器发生加速度时,质量块因惯性产生位移,电容或压阻结构把位移转换为电信号,再经过模拟前端放大、滤波、模数转换,最终得到数字输出。对于数字加速度计,内部通常已经集成了ADC和寄存器接口;对于模拟加速度计,则需要外部ADC和信号调理电路。无论哪种形式,采集工程都要处理几个关键映射关系。
- 物理加速度到电信号:灵敏度决定每g对应多少mV或多少LSB,非线性与温漂会影响映射精度。
- 电信号到数字样本:ADC位数、参考电压、采样率和滤波器共同决定量化噪声与有效带宽。
- 数字样本到物理单位:需要根据量程和位数计算比例因子,例如±2g、12位输出时,1LSB约等于1mg。
- 时间维度:ODR决定样本间隔,时间戳与同步机制决定多传感器融合时是否可对齐。
这些概念之间不是孤立的。量程选择会影响灵敏度,灵敏度又影响噪声表现;ODR提高会扩展带宽,但也会引入更多噪声并增加功耗;滤波器可以抑制混叠,但会带来群延迟。采集工程的核心,就是在这些相互制约的参数之间做出合理权衡。
三、整体框架:从传感器到数据交付的六层结构
为了便于工程化理解,本课程把MEMS加速度计采集系统划分为六个层次:感知层、模拟调理层、数字化层、接口与配置层、校准与处理层、数据交付层。感知层关注MEMS结构和物理量;模拟调理层处理放大、滤波和偏置;数字化层完成ADC与采样时序;接口与配置层负责SPI/I²C通信、寄存器配置和中断管理;校准与处理层完成零偏、灵敏度、温度补偿和单位换算;数据交付层则面向串口、USB、BLE、SD卡、MQTT或边缘算法。下图展示了这一整体框架与典型数据流。
四、典型应用场景与参数取向
不同应用对加速度计采集系统的要求差异很大。手机姿态识别更关注低功耗和中等精度,常用±2g到±8g量程、几十到几百Hz带宽;无人机飞控需要较高带宽和较低延迟,常选择±8g到±16g量程,并配合SPI高速读取;汽车碰撞检测要求大量程和快速响应,可能达到±100g以上;工业振动监测则更关注噪声密度和频率响应,常需要较宽的动态范围与稳定的时间同步;结构健康监测往往需要长期低漂移采集,对温漂和零偏稳定性要求更高。下表给出典型场景的参数取向,帮助建立“场景决定指标”的意识。
| 应用场景 | 典型量程 | 关注带宽 | 关键指标 | 常见接口 |
|---|---|---|---|---|
| 手机姿态/计步 | ±2g~±8g | 50~200Hz | 低功耗、低成本 | I²C/SPI |
| 无人机飞控 | ±8g~±16g | 200~1000Hz | 低延迟、低噪声 | SPI |
| 汽车碰撞检测 | ±50g~±200g | 1kHz以上 | 大量程、高可靠 | SPI/专用总线 |
| 工业振动监测 | ±2g~±16g | 1~10kHz | 噪声密度、频响 | IEPE/SPI/模拟 |
| 结构健康监测 | ±1g~±4g | DC~100Hz | 零偏稳定性、温漂 | RS485/无线 |
五、方法流程:一次完整采集任务的关键步骤
一个规范的采集任务通常遵循以下流程:明确测量对象与频带需求,选择传感器与量程;设计供电、去耦和信号回流路径;配置通信接口与寄存器,设置ODR、量程、滤波器和中断;进行静态零偏校准与动态灵敏度校验;采集原始数据并记录时间戳;进行单位换算、滤波、温度补偿与异常检测;最后把数据打包交付到目标平台。下面是一段典型的初始化配置伪代码,展示了采集工程中“配置先行”的思路。
// 以SPI数字加速度计为例的初始化流程
spi_init(SPI_MODE_3, 1MHz);
write_reg(CTRL_REG1, 0x57); // ODR=200Hz, 使能三轴
write_reg(CTRL_REG2, 0x00); // 高通滤波关闭
write_reg(CTRL_REG3, 0x02); // 数据就绪中断使能
write_reg(CTRL_REG4, 0x08); // 量程±2g, 高分辨率
write_reg(CTRL_REG5, 0x00); // FIFO旁路
while (1) {
if (data_ready()) {
read_xyz(&raw_x, &raw_y, &raw_z);
ax = raw_x * 0.001; // 1LSB≈1mg
ay = raw_y * 0.001;
az = raw_z * 0.001;
timestamp = get_us();
send_packet(ax, ay, az, timestamp);
}
}