2、智能穿戴硬件基础:常见传感器(加速度计、陀螺仪、心率、PPG)、微控制器选型与开发板介绍

智能穿戴设备的本质,是一个“感知—处理—决策—反馈”的闭环系统。在TinyML项目中,硬件平台决定了数据采集的质量、模型推理的能效比以及产品的续航表现。本章将围绕传感器选型、微控制器(MCU)架构以及典型开发板资源展开,帮助你在动手训练模型之前,先建立对硬件底层的系统认知。理解这些基础,将直接影响后续数据预处理策略、模型输入维度设计以及低功耗告警逻辑的实现方式。

传感器层 微控制器层 开发板与接口 加速度计(IMU) 3轴/6轴/9轴 陀螺仪 角速度测量 心率传感器(PPG) 光电容积脉搏波 温度/湿度/气压 环境补偿与辅助 I²C/SPI ARM Cortex-M4F FPU + DSP指令 Cortex-M33 + TrustZone 安全与低功耗平衡 RISC-V 内核 开放架构新选择 NPU/向量扩展 硬件加速TinyML GPIO/总线 Arduino Nano 33 BLE nRF52840 STM32L4 / H7 STM32Cube生态 ESP32-S3 Wi-Fi + BLE + AI加速 Wio Terminal / Himax 集成屏幕与传感器 TinyML 工程链路 传感器数据采集 → 信号调理 → 特征提取 → 模型推理 → 低功耗告警 TP1: 原始数据 TP2: 预处理后

2.1 核心传感器原理与选型要点

智能穿戴设备中最核心的传感器包括加速度计、陀螺仪、心率传感器(PPG)以及辅助的环境传感器。加速度计测量物体在三个轴向上的线性加速度,单位通常为g(9.8m/s²)。在动作识别场景中,加速度计能够捕捉手臂摆动、身体倾斜、步态周期等宏观运动特征。陀螺仪则测量绕三个轴的角速度,单位为°/s,用于识别旋转动作,如手腕翻转、头部转动等。两者结合构成六轴惯性测量单元(IMU),若再加入磁力计,则形成九轴系统,可提供更完整的姿态估计。

心率传感器的主流方案是PPG(光电容积脉搏波描记法)。其原理是使用绿色或红外LED照射皮肤,通过光电二极管检测血液容积变化引起的反射光强度波动。PPG信号不仅包含心率信息,还能提取心率变异性(HRV)、血氧饱和度(SpO₂)等衍生指标。在TinyML项目中,PPG信号的质量受佩戴松紧度、皮肤颜色、运动伪影影响较大,因此通常需要配合加速度计进行运动噪声消除。

传感器类型关键参数典型型号接口功耗(工作/待机)
加速度计量程±2~16g,采样率1~1000HzBMI270, LSM6DSOXI²C/SPI0.5mA / 1µA
陀螺仪量程±125~2000°/sICM-42688-PI²C/SPI0.9mA / 2µA
PPG心率波长520nm/660nm/940nmMAX30102, MAX86141I²C0.7mA / 0.7µA
温度/湿度精度±0.2°C,±2%RHSHTC3, SHT40I²C0.4mA / 0.3µA
选型经验:对于动作识别项目,优先选择量程可配置、内置FIFO缓冲区的IMU传感器。FIFO可以在MCU休眠时持续采集数据,显著降低系统功耗。例如BMI270内置2KB FIFO,支持在1.2V电压下以0.5mA电流连续采集六轴数据。

2.2 微控制器选型:从Cortex-M到RISC-V

微控制器是TinyML推理的“大脑”。选择MCU时需权衡算力、内存、功耗和生态四个维度。ARM Cortex-M4F系列凭借FPU(浮点运算单元)和DSP指令,成为当前TinyML的主流选择。Cortex-M33在M4基础上增加了TrustZone安全扩展和协处理器接口,适合需要安全启动和加密通信的医疗级穿戴设备。RISC-V架构则提供了开放性和定制化可能,如嘉楠K210内置KPU神经网络加速器,可在0.3W功耗下运行目标检测模型。

内存是另一个关键约束。TinyML模型通常需要100KB~1MB的Flash存储权重,RAM则需容纳中间激活值。例如MobileNetV1在STM32F746(320KB RAM)上运行需要约2.5MB RAM,因此必须进行模型压缩或选择带外部PSRAM的芯片。实际项目中,建议优先选择RAM≥256KB、Flash≥1MB的MCU,以便部署量化后的模型。

// 典型MCU资源对比(以Arduino Nano 33 BLE为例)
// 主控:nRF52840(Cortex-M4F @64MHz)
// Flash: 1MB, RAM: 256KB
// 支持BLE 5.0,内置NFC-A标签
// 静态功耗:待机1.9µA,运行3.5mA(无无线电)
// 适合部署:TFLite Micro 量化模型(≤300KB)
选型决策流程:
  1. 确定传感器数量与采样率,计算数据吞吐量(如6轴IMU@100Hz = 1200B/s)
  2. 估算模型大小与RAM需求(可先用TFLite Micro基准测试)
  3. 评估功耗预算:若电池容量100mAh,目标续航24h,则平均电流需≤4.2mA
  4. 考虑外设接口:I²C/SPI通道数、DMA通道、定时器数量
  5. 验证开发工具链:是否支持TensorFlow Lite Micro、Edge Impulse等框架

