设计 逻辑电路 的 开关元件 (2)
这篇文章 是 《设计 逻辑电路 的 开关元件》 https://www.cnblogs.com/KSongKing/p/13412340.html 的 续篇 。
先来 设计 延时开关 。
延时开关 是 利用 电容器 充电 时, 电容器 两端 的 电压 逐渐 上升 的 特点 来 实现 的 。
看一下 RC 电路 :
接通电源 后, 电容器 开始 充电, 开始时, 充电电流 最大, 电容器 可以看作是一个 较小 的 电阻, 根据 欧姆定律 分压定理, C 两端 的 电压 较小,
当 C 充电 完成 后, C 相当于 一个 断路, 电阻无穷大, 根据 分压定理, C 两端 的 电压 等于 电源电压 。
R 越大 、C 越大, 充电时间 越长, R 越小 、C 越小, 充电时间 越短 。
在 RC 电路 里 接入 一个 继电器 , 就可以 组成 延时开关 。
设 R = 10 欧, J1 的 控制端 电阻 为 R1, R1 = 10 欧, 电源电压 为 2 伏, J1 控制端 的 工作电压 是 1 伏, 即 当 控制端 电压 为 1 伏 时, J1 导通 。
开关 K 闭合 后, RC 电路 接通电源, C 开始充电, C 充电过程 中, C 可以看作是 一个 电阻 和 J1 控制端 并联, 设 并联电阻 为 R2, 可知 R2 < R1 = R ,
即 J1 控制端 两端 的 电压 小于 1 伏, J1 处于 断开状态 。
当 C 充电 充满 时, C 为 断路, 电阻无穷大, 此时 , 电路 就变成了 R 、R1 的 串联电路, R1 两端 的 电压为 1 伏, 达到 J1 控制端 工作电压, J1 导通 。
J1 导通 就是 延时开关 导通 。 从 K 闭合 到 J1 导通, 中间 会 经历 C 的 充电时间, 这就是 延迟时间 。
当 R 和 R1 的 阻值 确定 时, C 越大, 充电时间 越长, C 越小, 充电时间 越短 。
也可以 把 R 、R1 和 C 一起 纳入 参数 计算, 计算出 符合 要求 的 充电时间 的 R 、R1 、C 。 就是说, 不单 可以 调节 C 的 大小 来 获得 要求 的 充电时间, 也可以 调整 R 、R1 的 阻值 来 调节 充电时间 。
实际上, 这里 R1 和 C 并联, 对 充电时间 的 影响 可能有点 复杂 。
但 实际上, 也不需要 精确计算, 根据 经验 和 一些 调试, 可以获得 适当 的 R 、R1 、C , 满足 要求 的 充电时间 。
用 三极管电路 表示 延时开关 :
在 电路 中, 延时开关 的 示意图 :
输入端 接通 电源正极 后, 延迟一段时间 后, 输出端 输出 1, 也就是 高电位, 也可以说是 正极电压 。
注意, 输入端 接通 电源正极 后 要 一直 接通 电源正极, 延时开关 才能 正常工作 。
再来看 脉冲延时开关, 《设计 逻辑电路 的 开关元件》 https://www.cnblogs.com/KSongKing/p/13412340.html 里 介绍 了 双稳态开关,
双稳态开关 的 示意图 :
因为 一般 只用得到 一个 输出端, 所以 只 画出 out 1 。
延时脉冲开关 的 电路图 :
输入端 输入 一个 1 脉冲 时, 双 1 的 out 1 变为 1 , 触发 延 1, 延 1 开始 充电, 到 延迟时间 后, 延 1 输出 1, 输出端 输出 1, 双 2 的 out 1 变为 1, 触发 延 2, 延 2 开始 充电, 到 延迟时间 后, 延 2 输出 1, 双 1 、双2 的 out 1 都 变为 0, 本次工作过程 结束 。
在 本次工作过程 中, 输入端 输入 1 脉冲 后, 经过 延 1 的 延迟时间, 输出端 输出 1, 从此时 又 经过 延 2 的 延迟时间, 输出端 输出 0, 双 1 、双 2 的 out 1 变为 0, 延 1 、延 2 放电, 放电 到 一定程度 后 断开, 断开后 仍然 放 没放完 的 电, 放电完成 后 整个电路 恢复 为 初始状态 。
在 本次工作过程 中, 输出端 输出了 一个 1 脉冲, 脉冲宽度 是 延 2 的 充电时间, 也就是 延 2 的 延迟时间 。
其实 这个 设计 是 存在问题 的, 延 2 输出 1 是 双 2 out 1 = 1 支持 的, 若 双 2 out 1 = 0, 则 延 2 输出 0, 而 延 2 输出 1 使 双 2 out 1 变为 0, 双 2 out 1 变为 0 则 延 2 输出 0, 这就 形成了一个 循环依赖, 这可能会导致 不稳定 的 问题 。
总的来说, 这是一种 直接反馈, 这种 直接反馈 可能 导致 不稳定 , 或者说 预期外 的 结果 。
但 这 似乎 又和 实际 的 元件 和 电路 的 品质表现 有关, 对于 理想 的 元件 和 电路, 这样 的 设计 似乎 没问题 。
理想 的 元件 和 电路, 对 信号 的 响应 是 即时 的, 大概 可以说是 只需要 “很短的时间”, 且 各 元件 对 响应 保证 完成 和 保证 按 顺序完成, 这样就不存在问题 。
实际中, 延 2 输出 1, 使得 双 2 out 1 变为 0, 需要 确保一小段时间, 在这段时间内, 即使 双 2 out 1 变为 0, 但 延 2 仍然可以 输出 1, 确保 双 2 out 1 变为 0, 这段时间后, 延 2 才 输出 0 。
如果 这个 问题 存在, 要怎么 改进设计 ? 留给大家思考, 我懒得画了, 哈 。
我们 假设 这个 问题 不存在, 接着分析 。
电容器 的 充电放电 是一个 挺麻烦 的 事情, 以 延 1 为例, 电容器 充电 充满, 则 延 1 接通 。 双 1 输出 0 时, 相当于 延 1 和 电源断开, 电容器 放电, 而 放电 必须 在 下一次 充电 之前 完成 , 也就是 必须 在 延时开关 下一次 被 触发 前 完成 。
最快的情况, 本次操作 后 执行 下一次 操作, 下一次操作 完成后 又 返回 调用 本次操作, 这类似于 程序 里 的 循环 和 goto 。
这就要求 本次操作 的 放电时间 要 小于 下一次操作 的 充电时间 - 对 下一次操作 输出 1 的 时间 (1 脉冲 的 脉冲宽度) , 且 越小越好 。
如果 本次操作 的 时间很长, 就 意味 着 本次操作 的 充电时间 很长, 如果 下一次操作 的 时间很短, 就 意味着 下一次 操作 的 充电时间 很短, 这要求 本次 操作 的 放电时间 更短,
于是, 这就要求 本次操作 的 充电时间 很长 而 放电时间 很短, 这在 技术 上 做到 比较 有 难度 。
因为 这要 权衡 充电电阻 和 放电电阻, 从 上文 电路图 可以看到, 充电电阻 是 R, 放电电阻 是 继电器控制端 线圈电阻 。
对于 NPN 型 三极管电路, 放电电阻 是 基极电阻 + 基极 和 发射极 之间 的 电阻 + 发射极电阻 。
基极电阻 是 连在 基极 上 的 电阻, 发射极电阻 是 连在 发射极 上 的 电阻,
基极 和 发射极 之间 的 电阻 = 三极管内部 基区电阻 + 发射区电阻 + 基区 和 发射区 之间 PN 结 的 电阻
当然, 事实上, 还有一部分 放电电流 是 通过 充电电阻 R, 流到 集电极, 又流到 发射极, 又通过 发射极电阻 来到 电容器 负端 。
所以, 要 权衡设计 这些电阻, 而 发射极电阻 还关系 到 输出电压, 这跟 连在 发射极 上 的 外部电路 的 电阻(阻抗) 又有关系 。 这是不是 “输出阻抗” 问题 ?
电容器放电 刚开始 的 一段时间 内, 延 1 可能 仍然 是 导通 的, 这段 时间 要不要 算到 延时开关 的 导通时间 里, 也就是 输出 的 1 脉冲 的 脉冲宽度 里 ?
而 延 1 的 输出端 一方面 作为 延时脉冲开关 的 输出端, 一边 和 双 2 的 in 1 相连, 双 2 的 in 1 在 out 1 为 0 时, in 1 会输出 一定 的 低电压, 这会 通过 输出端 和 外部电路 产生 耦合, 要不要 在 延 1 和 输出端 之间 加一个 继电器 或者 三极管开关 解耦 ?
又或是 在 延 1 和 双 2 之间 加 一个 继电器 或者 三极管开关 解耦 ?
或者 把 输出端 设 在 双 2 的 out 1, 以 双 2 的 out 1 作为 延时脉冲开关 的 输出端, 但 这样 延 2 的 输入端 会 和 外部电路 产生 耦合, 延 2 放电 的 时候, 放电电流 会 流向 外部电路 。
这似乎 引出 了 “输入阻抗” 和 “输出阻抗” 的 问题, 两个 元件 要 连在一起用, 输入阻抗 和 输出阻抗 要 匹配, 或者说 符合 彼此 给出 的 规格 , 大概 就是 输入阻抗 和 输出阻抗 问题 吧 。
规格 是指 阻抗 的 范围 , 两个元件 要 连在一起用, 自己 的 输出端阻抗 要在 对方 给出 的 输入阻抗 范围 内 。 以及, 对方 的 输入端阻抗 要 在 自己 给出 的 输出阻抗 范围 内 。
耦合 是 普遍存在 的, 但, 通过 制定 统一 的 输入输出 接口, 可以进行 管理 和 调节 。
输入输出 接口 可以 减小 耦合, 统一 输入输出接口 可以 对 输入输出 的 耦合 统一 计算, 可以计算 很多 元件 连在 一起用 时 的 耦合 积累, 可以计算得到 并联 的 最大情况 的 耦合 和 串联 的 最大情况 的 耦合 , 并 将 它们 控制在 一个 比较小 的 范围内, 在 这个 范围 内, 耦合 对 电路 的 影响 不大, 电路 可以 正常工作 。
通过 对 电路参数 的 设计, 以及 晶体管 的 技术品质 的 提升, 可以 在 元件 数量很多 时, 耦合 的 累积量 仍然 很小, 不会 超过某个 范围, 就像 数学上 的 极限 。
这是 一种 比较 理想 的 情况 。
晶体管 的 技术品质, 比如 开关特性, 开时, 电阻很小, 关时, 电阻很大, 开关 的 反差 越大, 则 电路 的 误差耦合 越小, 电路越稳定, 电路 的 规模 可以 做的 越大 。 电路规模 指 元件数量 。 比如 大规模集成电路, 超大规模集成电路 。
误差耦合 就是 上面 说的 不需要 但是 又存在 的 耦合 , 这些 耦合 会 造成 电路 的 误差 , 误差 在 一定范围内, 电路 可以 正常运行, 表达 预期 的 逻辑, 误差 积累 超过 一定范围, 电路 会 出错, 表达出 错误逻辑, 比如 开 变成 关, 关 变成 开, 或者, 该开不开, 该关不关 。
数字电路 的 误差耦合 可以 分为 2 大类 :
1 基本开关电路 的 误差耦合
2 特定电路 的 误差耦合
先说说 基本开关电路 的 误差耦合, 理论上, 继电器, 是 一个 理想 的 开关元件, 可以说 不存在 误差耦合 。 因为 继电器 的 控制端 和 输入输出端 是 独立 的 2 条 线路 , 所以, 继电器 没有 基本开关电路 的 误差耦合 。
三极管 的 基极 、发射极 、集电极 共用 一条 线路, 相当于 控制端 和 输入输出端 共用 一条 线路, 所以, 三极管开关电路 存在 基本开关电路 的 误差耦合 。
特定电路 的 误差耦合 比如 上文说到的 双稳态电路 的 in1 和 延时脉冲开关 的 输出端 直接连接 时, 可能 通过 延时脉冲开关 的 输出端 向 外部电路 输出 低电压 。 又比如 上文说到的 延 2 的 输入端 和 延时脉冲开关 的 输出端 相连 时, 可能 通过 延时脉冲开关 的 输出端 向 外部电路 输出 放电电流 。
假设 本次操作 和 下一次操作 的 延时脉冲开关 的 延迟时间 一样, 下一次操作 完成后 又返回执行 本次操作, 那么, 简单的, 理想的, 这两个操作 的 延时脉冲开关 交替 输出 的 脉冲 可以用 一个 方波 来 表示 :
简单的, 理想的, 延 1 的 充电时间 可以认为 是 方波 的 一个周期, 放电时间 应在 0 半周 以内, 且 越小越好 。 上文说了, 技术上, 要让 放电时间 远小于 充电时间 实现起来 可能 比较 困难, 在这里, 因为 充电时间 = 一个周期 = 1 半周 + 0 半周 = 1 半周 + 最大放电时间, 可以 让 0 半周 比 1 半周 长 比较多, 这样, 充电时间 仍然 大于 放电时间, 但是 放电时间 的 范围 变大 了, 或者说, 0 半周 比 1 半周 越长, 最大放电时间 越接近 充电时间, 技术上 比较容易 实现 。
对于 延 2, 充电时间 是 1 半周, 放电时间 是 这个周期 的 0 半周 + 下个周期 , 所以, 延 2 允许 的 放电时间 远大于 充电时间, 这个 技术 上 容易实现 。
注意, 是 允许 的 放电时间 远大于 充电时间, 允许 的 放电时间 最大 可以达到 这个周期 的 0 半周 + 下个周期 这么长, 但不是说 要 做到 这么长, 事实上, 应该 比 这个 小, 越小越好 。
上面说的 这些 问题, 早期 的 电子计算机 工程师 应该都 碰到过, 或者说, 经历过 。
再来 看 一次性开关, 这里会用到 开关元件, 开关元件 的 示意图 :
控制端 是 1 时, 输入端输出端 导通, 控制端 是 0 时, 输入端输出端 断开 。
开关元件 可以是一个 继电器, 也可以是 三极管开关电路, 等等 。
三极管开关 电路图 :
一次性开关 电路图 :
控制端 输入 1 脉冲, 双 1 的 out 1 变成 1, 使 开关 1 导通, 之后, 输入端 输入 1 就可以 通过 开关 1, 使 双 2 的 out 1 变成 1, 使 开关 2 导通,
之后, 当 输入端 的 1 结束后, 就变成了 0, 0 使 非门 输出 1, 通过 开关 2 输出 到 双 1 的 in 2, 使 双 1 out 1 变成 0, 开关 1 断开 。
开关 1 断开 后, 输入端 无论 输入什么, 输出端 都是 0, 这就是 一次性开关 的 效果 : 当 控制端 输入 1 脉冲 后, 一次性开关 开始工作, 输入端 和 输出端 导通, 当 输入端 输入 1 脉冲 时, 输出端 输出 1 脉冲, 1 脉冲 结束 后, 一次性开关 停止工作, 输入端 无论输入什么, 输出端 都是 0 。
还有, 当 控制端 输入 1 时, 双 1 out 1 会 输出 1 到 双 2 的 in 2, 使 双 2 out 1 变成 0, 开关 2 断开 。 这样 就 切断了 非门 和 双 1 in 2 的 通路, 不然, 非门 输出 的 1 会 阻止 双 1 out 1 变成 1 。 在 上一次 使用后, 双 2 out 1 一直 是 1, 开关 2 一直 导通 。
还要说明一点, 双稳态开关 在 第一次 使用 前 要 设置 初始状态, 因为, 接通电源 后, 双稳态电路 的 状态 是 随机 的 。 如果 要求 初始状态 是 out 1 = 1, 可以 让 in 1 = 1 来 设置 这个 初始状态 。