首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

数电-基于FPGA的自动售货控制系统设计

  • 25-02-15 05:40
  • 4209
  • 11852
blog.csdn.net

目录

前言

一、设计要求与指标

二、原理总框图和设计思路说明

1、原理总框图

2、设计思路说明

三、各部分模块的设计与实现

1、选择模块的设计与实现

模块实现电路:

模块封装:

模块仿真结果:

说明:

2、存储模块的设计与实现

模块实现电路:

模块封装:

说明:

3、顾客选择商品确定模块的设计与实现

模块实现电路:

模块封装:

模块仿真结果:

说明:

4、投币模块的设计与实现

模块实现电路:

模块封装:

模块仿真结果:

说明:

5、找零和退还判别模块的设计与实现

模块实现电路:

模块封装:

模块仿真结果:

说明:

6、倒计时模块的设计与实现

模块实现电路:

模块封装:

说明:

1)触发30秒倒计时逻辑部分

2)触发10秒倒计时逻辑部分

3)自动返回逻辑部分

7、系统自检模块的设计与实现

模块实现电路:

模块封装:

模块仿真结果:

说明:

四、总电路图、调试实现、作品图片展示和说明

1、总电路图

2、调试实现

3、作品图片展示

1)系统初始化商家设置商品信息界面

2)商家设置完商品信息后,管理员权限锁定界面

3)顾客选择商品后确认,30秒倒计时开始界面

4)顾客支付确定后显示的找零界面

5)系统异常时的报错提示界面

五、列举自己遇到的问题和如何解决的


前言

        本次数电的课程设计是设计一款基于FPGA的自动售货控制系统,因为手上暂时没有FPGA的板子,所以先采用proteus仿真进行设计,观察系统效果,等之后FPGA板子下发,再移到quartus上调试和下载。同样是自己第一次自主设计电路系统,可能在功能上不完整或者逻辑上有错误,大家多多包涵,欢迎沟通交流。

一、设计要求与指标

        本课设设计的是自动售货机控制系统,此系统有以下几方面的功能:

  • 系统启动后要初始化,商家够投放商品和设置价格;
  • 顾客能够选择自己所需的商品并点击确认;
  • 顾客能够完成所选商品的支付付款;
  • 自动售货机系统能够根据顾客的支付面额进行找零和商品的掉落,以及低于商品价格时,退还顾客的支付面额;
  • 在找零支付和退还结束后以及顾客在30秒内未完成商品的付款,自动返回商品选择界面,重新选择商品;
  • 系统自检报错。

二、原理总框图和设计思路说明

1、原理总框图

2、设计思路说明

        整个系统分为六部分,分别是:系统初始化、顾客选择商品、顾客支付、找零和退还判别、倒计时以及系统自检部分。

        1)系统初始化部分:在商家权限开启时,能够设置商品价格和投放商品,设置完成后,商家能够锁定,使商品编号以及对应的价格无法发生变动,完成系统的初始化设置。

器件选型:此部分采用7475集成D锁存器、74161二进制同步加法计数器、74247共阳数码管显示译码器、74138三线-八线译码器、74151 8选1数据选择器以及或非门、与非门构成。

        2)顾客选择商品部分:在系统初始化完成后,顾客可以选择自己想要的商品,并从存储模块中调出相关编号的商品价格并显示出来,点击确定后,购买该编号的商品,进而进入支付模块并且此时商品的价格无法发生变动。

器件选型:此部分采用7475集成D锁存器、74247共阳数码管显示译码器构成。

        3)顾客支付部分:在顾客选择完想要的商品后,进行投币并且显示相应的投币金额,在完成支付后,触发支付成功,此时投币金额被锁定无法改变。

器件选型:此部分采用7475集成D锁存器、74247共阳数码管显示译码器和非门构成。

        4)找零和退还判别部分:在顾客支付完成时,自动进入找零和退还判别部分,把投币的金额信息和商品的价格信息输入到此模块中,先通过比较器进行比较,判别投币金额和商品价格的大小,当投币金额大于等于商家价格时,自动显示找零的金额信息,反之,则不显示找零信息,LED灯亮起,自动退还顾客的付款金额,在上述完成后自动进入倒计时模块。

器件选型:此部分采用7485数据比较器、74283超前进位加法器、74247共阳数码管显示译码器和若干与门、或门、非门构成。

        5)倒计时部分:在顾客选择完商品确认后,进入30秒的倒计时,顾客需在30秒内完成对选择商品的支付,未支付成功,则返回商品选择界面重新选择商品;在找零和退还阶段结束时,自动进入10秒倒计时,10秒后自动返回商品选择界面重新选择商品。

器件选型:此部分采用74192异步可预置计数器、74247共阳数码管显示译码器、分频器以及若干个逻辑门电路构成。

        6)系统自检部分:本系统的工作流程是在系统初始化后,顾客可以选择商品并且确认,进行商品支付,未在30秒内完成支付的,自动进入商品选择界面重新选择商品;支付成功后,自动找零或者退还结束时,触发10秒倒计时,10秒结束后自动返回商品选择界面重新选择商品。当系统运行出错时,系统自动报警,此时管理员(商家)检查系统错误。

