STWIN.box 外部触发接入:振动与转速同步采集指南

发布时间:2026/8/31 21:45:24
STWIN.box 外部触发接入:振动与转速同步采集指南 做旋转机械状态监测的人一定遇到过这种尴尬STWIN.box 在 DATALOG2 固件下已经把加速度、麦克风数据录得漂漂亮亮结果拿数据做阶次分析的时候才发现没有同步记录转速信号所有频域特征都对齐不到转频上。真要临时在板子上补一个转速传感器采集通道又牵扯到接线、配置、固件改动一大堆事。其实 DATALOG2 本身就预留了外部触发信号External Speed Sensor Trigger Signal的接入能力可以利用外部速度传感器的脉冲信号来做采集触发把振动数据和转速事件严格同步起来。这篇博文就围绕这个能力把我从硬件接线、固件配置到数据验证的完整过程讲清楚适合正在用 STWIN.box 做状态监测、需要做振动与转速同步分析的同学参考。1. 为什么DATALOG2需要外部速度传感器触发信号1.1 转速同步在振动监测中的不可替代性先讲一个我在现场经常看到的误区。很多做振动采集的人习惯把加速度传感器往设备上一贴开记录过几个小时拔卡走人。这种采集方式在恒定转速工况下问题不大可一旦遇到变频驱动、启停机过程、负载波动纯粹靠时间等间隔采样的数据就非常难受。比如一台变频风机从 10 Hz 慢慢升到 50 Hz每个转速下的振动特征频率都在变频谱上本来应该清晰的 1 倍频、2 倍频分量全被抹成了一片宽带。这时候你第一反应是去查频谱图却根本分不清是轴承故障还是转速变化造成的频率漂移。解决办法就是引入转速参考。工业上通常用接近开关、光电传感器、编码器输出脉冲信号每转一圈产生一个或几个脉冲。把这路脉冲当成触发源让数据采集系统在脉冲边沿到来时打时间戳、标记事件甚至根据脉冲间隔反向计算瞬时转速。这样后处理时就能把振动信号还原到“角度域”做阶次跟踪、包络分析或者直接按转速段画瀑布图。这里的核心关键词是 External Speed Sensor 和 Trigger Signal外部速度传感器负责把物理转速变成电脉冲Trigger Signal 负责把脉冲边沿变成采集系统能识别的事件。DATALOG2 作为 STWIN.box 上的高带宽数据记录固件默认就是按固定采样率连续记录传感器数据。单独看它功能很完整但放在工业状态监测场景里缺少外部转速同步就是一个明显的短板。所以当我们需要把振动信号和转速信号做联合分析时最务实的做法就是利用 DATALOG2 对外部触发信号的支持把转速脉冲引进来。1.2 DATALOG2固件的设计定位与扩展思路STWIN.box 是一套完整的工业无线节点开发套件板载高精度加速度计、陀螺仪、磁力计、压力传感器、温湿度传感器和数字麦克风主控是低功耗的 STM32U585。它本身可以独立工作也能通过扩展板接外部传感器。DATALOG2 是这套硬件上的经典数据采集固件常见用法是在 SD 卡里放一个配置文件固件启动后读取配置按照配置使能传感器、设定采样率、确定记录时长然后把多路传感器数据打包写到 SD 卡或者通过串口/蓝牙实时上抛。DATALOG2 的扩展点在于它的输入输出能力。STWIN.box 的扩展连接器上有很多 GPIO、I2C、UART 和 ADC 引脚可以被重映射。外部速度传感器的脉冲信号可以接在扩展板的特定输入引脚上固件通过外部中断或者定时器捕获的方式识别脉冲边沿。识别到边沿后固件会在数据流里插入一个触发事件标记同时我们可以在配置里让触发事件承担两种角色一种是“通知型”只是记录一个时间戳另一种是“控制型”触发到来后立即启动或停止一段数据记录。这种思路和示波器的单次触发模式很像。日常采集时循环缓冲区一直在写入一旦检测到触发信号固件就把触发前后的数据保留下来。用这种模式做旋转机械启动过程的振动捕捉非常合适转速传感器给出第一个脉冲系统就知道转轴开始动了马上把后续这段加速过程的振动数据完整存下来。后处理时再根据这一串触发脉冲计算实时转速就能把启停过程的三维频谱说得明明白白。理解了这一层后面的硬件接线和配置逻辑就顺理成章了。2. 硬件连接从速度传感器到STWIN.box2.1 先搞清楚速度传感器的输出类型手上拿到一个速度传感器第一步不是想着怎么接而是确认输出信号是什么类型。常见的有三种NPN 开集输出、推挽输出和差分线路驱动器输出下面按实际使用频率说明。NPN 开集输出在工业接近开关里最常见。传感器内部是一个三极管开关导通时把输出引脚拉到低电平截止时输出引脚悬空。这种输出不能直接接 MCU 引脚必须加一个上拉电阻把悬空状态拉到一个确定的高电平。推挽输出则是有源驱动输出引脚既能灌电流也能拉电流电平由传感器的供电电压决定接线相对省事。差分输出比如 RS-422 或者编码器常用的高速差分抗干扰能力强适合长距离传输和高速脉冲但需要接收端支持差分输入。如果你不确定手上的传感器是什么输出可以用万用表测量。把传感器供电接好用万用表直流电压档测信号引脚和电源负极之间的电压转动设备时电压在 0 V 和供电电压之间跳变大概率是推挽输出电压只在高电平和悬空之间变化那就是开集输出两根信号线之间始终保持互补反相则是差分输出。下表列出了三种类型的典型特征方便你快速判断。输出类型电平特征接线注意典型应用NPN 开集导通为低截止悬空必须加上拉电阻电感式接近开关、光电开关推挽高/低电平均主动驱动可直接接入注意电平范围霍尔传感器、TTL 编码器差分两线互补输出需差分接收端长线传输、高速编码器2.2 触发信号接入STWIN.box扩展板的正确姿势确认传感器输出类型之后再来看 STWIN.box 这边。STWIN.box 本体和扩展板 STWIN-BOX-EXT 之间通过板对板连接器通信扩展板上预留了一些 GPIO 和电源引脚。外部触发信号一般接在扩展板的指定 GPIO 上具体是哪一个引脚以硬件手册的引脚分配表为准。我手上这块板子用的是 PB5 作为外部触发输入配合软件内部上拉NPN 开集输出直接就能用如果你的传感器是推挽输出那么接线更简单信号线和 GND 直接接好就行。NPN 开集传感器接 STWIN.box 时上拉电阻是必须的关键器件。选多大电阻要算一下。MCU 内部上拉一般几十千欧抗干扰能力偏弱尤其现场有变频器时容易误触发。我的习惯是外接一个 10 kΩ 上拉电阻到 3.3 V这样在传感器截止时引脚电平被稳稳拉高传感器导通时灌电流大约是 3.3 V / 10 kΩ 0.33 mA对绝大多数传感器来说完全在承受范围内。如果你觉得 10 kΩ 偏保守可以换成 4.7 kΩ信号边沿会更陡但灌电流会到 0.7 mA需要确认传感器的灌电流能力。长距离布线时建议把 STWIN.box 一侧的信号入口做一级 RC 滤波。我通常会在信号线上串联 1 kΩ 电阻再在引脚和地之间并联一个 100 nF 电容。这个组合会把高频毛刺滤掉一部分代价是信号边沿变缓所以在 DATALOG2 配置里把去抖时间调大一些即可。如果传感器离 STWIN.box 超过 5 米或者环境里有大功率电机最稳妥的方案是加光耦隔离。给传感器供电的电源和 STWIN.box 的电源完全隔离光耦输出侧再接 3.3 V 上拉这样即使传感器端有高压毛刺也不会串进 MCU。2.3 接线时的三个实操提醒第一共地问题比信号电平更隐蔽。传感器和 STWIN.box 必须共地否则触发信号的电平参考点和 MCU 不一致测出来的电压完全是飘的。我最开始调试时传感器单独用一个 24 V 电源供电STWIN.box 用 USB 供电结果触发边沿乱跳查了半天才发现两个电源的负极没有连通。第二接线端子的紧固很重要。工业现场有振动松动的端子会导致信号瞬间断开产生虚假触发边沿。第三先不要直接接真实设备。我的习惯是先用电信号发生器接一个 10 Hz 方波确认触发链路通畅后再接实际转速传感器。这个习惯让我避开了很多“数据文件里全是乱码”的排查场景。3. DATALOG2触发信号配置实操3.1 配置文件长什么样DATALOG2 的数据采集行为基本由配置文件控制。以我使用的版本为例SD 卡里的 JSON 配置文件结构大致如下字段名称在不同版本里可能略有差异但核心参数是一致的{ device_id: STWIN_BOX_DEMO, sample_rate: 12800, acceleration: { enable: true, odr: 12800, range: 16g, axis: [x, y, z] }, external_trigger: { enable: true, pin: PB5, mode: edge, polarity: rising, debounce_us: 100, pre_trigger_samples: 128, post_trigger_samples: 2048 }, recording: { mode: single_trigger, save_path: /data } }这个配置里最核心的是 external_trigger 这一段。enable 设为 true 表示启用外部触发pin 是触发信号接入的引脚名需要和实际硬件连接对应mode 选 edge表示边沿触发模式polarity 设 rising即上升沿触发debounce_us 是去抖时间单位微秒这个值要结合传感器输出脉冲宽度来设pre_trigger_samples 和 post_trigger_samples 分别代表触发前后各保留多少个采样点。recording 里的 mode 设成 single_trigger意思是检测到一次触发就完成一次记录。去抖时间和采样点数量怎么配原则是去抖时间要小于最小脉冲宽度不然会把正常脉冲滤掉。如果转速最高 6000 转/分用每转一个脉冲的传感器脉冲频率就是 100 Hz周期 10 ms。一般接近开关的输出脉冲占空比接近 50%那么脉冲最小高电平时间约 5 ms。把 debounce_us 设在 100 微秒级别既能滤掉毛刺又不会影响正常脉冲识别。pre_trigger_samples 和 post_trigger_samples 则取决于你关心的是触发前那段背景振动还是触发后的瞬态响应。3.2 触发模式、极性与去抖设置DATALOG2 里触发模式通常有边沿触发和电平触发两种。边沿触发关注的是脉冲从低到高或者从高到低的那个瞬间适合转速脉冲这类边沿特征明显的信号电平触发关注的是信号保持在高电平或者低电平的时间适合用在超出转速阈值报警的场景。做振动同步分析边沿触发足够用了因为我们需要像锁存器一样准确捕捉到“转轴到这里”的时刻。极性选择上上升沿触发和下降沿触发取决于传感器静止时的默认电平。NPN 开集输出加上拉后静止时信号线是高电平传感器检测到金属目标时输出低电平脉冲那么触发边沿应该选下降沿。如果是推挽输出传感器检测到目标时输出高电平脉冲就选上升沿。判断方法很简单看信号正常工作时从常态电平跳到另一状态的边沿是哪一种触发极性就选哪一种。去抖设置是容易忽略的细节。有一次我在现场调试传感器脉冲频率本身很低但 DATALOG2 一直误触发看波形才发现是变频器产生的尖峰毛刺叠加在信号线上毛刺宽度只有几十微秒。把 debounce_us 从 0 调到 200 后误触发立即消失。这里要提醒一句去抖时间不是越大越好。如果传感器输出的窄脉冲宽度只有 1 ms去抖时间设到 900 微秒虽然能滤掉大部分噪声但也会让边沿记录的准确性下降触发时刻的误差会变大。3.3 用上位机工具验证配置是否生效配置写进 SD 卡后上电启动时固件会把解析结果打印到串口。我通常用串口工具以 115200 波特率连接 STWIN.box 的调试串口观察启动日志。日志里应该能看到类似 “External trigger enabled on PB5, rising edge, debounce 100 us” 的字段。确认这行日志出现后再用手动短接触发引脚的方式做一个测试。如果配置正确串口日志或者 LED 指示会提示触发事件被识别到。如果你用的是带蓝牙的 STWIN.box 开发套件也可以配合移动端应用查看实时数据流。触发事件通常会在数据流里以一个特殊标记包的形式出现能看到标记包的序号和触发时的时间戳。这一步验证很重要因为它能确认从硬件到配置的整条链路是通的。如果这一步没确认后面录了半天回来才发现触发事件根本没插进数据流那才是真的白忙。4. 实测验证触发信号到底有没有对齐4.1 用信号发生器做一个触发延迟测试配置只看日志还不够我每次都会做一个触发延迟测试把触发信号的准确度量化出来。测试方法是用信号发生器输出一个方波把方波信号同时分两路一路接到 DATALOG2 的外部触发引脚另一路接到扩展板上的一个 ADC 输入通道或者干脆用另一块示波器同时观察。这样我们能对比“触发边沿发生的理论时刻”和“数据流里标记事件被识别的时刻”。具体操作上我设置信号发生器输出 5 Hz 方波高电平 3.3 V低电平 0 V。DATALOG2 配置里的采样率设成 12800 Hz那么一个采样点的间隔约 78 微秒。在记录到的数据文件里找到触发标记包再找到同一时刻 ADC 通道上的电压变化点两者之间的差值就是触发链路的总延迟。实测下来在硬件直接连接、无光耦的情况下触发延迟通常在几百微秒以内加了光耦隔离之后延迟会增加到 2 微秒到 5 微秒左右这个量级对大多数机械振动分析来说完全可接受。值得注意的是一致性问题。如果每次触发延迟都稳定在同一个范围内说明触发链路工作正常如果延迟忽大忽小甚至出现丢触发的情况就要检查是不是边沿太缓、去抖参数不合适、或者信号上有毛刺。为了更直观我习惯用表格记录 10 次触发延迟的测试结果比较平均值和最大偏差。测试序号触发时刻标记序号ADC 通道电压翻转点序号延迟采样点数延迟时间(us)12155421549539024120841204431236086760861646848053080525539051002111002074312从表格里能看出延迟基本稳定在 4 到 6 个采样点之间换算成时间是 312 到 468 微秒。这个波动范围主要来自系统中断响应时间和配置解析时间属于正常现象。如果你测出来延迟有几百毫秒甚至秒级那多半不是触发链路的问题而是配置里用了电平触发模式、等待某个状态稳定后才开始记录导致的需要检查模式设置。4.2 在录到的数据里找到触发时刻DATALOG2 保存的数据文件一般是一行一行的数据包每行包含固定的传感器数据和状态位。触发事件会以独立的事件包形式出现在数据流里事件包里通常带有事件类型和计数器值。用文本编辑器或者脚本工具打开数据文件后搜索事件类型标识比如 “TRIGGER” 或 “EVT”就能定位触发发生的具体位置。我习惯把触发事件所在行的计数器值记为 n然后往前数 pre_trigger_samples 个采样点得到触发前数据的起始位置往后数 post_trigger_samples 个采样点得到结束位置。如果要在 Python 里分析大致流程是这样的import json with open(datalog2_data.jsonl, r) as f: lines f.readlines() trigger_pos None for i, line in enumerate(lines): record json.loads(line) if record.get(event) external_trigger: trigger_pos i break print(trigger at line:, trigger_pos) print(pre trigger data start:, trigger_pos - pre_trigger_samples) print(post trigger data end:, trigger_pos post_trigger_samples)这里的解析代码只做示意具体字段名要以固件输出的格式为准。拿到触发点之后再做振动数据与转速的联合分析就方便了。比如用触发脉冲间隔计算瞬时转速然后把振动数据按角度域重采样就能得到阶次谱。这一步是 DATALOG2 配置外部触发信号的价值落地之处。4.3 说说我在现场测试中的一点经验在我自己的测试项目里我实际是把 STWIN.box 装在一台小型异步电机的驱动端用光电反射式转速传感器在联轴器上贴反光纸传感器输出每转一个脉冲。DATALOG2 配置成上升沿触发pre_trigger 留 128 点post_trigger 留 2048 点采样率 12800 Hz。这样每次电机一转就自动记录下启动初期大约 160 毫秒的振动数据。连续记录几十次启动过程后把所有波形按触发点对齐叠加能看到振动特征高度一致说明触发的重复性非常好。另一个经验是不要只依赖时间戳去对齐数据。DATALOG2 的数据包计数器比时间戳更可靠因为时间戳可能受系统休眠、时钟校准影响而计数器是硬件级别的单调递增序号。在分析时优先用包序号做触发点定位再用时间戳换算绝对时间。这个细节在低速场景下尤其重要因为低速时脉冲间隔长时间戳微小偏差会被放大成明显的相位误差。5. 常见问题与排查技巧实录5.1 触发信号接进去数据却没有动静这是所有人最先遇到的问题。我的排查顺序是先看配置文件里 external_trigger 的 enable 是不是 true再看接线是否牢靠再用万用表测触发引脚有没有电平变化。如果电平有变化但固件没反应就要检查配置里的引脚号、触发极性和外部硬件手册是否一致。有一个很容易踩的坑部分 DATALOG2 固件版本里外部触发功能和某个传感器共用同一个引脚配置该传感器同时使用时引脚功能冲突触发自然就不生效。遇到这种情况检查硬件手册里的引脚复用表换一个未占用的引脚即可。另外如果信号传感器的输出电平是 5 V而 STWIN.box 引脚是 3.3 V 电平建议串一个分压电阻或者用光耦转换不要直接怼上去。5.2 信号乱触发明明没转也在记录这种现象基本可以锁定两个原因电磁干扰或者去抖参数不对。现场有变频器、接触器时长导线会像天线一样把高频噪声带进来。解决手段包括双绞屏蔽线布线、信号线远离动力线、加 100 nF 到 1 uF 的滤波电容、增加去抖时间。如果信号源是 NPN 开集输出上拉电阻太大会导致常态电平抗干扰能力差可以换小一点的上拉电阻。分享一个排查小技巧把触发信号暂时断开并接地如果 DATALOG2 依然频繁触发说明噪声是从电源或者地上串进来的而不是传感器信号上来的如果断开后触发停止那问题就出在传感器或者传感器线缆上。这个“断开测试”能快速缩小排查范围。5.3 时间戳和真实转速对不齐有人做完同步采集后发现振动波形里的触发标记和转速脉冲的物理时刻差了很多。除了前面说的触发链路延迟之外还有一个常见原因DATALOG2 的采样率和转速脉冲频率之间没有整数倍关系。比如采样率 12800 Hz转速脉冲频率 30.5 Hz那么每个脉冲在采样点上的位置会不断漂移造成相位抖动。这时候需要根据多个脉冲时刻做插值计算出每个采样点对应的瞬时角度再进行角度域重采样而不是简单认为每转一圈的采样点数是固定的。如果是做简单的定时起停控制不要求高精度同步那么时间戳就够用了。但如果你是做阶次分析、频谱跟踪这类对相位敏感的工作建议在固件里把转速脉冲同时记录成一个事件流而不是只作为触发控制信号。这样后处理时可以利用所有脉冲的边沿时刻做精确的转速曲线拟合。5.4 问题排查速查表现象可能原因检查方法与对策触发无响应配置引脚错误、接线松动检查 JSON 配置、测量引脚电平变化触发无响应传感器输出类型不匹配确认是否为 NPN 开集输出需要补上拉电阻误触发频繁电磁干扰、去抖不够加屏蔽线、RC 滤波、增大 debounce_us误触发频繁共地不良产生电压漂移确认传感器电源和 STWIN.box 共地触发延迟偏大光耦延迟、固件处理延迟用延迟测试量化必要时去掉光耦触发延迟不稳定引脚内部弱上拉被噪声干扰换用外部强上拉降低线路阻抗时间戳对不齐采样率与脉冲频率非整数倍插值重采样、使用事件流和包计数器最后再分享一个小技巧。我后来在测试时习惯在触发信号上并联一个 LED 指示电路每次触发都能看到物理指示调试时能省很多事。做法很简单触发信号串联一个 1 kΩ 电阻再接 LED 到地信号为高电平时 LED 亮为低电平时熄灭。这样不用开上位机光看指示灯就能判断触发链路是否正常工作。做状态监测同步分析时外部触发信号的接入看似只是多一根线的事但它决定了你在后处理时能不能把振动、声音、转速真正对齐。希望这篇博文能让你在 STWIN.box 上做类似项目时少走弯路。