触发信号基础:TTL/CMOS电平标准、上升沿/下降沿触发、脉冲宽度要求、信号完整性基础

做过多传感器同步的人都知道,触发信号是整个系统的「心跳」。心跳乱了,后面所有数据都是废的。这一章我们就把触发信号的基础打牢——电平标准、边沿触发、脉宽要求,还有信号完整性那些坑。

2.1 TTL与CMOS电平标准:别让信号「卡在中间」

触发信号的本质,就是让接收端能准确判断「0」还是「1」。但不同器件对「0」和「1」的定义不一样。我见过不少新手直接把3.3V的传感器接到5V的触发口,结果信号一直处在「不确定区」,系统时好时坏。

2.1.1 TTL电平标准

TTL(Transistor-Transistor Logic)是传统5V逻辑。它的阈值很明确:

参数 最小值 最大值 说明
VIH(输入高电平) 2.0V 5.0V 高于2.0V视为逻辑1
VIL(输入低电平) 0V 0.8V 低于0.8V视为逻辑0
VOH(输出高电平) 2.4V 5.0V 输出至少保证2.4V
VOL(输出低电平) 0V 0.4V 输出最多0.4V

关键点:TTL的噪声容限只有0.4V(高电平)和0.4V(低电平)。信号线上稍微有点干扰,就可能误触发。

2.1.2 CMOS电平标准

CMOS(Complementary Metal-Oxide-Semiconductor)现在更常见,尤其是3.3V和1.8V系统。它的阈值是比例式的:

  • VIH:通常为0.7 × VDD(比如3.3V系统就是2.31V)
  • VIL:通常为0.3 × VDD(3.3V系统就是0.99V)
  • 噪声容限更大:约0.4 × VDD,比TTL好很多

我的习惯:混合系统里,我尽量用CMOS电平的器件。噪声容限大,布线压力小。如果必须混接TTL和CMOS,我会加电平转换芯片,比如TXB0104,别指望电阻分压——我吃过亏。

2.2 上升沿与下降沿触发:你选对边沿了吗?

触发信号不是看电平高低,而是看电平变化。这个变化就是边沿。

2.2.1 上升沿触发 vs 下降沿触发

触发方式 检测条件 典型应用场景 注意事项
上升沿触发 信号从低到高跳变 ADC采样启动、数据锁存 信号上升时间要足够快
下降沿触发 信号从高到低跳变 中断请求、复位信号 注意下降沿的毛刺
双沿触发 两个边沿都触发 高速计数器、PWM捕获 脉宽必须对称

我曾经踩过的坑:用下降沿触发做IMU同步,结果传感器在初始化阶段会输出一个低电平毛刺,直接触发采集,导致第一帧数据全是错的。后来改成上升沿触发,加了个100μs的延时滤波,问题解决。

2.2.2 边沿检测的硬件实现

MCU内部怎么检测边沿?其实就是两个寄存器加一个异或门:

// 伪代码:边沿检测逻辑
prev_level = read_pin();  // 读取当前电平
delay(10ns);              // 去抖延时(实际用硬件D触发器)
curr_level = read_pin();  // 再次读取

if (prev_level == 0 && curr_level == 1) {
    // 上升沿触发
    trigger_flag = 1;
} else if (prev_level == 1 && curr_level == 0) {
    // 下降沿触发
    trigger_flag = 1;
}

实际硬件里,MCU的GPIO模块内部有边沿检测电路,你只需要配置寄存器就行。但要注意:边沿检测有最小脉宽要求,太窄的脉冲会被滤掉。

2.3 脉冲宽度要求:太短了,MCU「看不见」

触发信号不是「闪一下」就行。每个MCU或FPGA对触发脉冲的最小宽度都有要求。你想想看,如果脉冲宽度小于器件的采样周期,那这个脉冲就「消失」了。

2.3.1 典型器件的脉宽要求

器件类型 最小脉宽 推荐脉宽 说明
普通MCU(STM32F4) 2个时钟周期 ≥100ns GPIO采样率有限
FPGA(Xilinx 7系列) 1个时钟周期 ≥10ns 内部逻辑更快
外部中断输入 通常≥50ns ≥200ns 含去抖滤波
高速ADC触发 ≥5ns ≥20ns 差分信号更可靠

经验法则:触发脉冲宽度至少是接收端时钟周期的3倍。比如MCU跑72MHz(周期≈14ns),脉冲至少42ns。我一般留余量到100ns以上。

2.3.2 脉宽不足怎么办?

如果传感器输出的触发脉冲太窄,有几种补救方法:

  1. 用单稳态触发器扩展脉宽:比如74HC123,可以把窄脉冲展宽到毫秒级
  2. 用FPGA做脉宽整形:内部计数器检测到边沿后,输出固定宽度的脉冲
  3. 软件轮询代替中断:如果脉宽太窄,中断可能漏掉,改用DMA或定时器捕获

我建议:设计阶段就规定好触发信号的脉宽。我一般要求所有传感器输出触发脉冲≥1μs,这样无论接什么MCU都够用。如果传感器做不到,就加一级脉冲整形电路。

2.4 信号完整性基础:触发信号也会「说谎」

触发信号在理想世界里是完美的方波。但在实际PCB上,它会变形、抖动、甚至产生毛刺。信号完整性(SI)问题,说白了就是信号在传输过程中「失真」了。

2.4.1 常见信号完整性问题

问题类型 表现 主要原因 解决方法
反射 信号过冲/下冲 阻抗不匹配 串联终端电阻(33Ω~50Ω)
串扰 相邻信号线互相干扰 间距过小、平行走线过长 3W规则、加地线隔离
振铃 信号在高低电平间振荡 分布电感和电容谐振 降低驱动强度、加RC阻尼
毛刺 窄脉冲干扰 电源噪声、地弹 去耦电容、施密特触发器

2.4.2 触发信号的PCB布线要点

我个人对触发信号的布线要求很严格:

  • 走线尽量短:触发信号线不超过10cm,超过就加缓冲器
  • 避免直角拐弯:45度或圆弧,减少阻抗突变
  • 包地处理:触发线两侧加地线,间距≥3倍线宽
  • 远离高频时钟:时钟信号是最大的干扰源
  • 加施密特触发器:比如74HC14,能有效消除边沿抖动

我曾经遇到的情况:一个激光雷达的触发信号,在示波器上看完美无缺,但接到MCU上就是偶尔漏触发。查了两天,发现是触发线旁边走了一根SPI时钟线,串扰导致边沿抖动。后来把触发线单独走一层,加地屏蔽,问题消失。

2.5 本章知识体系

下面这张图把触发信号的核心要素串起来了:

触发信号基础知识体系 触发信号基础 电平标准 TTL: Vih≥2.0V, Vil≤0.8V CMOS: Vih≥0.7Vdd, Vil≤0.3Vdd 边沿触发 上升沿:低→高跳变 下降沿:高→低跳变 脉冲宽度 MCU: ≥100ns FPGA: ≥10ns 信号完整性 反射、串扰、振铃、毛刺 解决:终端匹配、包地、施密特

2.6 本章小结

触发信号看着简单,但每个细节都可能让系统翻车。记住几个关键点:

  • 电平匹配:TTL和CMOS不能直接混接,噪声容限不同
  • 边沿选择:上升沿还是下降沿,要看传感器初始状态
  • 脉宽留余量:至少3倍时钟周期,推荐1μs以上
  • 信号完整性:短走线、包地、加施密特,别让信号「说谎」