脉宽触发:抓住那个异常窄(或宽)的脉冲

大家好,我是老陈。做嵌入式调试这么多年,最头疼的就是那种“偶发性的窄脉冲”。它可能就出现一次,然后系统就挂了。你用普通的上升沿触发?根本抓不住,因为触发条件太宽松了,示波器每次都能找到无数个上升沿。这时候就该脉宽触发上场了。

说白了,脉宽触发就是让你告诉示波器:“我只关心那些宽度在某个范围内的脉冲”。你可以抓一个很窄的毛刺,也可以抓一个异常宽的信号。它的核心逻辑,就是让示波器先认定一个正常的脉宽范围,然后专门挑出那些“不在范围内”的异常。

一句话记住脉宽触发:用时间窗口替代电压阈值,专治各种“忽宽忽窄”的疑难杂症。

4.1 脉宽触发的基本概念

脉宽触发,全称 Pulse Width Trigger。它关注的是信号从跳变后到再次跳变之间的时间长度。比如一个正脉冲,就是上升沿到下降沿之间的时间。负脉冲,就是下降沿到上升沿之间的时间。

你可以设置条件:当这个脉冲宽度 小于某个值、大于某个值、或者在 某个范围内(或之外)就触发。我个人习惯先把正常的脉宽量出来,然后以正常值为中心设置一个“异常窗口”。

触发条件类型 含义 典型应用场景
小于(<) 脉冲宽度 < 设定阈值 捕获毛刺、地弹噪声
大于(>) 脉冲宽度 > 设定阈值 捕获死锁、信号悬空
在范围内 设定最小值 < 脉宽 < 设定最大值 捕获特定协议的脉冲
在范围外 脉宽 < 最小值 或 脉宽 > 最大值 捕获所有异常脉冲

我的小技巧:调脉宽触发时,先别急着设很窄的窗口。先用普通边沿触发把正常波形抓稳,目测一下正常脉宽是多少。然后设一个比正常值宽20%的“范围外触发”——这样既不会漏掉异常,又不会让屏幕被正常波形占满。

4.2 脉宽触发 vs. 边沿触发:区别在哪?

边沿触发看的是电压变化的那一刻。只要你信号的上升斜率够陡,它就会触发。但边沿触发不关心这个脉冲最终持续了多久——也就是它不具备“时间维度”的判别能力。

举个例子:你有一条I²C的SCL线,正常高电平脉宽是1μs,但偶尔会出现一个50ns的窄尖刺。用上升沿触发?示波器会在每个SCL的上升沿都停一次,你翻100屏也找不到那个毛刺。用脉宽触发,设置“脉冲< 100ns”,示波器就只会在那个窄尖刺出现时停下来。

注意:脉宽触发对示波器的采样率有要求。你要抓够窄的脉冲,示波器的实时采样率必须足够高,至少能在这个脉冲宽度内采到几十个点。我曾经用一台100M采样率的示波器去抓5ns的毛刺——根本抓不着,因为一个脉冲里才采了半个点。后来换了1G采样率的,马上看见了。

4.3 脉宽触发的设置步骤

不同品牌示波器的菜单略有不同,但大致流程一样。我拿我常用的Tektronix MDO3000系列为例:

  1. 按 Trigger 键进入触发菜单
  2. 在触发类型中选择 Pulse Width(脉宽)
  3. 选择 极性:正脉冲还是负脉冲
  4. 选择 条件:小于、大于、在范围内、在范围外
  5. 设置 时间阈值:比如 100ns、1μs
  6. 调整 电平:这个电平用来定义脉冲的起始和终止电压点(一般设到幅度的一半)
  7. 按 Run/Stop 开始等待触发

嗯,这里有个容易被忽视的细节:电平设置。电平决定了示波器认为“脉冲开始”和“脉冲结束”的电压。如果电平设得太高或太低,脉宽测量会不准确。我个人习惯把电平设置在信号幅度的 50% 位置。

4.4 真实案例:一个SPI从机意外复位的排查

几年前我做一款传感器模组,SPI通信偶尔会在运行几小时后中断。从机芯片像被复位了一样,但主机中断处理和供电都正常。我花了整整两天用边沿触发反复看CS(片选)和SCK的时序,屁都没发现。

后来我换了个思路:会不会是CS信号上出现了一个异常短的“假片选”?CS正常应该是低电平持续10个SCK周期左右,大概2μs。我设了脉宽触发:“正脉冲 < 500ns”,也就是找那些被意外拉高然后又拉低的短毛刺。

结果你猜怎么着?挂机一晚上,第二天早上看到示波器屏幕上稳稳地抓到了那个毛刺——CS线上出现了一个200ns的正尖刺,刚好在从机检测到一个上升沿后就复位了。根源是主板上一条长走线的反射导致的。从那以后,我排查任何偶发性通信问题时,都会先挂一个脉宽触发。

经验总结:偶发性的时序错误,十有八九都是窄脉冲引起的。用脉宽触发代替边沿触发,能让你把调试效率提高一个数量级。

4.5 脉宽触发与协议分析联动

光把脉冲抓住还不够,你还得知道这个脉冲在协议中代表什么。现代的示波器都可以把触发和解码串联起来——先用脉宽触发抓到异常,然后对触发点前后的波形进行协议解码。

比如上面那个SPI例子,我抓到那个200ns毛刺后,直接开启SPI解码功能,立刻看到在毛刺发生的那一刻,从机把MISO置为了高阻态。这才是真正的“触发联动协议分析”的精髓。

脉宽触发逻辑结构图 输入信号 极性选择(正/负) 脉冲宽度实时测量 触发条件判断 小于?大于?范围内?范围外? 不匹配:继续等待 匹配:触发捕获

4.6 实践中常见坑点

  • 电平设置不准导致脉宽误判 —— 如果你把触发电平设在了信号的直流偏压附近,一个小纹波就可能让示波器误以为脉冲开始了。我曾经吃过这个亏,调了一个小时才发现是触发电平没设对。
  • 采样率不足 —— 脉宽触发依赖于ADC采集到足够多的采样点来判断宽度。如果你的目标脉冲宽度是示波器采样周期的2倍以下,那基本测不准。建议至少保证一个脉冲内有10个采样点。
  • 保持时间较长时误触发 —— 有些示波器在“大于”模式下,如果脉冲一直保持高电平会一直等待,不会触发。这其实是合理的,但如果你在调试一个死锁后的信号,可能会误以为没触发成功。

坑中坑:别把“脉宽触发”和“欠幅触发”搞混了。欠幅触发(Runt Trigger)关注的是幅度未达到逻辑阈值,而脉宽触发关注的是时间宽度。两个经常配合使用,但概念不一样。