基于FPGA的自动售货机_第1页
基于FPGA的自动售货机_第2页
基于FPGA的自动售货机_第3页
基于FPGA的自动售货机_第4页
基于FPGA的自动售货机_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录第 1 章 绪论 .11.1 本文研究内容 .11.2 目的与意义 .1第 2 章 系统设计方案 .22.1 货物自动贩卖机总体设计方案 .2第 3 章 货物自动贩卖机的基本原理 .43.1 货物自动贩卖机功能 .43.2 货物自动贩卖机的基本组成 .43.2.1 投币信号产生的设计 .43.2.2 时钟电路的设计 .43.2.3 数码显示的设计 .4第 4 章 货物自动贩卖机软件设计 .64.1 软件实现功能综述 .64.2 计数功能的设计 .64.3 投币功能的设计 .64.4 显示功能的设计 .64.5 显示功能的设计 .74.6 代码段 .7第 5 章 货物自动贩卖机系统的仿真与

2、实现 .17第 6 章 课程设计总结 .19第 1 章 绪论1.1 本文研究内容本次设计的是一个货物自动贩卖机。货物自动贩卖机主要是由以下几个部分构成,电源电路、数码显示、时钟脉冲、投币脉冲、闸门时间控制等,各部件形成一个简单的饮料自动提取机系统。本设计采用 EDA 技术,通过 FPGA 实现了数字电子钟电路的设计,并完成对电路的功能进行仿真。1.2 目的与意义本系统用于模拟现实生活中的自动售货贩卖机。可以模拟四种商品的买卖、存贮、控制等等功能。并模拟买家模式和管理模式,可以分开进行商品买卖的模拟和商品上架的模拟。第 2 章 系统设计方案2.1 饮料自动提取机总体设计方案自动售货机控制系统设计

3、主要有四个功能模块,一个为货币:该模块能完成硬币处理,余额计算。一个为分频模块:功能主要是实现各个部分的操作。一个为售货器模块:该模块主要是负责进行货物的管理。最后一个是控制模块:主要负责进行商品买卖控制。时钟脉冲阀门控制译码物品的选择与确认投币处理显示 图 2.1 饮料提取机的系统组成框图 设计思路:首先,我们对于物品存储进行模拟,共有商品买卖和商品管理两个模式。在买卖模式中,顾客可以通过选择所需商品并进行确认,之后进入投币模式。在投币模式中,本系统由对外部投入硬币的检测来产生脉冲,对产生的脉冲进行计数,并尝试添加防抖动控制。我们一共设置了三种货币,0.1 元、0.5元、1 元三种货币。我们

4、设定,当顾客确定所需购买的商品时,直到顾客投入所需的钱数,或者退出消费,否则将会一直等待下去。当投入钱币数足够时,系统会自动出货,并完成找零。在管理模式中,商家可以查看并选择各种商品,对商品的库存和单价进行修改。当确定修改某种商品后,有两种模式进行选择,一个是修改物品的库存数量,当修改后再进入买卖模式,会立刻在 LED 数码管上显示出来。另一种是修改物品的单价,两个模式可以通过按键进行修改和切换。第 3 章 货物自动贩卖机的基本原理3.1 货物自动贩卖机功能本系统由对外部投入硬币的检测来产生脉冲,并对产生的脉冲进行计数,其中 0 表示投入的是 0.1 元的硬币,1 表示投入的是 0.5 元的硬

5、币,2 表示投入的是 1 元的硬币。每次根据投入的硬币不同而分别计数,并将投入的总金额用两位数码管显示出来,当达到了交易金额时,out 产生一个正脉冲,此正脉冲控制闸门打开,物品掉出来,当超出了交易金额,则 out1 会产生一个正脉冲,饮料售卖机找回多余的钱。3.2 货物自动贩卖机的基本组成 货物自动贩卖机主要是由以下几个部分构成,电源电路、数码显示、时钟脉冲、投币脉冲、闸门时间控制等,各部件形成一个简单的自动售货机系统。其实现主要的功能是对投币信号的计数与计算,判断是否达到所买物品的价格,如果不足的显示所投的钱数,货物自动贩卖机将会进入等待状态,直至达到金额或者取消此次交易。3.2.1 投币

6、信号产生的设计自动售货机的所有信号均由同步时钟信号 CLK 的正边沿触发,由于售货机的硬币接收器一般是一个机械装置,投币时产生的信号要比同步信号慢得多,一般可以持续好几个周期。必须对投币输入信号进行处理,使每一次投币时在CLK 脉冲周期内只能产生一个脉冲作为功能控制模块的投币驱动信号。3.2.2 时钟电路的设计在功能实现模块中,售货机在放出饮料的时候需要延时三秒钟,程序中COUNT1 数 3000 下,因此需要 1KHZ 的时钟脉冲,设计中为同步时钟,所以此时钟脉冲电路为芯片提供“脉搏”。 图中是一种 1KHZ 脉冲发生电路。它由集成电路 CD4060 和晶振、电阻和电容等元件组成。CD406

