4、信号采集与硬件平台:常用开发板、传感器接口、采样率与分辨率设置
TinyML工业状态分类的起点并非模型算法,而是物理世界与数字世界的交汇点——信号采集与硬件平台。在工业现场,温度、电流与振动信号往往混杂着噪声、工频干扰和突发冲击,若前端采集硬件设计不当,后续无论模型多么精巧,都难以获得理想的分类准确率。本章将聚焦于TinyML落地中最常用的两款开发板(Arduino Nano 33 BLE Sense与ESP32),深入剖析其传感器接口、采样率与分辨率设置方法,并结合工业振动监测的典型场景,给出可复用的工程配置方案。
4.1 核心原理:从物理信号到数字特征的链路完整性
工业状态分类的本质是模式识别,而模式识别的质量上限由信号采集链路决定。一个完整的采集链路包含四个环节:传感器感知 → 信号调理 → ADC量化 → 数字预处理。传感器将温度、电流、振动等物理量转换为电信号;信号调理负责将传感器输出调整到ADC的最佳输入范围(通常为0~3.3V或0~5V);ADC以一定采样率和分辨率将模拟电压离散化;数字预处理则完成去直流、滤波、加窗等操作,为后续特征提取和模型推理准备数据。
在TinyML场景中,开发板的选择直接决定了上述链路的性能边界。Arduino Nano 33 BLE Sense搭载nRF52840处理器,内置12位ADC、支持I2C/SPI接口,板载麦克风、加速度计等传感器,适合振动和声音监测;ESP32则以其双核240MHz主频、12位ADC、Wi-Fi/蓝牙通信能力见长,适合需要无线传输的分布式监测节点。两者均支持TensorFlow Lite Micro,但内存和算力差异决定了模型复杂度上限。
4.2 判断方法与操作流程:采样率与分辨率的工程设定
采样率与分辨率的设置并非越大越好,而是依据信号特性和分类目标进行工程权衡。以下是标准操作流程:
- 确定信号带宽:通过频谱分析或查阅设备手册,确认目标故障特征的最高频率f_max。根据奈奎斯特定理,采样率f_s ≥ 2×f_max,工程上通常取5~10倍以保证余量。
- 选择ADC分辨率:12位ADC的理论动态范围为72dB,可分辨约0.8mV(3.3V参考电压下)。若需检测微小振动幅值变化,可考虑过采样技术:以4倍采样率采集后求平均,等效增加2位分辨率。
- 配置采样触发方式:工业振动监测推荐使用定时器触发ADC采样,而非在循环中调用analogRead(),以保证采样间隔的精确性。Arduino Nano 33 BLE Sense可使用NRF52的PPI(可编程外设互连)实现定时器与ADC的硬件联动。
- 设置缓冲区与DMA:为避免CPU在采样过程中被中断频繁打扰,应使用DMA将ADC数据直接搬运到内存缓冲区。ESP32的ADC支持DMA模式,可连续采样多通道数据。
- 校准与归一化:上电后先采集静态基准值,计算偏置和增益误差,在软件中做校准。对于振动信号,通常去除直流分量(减去均值),再归一化到[-1, 1]区间。
| 信号类型 | 推荐采样率 | ADC分辨率 | 预处理要点 |
|---|---|---|---|
| 振动(加速度计) | 1kHz~5kHz | 12bit(±2g/±4g量程) | 去直流、带通滤波(10Hz~2kHz) |
| 电流(CT/霍尔) | 1kHz~4kHz | 12bit(0~3.3V) | 工频陷波(50Hz)、RMS计算 |
| 温度(NTC/PT100) | 1Hz~10Hz | 10bit即可 | 滑动平均滤波、异常值剔除 |
4.3 案例拆解:基于Arduino Nano 33 BLE Sense的电机振动监测
某工厂需要对一台三相异步电机进行状态分类,目标是区分正常、轴承磨损和转子不平衡三种状态。电机转速为1450rpm(约24Hz),轴承故障特征频率(BPFO)约为87Hz,考虑谐波成分,最高关注频率设为500Hz。
硬件选型:采用Arduino Nano 33 BLE Sense板载的LIS3DH三轴加速度计(I2C接口,量程±2g,带宽可配置)。该传感器内置FIFO缓冲区,可减轻MCU读取压力。
参数设置:采样率设为1kHz(满足500Hz信号5倍余量),量程±2g(电机振动幅值通常不超过1g),输出数据率ODR=1kHz,开启低通滤波器截止频率400Hz。ADC分辨率由传感器内部决定(12bit),无需额外配置。
实施步骤:
// 初始化LIS3DH
#include <Wire.h>
#include <LIS3DH.h>
LIS3DH accel(I2C_MODE, 0x18);
void setup() {
accel.begin();
accel.setRange(LIS3DH_RANGE_2G);
accel.setDataRate(LIS3DH_DATARATE_1KHZ);
accel.setHighPassFilter(0, 1); // 启用高通滤波去除直流
}
// 定时器中断中读取FIFO数据
void timerISR() {
accel.readFIFO(buffer, 32); // 每次读取32个样本
// 计算RMS、峰值、频谱特征...
}
结果与复盘:采集10秒数据(10000个样本),提取时域特征(RMS、峰值因子、峭度)和频域特征(1倍频、2倍频幅值),输入TinyML分类模型(如2层全连接网络),准确率达到96%。过程中发现,若不启用高通滤波,直流偏置会淹没微弱的振动特征;而采样率从1kHz降至500Hz时,BPFO谐波混叠导致分类准确率下降至82%。
4.4 常见误区与总结复盘
误区一:采样率越高越好。高采样率导致数据量激增,MCU存储和传输压力增大,且高频噪声可能掩盖低频故障特征。正确做法是根据故障特征频率设定采样率,并配合抗混叠滤波器。
误区二:忽略ADC参考电压稳定性。开发板USB供电时,3.3V电压可能波动,直接影响ADC测量精度。应使用外部LDO稳压或至少并联100μF和100nF去耦电容。
误区三:多传感器同步采样缺失。温度、电流、振动信号需要时间对齐,否则特征融合时会出现相位错位。建议使用GPIO触发同步采样,或为每个通道打上时间戳。
误区四:忽视传感器量程设置。量程过小导致信号削顶,量程过大则量化噪声增加。应根据实际信号幅值预留20%~30%余量。