4、传感器基础知识:常见传感器类型及其接口协议

在nRF52840 BLE TinyML项目中,传感器是数据采集的起点,也是整个系统感知物理世界的“触角”。无论是加速度计、陀螺仪、温度传感器还是麦克风,它们输出的原始数据质量直接决定了后续TinyML模型的推理准确性和低功耗策略的有效性。本章将系统梳理常见传感器的物理原理、关键参数、接口协议(I2C、SPI、模拟输出、PDM等),并结合nRF52840的外设资源,给出选型与工程接入的实用指南。

nRF52840 传感器接入架构与接口协议链路 传感器域(模拟/数字前端) 加速度计/陀螺仪 IMU(MPU-6050/ICM-20948) 温湿度/气压 SHT40/BMP390 麦克风 PDM数字麦克风(ICS-43434) I2C / SPI / PDM / 模拟 接口协议选择 nRF52840 外设资源 TWI(I2C 兼容) 最多 2 个,支持 DMA SPI 主/从 3 个,最高 32 Mbps PDM / SAADC 数字麦克风 / 模拟采样 TinyML 处理链路 数据采集与缓冲 FIFO / 定时器触发 特征提取 FFT / 统计量 / 滤波 推理与分类 TensorFlow Lite Micro I2C 适合多传感器低速总线;SPI 适合高数据率;PDM 用于数字麦克风;SAADC 用于模拟输出 低功耗设计要点:传感器休眠模式 + 中断唤醒 + DMA 传输 TP1 TP2

4.1 常见传感器类型与工作原理

在可穿戴设备和环境监测应用中,传感器种类繁多,但按物理量类型可划分为运动类、环境类和声学类三大阵营。理解每种传感器的物理转换机制,是正确解读数据、设计滤波器和训练TinyML模型的前提。

4.1.1 运动类传感器:加速度计与陀螺仪

加速度计(Accelerometer)测量物体在X、Y、Z三轴上的线性加速度,其核心原理基于MEMS(微机电系统)中的质量块-弹簧-阻尼结构。当设备发生加速度变化时,质量块产生位移,通过电容变化或压阻效应转换为电信号。加速度计适合检测静态倾斜(重力分量)和动态运动(如走路、跑步、跌倒)。

陀螺仪(Gyroscope)则测量绕三轴的角速度,基于科里奥利效应。MEMS陀螺仪内部有一个高速振动的质量块,当设备旋转时,科里奥利力使质量块在垂直方向产生位移,从而检测角速度。陀螺仪对旋转运动敏感,但存在零偏漂移问题,通常需要与加速度计融合(即IMU惯性测量单元)。

关键参数对比:

参数加速度计陀螺仪
量程±2g ~ ±16g±250 ~ ±2000 dps
灵敏度16384 LSB/g(±2g时)131 LSB/dps(±250时)
噪声密度~150 μg/√Hz~0.005 dps/√Hz
主要应用步数检测、倾斜、振动姿态角、旋转检测

4.1.2 环境类传感器:温度、湿度、气压

温度传感器常见有热敏电阻、RTD和数字温度芯片(如TMP117、SHT40内置)。数字温度芯片内部集成ADC和校准逻辑,直接输出摄氏度数值,精度可达±0.2°C。湿度传感器通常采用电容式原理,高分子感湿膜吸收水分子后介电常数变化,导致电容变化。气压传感器(如BMP390)基于压阻式或电容式MEMS膜片,测量气压,可用于海拔估算和室内定位辅助。

这三类传感器通常集成在同一个封装中(如BME280),通过I2C/SPI接口访问,数据更新率较低(1-100 Hz),非常适合低功耗场景。

4.1.3 声学传感器:麦克风

麦克风将声波压力转换为电信号。传统驻极体麦克风输出模拟信号,需要外部ADC采样;而数字PDM麦克风(如ICS-43434)内部集成Sigma-Delta调制器,直接输出PDM(脉冲密度调制)比特流。nRF52840内置PDM外设,可以硬件解码PDM为16-bit PCM数据,非常适合语音唤醒和声音事件检测。