器件选型:此部分采用与门、与非门、或门、或非门和非门构成。

三、各部分模块的设计与实现

1、选择模块的设计与实现

模块实现电路:

模块封装:

模块仿真结果:

说明:

        选择模块主要设置三个按键,按键上接有上拉电阻,当未按下时,输出为高电平,按下后电平拉低,输出为低电平。按键一设置商品的价格(spjg),按键二选择商品的编号(spbh),按键三设置投币面额(tbme),当按键按下时,输入为低电平,7475采用输出口的反相高电平,而74161 cp端是上升沿触发,按键按下后74161上升沿触发开始计数,商品价格和投币面额采用74161的十进制8421BCD码计数,商品编号选择采用八进制8421BCD码计数,商品编号选择按键控制着数码管显示和74138选择商品的编号。从模块仿真结果来看,选择模块能够正常实现商品价格、商品编号和投币面额的选择和设置。把选择模块进行封装成一个模块,命名为initopt1。

2、存储模块的设计与实现

模块实现电路:

模块封装:

说明:

        存储模块主要采用8块7475和4块74151进行设计,能存储8款商品的价格和编号信息。此模块设置了管理员权限,当管理员权限为低电平时,商家开始设置价格和投放商品,此刻二输入或非门处于全0为1状态,每个存储单元能够存储对应的商品价格和对应的编号信息,当选中设置下一个商品的信息时,上一个商品被锁定,无法修改上一个商品的信息,当设置完全部的商品信息后,管理员权限锁定为高电平,存储模块被锁定,无法修改商品信息,这样商品的信息就被记忆下来,而4块74151是用来输出的是每个商品的二进制价格。把存储模块进行封装成一个模块,命名为initopt2。

3、顾客选择商品确定模块的设计与实现

模块实现电路:

模块封装:

模块仿真结果:

说明:

        顾客选择确定模块,顾客可以选择自己想要的商品,此时顾客每按下一个商品的编号,74247就会驱动数码管显示一种商品编号的价格,当顾客选择好后,按下确定键,此时商品价格锁定,不再变动,进入支付模块,并且向找零和退还判别模块输送二进制商品价格数据,同时C5、C6向倒计时模块输送确定(高电平)信息。从模块仿真结果来看,顾客选择确定模块能够正确显示数码管、控制等信息,并且在锁定商品价格后,不管如何选择商品编号,改变商品价格,此模块锁定的价格依旧没变化,一直保持在锁定状态。把顾客选择确定模块进行封装成一个模块,命名为zxoksys1。

4、投币模块的设计与实现

模块实现电路:

模块封装:

模块仿真结果:

说明:

        投币模块在顾客选择好商品确认后工作,在顾客投币时7475锁存器开启,74247能够实时显示顾客的投币金额,当顾客付款成功时(确定),7475锁存器锁定,付款金额无法变动,并把付款信息传输给找零和退还判别模块进行比较。从模块仿真结果来看,投币模块能够正常显示投入的金额信息,并且在支付成功时,能够锁定付款金额信息,再次调整付款金额,投币模块显示信息无法改变。把支付模块进行封装成一个模块,命名为tbsys1。

5、找零和退还判别模块的设计与实现

模块实现电路:

模块封装:

模块仿真结果:

说明:

        找零和退还判别模块在顾客支付完成时,自动触发C3为高电平,使投入金额和商品价格输入到模块中,进入投入金额和商品价格的判别阶段,此阶段采用7485比较器,比较两者数据的大小,找零采用的是74283加法器构成的减法电路,当投入金额大于等于商品价格时,减法电路工作,输出找零的金额,反之,因为减法电路输出的负数是混乱的,所以采用LED灯输出高电平(亮起)和熄灭找零显示的反馈形式,退还顾客投入金额,在正常有找零的情况下,LED灯为低电平(熄灭),在完成判别后输出一个结束信号和自动触发C3为高电平一起输入到倒计时模块中。从模块仿真结果来看,找零和退还判别模块能够正常反馈找零和退还信息,并且反馈结束信号。把找零和退还判别模块进行封装成一个模块,命名为zlandthsys1。

6、倒计时模块的设计与实现

模块实现电路:

模块封装:

说明:
1)触发30秒倒计时逻辑部分

        倒计时模块通过分频器,将FPGA板子中的50MHz的时钟信号分频成1Hz的时钟信号输入到触发30秒倒计时逻辑部分中,此部分逻辑真值表如下:A为1Hz的时钟信号、B为30秒倒计时74192级联十位的(BO)’端,C(C1)为支付确定是否按下(1-按下;0-未按下)结果的反相值。