7、0 是 14 位二进制串行计数、分频器和振荡器。CD4060 内部分为两部分,其中一部分是 14 级计数/分频器,其分频系数为 1616348;另一部分既可与外接电阻和电容构成 RC 振荡器,又可与外接晶体构成高精度的晶体振荡器。在采用一定频率的晶振组成晶振振荡器,其震荡信号经过 CD4060 内部分频后,在 Q 输出相应频率的脉冲信号。设计中需要 1000HZ 的时钟脉冲,所以外接 30720HZ 的晶振,在 Q5 端输出大约是1000HZ 的时钟脉冲。3.2.3 数码显示的设计在买卖模式中,数码管初始显示两部分内容:单价和数量。当进行确认是,确认信号会让信号灯亮起表示进入确认状态。这时会进

8、入投币模式。该模式会有数码管统计已投入金额的总数。当投入金额可以购买物品时,系统会根据控制模块算出余额并显示出来。在管理模式中,数码管初始显示两部分内容:单价和数量。当进行确认是,确认信号会让信号灯亮起表示进入确认状态。这时会进入商品数量管理模式,初始会显示该商品的库存量,可以通过按键控制其数量。同样可以进过按键切换为单价控制。这时显示该商品单价,可以通过按键控制其单价升降。第 4 章 货物自动贩卖机软件设计4.1 软件实现功能综述在Xilinx ISE Design Suite 13.4软件平台上建立计数器电路的顶层电路文件并完成编译和仿真。用Verilog编写automat.v文件及注释。

9、Xilinx ISE Design Suite 13.4软件提供完整、易于操作的图形用户界面可以完成整个设计流程中的各个阶段,并提供完整的命令行界面解决方案,使用命令行流程可以降低内存要求,并可使用脚本或标准的命令行选项和命令控制Xilinx ISE Design Suite 13.4软件。4.2 投币功能的设计clk 为时钟信号,a0 记录投入 1 角硬币的个数,a1 记录投入 0.5 元硬币的个数,a2 记录投入 1 元硬币的个数。out 控制售卖机闸门是否打开,out 为高电平时闸门打开,out1 为找零信号,为高电平时,饮料售卖机找回余额。4.3 显示功能的设计clk 为时钟信号,a0

10、 记录投入 1 角硬币的个数,a1 记录投入 0.5 元硬币的个数,a2 记录投入 1 元硬币的个数。数码管部分不太清楚不是自己负责的4.4 取货功能的设计clk 为时钟信号,a0 记录投入 1 角硬币的个数,a1 记录投入 0.5 元硬币的个数,a2 记录投入 1 元硬币的个数,out 为高电平时闸门打开,out1 为找零信号,为高电平时,饮料售卖机找回余额代码段:主模块:timescale 1ns / 1ps/ Company: / Engineer: / / Create Date: 21:17:44 06/30/2014 / Design Name: / Module Name: au

11、tomat / Project Name: / Target Devices: / Tool versions: / Description: / Dependencies: / Revision: / Revision 0.01 - File Created/ Additional Comments: /参数:/clk 时钟 read 普通(1)/商家(0)读取 choose 商品选择 coin 投币(货币选择) start 商品确定 submit 完成投币 reset 重新开始(清零) module automat(input clk,input read,input 4:0 choose

12、,input 2:0 coin,input submit,input reset,output state,output chooseNum,output priceNow,output 7:0 nodes,output 5:0 catChoose );/分频时钟reg f_1000=0;reg f_100=0;reg f_1=0;reg f_0=0;reg3:0 f_s0=0;reg6:0 f_s1=0;reg13:0 f_s2=0;reg13:0 f_s3=0;/价格表reg6:0 pList4:0;/库存表reg6:0 sList4:0;/当前选择的商品编号,0 表示没有正确选择reg2

13、:0 chooseNum=0;/按下确认键后,应该要支付的钱和库存reg6:0 priceNow, stockNow;/投入 1 毛 5 毛 1 元硬币及总共投入的钱wire6:0 t1, t2, t3; reg 6:0 tall;/退还的钱reg 6:0 reCoin;/状态 00 为开始阶段,01 为商品选择阶段,10 为商品确认,开始投币状态,11 为投币完成,开始出货找钱状态reg 1:0 state;/输入状态 0 为调整价格 1 为调整库存reg inState;/面值parameter val1=5b00001, val2=5b00101, val3=5b01010;initia

14、lbeginstate=0;inState=0;pList0=0; pList1=7b11100;pList2=7b11001;pList3=7b101101;pList4=7b1101;sList0=0;sList1=20;sList2=20;sList3=12;sList4=30;end/*分频模块*/always (posedge clk)beginif(f_s09)beginf_1000=f_1000;f_s0=0;endelsef_s0=f_s0+1;if(f_s199)beginf_100=f_100;f_s1=0;endelsef_s1=f_s1+1;if(f_s29999)be

