基于FPGA的投币式矿泉水自动售水机控制系统.docx
文本预览下载声明
基于FPGA的投币式矿泉水
自动售水机控制系统
——EDA实验设计报告
任务与要求:
设计一个投币式矿泉水自动售水机的控制系统。该系统能完成矿泉水的单价和数量的信息存储,进程控制,硬币处理,余额计算,显示等功能。某种矿泉水的单价和数量在初始化时输入并储存,用户可以用硬币购买。售货时能根据用户输入的货币,判断钱币是否足够,钱币足够则自动送出一瓶水,钱币不足则给出提示继续投币,若没有继续投币则延迟30秒后退币并复位;能够自动计算出应找钱币余额、库存矿泉水数量并显示。
设定:使用硬币为一元、五角两种,某种矿泉水的单价为1.5元。
程序的设计思路和ASM流程图的设计:
本系统由拨码开关表示投币数量,其中a 1表示投入的五角硬币数量,b 1表示投入的1元硬币数量,每次根据投入的硬币不同而分别计数,并将投入的总金额用数码管显示出来(分频显示),当达到了交易金额时,out产生一个正脉冲,此正脉冲控制闸门打开,汽水掉出来,交易完成。当超出了交易金额,则out1会产生一个正脉冲,提示按动退币开关取回找零。若交易未完成时,顾客想要取消交易,按动退币开关可取回投入金额。
1、原始状态图的建立与化简
ASM图见附图。
2、状态分配与状态转换表的确定
投币部分:
该部分用三个状态即可表示。s0表示未投币状态, s1表示已投入五角状态, s2表示投入已一元状态。当投入一元五角时,给出一瓶水,并转到状态s0 ,当投入两元时,给出一瓶水,同时找回一枚五角硬币,并转到状态s0。
状态转换表如下:
s
a1b1
00
01
10
s0
s0/00
s01/00
s2/00
s1
s1/00
s2/00
s0/10
s2
s2/00
s0/10
s0/11
显示部分:
状态
rst
kc
s
tb
A
0
X
X
X
B
1
0
0
X
C
1
1
X
X
D
1
0
1
0
E
1
0
1
1
状态A:系统功能不开启,无显示
状态B:系统功能开启,交易未开始,数码管显示交易金额0.0
状态C:库存开关开启,显示库存
状态D:使用投币功能,交易开始,显示投币金额
状态E:退币功能开启,显示应退还金额
3、输入、输出变量的确定
输入变量:
clk(可调时钟信号),rst(使能信号),tuibi(退比操作),kc(库存显示)
a1(五角硬币个数),b1(一元硬币个数)
KBCol(键盘列扫描信号)
输出变量
out(购买成功,自动出水),out1(领取找零提示)
warn(提示投币不足,继续投币)
ledtb(30秒未投币,交易结束,领取钱币)
weixuan(位选),pay(数码管显示)
KBRow(键盘行扫描信号)
程序特色部分举例:
本系统在设计要求的基础上,增加了退币系统。
该系统的功能主要分为三部分:
第一部分为要求的找零退币;
第二部分为未及时投币造成的退币;
第三部分为投币不足且不希望继续交易时的退币。
此外,本系统还利用分频显示的方式,实时显示投币钱数,退币金额等,具有一定的智能。
程序调试与改进 :
调试步骤:
1、运行QuartusII软件,新建工程
2、建立文本文件,写入程序,编译保存。
3、分配管脚。保存编译。
4、将生成的.sof文件烧录到FPGA
5、观察结果
设计改进:
本系统的设计并不是直接完成的,而是一部分一部分不断调试修改完善的,因而可能部分程序顺序较为混乱。先完成的部分是投币功能部分,然后逐步加入显示功能,退币功能,以及库存功能,最终整合在一起,达成任务要求。
编写过程中,库存显示部分出现了一些问题:当售出矿泉水时,库存数量应自动减一,然而由于拨码开关控制投币金额,程序自动循环运行,使得库存数量自动循环递减。经过多次尝试,我在库存运算前加了一个比较条件——只有在投入钱币数量发生变化且购满成功时,库存才减少。之后通过不断调试,系统终于顺利实现了库存显示的功能。
总结:
本次实验通过对自动售水机状态转换图的分析得出其工作原理,并根据工作原理编写出Verilog HDL源程序。通过验证,设计的系统基本完成了设计预定的目标,实验结果能够顺利的在FPGA上正确显示,能较好的实现自动售货机的基本功能 。
收获与体会:
通过此次仿真实验—基于状态机的自动售货机的设计,我掌握了Quartus II软件的基本使用方法,对EDA设计有了更进一步的认识并且对Verilog语言有了更深刻的了解,可以独立编写一些源程序,灵活地运用它来实现我所想要其实现的功能。同时,通过此次实验,我掌握了设计工作的完整流程,培养并锻炼了设计思维,增加了实际操作经验,锻炼了能力,为以后的课程设计积累了宝贵的经验。实验过程中难免遇到一些问题,遇到问题我们不能灰心、烦躁,甚至放弃,而要静下心来仔细思考,分部检查,找出最终的原因进行改正,这样才会有进步,才会一步
显示全部