💡 电路名称
二极管门电路(Diode AND/OR Logic)
昨天我们讲了续流二极管——当线圈电流试图"逆流"时,D1 给它一条安全的回路,把尖峰钳位到 VCC+V_d。今天换个方向:用几只普通二极管 + 一两个电阻,搭建出最基本的数字逻辑门——OR 门和 AND 门。简单到不能再简单,但这就是上世纪五六十年代计算机里"二极管逻辑(Diode Logic, DL)"的核心思路 💻。
🗺️ 电路图
6 个元件构成两个完整的数字门(4 个 1N4148 二极管 + 2 个 10kΩ 电阻,不含电源和输入信号):

左侧:二极管或门 OR——任一输入为高电平 → 输出 ≈ 4.3V(高)。
右侧:二极管与门 AND——任一输入为低电平 → 输出 ≈ 0.7V(低);两输入都高 → 输出 ≈ 5V(高)。
关键节点连接:
|
|
|
|
|---|---|---|
| A1 / B1 / A2 / B2
|
|
|
| D1 / D2
|
|
|
| D3 / D4
|
|
|
| R1
|
|
|
| R2
|
|
|
| Y1 / Y2
|
|
|
💡 关于输入/输出标签:原理图中 A1/B1/A2/B2 用全局标签表示输入(箭头朝内指向电路),Y1/Y2 表示输出(箭头朝外)。同名标签连接的 Conn_01x01 连接器和 PWR_FLAG 集中放在原理图左下角/右下角,不干扰主电路阅读。
二极管方向的灵魂——OR 和 AND 的极性是镜像的:

- OR 门
:输入 → Anode(正极) → Cathode(负极) → Y_OR → R1 → GND。任一输入为高时,对应 D 导通,Y 被拉高。 - AND 门
:+5V → R2 → Y_AND → Anode(正极) → Cathode(负极) → 输入。任一输入为低时,对应 D 导通,Y 被拉低(Y = Cathode + V_f = 0 + 0.7 = 0.7V)。
🔬 LTspice 真实仿真
📐 LTspice 仿真电路原理图

仿真电路采用左右双路对称布局,wire 水平/垂直直接连接,标签用 FLAG(A_OR/B_OR/Y_OR/A_AND/B_AND/Y_AND),便于人类阅读:
- 左侧 OR 电路
:V1(5V PULSE 1kHz) → D1.A → D1.K → Y_OR;V2(5V PULSE 500Hz) → D2.A → D2.K → Y_OR;R1 把 Y_OR 下拉到 GND - 右侧 AND 电路
:V3(5V PULSE 1kHz) → D3.K → D3.A → Y_AND;V4(5V PULSE 500Hz) → D4.K → D4.A → Y_AND;R2 把 Y_AND 上拉到 V5+ - 4 种组合遍历
:V1 (1kHz, 50% 占空) + V2 (500Hz, 50% 占空) 在 2ms 仿真时间内遍历 00→01→10→11
📊 LTspice 真实仿真波形

(a) 输入 A (V1=V3, 1kHz 方波)——V1 PULSE 0 5 0 1n 1n 0.5m 1m,周期 1ms,5V [0, 0.5m)、0V [0.5m, 1m)、5V [1m, 1.5m)、0V [1.5m, 2m)
(b) 输入 B (V2=V4, 500Hz 方波)——V2 PULSE 0 5 0 1n 1n 1m 2m,周期 2ms,5V [0, 1m)、0V [1m, 2m)
(c) 或门输出 Y_OR (4.3V 高 / 0V 低)——只要任一输入为 5V,Y_OR ≈ 5V − V_f = 4.3V;只有两输入都 0V 时,Y_OR = 0V(R1 下拉)
-
[0, 1.5m):V1 OR V2 至少有一个为 5V → Y_OR ≈ 4.3V ✓ -
[1.5m, 2m):V1=V2=0V → Y_OR = 0V ✓
(d) 与门输出 Y_AND (5V 高 / 0.7V 低)——只有两输入都 5V 时,Y_AND ≈ 5V;任一输入为 0V 时,对应 D 导通把 Y_AND 拉低到 Cathode + V_f = 0.7V
-
[0, 0.5m):V3=V4=5V → Y_AND = 5V ✓(AND=1) -
[0.5m, 1.5m):V3 或 V4 为 0V → Y_AND ≈ 0.7V ✓(AND=0) -
[1.5m, 2m):V3=V4=0V → Y_AND ≈ 0.5V ✓(AND=0)
(e) ⚠️ 1ms 处出现竞争冒险毛刺(race hazard)——放大波形可见:t=1ms 时 Y_AND 闪出一个 ~1ns 宽、冲到 ~4.96V 的尖峰,随后立即回落到 0.55V。
- t=1ms 是 A 上升沿(0→5V)与 B 下降沿(5→0V)同时发生
的时刻 -
理想 AND 门输出应保持 0((0,1)→(1,0) 两种组合 AND 都=0),实际却出现了错误尖峰 - 机理
:A 上升 → D3 快速截止(旧下拉路径被切断);B 下降 → D4 需要时间导通(新下拉路径还没建立)。在这"旧钳位已断、新钳位未通"的窗口里,Y_AND 失去下拉 → 被 R2 上拉到 ~5V → 毛刺 -
这正是数字逻辑中的静态 0 型冒险(static-0 hazard):输出"本应保持 0 却闪出 1" - 对照验证
:0.5ms 处只有 A 下降(B 保持 5V),Y_AND 从 5V 平滑衰减到 0.55V、无毛刺——单输入变化没有竞争,反证 1ms 毛刺来自双输入同时反向翻转
NumPy 数学模型 vs LTspice 实测对照
|
|
|
|
|
|
|---|---|---|---|---|
| 00
|
|
|
|
|
| 01
|
|
|
|
|
| 10
|
|
|
|
|
| 11
|
|
|
|
|