2.3 开发板实战:Arduino Nano 33 BLE与STM32L4

Arduino Nano 33 BLE是TinyML入门最友好的开发板之一。它基于nRF52840 SoC,板载BMI270六轴IMU和MP34DT05麦克风,可直接用于动作识别和语音唤醒项目。其优势在于Arduino生态的丰富库支持,以及TFLite Micro官方示例的完整适配。对于需要更高算力的场景,STM32L4系列(如B-L475E-IOT01A)提供了更丰富的传感器接口和低功耗模式,配合STM32Cube.AI工具链,可将Keras模型直接转换为C代码。

ESP32-S3则是一个兼顾Wi-Fi/BLE与AI加速的选择。其内置向量指令和神经网络加速器,支持INT8量化推理,适合需要云端同步或OTA更新的穿戴原型。但需注意,ESP32-S3的功耗相对较高(Wi-Fi开启时平均电流>100mA),在电池供电场景中需谨慎设计唤醒策略。

开发板MCU板载传感器典型功耗适用场景
Arduino Nano 33 BLEnRF52840BMI270, MP34DT053.5mA(运行)动作识别、语音唤醒
STM32L4 DiscoverySTM32L475LSM6DSL, HTS2212.8mA(运行)环境监测、健康分析
ESP32-S3-DevKitCESP32-S3无(需外接)40mA(Wi-Fi)边缘AI+云连接
Wio TerminalSAMD51光敏、麦克风、IMU30mA(屏幕亮)可视化原型验证

2.4 案例拆解:低功耗跌倒检测手环原型

我们设计一个基于Arduino Nano 33 BLE的跌倒检测手环,目标是在识别跌倒动作后通过BLE发送告警,同时保证100mAh电池续航超过48小时。初始方案直接使用BMI270的6轴数据,以50Hz采样率持续推理一个双层LSTM模型,但实测平均电流达到8.2mA,续航仅12小时。

分析发现,主要功耗来自三方面:传感器持续采样(1.2mA)、MCU频繁唤醒(3.5mA)、BLE广播(2.5mA)。优化措施如下:

  1. 将BMI270配置为仅加速度计模式,启用FIFO中断,每200ms批量读取一次数据,传感器功耗降至0.4mA
  2. 将LSTM模型替换为1D-CNN+阈值判断的两级流水线:第一级用轻量CNN(仅3层)在MCU上每200ms推理一次,检测到疑似跌倒时再唤醒完整模型确认
  3. BLE仅在确认跌倒后开启广播,平时关闭无线电

优化后,系统平均电流降至1.8mA,续航提升至55小时。关键指标对比:推理准确率从92.3%微降至91.8%(可接受),但响应延迟从800ms降至350ms。复盘经验:在TinyML项目中,“传感器级低功耗”往往比“模型级优化”带来更显著的收益,优先考虑数据采集策略的调整。

常见误区:不要盲目追求高采样率和高精度模型。在穿戴设备中,100Hz采样率通常已足够捕捉人体运动特征(人体运动能量主要集中在0.3~3.5Hz)。过高的采样率不仅增加功耗,还会引入更多噪声,降低模型鲁棒性。

2.5 硬件调试与信号完整性要点

在硬件调试阶段,需重点关注I²C总线的上拉电阻、传感器中断引脚的配置以及电源纹波。I²C总线在1.8V逻辑下通常使用2.2kΩ~4.7kΩ上拉电阻,若线缆过长或设备过多,需适当降低电阻值。传感器中断引脚应配置为开漏输出并连接MCU的GPIO外部中断,以实现事件驱动的低功耗唤醒。

电源设计方面,穿戴设备常用锂电池(3.7V)配合LDO或DC-DC降压至3.3V/1.8V。PPG传感器对电源纹波敏感,建议在VCC引脚并联10µF+100nF电容,并在PCB布局时远离射频天线。若使用MAX30102等PPG芯片,还需注意其LED驱动电流的设置——过大的电流不仅增加功耗,还会导致光电二极管饱和。

// 传感器初始化示例(BMI270 + Arduino)
#include "BMI270.h"
BMI270 imu(Wire, 0x68);
void setup() {
  imu.begin();
  imu.setAccelRange(±4g);
  imu.setAccelODR(100); // 100Hz
  imu.enableFIFO(true);
  imu.setFIFOThreshold(20); // 每20个样本触发中断
  attachInterrupt(digitalPinToInterrupt(2), onFIFO, FALLING);
}
void onFIFO() {
  // 读取FIFO数据并执行推理
  imu.readFIFO(buffer, 20);
  runInference(buffer);
}
调试建议:使用逻辑分析仪抓取I²C时序,确认传感器寄存器读写正确。在TinyML项目中,80%的“模型不收敛”问题源于传感器数据异常(如字节序错误、量程配置错误),而非模型本身。建议在数据采集阶段先打印原始值,验证其物理范围是否合理。

最后,硬件选型应遵循“先验证、后优化”的原则。在项目初期,优先选择生态成熟、调试工具完善的开发板(如Arduino Nano 33 BLE),快速完成数据采集和模型验证。当算法稳定后,再根据功耗和成本需求,设计定制化PCB并选用更精简的MCU。这种“从开发板到定制板”的路径,能显著降低项目风险。