欢迎来到天天文库
浏览记录
ID:32657792
大小:335.61 KB
页数:11页
时间:2019-02-14
《eda实验报告---自动售货机》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、自动售货机的设计一.实验内容:本自动售货机系统,结合EDA技术,采用ALTERA公司可编程逻辑器件(CPLD)EPM7128SLC84-15芯片作为控制核心,再配以必要的外围电路从而实现只销售两种饮料,售价均为15元,可以找零和退币等功能的EDA应用系统。芯片的设计是以MAX_PLUSII作为开发平台,VIIDL语言作为开发语言,使用掌宇公司CIC.310CPLD/FPGA数字开发系统完成软件测试。自己制作下载板与外围电路。二.实验分析:本自动售货机只销售两种罐装饮料。售价均为15元。顾客可以由两个不同投币孔分别投入3个5元硬币或2个10元硬币。一次交易只能买一罐,且自动
2、找零。只要按下取消键就会马上无条件退币。本设计的便件电路用2个按键电路代替2个投币孔,以LED点亮的数量显示各币种的投入数量,在以4Hz闪烁的LED来显示退币种类与数量。因为投币是计次电路,应先经过抖动消除电路处理。本设计采用1000Hz的系统吋钟信号来控制所有买卖行为。系统中设计的复位键为管理人员所用,并未在用户界面中设计。三•系统设计流程图:四•自动售货机外观图:(O为指示灯)oocoladietoo存货显示商品显不按015元键10元键按键确定键投币灯退币灯oooocola出货dzt出货五.电路原理图3二9aHCC-22UDmumKmG::I•卜卜卜卜II六.PCB图
3、:根据PR0TEL99画的系统原理图,成生PCB图。然后进行布局与布线。口口口口□口口匚口口口□□口口0、^10enu4、频率为20MHz,所以要分频系数分别为20000(COUNT)和250(C0UNTl)o(注:由于在自制的下载板上使用了1MHz的有源晶振,所以把程序中的COUNT的范围改为0到1000即可。详见下面括号内部分)return_clock:block--input:resetandelk,output:return_clksignalcount:integerrange1to20000;(1to1000)signalcountl:integerrange1to250;—000;signalflhz:std_logic;beginprocess(elk)beginifrisi5、ng_edge(elk)thencount<=count+l;ifcount<=10000then(count<=500)flhz<=O';elsif(count>10000andcount<=20000)then(count>500andcount<=1000)elseflhz〈二'O';count<=0;endif;endif;endprocess;process(flhz)beginifrisingcdge(flhz)thencountl<=countl+l;ifcountl〈二125thenreturnclk<=,O';elsif(countl>125andcou6、ntl<=250)thenreturnclk<=,V;elsereturnclk<=,O';countl<=0;endif;endif;endprocess;endblockreturnclock;2.投入10或5元硬币处理电路先对按键信号进行去抖动处理。然后在投币信号到来时,先计算投币总量与总面值。再对投币总量进行显示。程序中用CASE语句将投币数量进行显示。此处以10元硬币处理电路为例。coin10counting:block--input:elk,roset,coin10,output:ledten,totalamount10signalcoinlO:stdlogi7、c;--clearedcoin10signalsignalnocointen:integerrange0to2;beginul:dcbounceportmap(clk=>clk,touch=>coin10,pushout=>coinl0);process(roset,coinlO)beginifreset=,1’thentotalamountten<=0;nocointen<=0;ledten〈二〃00";elsifrisingedge(coinlO)thentotalamounttcn〈二totalamountten+10;
4、频率为20MHz,所以要分频系数分别为20000(COUNT)和250(C0UNTl)o(注:由于在自制的下载板上使用了1MHz的有源晶振,所以把程序中的COUNT的范围改为0到1000即可。详见下面括号内部分)return_clock:block--input:resetandelk,output:return_clksignalcount:integerrange1to20000;(1to1000)signalcountl:integerrange1to250;—000;signalflhz:std_logic;beginprocess(elk)beginifrisi
5、ng_edge(elk)thencount<=count+l;ifcount<=10000then(count<=500)flhz<=O';elsif(count>10000andcount<=20000)then(count>500andcount<=1000)elseflhz〈二'O';count<=0;endif;endif;endprocess;process(flhz)beginifrisingcdge(flhz)thencountl<=countl+l;ifcountl〈二125thenreturnclk<=,O';elsif(countl>125andcou
6、ntl<=250)thenreturnclk<=,V;elsereturnclk<=,O';countl<=0;endif;endif;endprocess;endblockreturnclock;2.投入10或5元硬币处理电路先对按键信号进行去抖动处理。然后在投币信号到来时,先计算投币总量与总面值。再对投币总量进行显示。程序中用CASE语句将投币数量进行显示。此处以10元硬币处理电路为例。coin10counting:block--input:elk,roset,coin10,output:ledten,totalamount10signalcoinlO:stdlogi
7、c;--clearedcoin10signalsignalnocointen:integerrange0to2;beginul:dcbounceportmap(clk=>clk,touch=>coin10,pushout=>coinl0);process(roset,coinlO)beginifreset=,1’thentotalamountten<=0;nocointen<=0;ledten〈二〃00";elsifrisingedge(coinlO)thentotalamounttcn〈二totalamountten+10;
此文档下载收益归作者所有