设计 逻辑电路 的 开关元件
这篇文章 的 起因 是 《用 逻辑电路 实现一个 开平方 算法》 https://www.cnblogs.com/KSongKing/p/13385387.html 。
在 《用 逻辑电路 实现一个 开平方 算法》 里 提到了 一些 开关元件, 比如 延时开关, 一次性开关 。
本文 来 设计 实现 这些 开关元件 。
首先, 要 设计一个 最基本 的 开关, 其实 就是一个 继电器, 就是 控制端 有 电 时, 开关导通, 控制端 没 电 时, 开关关闭 。 这样 的 作用 是 用 电 控制 电, 用 信号 控制 信号 。
实际中 的 逻辑电路 , 比如 计算机, 数字设备, 是用 晶体管电路 和 集成电路 实现 的 , 早期 的 也有用 电子管 的, 比如 第一台 计算机 “埃尼阿克” 。
本文 主要 采用 继电器 , 为什么 用 继电器 呢 ? 因为 继电器 简单 和 理想化 。
继电器 的 构造图 :
控制端 正负极 接通 电源 时, 线圈 产生 磁性, 把 弹簧 上 的 铁片 吸引 到 和 输入端 和 输出端 的 铁片 接触, 于是, 输入端 和 输出端 之间 接通, 相当于 是 用 导线 连接, 电流 可以 通过 。
控制端 断开 电源 时, 线圈 的 磁性 消失, 弹簧 的 拉力 把 铁片 拉回 原位, 也就 离开了 输入端 和 输出端 的 铁片, 于是 输入端 和 输出端 之间 断开, 电流 不能 通过 。
控制端 的 正极 负极 其实 没有 区别, 倒过来 倒过去 用 都一样 。 输入端 输出端 也 没有 区别, 倒过来 倒过去 用 都一样 。
继电器 的 示意图 :
在 电路 里 会 使用 这个 示意图 表示 继电器 。
逻辑电路 基本 的 逻辑门 (gate) 有 与门 、或门 、非门 。
把 两个 继电器 串联 起来 就是 与门, 把 两个 继电器 并联 起来 就是 或门 。
非门 的 话, 需要 对 继电器 作一下 改造 :
这个 改造版 里 , 开始时, 弹簧 上 的 铁片 和 输入端 、输出端 接触, 输入端 和 输出端 之间 导通, 电流 可以 通过 。 当 控制端 接通电源 时, 线圈 产生 磁性, 吸引 铁片 离开 输入端 、输出端 , 于是, 输入端 和 输出端 之间断开, 电流 不能 通过 。
这样, 当 控制端 没 电 时, 输入端 输出端 导通, 当 控制端 有 电 时, 输入端 输出端 断开 。
有 电 为 1, 没 电 为 0, 导通 为 1, 断开 为 0, 这样 , 控制端 为 0 时, 输入端 输出端 为 1, 控制端 为 1 时, 输入端 输出端 为 0 。
也就是 ! 1 = 0 , ! 0 = 1 , 这就是 非门 。
其实 非门 也可以用 未经改造 的, 正常 的 继电器 来 构造 :
+ 表示 接 电源 正极, - 表示 接 电源 负极 。
设 电源 电压 为 1 伏, 正极 电位 为 1 伏 , 负极 电位 为 0 伏 , 和 电源断开 的 电位 也是 0 伏 , 1 伏 表示 逻辑 1, 0 伏 表示 逻辑 0 。
当 输入端 输入 1 时, J1 导通, 对 J2 的 控制端 造成 短路, J2 控制端 电压 为 0, J2 断开, 输出端 输出 0 ,
当 输入端 输入 0 时, J1 断开, J2 控制端 有 电压, 可 正常工作, J2 导通, 输出端 输出 1 。
于是, 输入 1, 输出 0, 输入 0, 输出 1 , 也就是 ! 1 = 0 , ! 0 = 1 , 这就是 非门 。
用 三极管 电路 表示 这个 非门 :
接下来 看 一个 重要 的 基本 开关元件, 双稳态开关 。
在 百度百科 词条 “双稳态电路” 里, 说 双稳态电路 是 由 两个 或非门 组成, 大概 是 这样 :
in 1 、in 2 为 输入端, out 1 、out 2 为 输出端, 在 in 2 输入 为 0 的 情况 下, 当 in 1 输入 1 时, 无论 当前 是 什么状态, out 1 会 输出 1, out 2 会 输出 0, 之后 无论 in 1 输入 1 或 0, 都将 保持 这个 状态 。
在 in 1 输入 为 0 的 情况 下, 当 in 2 输入 1 时, 无论 当前 是 什么状态, out 1 会 输出 0, out 2 会 输出 1, 之后 无论 in 2 输入 1 或 0, 都将 保持 这个 状态 。
但是 我记得 小时候 看过的 一些 80 年代 初期 或者 80 年代 以前 的 书 上 讲 的 双稳态电路 是 2 个 三极管 互相 反馈 组成 的 。 嗯 ?
实际上, 确实 可以用 2 个 继电器 或者 三极管 互相反馈 形成 双稳态电路 。
in 1 、in 2 为 输入端, out 1 、out 2 为 输出端, 开始时, J2 导通, out 2 输出 正极电位, 也就是 高电位, 也就是 有电压, 也就是 1 。
此时, J2 导通 对 J1 控制端 造成 短路, J1 控制端 电压 为 0, 无电流 通过, J1 断开, out 1 输出 低电位, 也就是 0 。
当 in 1 输入 1 时, R1 、J2 控制端 串联电路 的 两端 都是 高电位, 电压 为 0, J2 控制端 线圈 无电流 通过, 线圈 无磁性, J2 断开 。
J2 断开, J1 控制端 的 短路 取消, J1 控制端 正常工作, J1 导通, out 1 输出 正极电位, 也就是 1 。
J2 断开, out 2 输出 低电位, 也就是 0 。
之后, 无论 in 1 输入 高电位 还是 低电位, 有电压 还是 无电压, 1 或 0, 都将 保持 out 1 输出 1, out 2 输出 0 的 状态 。
当 in 2 输入 1 时, 上述 状态 将 发生 反转, out 1 输出 0, out 2 输出 1 , 且 之后 无论 in 2 输入 1 或 0, 都将 保持 这个 状态, 原理同上 。
应该指出, in 1 输入 1 时, out 2 输出 0, in 2 输入 1 时, out 1 输出 0, 这个 0 是 低电压, 不是 无电压 。
低电压 是 一个 相对较低 的 电压, 称为 低电平 。 相对 是 和 1 相对, 1 为 高电压, 0 为 低电压, 0 是 比 1 的 电压 相对 低 的 一个 电压 。
为什么 0 是 低电压 而不是 无电压 呢 ?
从 电路 中 可以看到, out 1 连接 了 J2 控制端, out 2 连接 了 J1 控制端, 控制端 有一定 的 电阻 。 假设 此时 J1 断开, J2 导通, out 1 应该 输出 0 。
此时 J1 断开, out 1 不能 和 正极 直接 相连, 不能 直接 输出 正极电位, 但 out 1 和 J2 的 控制端 相连, 电流 从 正极 出发, 通过 J2 控制端 仍然 可以 到达 out 1 , 也就是说, out 1 仍然 可以 输出 一定 的 电位, 如果 J2 控制端 的 电阻 不大, 那么 out 1 输出 的 电位 可能接近 正极电位, 也就是 高电位 。
所以, 还需要 加 一个 R1 来 增加 电压降, 就是 让 电压 经过 J2 控制端 到达 out 1 时 降低 更多, 这样 out 1 输出 的 就是 相对较低 的 电位, 也就是 低电位 。
严格的说, out 1 输出的是 较小 的 电流, 较小 的 功率 。 加上 R1 是 为了 让 out 1 输出 较小 的 电流, 较小 的 功率 。
严格的说, out 1 输出 的 电位 还和 out 1 连接 的 外部电路 (外部元件) 的 电阻 有关, 这需要 和 外部电路 (外部元件) 、整体电路 结合 起来 看, 对 整体电路 进行 分析计算 , 得出 适当 的 参数 。
在 这样 的 电路 设计 中, “1” (高电位) 和 “0” (低电位) 之间 的 电位 的 差值 是 一个 重要参数 。
事实上, out 1 、out 2 和 外部电路 (外部元件) 相连 会 造成 和 外部系统 的 耦合 很大, 基本上, 是 无法 用于 实用 的 。
和 外部系统 的 耦合 很大 是指 双稳态电路 和 外部电路 之间 的 关联程度 很高, 电路参数 受 彼此 影响, 需要 将 双稳态电路 和 外部电路 一起 纳入 评估计算 电路 参数 。
电路参数 指 组成 电路 的 各个 元器件 的 参数, 如 继电器 控制端 的 有效工作电压 、有效电流 、有效功率, 电阻 的 阻值, 等等 。
要 让 这个 双稳态电路 可以 实用, 需要 在 out 1 、out 2 上 再加 两个 继电器 来 与 外部电路 解耦, 如下 :
增加 2 个 继电器 J3 、J4 , 将 原来 的 out 1 、out 2 连接 到 J3 、J4 , 让 J3 、J4 的 输出端 来 作为 out 1 、out 2 ,
这样, 当 J1 导通, 输出 高电压 时, 可以 让 J3 导通, out 1 输出 正极电压, 也就是 1 。
当 J1 断开, R1 向 J3 控制端 输出 低电压 时, J3 的 控制端 线圈 产生 的 磁性 不足以 让 J3 导通, J3 断开, out 1 输出 无电压, 也就是 0 。
J2 和 R1 连接 的 是 J3 的 控制端, 不会 直接 连到 外部电路, J1 和 R2 连接 的 是 J4 的 控制端, 不会 直接 连到 外部电路,
out 1 、 out 2 是 J3 、J4 的 输出端 , J3 、J4 的 输入端 连 的 是 电源正极,
当 J3 导通 时, out 1 直接输出 正极电压, J3 断开 时, out 1 输出 无电压,
当 J4 导通 时, out 2 直接输出 正极电压, J4 断开 时, out 2 输出 无电压 。
这样 就 实现了 和 外部电路 解耦 。 解耦 的 效果 是, 双稳态电路 是 一个 独立 的 元件, 有 独立 、确定 、固定 的 电路参数, 不受 外部电路 的 影响 。 用 软件设计 的 话说, 就是 封装性好, 模块化 。
电路参数 包括 继电器 控制端 的 有效工作电压 、有效电流 、有效功率, 电阻 的 阻值, 这是 内部参数 。
内部参数 决定 了 双稳态电路 的 工作电压, 即 正负极 的 电压, 工作电压 是 外部参数 , 这告诉 外部系统 应该 提供 多大的 电压, 使得 双稳态电路 正常工作 。
out 1 、out 2 输出 多大 电压 表示 1, 多大电压 表示 0, 这也是 外部参数, 从 上面 的 设计图 中 可以知道, 输出 正极电压 是 1, 输出 无电压 是 0 。
到现在, 我们 讨论 了 双稳态电路 的 两种 设计方法, 一种 是 2 个 或非门, 称为 设计 1, 一种 是 两个 继电器 互相反馈, 称为 设计 2 。
设计 1 是 数字电路, 设计 2 是 电气电路 。 如果 用 三极管 实现 设计 2, 就是 电子电路, 也是 模拟电路 。
数字电路 的 设计 简单, 结构清晰 。 模拟电路 的 设计 比较 底层 和 细节, 需要 较多 电路分析 、计算 和 调试 获得 适当 的 参数 。
比如 设计 2 的 双稳态电路, 需要 获得 适当 的 R1 、R2 和 其它 电阻 的 阻值, 以及 继电器 的 控制端 有效工作电压 范围, 以及 继电器 控制端 电阻, 使得 R1 输出 低电压 时, J3 处于 断开 状态 。
具体 的 说, 就是 R3 和 J3 控制端 并联, 再 和 R1 、J2 控制端 串联, 这个电路 的 两端 接到 电源 正负极, 使得 J2 导通, J3 断开 。
这需要 适当 的 参数, 包括 R1 、R3 、继电器 控制端 电阻 的 阻值, 和 继电器 控制端 有效工作电压 。
有效工作电压 分 2 个, 一个 是 导通电压, 一个 是 断开电压, 这 2 个 都是 指 一个 电压 的 范围, 不是 一个 唯一值 。
导通电压 是 继电器 控制端 电压 在 导通电压 范围 内, 继电器 必然 且 稳定 的 导通 。
断开电压 是 继电器 控制端 电压 在 断开电压 范围 内, 继电器 必然 且 稳定 的 断开 。
显然, R1 并不是 越大越好, R1 太大会 让 流过 J2 控制端 的 电流 太小 导致 J2 无法 导通 。
可以 给 J3 加 一个 电阻 R5, 就是 让 J3 控制端 先和 R5 串联, 再 和 R3 并联, 再 和 R1 和 J2 控制端 串联 。
数字电路 可能 使用 的 元器件 会 多一些, 但 模拟电路 好像 也 省不了多少, 比如 为了 和 外部电路 解耦, 又 增加了 J3 、J4 两个 继电器 。
用 三极管电路 表示 设计 2, 也就是 用 两个 三极管 互相反馈 组成 双稳态电路, 如下 :
未完, 后面 的 内容 见 《设计 逻辑电路 的 开关元件 (2)》 https://www.cnblogs.com/KSongKing/p/13454068.html 。