⚠️ 二极管逻辑的两大固有弱点:
① 电平劣化(level degradation):OR 门高电平是 VCC−V_f=4.3V 而不是 5V;AND 门低电平是 V_f=0.7V 而不是 0V。每个二极管消耗 ~0.7V 的电压余量,多级串联会累积 V_f,最终无法驱动下一级。
② 竞争冒险毛刺(race hazard):多个输入同时反向翻转时(如 AND 门 (0,1)→(1,0)),输出会闪出 ~ns 级的错误尖峰(见上图 t=1ms 的毛刺)。因为二极管"旧钳位断开"比"新钳位建立"更快,输出瞬间悬空被上拉电阻拉高。
这两点共同决定了二极管逻辑只适合低速、单级场景,也是它后来被 TTL/CMOS 取代的主要原因。
🔲 核心元器件
|
|
|
|
|
|---|---|---|---|
| 二极管 D1/D2/D3/D4 |
|
|
核心元件
|
| 下拉电阻 R1 |
|
|
核心元件
|
| 上拉电阻 R2 |
|
|
核心元件
|
| 输入源 V1/V3 |
|
|
|
| 输入源 V2/V4 |
|
|
|
| 电源 V5 |
|
|
|
💡 选型提示:
- 二极管速度选型
:
1N4148 即可(开关时间 ~4ns,远快于数字信号 ns 级)—— 不要选 1N4007(50ns 反向恢复,对快速数字信号不够快) 高速场景可用 BAT54(SMD,肖特基 V_f≈0.3V,损耗更小) - R1/R2 阻值选择
:
- 太大(>100kΩ)
:D 导通电流太小(<50µA),V_f 升高(<0.5V)→ 输出摆幅降低;同时输出 RC 时间常数大 → 开关速度变慢 - 太小(<1kΩ)
:D 导通电流过大(>4mA),功耗增加;前级驱动负担加重 - 10kΩ 是经典折中
:I ≈ 0.43mA,V_f 标准 ~0.7V,开关速度 ~µs 级
📖 通俗工作原理
🎙️ 把二极管门电路想象成"单向水闸 + 蓄水池"
想象一下 OR 门是一个单向水闸 + 排水池:
- 输入 A、B
是上游两路水源(5V = 有水,0V = 干涸) - D1、D2
就像两个单向水阀——只允许水从输入端流向 Y_OR(Anode→Cathode 方向) - R1
是通往排水池的排水管,把 Y_OR 的水排到 GND - Y_OR
是水位高低
工作场景:
- A=1, B=1
:两路都有水,两水阀都开 → 水位涨到 ~4.3V(每个水阀消耗 0.7V)→ Y_OR=高 ✓ - A=0, B=1
:A 阀关,B 阀开 → 水通过 B 阀流到 Y_OR,水位 4.3V → Y_OR=高 ✓ - A=1, B=0
:类似,B 阀关 → Y_OR=高 ✓ - A=0, B=0
:两阀都关 → Y_OR 的水通过 R1 排光 → Y_OR=低 ✓
AND 门反过来——是反向水阀 + 顶部水塔:
- VCC + R2
是顶部水塔(5V 蓄水池) - D3、D4
像反向水阀——只允许水从 Y_AND 流向输入端(Cathode→Anode 方向反向,电流 Anode→Cathode,即从 Y 流到输入) - 输入 A、B
是下游两路排水口(0V = 下游干涸能排水,5V = 下游满水堵住)
工作场景:
- A=1, B=1
:两排水口都满水(5V),反向水阀都关(无法向下游排水)→ Y_AND 保持 5V(被 R2 维持)→ Y_AND=高 ✓ - A=0, B=1
:A 路下游干涸(0V),反向水阀 D3 开 → Y_AND 的水通过 D3 排到 A 路 → Y_AND 被拉到 A+V_f = 0.7V → Y_AND=低 ✓ - A=1, B=0
:B 路反向水阀 D4 开 → Y_AND = 0.7V → Y_AND=低 ✓ - A=0, B=0
:两阀都开 → 两路都拉 Y_AND → Y_AND ≈ 0.5V → Y_AND=低 ✓
详细分步(以 OR 门 A=0, B=1 为例)