15、ginf_1=f_1;f_s2=0;endelsef_s2=f_s2+1;if(f_s312000)beginf_0=f_0;f_s3=0;endelsef_s3=f_s3+1;endcountCoin cnt1(f_1000, read, coin0, reset, val1, t1);countCoin cnt2(f_1000, read, coin1, reset, val2, t2);countCoin cnt3(f_1000, read, coin2, reset, val3, t3);ledDisplay led(f_1000, state, priceNow, stockNow,

16、 tall, reCoin, nodes, catChoose);always (posedge f_1000)begin/普通读取模式if(read=1)begin/清零状态,按键按下时清零 1 次if(reset=1) beginchooseNum=0;state=2b00;end/商品可选取阶段if(state0 )beginif( state=2b00 )state=2b01;endelsestate=2b00;/在 LED 上显示当前商品的价格 库存endelse/投币状态if( state=2 )begintall=t1+t2+t3;/投币不够if( tallTimeone)beg

17、incnt=0;total=total+delta;endelseif(en & en2)cnt=cnt+1;*/if(en & en2)total=total+delta;endendendmoduleP.S.一共三段,分别计数 0.1,0.5,1 三种不同的货币值。此外我们添加了防抖动部分,但是实际效果一般,因为每次按键时的各项参数都不同,最终取简单测试下最好的阈值 30 作为最后的结果。硬件显示部分:timescale 1ns / 1ps/ Company: / Engineer: / / Create Date: 22:29:12 07/01/2014 / Design

18、 Name: / Module Name: ledDisplay / Project Name: / Target Devices: / Tool versions: / Description: / Dependencies: / Revision: / Revision 0.01 - File Created/ Additional Comments: /nodes 为数码管连通信号 cat 为位选信号module ledDisplay(input clk,input 1:0 state,input 6:0 price,input 6:0 stock,input 6:0 coin,inpu

19、t 6:0 reCoin,output reg7:0 nodes,output reg5:0 catChoose ); reg4:0 price0, price1, stock0, stock1, stock2, re0, re1, showNum;reg2:0 cat;initialbegincat=0;endalways (posedge clk)begincase(state)2b00:beginif( cat=5 )showNum=0;else showNum=10;end2b01:beginprice0=price%10;price1=price/10;stock0=stock%10

20、;stock1=(stock/10)%10;stock2=stock/100;case(cat)/存量5: showNum=stock2;4: showNum=stock1;3: showNum=stock0;/价格1: showNum=price1;0: showNum=price0;default: showNum=10;endcaseend2b10:beginprice0=coin%10;price1=coin/10;case(cat)1: showNum=price1;0: showNum=price0;default: showNum=10;endcaseend2b11:beginp

21、rice0=coin%10;price1=coin/10;re0=reCoin%10;re1=reCoin/10;case(cat)1: showNum=price1;0: showNum=price0;5: showNum=re1;4: showNum=re0;default: showNum=10;endcaseendendcase/showNum 转为数码管编码if( cat!=1 )begincase(showNum)0: nodes=8b00111111;1: nodes=8b00000110;2: nodes=8b01011011;3: nodes=8b01001111;4: no

22、des=8b01100110;5: nodes=8b01101101;6: nodes=8b01111101;7: nodes=8b00000111;8: nodes=8b01111111;9: nodes=8b01101111;10:nodes=0;endcaseendelsebegincase(showNum)0: nodes=8b10111111;1: nodes=8b10000110;2: nodes=8b11011011;3: nodes=8b11001111;4: nodes=8b11100110;5: nodes=8b11101101;6: nodes=8b11111101;7:

23、 nodes=8b10000111;8: nodes=8b11111111;9: nodes=8b11101111;10:nodes=8b00000000;endcaseendcase( cat )0:catChoose=6b000001;1:catChoose=6b000010;2:catChoose=6b000100;3:catChoose=6b001000;4:catChoose=6b010000;5:catChoose=6b100000;endcasecat=( cat+1 )%6;endendmodule第 5 章 饮料自动提取机系统的仿真与实现5.1 仿真分析初始情况:5.2 实现

24、该部分当时并未拍照,本段采用文字描述。买卖模式:使用 03,共计 4 个按钮,使用 0、37,共计六个阀门,使用七段 LED 显示管,使用0、1、37 状态灯。初始阀门 0 为 1,表示进入买卖模式,状态灯 0 亮起。36 四个阀门为物品选择阀门,为 1时 LED 灯上显示相应单价和库存量,LED 灯总显示上一阀门值条变为 1 的物品单价和库存量,对应状态灯亮起。当确定所需购买物品时,让 7 阀门产生一个正跳变并归 0,即给一个确定信号脉冲,7 号状态灯亮起,1、0 号状态灯亮起,进入购买状态。按动 0、1、2 任意按钮添加投币数量,LED 灯会显示当前投入的总货币数量。若取消此次交易,按下 3 号按钮,本次交易清空,状态复位。若货币足够,则进入找零状态。LED 灯显示找零钱数,并将对应货物数量减一。管理模式:使用 02,共计 3 个按钮,使用 0、36,共计六个阀门,使用七段 LED 显示管,使用0、1、36 状态灯。初始阀门 0 为 0,表示进入管理模式,状态灯 0 亮起。36 四个阀门为物品选择阀门,为 1时 LED 灯上显示相应单价和库存

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论