第四章:传感器管理——选型、驱动与策略
传感器管理这块,我做了这么多年贴片项目,说实话,踩过的坑比走过的路还多。传感器选不好,后面所有优化都是白搭。今天咱们就聊聊,怎么把传感器这块的功耗压到最低。
4.1 传感器选型:功耗、精度与响应时间的三角博弈
选传感器,说白了就是做取舍。功耗低、精度高、响应快——这三样你不可能全都要。我个人的习惯是,先定功耗预算,再看精度,最后才考虑响应时间。
| 参数 | 低功耗优先 | 高精度优先 | 快速响应优先 |
|---|---|---|---|
| 典型功耗 | < 1 μA | 10-100 μA | 100 μA - 1 mA |
| 采样率 | 1-10 Hz | 10-100 Hz | > 1 kHz |
| 启动时间 | 可接受 10-100 ms | 1-10 ms | < 1 ms |
| 适用场景 | 连续监测、长期贴片 | 诊断级测量 | 事件检测、报警 |
我在项目中遇到过一件事:选了一款号称 0.5 μA 的加速度计,结果发现它的启动时间要 50 ms。每次唤醒读数据,光等它稳定就耗掉了大半电量。你想想看,这还不如选个 2 μA 但启动只要 1 ms 的传感器呢。
避坑指南: 我曾经被 datasheet 上的「待机电流」骗过。很多传感器待机电流确实低,但唤醒后要重新配置寄存器,这部分的功耗和耗时往往被忽略。一定要看「有效工作电流 × 工作时间」的积分值。
4.2 传感器驱动优化:轮询、中断还是 FIFO?
驱动方式选对了,功耗能降一个数量级。我一般这么选:
- 轮询:适合采样率极低(< 1 Hz)的场景。但说实话,现在很少用了。CPU 空转太浪费。
- 中断:最常用的方式。传感器自己判断条件,触发中断唤醒 MCU。我建议用边沿触发,别用电平触发,否则容易反复唤醒。
- FIFO:这是我最喜欢的方式。传感器内部缓存数据,攒到一定数量再一次性通知 MCU。MCU 可以睡大觉,醒来一次处理一批数据。
// 伪代码:FIFO 模式配置示例
sensor_config.fifo_mode = FIFO_MODE_FULL; // 满中断
sensor_config.fifo_threshold = 16; // 攒够16个样本再唤醒
sensor_config.watermark_interrupt = ENABLE;
// MCU 这边
while(1) {
__WFI(); // 睡大觉
if(sensor_fifo_ready()) {
read_fifo_burst(buffer, 16); // 一次性读16个
process_data(buffer);
}
}
我的经验: FIFO 深度不是越大越好。深度太大,数据延迟高,不适合需要实时响应的场景。我一般设 8-32 个样本之间,具体看你的应用需求。
4.3 数据采集策略:阈值触发与变化检测
连续采样是最笨的办法。聪明的做法是让传感器自己判断「什么时候该干活」。
阈值触发:设定一个上下限,超过就报警。比如体温贴片,设 37.5°C 为阈值,超过才唤醒 MCU 记录。我做过一个项目,用这种方式把平均功耗从 50 μA 降到了 3 μA。
变化检测:更智能一点。不是看绝对值,而是看变化率。比如心率监测,心跳突然变快才触发记录。这需要传感器支持「运动检测」或「变化检测」功能。
我个人习惯的做法是:
- 先用阈值触发做第一级筛选
- 再用变化检测做第二级确认
- 最后才唤醒 MCU 做完整数据采集
这样三级过滤,MCU 90% 的时间都在睡觉。
4.4 传感器电源域控制
这个点很多人会忽略。传感器不仅要关,还要关得彻底。
我建议把传感器分成独立的电源域,用 MOSFET 或负载开关控制。不用的传感器直接断电,而不是让它进入「待机模式」。为什么?因为待机模式还是有漏电流,有些传感器待机电流标称 0.1 μA,实际测出来 0.5 μA,积少成多。
// 电源域控制示例
void sensor_power_control(uint8_t sensor_id, bool on) {
if(on) {
GPIO_SetBits(POWER_EN_PORT, 1 << sensor_id);
delay_ms(5); // 等待电源稳定
sensor_init(sensor_id);
} else {
sensor_deinit(sensor_id);
GPIO_ResetBits(POWER_EN_PORT, 1 << sensor_id);
// 确保放电完成
delay_ms(1);
}
}
注意: 我曾经犯过一个错——断电后没有等电容放完电就重新上电,结果传感器启动异常。后来我加了一个放电电阻,断电后等 1 ms 再操作,问题就解决了。
嗯,传感器管理这块,说白了就是「能睡就睡,能关就关,能不干就不干」。选对传感器、用对驱动方式、定好采集策略、管好电源域,这四个环节做好了,功耗自然就下来了。
下一章咱们聊聊无线通信的功耗优化,那又是另一个大坑了。