- 电流路径
:VCC(B) → D2(A→K) → Y_OR → R1 → GND - Y_OR = V(B) − V_f(D2) = 5 − 0.7 = 4.3V
- I = (5 − 0.7) / 10k = 0.43mA ✓
💡 图例:实线粗箭头 = 导通电流路径;虚线 = 截止(无电流)。D1 因 A=0V(Anode 与 Cathode 等电位)反偏截止,D2 因 B=5V 正偏导通。
为什么 OR 用下拉、AND 用上拉?
直觉解释:

💡 一句话记住:门的"主动电平"由电阻位置决定——下拉电阻的主动电平是 LOW(无电流时输出被拉到 GND);上拉电阻的主动电平是 HIGH(无电流时输出被拉到 VCC)。OR 门要让"任一高→输出高"所以主动拉高 + 被动下拉;AND 门要让"全高才输出高"所以主动维持 + 被动拉低。
🎯 典型应用场景
-
💻 早期计算机逻辑电路(1950-60 年代):IBM 1401、CDC 1604 等大型机使用二极管-电阻逻辑(Diode-Resistor Logic, DRL) - 第一台电子计算机 ENIAC
(1946)就有大量二极管逻辑 - Apollo 导航计算机
(1960s)使用 DRL 实现的二极管逻辑 -
📟 工业控制面板:简单的逻辑判断(按钮 A 或 B 按下 → 启动电机) -
🎵 电子琴合成器:按键组合触发特定音色(多输入 OR/AND 矩阵) -
🔒 报警系统:多个传感器任一触发(OR)→ 报警;所有安全门关闭(AND)→ 启动机器 -
🧮 PLA(可编程逻辑阵列):现代 FPGA/CPLD 的前身,用二极管矩阵实现任意逻辑函数 -
🕹️ 复古游戏机(如 Pong、Space Invaders)使用 DRL 实现碰撞检测 -
📺 早期电视机的频道切换电路
典型应用电路(多输入 OR 报警电路):

任一传感器触发(输出 5V)→ 任一 D 导通 → Y ≈ 4.3V → LED 报警。
🤝 互动环节
❓ 今日小思考
我们今天用 R1 下拉到 GND 实现 OR 门(10kΩ),用 R2 上拉到 +5V 实现 AND 门(10kΩ)。
思考题:
-
如果 R1 改成 1kΩ(小 10 倍),OR 门会有什么变化?考虑:导通电流、V_f 衰减、驱动前级负担、功耗 -
如果 R2 改成 100kΩ(大 10 倍),AND 门又会有什么变化?考虑:截止漏电流、上拉能力、开关速度(用 τ=R·C_para 估算)
💭 提示:
1N4148 在 1mA 下 V_f ≈ 0.65V;在 5mA 下 V_f ≈ 0.75V(V_f 随电流增加) 截止时 1N4148 反向漏电流 < 25nA PCB 上的寄生电容典型 5-10pF 开关时间常数 τ = R · C,τ 越大 → 输出上升/下降越慢
✅ 昨日思考题回顾(Day 14 续流二极管电路)
题目:把续流二极管 D1(1N4007,V_f≈0.7V)替换成 1N4733 稳压管(5.1V 齐纳二极管,正向 V_f≈0.7V,反向击穿 V_z=5.1V)。1. Q1 导通时 D1 是否导通?2. Q1 断开瞬间 V(sw) 钳位到多少伏?3. 会不会击穿 Q1?4. 好处/坏处?
答案:

