共计 1394 个字符,预计需要花费 4 分钟才能阅读完成。
信号冲突问题现场还原
最近调试一个键盘扫描电路时,用示波器抓到了这样的诡异波形(图 1)。当同时按下两个按键时,DATA 线上出现幅度不稳定的毛刺,导致 MCU 误判键值。这是因为普通编码器无法处理多输入竞争,而 74LS147 作为优先编码器,其 ”Higher-priority wins” 特性正好能解决这类问题。

芯片选型:74LS147 vs 74HC147
虽然逻辑功能相同,但两种型号的电气特性差异显著:
- 传输延迟 :74LS147 典型值为 15ns,74HC147 在 5V 供电时约 25ns
- 驱动能力 :74LS147 可吸收 8mA 电流,74HC147 在相同电压下仅 4mA
- 电压兼容性 :74HC147 支持 2 -6V 宽电压,74LS147 严格限定 5V±5%
在 5V 系统中需要驱动 TTL 负载时,74LS147 仍是更好选择。但若考虑低功耗设计,建议使用 74HC147。
基础实现:门电路级 SPICE 仿真
用基础逻辑门搭建等效电路(图 2),在 LTSpice 中观察信号传递:
- 创建 9 输入信号源,模拟按键按下
- 用 74 系列逻辑门搭建优先级树
- 添加 10pF 容性负载模拟 PCB 走线效应
- 运行瞬态分析观察输出稳定时间
仿真结果显示(图 3),最坏情况下输出稳定需要 22ns,与 datasheet 标注的 25ns 最大值吻合。
Verilog 行为级建模
module pri_encoder #(parameter WIDTH = 9)(input [WIDTH-1:0] din,
output reg [3:0] dout,
output reg valid
);
always @(*) begin
valid = 1'b0;
dout = 4'b1111; // Default output
// Priority encoding loop
for (int i = WIDTH-1; i >=0; i--) begin
if (din[i]) begin
dout = WIDTH-1 - i;
valid = 1'b1;
break; // Critical: ensure priority
end
end
end
endmodule
配套 testbench 需特别注意这些边界条件:
- 全 0 输入时 valid 应为低
- 最低优先级位单独触发
- 相邻两位同时跳变
- 输入全 1 的极端情况
生产环境陷阱与解决方案
上电竞争冒险
现象:电源爬升期间输出端出现瞬态脉冲
对策:
- 在编码器输出端增加 74LS373 锁存器
- 锁存使能信号由电源监控芯片产生
- RC 延迟电路(10kΩ+0.1μF)保证稳定供电后使能
多级联同步
三级级联时的信号传递方案:
- 每级增加 74LS125 三态缓冲器
- 采用菊花链方式传递使能信号
- 级间插入 74F04 反相器保证时序余量
EMC 设计要点
- 终端匹配电阻计算:
R = √(L/C) 其中 L 为走线电感 (约 300nH/m),C 为分布电容 (约 100pF/m) 典型值取 220Ω 并联 47pF 电容 - 关键信号走线包地处理
- 电源引脚放置 0.1μF+10μF 去耦电容
思考与实践
思考题 :设计支持 8 级中断的控制器,要求:
– 支持中断嵌套
– 可软件屏蔽特定优先级
– 中断向量自动生成
推荐实验 :用 STM32 开发板验证旋转编码器应用:
1. 将编码器 A / B 相接 74LS147 输入
2. 输出端接 GPIO 中断
3. 在中断服务程序中判断转向
4. 添加 20ms 软件去抖动
通过实际测量发现,采用优先编码器后按键响应时间从原来的不稳定值(5-15ms)稳定在 8±0.5ms,系统可靠性显著提升。在后续项目中将尝试用 CPLD 实现带预编码功能的增强型编码器,以进一步降低传输延迟。
正文完
发表至: 未分类
近两天内
