测量模块¶
概述
测量模块为结构健康监测和物联网应用提供全面的传感器数据采集功能。主要包含四部分内容:
- 在线传感:实时连续数据流,支持 MQTT、串口和 LCD 输出
- 离线传感:高频批量数据采集,支持内存缓冲区和 SD 卡存储
- 实时处理:设备端计算和特征提取,提供三种架构选项
- 命令控制:基于 MQTT 的远程控制和监控
该模块具有灵活的采样率、多种存储选项和远程控制能力。
核心功能¶
在线传感¶
在线传感模块提供连续、实时的传感器数据采集和传输功能。
主要特性:
- 可配置采样率:0.1 - 300 Hz(实际限制:~200 Hz)
- 多路输出通道:MQTT、串口和可选的 LCD 显示
- 高精度定时:基于 ESP 定时器,微秒级精度
- 运行时配置:无需重启即可更新采样频率
- 自动数据格式化:紧凑的 CSV 格式,高效传输
- 线程安全操作:支持并发访问
- 自动停止支持:可选的基于时长的自动停止
应用场景: 实时监控、实时数据可视化、连续监测
离线传感¶
离线传感模块提供高频、带时间戳的数据采集,具备可靠的存储功能。
主要特性:
- 高频采样:最高 4000 Hz(受传感器 ODR 限制,如 ADXL355)
- 可配置时长:0.1 - 3600 秒(受 PSRAM 内存限制)
- 内存限制:时长受 PSRAM 尺寸限制
- 在 4000 Hz 下:理论上限约 87 秒(测试中最长使用过 80 秒)
- 在 100 Hz 下:理论上限约 3480 秒(约 58 分钟)
- 多种存储选项:
- 内存缓冲区(基于 PSRAM,支持大数据集)
- SD 卡存储(CSV 格式,自动命名)
- 完成后 MQTT 报告
- 精确定时:ESP 定时器,微秒级时间戳精度
- 延迟和定时启动:支持倒计时和绝对时间调度
- 自动文件命名:基于时间戳和参数的文件名
- 内存预检查:启动前验证可用内存
应用场景: 高频振动分析、瞬态事件捕获、详细波形记录
实时传感与处理¶
实时传感与处理模块提供传感器数据采集和实时计算与特征提取功能。该模块支持在数据采集过程中进行设备端处理,适用于边缘AI应用和实时检测场景。
主要特性:
- 三种架构选项:
- 架构1(Producer-Consumer):简单的基于队列的架构,使用环形缓冲区(0.1 - 1000 Hz,推荐:100 Hz - 1 kHz)
- 架构2(DMA + 双缓冲):DMA 加速的双缓冲,支持多任务(0.1 - 10000 Hz,推荐:1 kHz - 10 kHz)
- 架构3(DMA + 双核):双核并行处理,DMA 加速(0.1 - 10000 Hz,最高性能)
- 编译时架构选择:通过
RT_PROCESS_ARCH_TYPE宏选择架构 - 实时数据处理:采集过程中的特征提取和计算
- 统一 API 接口:所有架构使用相同 API,易于切换
- 性能统计:全面监控(采集时间、处理时间、丢弃样本数)
- 可配置采样频率:支持运行时频率更新
- 多路输出通道:MQTT、串口、LCD(带加速度检测反馈)
- 加速度检测:实时条件检测,LCD 可视反馈
应用场景: 实时特征提取、设备端计算、边缘AI处理、实时异常检测
与其他模块的关系:
-
vs 在线传感:增加实时处理能力;在线传感专注于原始数据流
-
vs 离线传感:实时处理 vs 批量采集;离线传感用于后处理分析
远程命令控制¶
命令模块提供基于 MQTT 的远程控制和监控功能。
主要特性:
- 统一命令接口:简单的
SENSE,ONLINE/SENSE,OFFLINE格式 - 在线传感控制:
- 启动/停止,可配置频率和时长
- 状态查询和运行时参数更新
- 指定时长后自动停止
- 离线传感控制:
- 立即、延迟或定时启动
- 基于时间的调度(YYMMDDHHMMSS 格式)
- 实时状态监控
- 队列式处理:非阻塞命令处理
- 全面错误报告:详细的 MQTT 响应消息
应用场景: 远程监控、自动化数据采集、物联网部署
架构¶
模块架构概述¶
测量模块由四个主要组件组成,每个组件针对不同用例进行了优化:
- 在线传感:定时器驱动,单任务架构,用于实时流式传输
- 离线传感:定时器驱动,两阶段架构(采集然后存储)
- 实时处理:多任务架构,提供三种选项以满足不同性能需求
- 命令控制:基于队列的非阻塞命令处理
定时器驱动设计¶
- ESP 定时器:硬件加速,微秒级精度的高精度定时
- 事件驱动:高效的基于中断的采样
- 最小开销:优化的回调执行
- 使用场景:在线传感、离线传感、实时处理(定时器触发)
多任务架构¶
- Producer-Consumer 模式:解耦采集和处理(架构1)
- 双缓冲(乒乓):并行采集和处理(架构2)
- 双核分工:核心绑定的真正并行(架构3)
- 同步机制:互斥锁、信号量和队列,确保线程安全
存储选项¶
- PSRAM 支持:大容量内存缓冲区,支持高频采样
- SD 卡集成:可靠的文件存储
- MQTT 流式传输:实时数据传输
- 环形缓冲区:实时处理的历史数据访问
硬件集成¶
- 传感器无关 API:支持集成不同传感器
- 驱动接口:标准化传感器通信
- 当前支持:ADXL355 加速度计(示例实现)
- DMA 支持:SPI 传输自动使用 DMA(架构⅔)
技术规格¶
| 功能 | 在线传感 | 离线传感 | 实时处理 |
|---|---|---|---|
| 采样频率 | 0.1 - 300 Hz | 1 - 4000 Hz | 架构1:0.1 - 1000 Hz 架构⅔:0.1 - 10000 Hz |
| 实际限制 | ~200 Hz(受 MQTT 限制) | 4000 Hz(传感器 ODR) | 架构1:1 kHz 架构⅔:10 kHz |
| 默认频率 | 1.0 Hz | 100 Hz | 100 Hz |
| 时长范围 | 0(持续)- 无限制 | 0.1 - 3600 秒(受 PSRAM 限制:4000Hz 下约 87 秒) | 持续(无时长限制) |
| 存储 | 实时流式传输 | 内存缓冲区 + SD 卡 | 实时处理 + 输出 |
| 处理能力 | 无 | 无(后处理) | 实时计算 |
| 架构选项 | 单一(基于定时器) | 单一(基于定时器) | 三种(Producer-Consumer、DMA+双缓冲、DMA+双核) |
| 定时精度 | 微秒级精度 | 微秒级精度 | 微秒级精度 |
| 输出格式 | CSV(紧凑) | CSV(带表头) | 处理后数据 + 特征 |
| 输出通道 | MQTT、串口、LCD | MQTT 报告、SD 卡 | MQTT、串口、LCD |
| 远程控制 | MQTT 命令 | MQTT 命令 | 运行时 API |
应用场景¶
结构健康监测¶
- 连续振动监测(在线传感)
- 高频冲击检测(离线传感)
- 实时异常检测(实时处理)
- 定时周期性测量(命令控制)
物联网数据采集¶
- 实时传感器数据流传输到云平台(在线传感)
- 批量数据采集用于分析(离线传感)
- 边缘AI处理与实时反馈(实时处理)
- 远程配置和控制(命令控制)
研发应用¶
- 灵活采样率,适用于各种实验
- 精确定时,用于信号分析
- 可靠数据存储,用于后处理
- 实时算法开发和测试
重要提示¶
硬件依赖
测量模块依赖于具体的硬件传感器。在本项目中,我们以 ADXL355 加速度计为例,需要依赖对应的驱动(node_acc_adxl355)。在您开发自己的测量系统时,可以根据具体需求调整硬件和驱动。测量模块在 API 层面设计为硬件无关,但您需要:
- 初始化您的传感器硬件
- 将传感器句柄提供给测量模块
- 确保传感器驱动实现了所需的接口(例如:
adxl355_read_accelerations()、adxl355_read_temperature())
当前实现针对 ADXL355 进行了定制,但架构允许适配具有类似接口的其他传感器。
当前版本限制
当前版本未考虑多传感器同步采集,目前仅有单传感器的采集功能。
性能优化
为了获得最佳在线传感性能(接近 200 Hz),建议: - 禁用不必要的输出(串口、LCD) - 使用稳定的 MQTT 连接 - 确保足够的网络带宽