30,773
社区成员
发帖
与我相关
我的任务
分享从电路结构和数字逻辑原理来看,投入 3 元只出货不找零的核心原因是找零金额超出了当前电路的处理范围,具体如下:
金额编码与运算限制
电路中使用的 74LS161 计数器和 74283 加法器都是 4 位二进制器件,这意味着它们能处理的最大无符号数是 15(二进制1111)。
当投入 2.5 元时,找零金额为 0.5 元,这个值在 4 位二进制的表示范围内,因此减法运算和找零驱动逻辑都能正常工作。
当投入 3 元时,找零金额为 1 元。如果电路的编码方式(例如以 0.5 元为单位)将 1 元编码为2,这仍然在 4 位范围内。但如果电路的 BCD 编码或找零分解逻辑只设计了处理 0.5 元(即1)这一种面额,那么当需要找零 1 元时,就会因为无法分解为已知面额而导致找零模块失效。
找零驱动逻辑的触发条件
图中的吐钱开关(Q1)由 74LS08D(U16A)与门控制,其输入信号来自减法器(U9)的输出。
当找零金额为 0.5 元时,减法器输出的 BCD 码0001(代表 0.5 元)可以正确驱动与门,使 Q1 导通,完成吐零。
当找零金额为 1 元时,减法器输出的 BCD 码0010(代表 1 元),如果电路中没有对应的 1 元找零驱动逻辑(即没有连接到 Q2 的控制信号),或者该逻辑被忽略,就会导致吐零动作不触发。
进位 / 借位标志的误判
74283 加法器通过补码实现减法,其进位输出CO在被减数大于减数时为 1。
当投入金额为 2.5 元(0101)减去商品金额 2 元(0010),结果为 0.5 元(0001),CO=1,表示无借位,找零有效。
当投入金额为 3 元(0110)减去商品金额 2 元(0010),结果为 1 元(0100),CO=1,理论上也应有效。但如果后续的找零驱动电路只对0001这个特定输出有响应,而对0100没有定义,就会导致找零失败。
💡 解决方案
要解决这个问题,需要从以下几个方面修改电路:
扩展找零面额驱动:为 1 元找零增加对应的驱动电路,将减法器输出的0100信号连接到 Q2(吐货开关)的控制端,实现 1 元硬币的找零。
优化 BCD 编码与译码:确保减法器输出的 BCD 码能被 74LS48N 译码器正确识别,并驱动数码管显示正确的找零金额。
检查与门控制逻辑:确认 U16A(74LS08D)的输入信号是否正确,确保在找零金额大于 0 时,能可靠地触发吐零动作。
哇, 还有进行这么底层研究的