文章目录

脉冲捕捉功能:如何捕捉宽度小于扫描周期的窄脉冲信号

发布于 2026-03-20 21:51:46 · 浏览 2 次 · 评论 0 条

脉冲捕捉功能是工业自动化系统中处理高速数字信号的关键能力,尤其在电机编码器反馈、流量计脉冲输出、安全光幕响应、高速计数等场景中,常需捕获宽度远小于PLC扫描周期(典型值为1–10 ms)的窄脉冲——例如宽度仅几十微秒(μs)甚至几微秒的单次脉冲。若仅依赖常规输入映像区扫描,此类脉冲极大概率被完全遗漏,导致计数丢失、位置偏差、安全响应失效等严重后果。本文提供一套完整、可落地的窄脉冲捕捉实操方案,覆盖硬件选型、信号调理、配置逻辑、验证方法及典型故障排除,所有步骤均可通过文字描述精准执行,无需依赖特定品牌示意图。


一、理解问题本质:为什么普通输入无法捕获窄脉冲

PLC的常规数字输入(DI)工作在“周期性采样”模式下:CPU按固定扫描周期(如5 ms)读取输入模块的当前电平状态,并更新输入映像区。该过程可简化为以下时序模型:

设扫描周期为 $T_s$,脉冲宽度为 $t_w$,脉冲起始时刻相对于扫描起点的偏移为 $\tau$($0 \leq \tau < T_s$)。
脉冲能被可靠捕获的充要条件是:在至少一个扫描周期内,输入端口电平在整个采样窗口内保持有效电平(如高电平)。
由于采样通常在扫描周期初完成(单次快照),实际有效捕获窗口仅为一个无限窄的时间点。因此,可靠捕获概率 $P_{\text{miss}}$ 近似为:

$$ P_{\text{miss}} \approx 1 - \frac{t_w}{T_s} $$

当 $t_w = 20\ \mu s$,$T_s = 5\ \text{ms}$ 时,$P_{\text{miss}} \approx 99.6\%$。即平均每250次脉冲仅1次可能被偶然捕获。

结论:必须绕过周期性扫描机制,采用硬件级边沿触发+锁存方式,将脉冲事件转化为可被程序查询的“已发生”标志。


二、硬件层:选择具备真正脉冲捕捉能力的输入通道

并非所有标称“高速计数”或“脉冲输入”的端口都支持窄脉冲捕捉。关键识别三要素:

  1. 是否内置硬件锁存器(Latch)
    锁存器在检测到指定边沿(上升沿/下降沿)时,立即保存该事件,并维持标志位直至软件清零。这是避免漏脉冲的物理基础。

  2. 是否支持最小脉冲宽度指标(Min Pulse Width)
    查阅模块技术手册,在“Digital Input Specifications”章节查找明确标注的 Min. pulse width 参数。合格值应 ≤ 1 μs(高端模块可达100 ns)。警惕仅标注“最高计数频率”的模块——频率高不等于能捕获窄脉冲(例如 1 MHz 频率对应周期 1 μs,但要求脉冲宽度 ≥ 500 ns 才稳定)。

  3. 是否独立于主扫描周期运行
    真正的捕捉通道使用独立时钟(通常为模块内部高频时钟,如 10–100 MHz),与CPU扫描完全解耦。

✅ 推荐硬件类型(以主流品牌为例):

  • 西门子 S7-1200/1500 的 HF DI 模块(如 6ES7 223-1PL32-0XB0),其通道支持 1 μs 最小脉冲宽度,带硬件中断请求。
  • 罗克韦尔 CompactLogix 的 1769-IF4 或专用高速计数模块 1769-HSC,标称 0.5 μs 最小宽度。
  • 三菱 FX5U 的 FX5-485-BD 通信板附带高速输入,或专用 FX5-ENET 模块的硬件中断引脚,支持 0.1 μs 边沿检测。

❌ 避免使用:

  • 普通 DI 模块(如 S7-1200 标准 6ES7 223-1BH30-0XB0)的所有通道。
  • 未明确标注 Min. pulse width 或仅写 High-speed 而无具体数值的模块。

三、信号调理:确保脉冲满足硬件电气要求

再强的捕捉功能,也依赖干净、达标的输入信号。忽略此步是现场调试失败的最常见原因。

  1. 电平匹配
    确认传感器输出电平与PLC输入通道额定电平一致。常见组合:

    • NPN 型接近开关 → PLC 漏型输入(24 V DC,源型接线)
    • PNP 型光电开关 → PLC 源型输入(24 V DC,漏型接线)
      若不匹配,必须加装电平转换器(如 SITOP PSU8600 隔离模块或分立光耦电路),禁止直接串联电阻“凑合”。
  2. 抗干扰强化
    窄脉冲极易受电磁干扰(EMI)影响,产生误触发。执行以下操作:
    敷设屏蔽双绞线,屏蔽层单端接地(接PLC侧接地端子,传感器端悬空);
    缩短走线长度,高速信号线总长建议 ≤ 5 m;
    在PLC输入端并联滤波电容:对地并联 10 nF 陶瓷电容(仅适用于非安全回路;安全应用须遵循 SIL 认证要求,禁用被动滤波)。

  3. 脉冲整形(必要时)
    若原始脉冲存在振铃、缓慢上升沿(如机械触点抖动、长线反射),需整形:
    选用施密特触发器芯片(如 74HC14),其迟滞特性可消除抖动;
    配置阈值:确保整形后脉冲上升/下降时间 ≤ 50 ns,且宽度收缩不超过原始宽度的10%。


四、配置实操:以西门子 S7-1200 为例的完整设置流程

