自动售货机控制系统的设计说明书Word下载.docx
《自动售货机控制系统的设计说明书Word下载.docx》由会员分享,可在线阅读,更多相关《自动售货机控制系统的设计说明书Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
图1系统组成框图
系统按功能可分为分频模块、控制模块和译码输出模块。
(1)分频模块的作用是获得周期较长的时钟信号,便于操作,且不会产生按键抖动的现象。
其原理是定义两个中间信号Q、DIV_CLK,Q在外部时钟CLK的控制下循环计数,每当计数到一个设定的值时DIV_CLK的值翻转,最后将DIV_CLK赋给NEW_CLK即可,改变设定值可改变分频的大小。
(a2)控制模块是这个系统的核心模块,它具有判断按键、计算输入钱数总和、计算找零、控制显示四个作用。
它的工作原理是每当时钟上升沿到来时,判断哪个按键按下,若按下的是钱数键,则将钱数保存于中间信号COIN,若下次按下的仍是钱数键,COIN的值则加上相应的值并显示于数码管;
当物品键按下时,则将COIN的值与物品价格进行比较,然后控制找零。
(3)由于钱数可能大于9,所以译码显示模块的作用就是将钱数译码后用两个数码管显示,这样方便观察。
根据各个功能模块的功能并进行整合,可得到一个完整的自动售货机系统的整体组装设计原理图,如图2所示。
图2设计原理图
二、系统主要VHDL源程序
(1)分频器的源程序(外部时钟选用3MHz,实现3万分频)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYCLKGENIS
PORT(CLK:
INSTD_LOGIC;
NEWCLK:
OUTSTD_LOGIC);
ENDCLKGEN;
ARCHITECTUREBEHAVEOFCLKGENIS
SIGNALQ:
INTEGERRANGE0TO14999;
SIGNALDIVCLK:
STD_LOGIC;
BEGIN
PROCESS(CLK)
IFCLK'
EVENTANDCLK='
1'
THEN
IFQ<
14999THENQ<
=Q+1;
ELSEDIVCLK<
=NOTDIVCLK;
Q<
=0;
ENDIF;
ENDPROCESS;
NEWCLK<
=DIVCLK;
ENDBEHAVE;
(2)自动售货机控制器源程序(3种钱数为1元、2元、5元;
3种物品的价格为2元、5元、10元)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSHOUHUOJIIS
PORT(CLK:
INSTD_LOGIC;
COIN1:
--1元信号
COIN2:
--2元信号
COIN3:
--5元信号
PRICE1:
--2元商品
PRICE2:
--5元商品
PRICE3:
--10元商品
Y0:
OUTSTD_LOGIC;
--购买成功信号
Y1:
--退币信号
MONEY:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
PAYBACK:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDSHOUHUOJI;
ARCHITECTUREBEHAVOFSHOUHUOJIIS
SIGNALCOIN:
STD_LOGIC_VECTOR(3DOWNTO0);
--保存钱数
SIGNALCOUT:
--保存找零
BEGIN
IFCLK'
THEN
IFCOIN1='
THENCOIN<
=COIN+1;
Y0<
='
0'
;
Y1<
ELSIFCOIN2='
=COIN+2;
ELSIFCOIN3='
=COIN+5;
ELSIFPRICE1='
THENIFCOIN>
="
0010"
THENY0<
COUT<
=COIN-2;
ELSEY0<
=COIN;
ELSIFPRICE2='
IFCOIN>
0101"
=COIN-5;
ELSEY0<
=COIN;
ENDIF;
ELSIFPRICE3='
1010"
=COIN-10;
ENDIF;
ENDPROCESS;
MONEY<
--输入的钱数
PAYBACK<
=COUT;
--找零
ENDBEHAV;
(3)译码显示源程序(总钱数应小于16元)
ENTITYXIANSHIIS
PORT(DIN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDXIANSHI;
ARCHITECTUREBEHAVOFXIANSHIIS
PROCESS(DIN)
CASEDINIS
WHEN"
0000"
=>
DOUT<
="
00000000"
0001"
00000001"
00000010"
0011"
00000011"
WHEN"
0100"
00000100"
00000101"
0110"
00000110"
0111"
00000111"
1000"
00001000"
1001"
00001001"
00010000"
1011"
00010001"
1100"
00010010"
1101"
00010011"
1110"
00010100"
1111"
00010101"
WHENOTHERS=>
ENDCASE;
三、系统仿真与硬件验证
(1)系统的有关仿真
1)分频电路的仿真
如图3所示,为了便于仿真,在仿真时采用20分频,由图可看出
每经过10个外部时钟,新时钟翻转一次,实现了分频。
图3分频器仿真结果图
2)控制电路的仿真
如图4、图5、图6所示。
图4输入7元,购买5元商品,找零2元,Y0显示购买成功
图5输入13元,购买10元商品,找零3元,Y0显示购买成功
图6输入7元,购买10元商品,Y1显示购买失败,退币7元
3)显示电路的仿真
如图7所示,当大于9时分开显示。
图7显示电路仿真结果
系统的硬件验证
应用GW48实验系统,选择实验电路结构图NO.5,管脚定义如下:
CLK接CLOCK1、COIN1接PIO0、COIN2接PIO1、COIN3接PIO2、PRICE1接PIO3、PRICE2接PIO4、PRICE3接PIO5;
MONEY[7..0]接PIO16~PIO23(数码管1、数码管2)、PAYBACK[7...0]接PIO24~PIO31(数码管3、数码管4)、Y0接PIO8(二极管D1)、Y1接PIO9(二极管D2)。
硬件验证方法:
选择实验模式5,时钟信号CLK与CLOCK1信号组中的3MHz信号相连,用键1~键3输入钱数,用键4~键6选择商品,观察数码管及二极管的显示情况。