选型要点:对于TinyML项目,优先选择数字接口传感器(I2C/SPI/PDM),避免模拟信号引入的噪声和额外ADC电路。同时关注传感器的休眠电流(应小于10 μA)和唤醒时间(应小于10 ms),以便在低功耗模式下快速启动采集。

4.2 传感器接口协议详解

nRF52840支持多种传感器接口协议,每种协议在速率、引脚占用、功耗和复杂度上各有取舍。正确选择接口协议是硬件设计的第一步。

4.2.1 I2C(TWI)协议

I2C(Inter-Integrated Circuit)是一种两线制串行总线(SCL时钟线 + SDA数据线),支持多设备挂载,通过7位或10位地址区分设备。nRF52840的TWI外设兼容I2C规范,支持100 kbps(标准模式)和400 kbps(快速模式)。

  • 优点:仅需2根线,支持多设备,地址配置灵活,适合低速传感器(加速度计、温湿度、气压)。
  • 缺点:速率有限(400 kbps),不适合高数据率传感器(如高采样率麦克风)。
  • 工程要点:需要外部上拉电阻(通常4.7 kΩ),总线电容限制设备数量;nRF52840的TWI支持DMA传输,可减少CPU干预。

4.2.2 SPI协议

SPI(Serial Peripheral Interface)是四线制同步串行接口(SCLK、MOSI、MISO、CS),支持全双工通信,速率可达数十Mbps。nRF52840提供3个SPI主设备实例,最高支持32 Mbps。

  • 优点:高速率,适合高数据量传感器(如16-bit ADC、高采样率IMU);无地址机制,通过片选信号CS选择设备。
  • 缺点:占用引脚多(4根),每个设备需要独立CS线,不适合大量传感器挂载。
  • 工程要点:SPI模式(CPOL/CPHA)必须与传感器数据手册匹配;nRF52840的SPI支持EasyDMA,可自动传输数据。

4.2.3 PDM接口(数字麦克风)

PDM(Pulse Density Modulation)是一种单线数据+单线时钟的接口,用于连接数字麦克风。nRF52840的PDM外设支持64倍过采样率,内部集成抽取滤波器,输出16-bit PCM数据。PDM接口的优势在于:

  • 单数据线即可传输立体声(左右声道时分复用);
  • 数据以比特流形式传输,抗干扰能力强;
  • nRF52840硬件解码,无需CPU逐位处理。

4.2.4 模拟输出与SAADC

部分传感器(如模拟麦克风、光敏电阻)输出模拟电压信号。nRF52840内置12位逐次逼近型ADC(SAADC),支持8个通道,可配置增益和采样时间。模拟接口需要额外注意:

  • 信号调理:可能需要运放或RC滤波;
  • 参考电压:nRF52840的SAADC支持内部参考(0.6V)或外部参考;
  • 采样率:SAADC最高采样率约200 kSPS,满足音频和振动信号需求。
接口协议引脚数最大速率典型传感器nRF52840外设
I2C2400 kbpsBME280, MPU-6050TWI0/TWI1
SPI4+CS32 MbpsICM-20948, MAX30102SPI0/1/2
PDM22.4 MHzICS-43434, INMP441PDM
模拟1200 kSPS模拟麦克风, 光敏电阻SAADC

4.3 传感器数据采集与低功耗设计

在BLE TinyML项目中,传感器数据采集不仅要保证数据完整性,还要兼顾功耗预算。nRF52840的典型工作电流为:CPU运行约5 mA,BLE广播约10 mA,传感器采集约0.5-2 mA。低功耗设计的核心是“按需采集、批量传输、快速休眠”。

4.3.1 数据采集模式

根据应用场景,传感器采集可分为三种模式:

  1. 连续采集:传感器始终开启,以固定采样率(如100 Hz)输出数据。适用于实时性要求高的场景(如跌倒检测),但功耗较高。
  2. 事件触发:传感器在检测到特定事件(如运动超过阈值)时通过中断引脚唤醒MCU。nRF52840的GPIOTE模块可监听传感器INT引脚,实现低功耗待机。
  3. 定时批量:MCU定时唤醒(如每10秒),批量读取传感器FIFO中的数据,然后立即休眠。适用于环境监测(温湿度、气压)。

