ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

STWIN.box外部速度传感器触发数据采集实践——基于DATALOG2固件

STWIN.box外部速度传感器触发数据采集实践——基于DATALOG2固件 手里有一块STWIN.box又恰好遇到需要“用外部速度传感器的脉冲信号触发数据采集”这种需求那你大概率已经体会过那种尴尬设备一直在录SD卡里堆满了“什么都没发生”的数据真正想要的故障特征反而被淹没在冗余数据里。我这篇就是围绕“STWIN.box跑DATALOG2固件用外部速度传感器触发信号来控制记录”这件事把从硬件接线、JSON配置到烧录联调、踩坑排查的完整过程记录下来。适合手里有STEVAL-STWINBX1或类似工业传感器评估板准备做旋转机械振动监测、阶次分析、启停机瞬态采集的朋友参考。先说结论STWIN.box本身是一块集成度很高的工业级传感器评估板DATALOG2是ST官方功能包里专门用来“按配置记录传感器数据”的固件外部触发信号则是把“什么时候开始记录”的决定权交给机器上的转速脉冲。三者结合之后你得到的不再是一条永远在录的数据流而是一段一段“按需切割好”的振动窗口每一段都对应明确的机械状态后续做FFT、阶次跟踪都会省力很多。1. 先理解STWIN.box与DATALOG2的定位很多第一次接触STWIN.box的人会把它当成一块普通的传感器开发板这是低估了它。它实际是一个面向工业预测性维护、状态监测的可穿戴级别数据采集原型平台板载的器件组合几乎覆盖了振动、温度、声学、磁场的常见监测维度而DATALOG2正是把这一堆传感器源源不断吐出来的数据以可控方式落盘或上抛的固件。1.1 STWIN.box的硬件底子STWIN.box的完整型号是STEVAL-STWINBX1核心主控是STM32U585一颗带TrustZone的Cortex-M33低功耗芯片。传感器的配置相当豪华ISM330DHCX6轴IMU自带机器学习核、IIS2ICLX高分辨率工业加速度计、IIS2MDC磁力计、IMP23ABS高带宽数字麦克风、STTS751温度传感器另外还有一个用于工业信号采集的模拟输入接口。这块板子的关键设计在于“低功耗多传感器同步”的底子而不是单纯的传感器齐全。STM32U585的功耗控制加上各传感器自带的FIFO和中断使得它可以在电池供电下做长时间的状态监测同时保证多路传感器数据在时间上基本对齐。这也是DATALOG2固件选择它作为载体的原因没有同步机制后续分析时加速度波形和转速脉冲对不上相位阶次分析就是空谈。1.2 DATALOG2固件到底是干什么的DATALOG2是ST在FP-IND-DATALOG2这个功能包里的核心固件源码和工程在STM32CubeFunctionPack的目录下都可以找到。你可以把它理解成一个“可配置的传感器数据记录器”上电后会根据一份JSON配置文件决定开启哪些传感器、以什么采样率记录、数据写到SD卡还是通过USB虚拟串口上传。和普通例程最大的区别是“配置驱动”。你不需要改一行C代码只要把JSON配置文件改好固件就会按新的参数工作。这个设计非常贴近工程现场现场工程师不懂编译但完全可以通过配置文件把采样率从1kHz调到6.66kHz或者把某个传感器关掉。DATALOG2的典型使用方式就是改配置、烧固件、记录、导出、分析。不过这里要强调一点初次接触的人容易把DATALOG2和ST BLE Sensor App里的实时显示功能搞混。DATALOG2走的是“离线记录/批量传输”路线它本身侧重数据采集的完整性和可配置性实时波形预览只是辅助。如果你需要长时间连续记录并希望数据完整落盘DATALOG2是正路如果你只是想快速看看当前传感器波形那其实用其他例程更顺手。1.3 外部触发信号为什么重要默认情况下DATALOG2是“上电就录”或者“按命令开始录”但很多工业监测场景不是随时都有价值。以旋转机械为例最有诊断价值的振动信号往往出现在启机、停机、过临界转速、负载突变这几个窗口里。如果一直以24kHz采样率录三轴加速度一分钟光一路加速度的数据量就相当可观录一小时大部分都是平稳运行的冗余数据。引入外部速度传感器触发信号后逻辑就变成了机器每转一圈速度传感器给一个脉冲DATALOG2在收到指定边沿比如上升沿后开始记录一段固定长度的数据或者停止记录。这样数据是“按事件”组织的每一段都对应一个确定的机械角度或转速状态。尤其是后续要做阶次分析每转一个脉冲对应一个角度参考数据对齐后能直接观察到不同阶次振动分量随转速的变化。这是纯粹的幅值阈值触发做不到的因为阈值触发只能告诉你“振动变大了”不能告诉你“现在轴转到了什么位置”。2. 硬件接线与信号适配外部信号不是想接就接很多人把精力全放在JSON配置上结果板子拿回来怎么触发都不生效最后发现是硬件上信号压根没进对引脚。这一节先把硬件链路理清楚。2.1 接线思路从速度传感器到扩展接口STWIN.box的传感器数据都在内部总线上但外部触发信号得从扩展连接器引入。板子上有两排扩展引脚P1、P2其中一部分GPIO被引出可以复用为外部中断输入。DATALOG2固件在编译时会指定一个GPIO作为外部触发引脚具体丝印在不同版本里可能略有差异动手前一定先打开STWIN.box的原理图和固件里board相关头文件确认别凭感觉接。工业现场的速度传感器常见输出类型有这么几类磁电式速度传感器/接近开关输出可能是NPN开漏需要上拉到3.3V才能被MCU识别。PNP传感器输出高电平可能是12V或24V不转换直接进GPIO大概率烧引脚。编码器差分输出A/A-差分信号不能直接接GPIO需要先经过差分接收芯片如AM26LS32转成单端TTL。霍尔开关有些是推挽输出电平合适可以直连但仍要确认幅度。所以接线前第一件事不是找杜邦线而是拿万用表和示波器测清楚传感器的输出电平、极性、静态状态。这一步省不掉信号电平不匹配是触发失败的最常见原因。2.2 用TTL电平做为“统一语言”一个我强烈推荐的做法是把所有外部速度传感器信号先统一转成3.3V TTL脉冲再送进STWIN.box的触发引脚。这样一方面保护板子另一方面后续换传感器类型时软件配置完全不用动。转换手段很灵活最省事的是用一个带施密特触发器输入的光耦隔离模块例如TLP2361或A2S系列成品模块输入侧接传感器输出输出侧开漏加上拉电阻接STWIN.box引脚。光耦还能提供电气隔离把现场传感器和板子之间的地环路断开——这在电机旁边尤其重要电机启停时的地电位跳变很容易让采集设备死机或数据错乱。我自己用的方案是NPN接近开关外接一个3.3k上拉到3.3V输出直接进GPIO。如果信号线上有长线缆干扰就在GPIO旁边加一个100pF到1nF的滤波电容配合MCU内部施密特触发器输入做整形。实测一根2米双绞线接近开关在6000rpm下产生的100Hz脉冲信号边沿依然干净。2.3 电气连接的关键细节有几个小细节容易栽跟头单独拿出来提醒一下。第一共地问题。虽然上面说了光耦可以隔离但对于普通的非隔离TTL连接传感器的地和STWIN.box的地必须连在一起否则触发脉冲的参考电平是浮空的MCU看到的信号可能就是随机毛刺。第二上拉电阻的选择。如果传感器是开漏输出上拉电阻太大会导致边沿变缓触发时间点不确定太小会拉低信号电平或加大功耗。3.3V供电下常用2.2k到4.7k配合MCU输入引脚的施密特触发器效果稳定。第三接线长度。触发信号虽然频率不高但边沿陡峭程度会影响触发时刻的抖动。如果线长超过2米建议用屏蔽双绞线屏蔽层单端接地。对阶次分析来说触发抖动直接影响角度对齐精度这一项值得认真对待。3. DATALOG2配置实操把触发逻辑写进JSON硬件通路打通之后剩下的工作全部集中在DATALOG2的配置层面。这也是这个固件最灵活的地方——通过JSON将触发源、触发方式、记录窗口全部定义清楚不需要改一行C代码。3.1 获取固件与目录理解首先去ST官网搜FP-IND-DATALOG2下载功能包。解压后你会在固件目录里看到完整的STM32工程通常是基于STM32CubeMX生成的。快速扫一眼目录结构重点关注这几个文件夹Firmware核心工程用STM32CubeIDE或Keil打开编译。Utilities存有配置模板脚本等。Documentation官方PDF说明里面有一张JSON配置字段表务必打印出来对照看。编译时注意工具链版本ST的工程有时会跟着HAL库版本更新使用过旧的CubeIDE可能报错。官方推荐哪个版本就用哪个版本省去不必要的环境折腾。如果你不想自己编译ST官网或FP包内有时会提供预编译的二进制文件。但预编译固件未必包含你要的触发引脚配置所以我更建议按自己的板子编译一次至少心理有底。3.2 先弄清配置文件的加载方式DATALOG2固件启动后会按固定流程查找配置文件。常见的方式包括从SD卡指定路径读取JSON或通过USB虚拟串口用命令下发配置。不同版本有差异但无论是哪种都建议先把默认配置跑起来确认能记录数据再改触发相关参数。跳跃式直接改触发配置一旦不生效你甚至不知道是配置格式错了还是硬件没接好。一个比较顺手的调试流程是先用默认配置格式化SD卡上电记录。确认SD卡里出现新数据文件且大小随时间增长。再修改JSON添加触发外部信号相关配置。用信号发生器/手拨开关模拟外部脉冲验证是否触发记录。最后才接真实速度传感器。这样分段验证每一层的问题都能快速定位避免硬件问题和配置问题混在一起。3.3 关键JSON字段逐项解读DATALOG2的JSON结构核心分为三个区域传感器配置sensor、辅助数据aux_data、触发配置trigger。外部触发信号的配置主要涉及后两者。下面是我在实际项目中用过的一份精简示例字段名以你所拿到的版本说明为准但整体思路是一致的{ sensor: [ { name: ism330dhcx, type: ism330dhcx, enable: true, odr: 6667, fs: 4, sample_period: 150 } ], aux_data: [ { type: trigger, id: ext_speed_trigger, sensor: [ { name: trigger_signal, data_type: uint32, sample_period: 0 } ] } ], trigger: { type: external, pin: PA0, mode: rising_edge, action: start_stop, pre_trigger_samples: 0, post_trigger_samples: 50000 }, sd: { enable: true } }逐个说明sensor区定义哪些片上传感器启用。ISM330DHCX开启后odr是输出数据率6667代表6.667kHzfs是量程±4gsample_period是每次读取的采样周期单位通常为微秒或由固件约定我这份里150对应约6.67kHz。这里设置成与振动分析需要的带宽匹配即可。aux_data区这里非常关键它定义了一路“附加通道”数据来源是外部触发引脚本身。把外部脉冲信号当作一个普通通道记录下来这是我最推荐的做法好处后面专门说。data_type为uint32是为了完整记录脉冲变化sample_period为0表示随触发事件记录或由固件决定。trigger区这是核心。type设置为externalpin指定触发引脚mode选择上升沿触发action决定触发后是启动记录还是停止记录。pre_trigger_samples是触发前预记录长度可以让数据窗口包含触发时刻之前的振动post_trigger_samples是触发后记录长度两者共同定义了一个“以触发点为参考的数据窗口”。注意pre_trigger_samples和post_trigger_samples这些字段它们决定了你最终拿到的每段数据有多长。计算方式是“采样点数”还是“时间长度”取决于固件版本建议先在配置模板里查一下单位。我习惯把post_trigger_samples设置成“采样率×期望时长”例如6.667kHz下想记录3秒振动就填20000。3.4 触发逻辑设计的几种组合外部触发不只有一个固定套路根据现场需求可以组合出多种行为。第一种是“单次触发单段记录”适合启停机过程捕捉。配置成触发后启动记录记录完指定长度后自动停止。配合pre_trigger_samples可以完整抓到转速脉冲到来之前的一段信号这对分析启动前状态很有用。第二种是“每转触发一段记录”适合随转速变化的连续监测。这种场景下速度传感器每转发一个脉冲DATALOG2收到脉冲就记录一个固定窗口的振动数据窗口结束后等待下一个脉冲。这样每段数据都对应一转后续按转数编号做等角度重采样非常方便。第三种是“脉冲停止触发”适合堵转、卡停检测。用下降沿触发或电平触发当速度传感器脉冲消失时立刻记录一段数据记录的是“从正常到异常”的变化过程。这个思路对设备保护很有价值但要注意触发后记录窗口不能太长否则异常数据会被正常数据淹没。设计触发逻辑时始终围绕一个问题你拿到这段数据之后要做什么分析是做常规FFT还是做阶次跟踪还是做事件告警分析需求决定了触发策略不是先有触发再有分析。4. 固件烧录与联调实测流程配置写得再漂亮最终要落到板子上跑通才作数。这一节讲烧录和联调的具体操作包括一些能让你少走弯路的验证方法。4.1 编译与烧录DATALOG2固件用STM32CubeIDE打开FP-IND-DATALOG2的工程后先确认目标板和调试器配置。STWIN.box板载了调试器接口通过USB线连接电脑后在CubeIDE里选好对应的ST-LINK调试器即可。建议先编译一次默认工程如果提示缺少某个中间件或驱动包根据错误提示在CubeMX里补齐即可。烧录这一步要注意DATALOG2固件可能会用到板载外部Flash或传感器驱动的初始化但外部触发配置在编译时并不会固化到固件里而是通过配置文件动态下发。所以烧录完成后第一步不是触发测试而是先把配置文件准备好、确认板子文件系统工作正常再上电验证。如果碰到板子无法识别调试器的问题先查USB线和接口ST-LINK的驱动有时会在系统更新后失效需要重新安装。另外STWIN.box上的Boot引脚状态也可能影响连接具体看板子丝印必要时短按复位键再连接。4.2 用信号发生器模拟外部速度脉冲联调的第一步我不建议直接接真实速度传感器。用信号发生器输出一个3.3V TTL方波频率从1Hz慢慢往上调接到触发引脚是最干净的验证方式。为什么从1Hz开始因为1Hz的方波周期是1秒你完全可以用肉眼观察LED状态或串口日志判断是否触发。如果一上来就模拟6000rpm对应的100Hz脉冲触发后记录窗口极短很多配置问题会被掩盖。我常用的验证步骤是信号发生器输出0V到3.3V方波频率1Hz占空比50%。给STWIN.box上电确认SD卡已插入且配置加载成功。观察串口日志看是否出现“Trigger detected”之类的状态消息。等待一个脉冲拔下SD卡检查是否生成一个数据窗口文件文件时间与触发时间吻合。用上位机或Python脚本读取文件看trigger信号通道是否记录了方波边沿。这里有一个很重要的建议务必把触发信号本身作为一路辅助通道录进文件。这样即使你不在现场拿到数据文件后也能清楚看到“触发点出现在哪个时刻”“脉冲宽度多少”“是否有抖动”这对事后排查问题极其有用。我在调试阶段就多次靠这个通道确认了问题根源比如信号接触不良导致触发时间点漂移、脉冲毛刺造成多次误触发等。4.3 数据文件快速解析验证DATALOG2输出的文件格式在不同版本里可能不同有的是CSV文本有的是二进制。先打开一个文件看看头部CSV通常有表头列出各传感器通道名称和时间戳二进制则会在文件头写入配置信息需要参考官方解析工具或文档。如果文件确实是CSV可以用一段简单脚本快速验证触发效果。下面是我用来快速看数据长度的Python脚本思路import csv vib [] trig [] with open(datalog_0001.csv) as f: reader csv.DictReader(f) for row in reader: vib.append(float(row[ism330dhcx_acc_x])) trig.append(int(row[trigger_signal])) # 找触发边沿 for i in range(1, len(trig) - 1): if trig[i] trig[i-1]: print(ftrigger rising edge at sample {i}) # 在这里切割振动数据窗口 window vib[i-100:i500] break验证的重点是数据文件里的振动通道和trigger通道在时间上是否对齐。如果trigger通道的跳变点与振动通道中你期望的“冲击时刻”吻合说明触发时机正确如果不吻合优先检查触发引脚配置是否与板子上实际连接的引脚一致再检查信号线上是否有滤波延迟过大问题。5. 实测中的坑触发失效、误触发与文件问题这一节是全文最“干货”的部分我把在STWIN.box DATALOG2外部触发方案里踩过的坑集中整理了一遍每一条都对应一种排查思路。5.1 触发信号无效怎么给脉冲都不动现象信号发生器已经输出标准的3.3V方波串口日志却始终没有触发消息。排查顺序非常有讲究不要上来就怀疑固件配置。第一步检查电平。用万用表或示波器测触发引脚静态电平如果引脚一直悬空或浮空MCU可能读到随机电平。检查传感器输出侧和板子输入侧是否共地共地线不通的话脉冲信号根本到不了。第二步检查引脚对应关系。DATALOG2配置里写的pin必须和固件里实际初始化的GPIO一致。我之前就遇到过配置写了PA0但实际编译的固件里触发引脚定义在PB5完全各说各话。解决办法是在源码里搜ext_trigger_pin或者trigger_pin定义把它和JSON里的pin对应起来或者干脆改源码后重新编译。第三步检查触发模式。有些速度传感器输出的是开漏低有效信号静态高电平、来脉冲时拉低这时候上升沿触发当然不生效改成下降沿触发就好了。第四步检查配置是否真的被加载。很多版本DATALOG2如果JSON里有语法错误可能会回退到默认配置。可以在串口日志或配置回显里确认当前生效的trigger配置而不是想当然认为写了就生效。5.2 误触发脉冲信号有毛刺现象触发记录的数据窗口里有大量记录是在没有速度脉冲时开始的或者一段数据里出现多个触发点。这通常是信号质量问题。工业现场的电机启停、变频器PWM都可能感生出毛刺。解决方向分硬件和软件两层。硬件上在触发引脚和地之间并联一个100nF电容或者用RC低通滤波把高频毛刺滤掉。如果信号来自长线缆使用光耦隔离和屏蔽双绞线是最彻底的方案。软件上DATALOG2能配置中断触发模式但未必有完善的消抖逻辑。如果你确认信号源有轻微抖动最简单的办法是在外部触发器前端加一个单稳态电路或者用MCU内部定时器做软件消抖——但后者需要改固件工程量稍大。有时脉冲宽度太窄也会导致问题。MCU的中断引脚通常要求脉冲宽度大于一定时间才能被可靠识别速度传感器在低速时脉冲很宽但某些编码器Z相脉冲只有几百纳秒到几微秒就需要先用硬件展宽脉冲。我在实测中遇到过200ns左右的编码器Z相信号直接进GPIO完全不触发最后用一片74HC123单稳态触发器展宽到10微秒才解决。5.3 记录过程中文件异常或数据丢失现象SD卡里生成了文件但文件大小为0或者数据断断续续、中间缺了一大段。首先检查SD卡本身。DATALOG2对SD卡兼容性有要求UHS-I、Class10的基本都能用但个别低质量卡在高速写入时会出现丢数据。实测中机械振动采样率开到6.667kHz三轴加速度持续写入约150kB/s一张普通Class10卡完全够用但如果同时开启多个传感器并提高采样率写入压力会成倍上升尽量选大厂可靠型号。其次检查文件系统。FAT32格式支持的最大单文件是4GB如果配置里允许连续记录超过4GB固件需要自动分卷。外部触发方案下通常每段数据都不大但如果忘记关闭“连续记录”功能文件可能会一直写下去直到异常。最后检查写入中断。SD卡写入过程中如果突然掉电文件系统可能损坏导致整个文件无法读取。触发采集的现场往往伴随启停机操作供电波动风险更高建议给STWIN.box加一个小的UPS电源模块或大电容储能确保触发后完整写完数据窗口再掉电。5.4 常见问题速查表现象可能原因排查方向解决方案完全无触发信号没进对引脚示波器测GPIO电平对照原理图重新接线完全无触发配置与实际引脚不一致看固件源码中GPIO定义修改配置或源码重新编译完全无触发触发电平极性与配置相反检查传感器输出逻辑改成下降沿触发一直误触发信号毛刺/抖动示波器捕捉毛刺加RC滤波或光耦隔离触发一次后再无响应配置未允许重复触发查trigger action字段改成多次触发模式文件大小为0SD卡不兼容或未正确初始化查看启动日志换Class10/UHS-I卡文件数据断裂写入压力过大/掉电监测文件增长曲线降低总数据率加供电储能6. 调参与扩展让触发采集更贴合实际分析触发功能跑通只是第一步真正决定数据价值的是触发窗口怎么选、后续分析怎么衔接。这节给一些参数设计思路和扩展方向。6.1 触发窗口长度与采样率的匹配触发后记录多长数据取决于你要分析的频率范围和转速。以一台3600rpm60Hz的电机为例如果做常规FFT振动分析想要分辨1Hz以下的低频成分至少需要记录1秒以上的数据。而如果你关心的是轴承故障频率的高频振动比如10kHz以上采样率至少要20kHz以上此时数据量会暴涨。一个简单公式一段分析窗口的时间T对应频率分辨率Δf关系是Δf1/T。要区分1Hz的频率间隔T至少1秒要区分0.1HzT至少10秒。所以不要贪心“录得越长越好”过长的窗口会让低频的转速漂移模糊频谱对数据分析反而是负担。在外部触发场景下我更推荐“选择整数转”的方式把窗口设置成电机每转脉冲的整数倍。比如每转一个脉冲记录10个窗口对应10转的振动数据。这样后续做等角度重采样、阶次分析时每个数据段的转速信息是明确的。6.2 把触发信号当作一个通道记录的价值我再强调一次无论如何都建议把外部触发信号作为aux_data里的一个通道记录下来而不仅仅用来触发记录。理由有三个。第一排查问题时有据可查。数据文件里如果有trigger_signal通道你可以直接看到触发发生的确切时间和脉冲宽度不用靠猜。第二为阶次分析提供转速参考。阶次分析的原理是把时域振动信号按转速脉冲重采样到角度域如果转速脉冲没有和振动数据一起记录后续根本无法做角度对齐。第三可以校验触发时机是否漂移。如果trigger通道的脉冲间隔不均匀说明速度传感器信号本身不稳定或者机械上存在转速波动这在分析结果里会直接体现为频谱模糊或边带异常。6.3 从单点触发到更复杂的应用DATALOG2的外部触发方案解决的是“一个转速信号控制一段采集”的问题。如果你后面想做得更复杂可以基于这个基础延伸。一是多触发源融合。比如除了转速脉冲再加一个振动阈值触发转速脉冲作为窗口参考阈值触发作为事件标记。数据文件里同时记录两路事件分析时就能知道“哪个转速窗口内发生了冲击”。二是边缘AI判断后再触发。STWIN.box上那颗带机器学习核的ISM330DHCX并不是摆设可以先用它做一个简单的情感级别的异常检测比如检测到异常振动后再用外部触发逻辑开启高速采样。这样平时MCU可以低功耗待机异常发生时才有高保真数据下来。三是与云平台对接。DATALOG2先把抖动数据记录到SD卡之后通过蓝牙或USB把数据同步到手机或PC再推送到云端做长期趋势分析。现场采集、边缘预处理、云端分析三层各司其职是很实用的工业监测架构。最后再分享两个我在实测中得到的经验第一个经验是关于“验证触发时刻”的耐心问题。调试阶段最容易犯的错是信号发生器脉冲一接上就去检查数据发现没触发就立刻改配置。其实一次触发失败的可能原因很多我建议每次只改一个变量先确认硬件信号确实到了引脚示波器再确认配置真的被加载串口日志最后才怀疑触发模式问题。有一次我排查了一整天最后发现只是信号发生器输出设成了高阻模式波形压根没送到板子上。第二个经验与数据命名相关。DATALOG2生成的连续文件通常按序号命名如果每段窗口都单独存成一个文件现场录一天下来会有几百个文件。强烈建议在数据落盘后立即根据触发时刻重命名文件或者用采集软件维护一个“触发事件日志表”把每个文件的转速、时间、电机状态等元数据记下来。否则两周之后你对着几百个文件根本不知道哪一段对应哪一次启机。这套“STWIN.box DATALOG2 外部速度传感器触发”的方案是我在实际做旋转机械监测项目时逐步调通的整个过程没有绕过什么捷径就是一遍遍排查、一次次调整配置。希望这篇记录能让你拿到板子后少走几步弯路尽快把触发采集跑起来。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进