CBAYY'
00001
00101
01001
01101
10001
10101
11001
11110

        商品确认按键按下前,30秒倒计时模块一直锁定在“29”的界面,未启动,(BO)’端保持在高电平状态。商品确认按键按下后,倒计时30秒的(LD)’端输入高电平,倒计时启动,当支付确定键未按下时(低电平),倒计时30秒一直走,当倒计时走到“00”时,(BO)’端输出低电平,此时无论时钟信号如何变化,输出Y一直保持在低电平状态,倒计时不再走动,且Y的状态输入到自动返回逻辑部分中,开始再一次重新选择商品;当支付确定按下时(高电平),30秒倒计时停止,(BO)’端一直保持在高电平状态,C1输出低电平,使投币模块的金额界面锁定,无论1Hz的时钟信号如何变化,输出Y一直输出低电平。

2)触发10秒倒计时逻辑部分

        触发10秒倒计时逻辑部分中,此部分逻辑真值表如下:B(over1)为支付确定是否按下(1-按下;0-未按下)、A(over2)为找零和判别模块的输出结果。

BAY
000
010
101
111

        当支付确定按键按下后,无论此部分处在找零或者退还状态,Y都输出为高电平,触发十秒倒计时开始,反之,则锁定在倒计时开始时“9”的状态。

3)自动返回逻辑部分

        自动返回逻辑部分中,此部分逻辑真值表如下:A为10秒倒计时的(BO)’端、B为30秒倒计时74192级联十位的(BO)’端、C(C5)为商品选择确定键是否按下、D(C2)为支付确定键是否按下(1-按下;0-未按下)。

DCBAY
00001
0001X
0010X
0011X
01000
0101X
01101
0111X
1000X
1001X
1010X
1011X
11000
11011
11100
11111

        在系统的运作中,应满足以下其中工作状态:0000、0100、0110、1100、1101、1110、1111,其中0000、0110、1101和1111四种状态为系统自动返回重新选择商品的状态,而0100、1100和1110是选择的商品信息锁定状态。当未能满足以上七种状态视为系统报错,报错输出信息为X(这里当X=0),此时模块向系统自检模块传输系统报错信息,由系统自检模块进行解读和报警,反之,则系统继续运作。

7、系统自检模块的设计与实现

模块实现电路:

模块封装:

模块仿真结果:

说明:

        系统自检模块是对系统的错误工作状态进行报错,提醒商家系统出错。根据上述系统状态中,0001、0010、0011、0101、0111、1000、1001、1010和1011皆为系统出错状态,当系统出现异常后,此模块对错误信息进行解读,并作出报警提醒,反之,则忽略系统正常的信息。

四、总电路图、调试实现、作品图片展示和说明

1、总电路图

        Initopt1是选择模块,initopt2是存储模块,zxoksys1是顾客选择商品确定模块,tbsys1是投币模块,zlandthsys1是找零和退还判别模块,djssys1是倒计时模块以及xtzjsys1是系统自检模块。

2、调试实现

        图中A数码管显示商品的价格,B数码管显示商品编号,C数码管显示投币面额,DE数码管显示30秒倒计时,F显示找零;A开关是管理员权限,B开关是商品确定,C开关是支付确定;A灯是退还提示,B灯是系统报错提示,C灯是结束提示灯;A按键是设置商品价格,B按键是选择商品的编号,C按键是投币。

        系统上电启动界面如上图,按键AB和数码管AB是系统初始化商家设置和显示商品信息,设置完成后,拨动开关A,管理员权限锁定,顾客可以开始选择通过按键B选择商品商品,选择完毕后,拨动开关B进行确定,这时数码管DE开始启动30秒倒计时,在30秒内通过按键C完成支付并且拨动开关C进行确定,数码管C显示投币价格,这时数码管F就会显示找零,当投币面额小于商品价格时灯A亮,反之则熄灭,结束后灯C亮起,进入重新选择,开关BC拨动到低电平,当系统异常时,灯B亮起,反之熄灭。

3、作品图片展示

1)系统初始化商家设置商品信息界面

2)商家设置完商品信息后,管理员权限锁定界面

3)顾客选择商品后确认,30秒倒计时开始界面

4)顾客支付确定后显示的找零界面

5)系统异常时的报错提示界面

五、列举自己遇到的问题和如何解决的

  1. 在选择模块的设计时,考虑到要输入商品信息和投币金额,需要用到拨码开关进行拨码输入,但考虑到FPGA板子上的拨码开关数量没有这么多,就改用按键计数器的方式,输入商品和投币金额信息;

  2. 在找零部分的设计时,由于没有专门的减法器芯片,所以考虑了很久,在翻阅书籍和笔记后发现加法器可以通过特定的电路变成减法器,从而进行运算,输出找零金额;

  3. 在退还金额舍设计和倒计时10秒设计时,因为数码数量不够,不能显示数据,因此采用亮灯的方式进行倒计时结束和退还金额的提示;

  4. 在设计倒计时模块中的自动返回部分时,发现逻辑电路有明显的漏洞,就是在系统正常的几个状态下,也存在系统异常的状态,考虑了一下,解决方案,就是在设计一个系统自检模块,当系统出现异常状态下,能够进行异常提示,从而避免系统异常的状态。

注:本文转载自blog.csdn.net的LoG.MAX的文章"https://blog.csdn.net/gg1067/article/details/144613388"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

123
硬件开发
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top