4.3.2 传感器FIFO与DMA

许多现代传感器(如BMI270、ICM-20948)内置FIFO缓冲区,可存储数百个采样点。MCU可以进入休眠模式,传感器持续采集并写入FIFO,当FIFO达到阈值时通过中断唤醒MCU一次性读取。nRF52840的TWI和SPI外设支持EasyDMA,可以在不占用CPU的情况下将数据从传感器传输到内存。

功耗优化经验:在nRF52840上使用SPI + DMA读取IMU数据时,CPU可以在传输期间进入System ON模式(电流约1.5 μA),仅保留SPI外设和DMA控制器工作。实测数据:100 Hz采样率下,平均电流可从2.1 mA降至0.8 mA。

4.3.3 传感器数据同步

当系统包含多个传感器(如加速度计+陀螺仪+麦克风)时,数据时间戳对齐至关重要。nRF52840的PPI(可编程外设互连)和定时器可以实现硬件级同步:

  • 使用TIMER0产生固定采样率触发信号;
  • 通过PPI将TIMER事件连接到TWI/SPI的START任务;
  • 每个传感器数据包附带TIMER捕获的时间戳。

4.4 实战案例:多传感器数据采集与同步

假设我们要设计一个跌倒检测可穿戴设备,需要同时采集加速度计(100 Hz)、陀螺仪(100 Hz)和气压计(10 Hz)数据,并通过BLE传输到手机。以下是完整的工程实现路径。

4.4.1 硬件连接与约束

选择ICM-20948(IMU,SPI接口)和BMP390(气压计,I2C接口)。nRF52840的SPI0连接ICM-20948,TWI0连接BMP390。IMU的INT1引脚连接到nRF52840的GPIOTE通道,用于FIFO阈值中断。系统供电采用3.7V锂电池,目标平均电流小于1 mA。

4.4.2 初始现象与问题

初次调试时发现:IMU数据在SPI读取时偶尔出现CRC错误,且BMP390的气压数据与参考值偏差约2 hPa。通过逻辑分析仪抓取波形,发现SPI时钟频率设置为8 MHz,而ICM-20948在3.3V供电下最大SPI时钟为7 MHz,导致时序裕量不足。

4.4.3 分析与解决步骤

  1. 将SPI时钟降至6 MHz,CRC错误消失;
  2. 检查BMP390的I2C地址,发现与原理图不一致(0x77 vs 0x76),通过跳线修正;
  3. 在BMP390初始化时写入校准系数,气压误差降至±0.5 hPa;
  4. 配置ICM-20948的FIFO为深度50帧,每0.5秒触发一次中断;
  5. 使用nRF52840的PPI将TIMER1(10 Hz)连接到TWI0的START任务,实现气压计定时采样。

4.4.4 结果与复盘

优化后系统平均电流为0.65 mA(其中BLE广播占0.3 mA,传感器采集占0.2 mA,MCU运行占0.15 mA),单节200 mAh电池可工作约300小时。关键经验:

  • SPI时钟频率必须留足裕量,不能只看数据手册最大值;
  • 传感器FIFO是低功耗的核心,尽量利用硬件缓冲;
  • 多传感器时间同步必须依赖硬件定时器,不能依赖软件延时。
常见误区:① 忽略传感器上电稳定时间,导致首次读取数据异常;② 未配置传感器中断为开漏输出,与MCU电平不匹配;③ 在I2C总线上挂载过多设备且未计算总线电容,导致信号边沿变缓;④ 直接使用传感器原始数据而不进行单位换算,导致TinyML模型训练失败。

4.5 传感器选型与TinyML适配总结

为nRF52840 BLE TinyML项目选择传感器时,建议遵循以下流程:

步骤考量因素推荐选择
1. 确定物理量需要检测什么信号?运动/环境/声学
2. 接口协议数据率、引脚资源I2C(低速)、SPI(高速)
3. 功耗预算平均电流、峰值电流休眠电流 < 10 μA
4. 数据输出是否需要FIFO、中断内置FIFO优先
5. 软件生态是否有现成驱动Zephyr RTOS驱动支持