自动售货机的设计.docx
- 文档编号:7743142
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:20
- 大小:764.44KB
自动售货机的设计.docx
《自动售货机的设计.docx》由会员分享,可在线阅读,更多相关《自动售货机的设计.docx(20页珍藏版)》请在冰豆网上搜索。
自动售货机的设计
摘要:
本次EDA课程设计是利用VerilogHDL来设计的,使用MAXⅡEPM570T144C5N型号的FPGA来设计一个自动饮料售卖机,机器设有2个投币孔,机器可以接受1元和0.5元的硬币。
每瓶饮料2.5元,1元和0.5元可用2个按键来代替。
机器还设有2个输出,这个设计要求机器有对找钱和输出饮料的提示信号。
此设计按照EDA课程设计的流程进行源代码的编写、前仿真、综合、布局和布线、设计出电路原理图。
本设计主要利用QuartusⅡ、protel99SE等设计软件进行设计。
关键词:
自动饮料售卖机、计数器、控制器;脉冲;设计
Abstract:
ThecurriculumdesignistheuseofEDAVerilogHDLtodesign,usingMAXⅡEPM570T144C5NmodelsofFPGAtodesignanautomaticbeveragevendingmachines.SlotmachineswithtwoCoinholes,itcanaccept1yuanand0.5yuancoins.2.5yuanperbottledrinks,1yuanand0.5yuanusedtwokeysinstead.Machinealsohastwooutputs,thedesignrequirementsonthemachinegivechangeandoutputsignalsprompteddrinks.ThisdesigncoursedesignprocessinaccordancewithEDAsourcecodetowrite,theformersimulation,synthesis,placementandrouting,designacircuitschematic.ThedesignmainlyusesQuartusⅡ,protel99SEdesignsoftwaretodesign.
Keywords:
Automaticbeveragewendingmachines,Counter,Controller,Pulse,Design
前言3
二.总体方案设计:
4
三设计实现6
3.1各单元模块功能介绍及电路设计6
3.1.1投币信号产生电路:
6
3.1.2电源模块的构成如图所示:
6
3.1.4数码显示7
四.系统调试与验证8
4.1对计数功能的验证程序及仿真结果:
8
4.2投币功能的实现:
9
4.3显示功能的实现:
10
4.4对取货功能的实现:
13
4.5总体功能的实现:
15
4.6对部分功能的仿真如图所示:
18
五设计总结23
六参考文献24
参考文献:
24
前言
近年来,集成电路技术的迅猛发展,特别是可编程逻辑器件的高速发展,电子设计自动化EDA技术成为电子设计工程师的新宠。
EDA技术以计算机为工具完成数字系统的逻辑综合、布局布线和设计仿真等工作。
电路设计者只需要完成对系统功能的描述,就可以由计算机软件进行系统处理,最后得到设计结果,并且修改设计方案如同修改软件一样方便。
利用EDA工具可以极大地提高设计效率。
VHDL是指超高速集成电路硬件描述语言。
VHDL主要用于描述数字系统的结构、行为、功能、和接口,除了含有许多具有硬件特征的语句外,VHDL的程序结构特点是,将一项工程设计或称设计实体分成外部和内部。
在对一个设计实体定义了外部界面后,一旦其内部开发完成,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部的概念是VHDL系统设计的基本点。
利用VHDL语言的方便与强大功能的特点设计了一套自动饮料售货机系统。
其用方便、可靠、节省人力的自动饮料售卖机机将在社会生活中成为一种趋势,它的出现一定程度上也体现了现代文明的发展程度。
本设计是一套结构简单,操作方便,性能可靠的自动饮料售卖机产品。
自动饮料售卖机电路设计采用选择商品电路、投币累加电路、统计卖出商品电路等四个基本电路构成。
自动售货机在接受投入钱币后,通过与商品价格比较,确定是否能够售出商品和把算出剩余的钱找回。
当商品输出后售货机自动把上次卖出商品的价格和投入的钱币的总和清零,这时才可以进行下次交易。
自动售货机还应满足商家查看销售商品的总和及使其清零,和控制该售货机进行整体复位。
该售货机可以帮助商家更好的销售商品,并且节省人力,获得更大的利润
自动饮料售卖机是能够根据投入的钱币自动取出饮料的机器,它是商业自动化的常用设备,不受时间、地点的限制,能节省人力、方便交易。
现代的自动饮料售卖机的种类、结构和功能依出售的饮料种类而异。
钱币装置是自动饮料售卖机的核心,其主要功能是确认投入钱币的真伪,分选钱币的种类,计算金额。
如果投入的金额达到购买物品的数值即发出售货信号,并找出余钱。
自动饮料售卖机自动输出顾客所要的商品。
因此,自动售货机在商业,食品行业越来越普及,更方便消费者购买自己所需的商品。
自动售卖机是本世纪70年代在日本、欧美发展起来的高新技术现代应用产品,被称为24小时营业的微型超市,售货领域已扩展至小食品、小用品、香烟、电话卡、车票、邮票等。
目前在40多个国家已经广泛使用,日本平均每23人一台,美国平均每40人一台,欧洲平均每60人一台。
在邻国日本,70%份额的罐装饮料市场是通过自动售货机售出的;美国可口可乐公司拥有五十余万台饮料自动售货机分布在世界各地。
通过自动售货机销售将成为商品零售业不可分割的重要组成部分。
二.总体方案设计:
方案1
此方案中,自动售货机系统以FPGA器件作为处理和控制核心,能完成货物的信息存储,进程控制,硬币处理,余额计算,显示等功能。
系统根据用户输入的货币,判断钱币是否足够,足够则售货,不够则提示并退出。
系统自动的计算出应找钱币余额、库存数量并显示。
系统按功能分为:
分频模块、控制模块、译码模块、译码显示模块。
方案1的系统组成方框图:
方案2
自动售货机控制系统设计主要有三个功能模块,一个为售货机模块:
该模块能完成货物信息的存储,硬币处理,余额计算。
一个为动态扫描模块:
功能主要是硬件实验板上让两路信号同时在两个7段数码管上显示出来。
另一个为输出控制模块:
该模块主要是控制OUT和OUT1输出信号来控制阀门打开与找钱,并且控制阀门的打开时间。
设计思路:
控制信号输入到售货机模块,售货机进行各项功能操作,输出信号在7段数码管上显示出来。
选择:
方案1功能模块较多,且每个功能模块下还包括几个程序模块,设计起来,程序输入必然很多很繁琐,当然涉及到的问题就较多,较复杂,而且对clk的分频也有多次,这不太利于功能和时序仿真,也不太利于最后在硬件实验板上进行模拟实验。
方案2功能模块较少,但是功能实现都一样,这就减少了程序的繁冗,最后电路图显得就更加简短明了,越少的中间环节,实际操作起来肯定相对要容易一些,所以最后选择方案。
方案2的系统组成框图:
本系统由对外部投入硬币的检测来产生脉冲,并对产生的脉冲进行计数,其中a表示投入的是0.5元的硬币,b表示投入的是1元的硬币,每次根据投入的硬币不同而分别计数,并将投入的总金额用两位数码管显示出来,当达到了交易金额时,out产生一个正脉冲,此正脉冲控制闸门打开,汽水掉出来,当超出了交易金额,则out1会产生一个正脉冲,饮料售卖机找回0.5元钱。
三设计实现
3.1各单元模块功能介绍及电路设计
自动饮料售货机主要是由以下几个部分构成,电源电路、数码显示、时钟脉冲、投币脉冲、闸门时间控制等,各部件形成一个简单的自动售货机系统。
此设计主要用到MAXⅡEPM570T144C5N芯片,其实现主要的功能是对投币信号的计数与计算,判断是否达到所买物品的价格,如果不足的显示所投的钱数,钱足则控制闸门三秒后放出饮料。
3.1.1投币信号产生电路:
自动售货机的所有信号均由同步时钟信号CLK的正边沿触发,由于售货机的硬币接收器一般是一个机械装置,投币时产生的信号要比同步信号慢得多,一般可以持续好几个周期。
必须对投币输入信号进行处理,使每一次投币时在CLK脉冲周期内只能产生一个脉冲作为功能控制模块的投币驱动信号。
基于一面的功能要求,设计了下面所示的投币输入信号的处理电路
投币信号产生
3.1.2电源模块的构成如图所示:
此电路是5V转3.3V的电源电路图,芯片的工作电压是在3.3V达到最佳状态,二极管的额定电流值应大于最大负载电流的1.2倍,但考虑到负载短路的情况,二极管的额定电流值应大于LM2575的最大电流限制;另外二极管的反向电压应大于最大输入电压的1.25倍。
输入电容应大于47μF,并要求尽量靠近电路。
而输出电容推荐使用的电容量为100μF~470μF,其耐压值应大于额定输出的1.5~2倍。
对于5V电压输出,推荐使用耐压值为16V的电容。
3.1.3时钟电路
在功能实现模块中,售货机在放出饮料的时候需要延时三秒钟,程序中count1数3000下,因此需要1KHZ的时钟脉冲,设计中为同步时钟,所以此时钟脉冲电路为芯片提供“脉搏”。
图中是一种1KHz脉冲发生电路。
它由集成电路CD4060和晶振、电阻和电容等元件组成。
CD4060是14位二进制串行计数、分频器和振荡器。
CD4060内部分为两部分,其中一部分是14级计数/分频器,其分频系数为16~16348;另一部分既可与外接电阻和电容构成RC振荡器,又可与外接晶体构成高精度的晶体振荡器。
在采用一定频率的晶振组成晶振振荡器,其震荡信号经过CD4060内部分频后,在Q输出相应频率的脉冲信号。
设计中需要1000hz的时钟脉冲,所以外接30720Hz的晶振,在Q5端输出大约是1000HZ的时钟脉冲。
3.1.4数码显示
根据程序中,在不满足交易金额的时候,需要把所投的币数额显示在数码管上,利用一个控制信号weixuan来控制数码管的显示位置,当weixuan为0时着在低位显示,当weixuan为1时选择高位。
硬件中选用两个数码管来显示,芯片输出的电流不能驱动数码管来显示,因此需要74HC245来驱动数码管的显示,E端必须接地,这样芯片才能正常工作,DIR端的功能是:
当为高的时候数据A到B,为低的时候B到A。
设计中使用两片芯片,一片来让数码管显示数值,一片来控制weixuan让数码选择显示的位置。
在74HC245与数码管之间需要用一个电阻。
当投入五角的硬币的时候,由于不满足交易金额则数码管上显示0.5,为一元的时候则为01。
数码管寄存器
四.系统调试与验证
通过对以下各段程序的仿真得出了总的原理图,通过绘图得出了以下电路图:
4.1对计数功能的验证程序及仿真结果:
modulejishu(a,b,out,a1,b1);
inputa,out,b;
outputa1,b1;
reg[4:
1]a1,b1;//汽水出来后计数值清零
always@(posedgeaorposedgeout)
begin
if(out==1)a1<=0;//汽水出来后计数值清零
elsea1<=a1+4'b1;
end
always@(posedgeborposedgeout)
begin
if(out==1)b1<=0;//汽水出来后计数值清零
elseb1<=b1+4'b1;
end
endmodule
该部分程序生成的原理图如下;
仿真图如下:
4.2投币功能的实现:
程序如下:
moduletoubi(clk,a1,b1,out,out1);
inputclk;
input[3:
0]a1,b1;
outputout;//out为高电平时售卖机闸门打开,汽水掉出来
outputout1;//out1为高电平时候找0.5元
regout,out1;
always@(posedgeclk)
begin
if(a1==5)out<=1;//因为汽水为2.5,可以给5个0.5元
elseif(a1==3&&b1==1)out<=1;//可以给3个0.5元和1个1元
elseif(a1==1&&b1==2)out<=1;//,可以给1个0.5元和2个1元
elseif(b1==3)beginout<=1;out1<=1;end
end
endmodule
程序仿真结果:
4.3显示功能的实现:
程序如下:
modulexianshi(clk,a,b,a1,b1,duanxuan,weixuan,);
inputclk;
inputa,b;
input[3:
0]a1,b1;//a为投入0.5元信号,b为投入1元信号
output[8:
1]duanxuan;//输出8位段选信号
outputweixuan;//输出1位位选信号
regweixuan;
reg[8:
1]duanxuan;
reg[31:
0]count;//数码管动态扫描计数
reg[31:
0]count1;//用于计算售卖机闸门打开时间
always@(posedgeclk)
begin
if(a1==0&&b1==0)
begin
count<=count+1;
if(count==50)//如果实际运行中发现数码管有闪烁,可以将此数值调小
begin
weixuan<=1'b0;
duanxuan<=8'b00111111;//0
end
if(count==100)//如果实际运行中发现数码管有闪烁,可以将此数值调小
begin
weixuan<=1'b1;
duanxuan<=8'b00111111;
count<=0;
end
end
elseif(a==1)//投币0.5元,显示0.5,假设数码管为共阴极的
begin
count<=count+1;
if(count==50)//如果实际运行中发现数码管有闪烁,可以将此数值调小
begin
weixuan<=1'b0;
duanxuan<=8'b01101101;//5
end
if(count==100)//如果实际运行中发现数码管有闪烁,可以将此数值调小
begin
weixuan<=1'b1;
duanxuan<=8'b10111111;//0.
count<=0;
end
end
elseif(b==1)//投币1元,显示01
begin
count<=count+1;
if(count==50)//如果实际运行中发现数码管有闪烁,可以将此数值调小
begin
weixuan<=1'b0;
duanxuan<=8'b00000110;//1
end
if(count==100)//如果实际运行中发现数码管有闪烁,可以将此数值调小
begin
weixuan<=1'b1;
duanxuan<=8'b00111111;//0
count<=0;
end
end
end
endmodule
仿真图如下:
4.4对取货功能的实现:
程序如下:
modulequhuo(clk,a1,b1,out,out1);
inputclk;
input[3:
0]a1,b1;
outputout;//out为高电平时售卖机闸门打开,汽水掉出来
outputout1;//out1为高电平时候找0.5元
regout,out1;
reg[31:
0]count1;
always@(posedgeclk)
begin
if(a1==5)out<=1;//因为汽水为2.5,可以给5个0.5元
elseif(a1==3&&b1==1)out<=1;//可以给3个0.5元和1个1元
elseif(a1==1&&b1==2)out<=1;//,可以给1个0.5元和2个1元
elseif(b1==3)beginout<=1;out1<=1;end
if(out==1)
begin
if(count1==3000)//让闸门打开3秒,由于为1KHz时钟,故要数3000下
begin
out<=0;
out1<=0;
count1<=0;
end
elsecount1<=count1+1;
end
end
endmodule
程序生成原理图如下:
仿真图如下:
4.5总体功能的实现:
程序如下:
moduleshoumaiji(clk,a,b,duanxuan,weixuan,out,out1);
inputclk;
inputa,b;//a为投入0.5元信号,b为投入1元信号
output[8:
1]duanxuan;//输出8位段选信号
outputweixuan;//输出1位位选信号
outputout;//out为高电平时售卖机闸门打开,汽水掉出来
outputout1;//out1为高电平时候找0.5元
regweixuan;
reg[8:
1]duanxuan;
reg[31:
0]count;//数码管动态扫描计数
reg[31:
0]count1;//用于计算售卖机闸门打开时间
reg[4:
1]a1,b1;//用a1,b1寄存投入的0.5元和1元硬币数目
regout,out1;
always@(posedgeaorposedgeout)
begin
if(out==1)a1<=0;//汽水出来后计数值清零
elsea1<=a1+4'b1;
end
always@(posedgeborposedgeout)
begin
if(out==1)b1<=0;//汽水出来后计数值清零
elseb1<=b1+4'b1;
end
always@(posedgeclk)
begin
if(a1==5)out<=1;//因为汽水为2.5,可以给5个0.5元
elseif(a1==3&&b1==1)out<=1;//可以给3个0.5元和1个1元
elseif(a1==1&&b1==2)out<=1;//,可以给1个0.5元和2个1元
elseif(b1==3)beginout<=1;out1<=1;end//可以给3个一块的
elseif(a1==0&&b1==0)
begin
count<=count+1;
if(count==50)//如果实际运行中发现数码管有闪烁,可以将此数值调小
begin
weixuan<=1'b0;
duanxuan<=8'b00111111;//0
end
if(count==100)//如果实际运行中发现数码管有闪烁,可以将此数值调小
begin
weixuan<=1'b1;
duanxuan<=8'b00111111;
count<=0;
end
end
elseif(a==1)//投币0.5元,显示0.5,假设数码管为共阴极的
begin
count<=count+1;
if(count==50)//如果实际运行中发现数码管有闪烁,可以将此数值调小
begin
weixuan<=1'b0;
duanxuan<=8'b01101101;//5
end
if(count==100)//如果实际运行中发现数码管有闪烁,可以将此数值调小
begin
weixuan<=1'b1;
duanxuan<=8'b10111111;//0.
count<=0;
end
end
elseif(b==1)//投币1元,显示01
begin
count<=count+1;
if(count==50)//如果实际运行中发现数码管有闪烁,可以将此数值调小
begin
weixuan<=1'b0;
duanxuan<=8'b00000110;//1
end
if(count==100)//如果实际运行中发现数码管有闪烁,可以将此数值调小
begin
weixuan<=1'b1;
duanxuan<=8'b00111111;//0
count<=0;
end
end
if(out==1)
begin
if(count1==3000)//让闸门打开3秒,由于为1KHz时钟,故要数3000下
begin
out<=0;
out1<=0;
count1<=0;
end
elsecount1<=count1+1;
end
end
endmodule
程序生成的原理图如下:
仿真图如下:
4.6对部分功能的仿真如图所示:
4-6-1.不满足交易金额时对a.b进行计数
4-6-2当一种投币组合达到交易金额时产生一个out高脉冲
4-6-3没人投币时数码管显示0
4-6-4如果投入一个五角硬币数码管显示0.5
4-6-5.投入一元数码管显示1.0
五设计总结
经过这次对自动饮料售货机系统的设计,让我对EDA设计有了更一步的认识,同时也对EDA这门课程有了更深入的了解。
这次设计让我了解了关于自动饮料售货机的原理与设计理念,要设计一个电路先进行软件模拟仿真再进行实际的电路制作。
通过这次设计让我收获不小,比如在设计完成仿真的时候没有考虑到电路图中的一些元件值的大小,但是也能仿真成功,而实际上在硬件实现中却行不通,所以在设计的时候要充分的考虑到实际情况,从而更加完善设计。
这次EDA课程设计终于顺利完成了,也解决了设计中遇见的一些问题。
在这次设计中我受益匪浅.对QuartusⅡ软件和protel软件的运用更加熟练。
在摸索该如何设计程序使之实现所需功能的过程中,培养了我的设计思维,增加了实际操作能力,总的来说这次收获不小,基本能够做到学以致用。
当然这个设计存在许多的不足,比如这个设计不能识别纸币,且只能卖一种饮料,数码显示时不能显示当前所投钱的总数而是只显示0、0.5和1元,所以这个设计还需要进一步的修改与完善,在此设计的基础上我们可以加一个键盘让售货机卖更多种类的饮料。
这次设计提高了我们的逻辑思维能力,使我们在程序的改写和运用上有了很大的进步。
加深了我们对Verilog硬件语言的认识,进一步增进了对一些常见器件的了解。
另外,我们还更加充分的认识到,EDA这门课程在科学发展中的至关重要性。
查阅参考书的独立思考的能力以及培养非常重要,我们在设计电路时,遇到很多不理解的东西,有的我们通过查阅参考书弄明白,有的通过网络查到,但由于时间和资料有限我们更多的还是独立思考。
相互讨论共同研究也是很重要的,经常出现一些问题,经过和同组同学讨论和资料的查询最终得到了解决。
锻炼了我们的团队合作精神及分工合作的能力。
最后应感谢黄老师的辛勤指导下,能让我在困境中找到解决难题的办法,并且对EDA有了更深刻的认识,同时在黄老师身上学到了很多设计中适用的方法,当然还要感谢和我“共同战斗”的同学,没有他们的帮助我也很难把
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自动 售货 设计