以下步骤基于 TIA Portal V18 及固件 V4.5+,其他品牌逻辑高度相似,仅参数名称略有差异。

  1. 硬件组态中启用高速输入功能
    在设备视图中,双击 DI 模块 → 切换至“Properties”选项卡 → 展开“General” → 勾选 Enable high-speed counter function → 在 Input assignment 表格中,为欲使用的通道(如 I0.0)点击“…”按钮 → 弹出窗口中选择 Edge detection → 设置 Detection typeRising edge(或 Falling edge,依信号逻辑定)→ 勾选 Latch input signal → 点击“OK”。

  2. 分配硬件中断组织块(OB)
    右键项目树中的“Program blocks”插入新块 → 类型选 Hardware interrupt OB → 名称设为 OB40(标准硬件中断OB编号)→ 点击“OK”。
    此OB将在每次捕获到设定边沿时自动调用,无需主程序轮询。

  3. 在 OB40 中编写捕捉响应逻辑
    打开 OB40,插入以下指令(使用 LAD 或 SCL 均可,此处以 SCL 为例):

// 获取触发通道号(根据硬件配置,此处假设 I0.0 对应通道 0)
IF "HW_IO".DI[0].EdgeDetected THEN
    // 脉冲已捕获,执行业务逻辑
    "PulseCounter" := "PulseCounter" + 1;     // 累加计数器
    "LastPulseTime" := TONR(TIME#0MS);         // 记录时间戳(需配合时钟存储器)

    // 关键:立即清除锁存标志,准备下一次捕获
    "HW_IO".DI[0].ResetLatch := TRUE;
END_IF;
  1. 关键参数确认(不可跳过)
    在“Properties”→“Interrupts”中检查:
    • Interrupt priority 设为 16(高于主循环OB1的默认优先级12);
    • Execution mode 设为 Event-driven
    • Maximum number of events 设为 100(防中断堆积,根据预期最大脉冲密度调整)。

五、验证与测试:三步法确认捕捉可靠性

  1. 静态验证:用函数信号发生器注入标准脉冲

    • 设置发生器输出方波:幅度 24 Vpp,占空比 1%,频率 1 kHz(即脉宽 10 μs);
    • 将输出接入已配置通道;
    • 在 TIA Portal 在线监控中,观察 HW_IO.DI[0].EdgeDetected 位是否每个周期均置位1次(持续10秒以上无丢失);
    • 若丢失,检查接线、电平、屏蔽及模块供电纹波(用示波器测 PLC 24 V 输入端,纹波应 < 100 mVpp)。
  2. 动态验证:模拟真实工况抖动

    • 改用发生器输出随机脉冲序列:脉宽在 1–50 μs 间随机变化,间隔在 1–100 ms 间随机;
    • 运行1分钟,比对发生器理论脉冲数与 PulseCounter 实际值,误差必须为0。
  3. 极限压力测试:满负荷连续捕捉

    • 将发生器频率提升至模块标称最大频率(如 500 kHz),连续运行5分钟;
    • 监控 CPU 负载率(应 < 70%),检查 OB40 执行时间(TIA Portal “Diagnostics”→“Cycle time”中查看,应稳定 ≤ 50 μs);
    • 若出现 OB40 堆积报警(诊断缓冲区提示“Interrupt queue overflow”),需降低中断优先级或优化 OB40 内部代码(删除非必要计算、避免调用复杂函数)。

六、典型故障与排除表

现象 可能原因 解决措施
EdgeDetected 位从不置位 1. 信号电平未达阈值<br>2. 边沿类型配置错误(上升沿 vs 下降沿)<br>3. 硬件中断未使能或优先级过低 1. 用万用表测输入端对地电压,确保有效电平时 ≥ 15 V DC<br>2. 在硬件组态中重新确认 Detection type<br>3. 检查 OB40 是否存在于项目中且未被禁用
计数偶尔丢失(非完全丢失) 1. OB40 执行超时导致后续中断被丢弃<br>2. 外部干扰引起误复位 1. 精简 OB40 代码,移除所有 MOVE 大数组、CALL 复杂 FC 操作<br>2. 加强屏蔽与接地,更换为带共模扼流圈的信号线
捕捉到虚假脉冲(无输入时触发) 1. 输入端悬空未上拉/下拉<br>2. 电源地与信号地未单点连接 1. 在传感器端或 PLC 输入端并联 4.7 kΩ 上拉(源型)或下拉(漏型)电阻<br>2. 使用短而粗的导线,将传感器外壳、屏蔽层、PLC PE 端子连接至同一接地排

七、进阶技巧:实现亚微秒级时间戳与脉宽测量

若需分析脉冲时序(如编码器 Z 相与 A 相时间差),可在 OB40 中嵌入时钟同步:

  1. 启用系统时钟存储器:在 CPU 属性 → “System memory” 中勾选 Enable system memory,地址设为 MB0
  2. 在 OB40 首行读取微秒级时间戳
    "Timestamp_us" := "SYS_CLK".Microsecond;  // 返回 0–999999 的微秒值
  3. 两次捕获间计算差值
    IF "PrevTimestamp" <> 0 THEN
        "PulseInterval_us" := ("Timestamp_us" - "PrevTimestamp" + 1000000) MOD 1000000;
    END_IF;
    "PrevTimestamp" := "Timestamp_us";

    此方法可分辨最小 1 μs 间隔,精度由 CPU 内部时钟决定(S7-1200 为 1 μs)。


启用硬件锁存、配置专用中断、严控信号质量、三步验证闭环——四者缺一不可。任何环节妥协,都将导致窄脉冲捕捉从“功能可用”退化为“概率事件”。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文