触发信号基础: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 脉宽不足怎么办?
如果传感器输出的触发脉冲太窄,有几种补救方法:
- 用单稳态触发器扩展脉宽:比如74HC123,可以把窄脉冲展宽到毫秒级
- 用FPGA做脉宽整形:内部计数器检测到边沿后,输出固定宽度的脉冲
- 软件轮询代替中断:如果脉宽太窄,中断可能漏掉,改用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 本章知识体系
下面这张图把触发信号的核心要素串起来了:
2.6 本章小结
触发信号看着简单,但每个细节都可能让系统翻车。记住几个关键点:
- 电平匹配:TTL和CMOS不能直接混接,噪声容限不同
- 边沿选择:上升沿还是下降沿,要看传感器初始状态
- 脉宽留余量:至少3倍时钟周期,推荐1μs以上
- 信号完整性:短走线、包地、加施密特,别让信号「说谎」