EDA实验报告自动售货机.docx

上传人:b****0 文档编号:18088418 上传时间:2023-08-13 格式:DOCX 页数:12 大小:354.71KB
下载 相关 举报
EDA实验报告自动售货机.docx_第1页
第1页 / 共12页
EDA实验报告自动售货机.docx_第2页
第2页 / 共12页
EDA实验报告自动售货机.docx_第3页
第3页 / 共12页
EDA实验报告自动售货机.docx_第4页
第4页 / 共12页
EDA实验报告自动售货机.docx_第5页
第5页 / 共12页
EDA实验报告自动售货机.docx_第6页
第6页 / 共12页
EDA实验报告自动售货机.docx_第7页
第7页 / 共12页
EDA实验报告自动售货机.docx_第8页
第8页 / 共12页
EDA实验报告自动售货机.docx_第9页
第9页 / 共12页
EDA实验报告自动售货机.docx_第10页
第10页 / 共12页
EDA实验报告自动售货机.docx_第11页
第11页 / 共12页
EDA实验报告自动售货机.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

EDA实验报告自动售货机.docx

《EDA实验报告自动售货机.docx》由会员分享,可在线阅读,更多相关《EDA实验报告自动售货机.docx(12页珍藏版)》请在冰点文库上搜索。

EDA实验报告自动售货机.docx

EDA实验报告自动售货机

自动售货机的设计

 

一.实验内容:

本自动售货机系统,结合EDA技术,采用ALTERA公司可编程逻辑器件(CPLD)EPM7128SLC84-15芯片作为控制核心,再配以必要的外围电路从而实现只销售两种饮料,售价均为15元,可以找零和退币等功能的EDA应用系统。

芯片的设计是以MAX_PLUSII作为开发平台,VHDL语言作为开发语言,使用掌宇公司CIC_310CPLD/FPGA数字开发系统完成软件测试。

自己制作下载板与外围电路。

二.实验分析:

本自动售货机只销售两种罐装饮料。

售价均为15元。

顾客可以由两个不同投币孔分别投入3个5元硬币或2个10元硬币。

一次交易只能买一罐,且自动找零。

只要按下取消键就会马上无条件退币。

本设计的硬件电路用2个按键电路代替2个投币孔,以LED点亮的数量显示各币种的投入数量,在以4Hz闪烁的LED来显示退币种类与数量。

因为投币是计次电路,应先经过抖动消除电路处理。

本设计采用1000Hz的系统时钟信号来控制所有买卖行为。

系统中设计的复位键为管理人员所用,并未在用户界面中设计。

三.系统设计流程图:

四.自动售货机外观图:

(为指示灯)

五.电路原理图

六.PCB图:

根据PROTEL99画的系统原理图,成生PCB图。

然后进行布局与布线。

注意:

布线时将晶振这种易产生噪声的器件的输出端与芯片时钟输入端的连线尽量布为直线;将电源与地线的宽度定为30mil到100mil之间。

本系统的电流不是很大,所以不用将板子的两面分别布成电源与地。

七.系统实物图:

八.软件系统框图

九.源程序:

1.产生系统频率和退币信号电路

首先要根据硬件电路的晶振频率确定分频系数,先产生系统频率,在进一步分频产生退币信号。

由于掌宇公司的开发系统上的晶振频率为20MHz,所以要分频系数分别为20000(COUNT)和250(COUNT1)。

(注:

由于在自制的下载板上使用了1MHz的有源晶振,所以把程序中的COUNT的范围改为0到1000即可。

详见下面括号内部分)

return_clock:

block--input:

resetandclk,output:

return_clk

signalcount:

integerrange1to20000;(1to1000)

signalcount1:

integerrange1to250;---000;

signalf1hz:

std_logic;

begin

process(clk)

begin

ifrising_edge(clk)then

count<=count+1;

ifcount<=10000then(count<=500)

f1hz<='0';

elsif(count>10000andcount<=20000)then(count>500andcount<=1000)

f1hz<='1';

else

f1hz<='0';

count<=0;

endif;

endif;

endprocess;

process(f1hz)

begin

ifrising_edge(f1hz)then

count1<=count1+1;

ifcount1<=125then

return_clk<='0';

elsif(count1>125andcount1<=250)then

return_clk<='1';

else

return_clk<='0';

count1<=0;

endif;

endif;

endprocess;

endblockreturn_clock;

2.投入10或5元硬币处理电路

先对按键信号进行去抖动处理。

然后在投币信号到来时,先计算投币总量与总面值。

再对投币总量进行显示。

程序中用CASE语句将投币数量进行显示。

此处以10元硬币处理电路为例。

coin_10_counting:

block--input:

clk,reset,coin_10,output:

led_ten,total_amount_10

signalcoin10:

std_logic;--clearedcoin_10signal

signalno_coin_ten:

integerrange0to2;

begin

u1:

debounce

portmap(clk=>clk,touch=>coin_10,push_out=>coin10);

process(reset,coin10)

begin

ifreset='1'thentotal_amount_ten<=0;

no_coin_ten<=0;

led_ten<="00";

elsifrising_edge(coin10)then

total_amount_ten<=total_amount_ten+10;

no_coin_ten<=no_coin_ten+1;

endif;

caseno_coin_tenis

when0=>led_ten<="00";

when1=>led_ten<="01";

when2=>led_ten<="11";

endcase;

endprocess;

endblockcoin_10_counting;

3.退币处理电路

此模块先要判断局部信号total_amount是否为15,若大于等于15则输出全局信号money_ok。

在出货信号为1时,程序才开始判断应该退出何种硬币与数量。

如果按了取消键,必须立即执行退币处理。

此程序在投币后,但未按下确认键时,而是按下取消键,也可以实现退出何种货币与种数的精确显示。

另外,在按下确认键后,找零的硬币已经退出后,再按取消键,则又把原来投入的硬币退出。

导致退出的硬币比投入的还要多。

为了避免此情况发生,通过增加IF语句来把此中情况排除。

此处的不足是无法对退货进行管理。

coin_returned:

block--input:

clk,reset,total_amount_ten,total_amount_five,return_clk,cancel,cola_out,diet_out

--output:

money_ok,led_five_return,led_ten_return,cola_choice,diet_choice

signaltotal_amount:

integerrange0to35;

begin

process(reset,clk)

begin

ifreset='1'thentotal_amount<=0;

money_ok<='0';

led_five_return<=(others=>'0');

led_ten_return<=(others=>'0');

elsifrising_edge(clk)then

total_amount<=total_amount_ten+total_amount_five;

iftotal_amount>=15thenmoney_ok<='1';

elsemoney_ok<='0';

endif;

if(cancel='1')then

ifno_coin_five=3then

led_five_return

(2)<=return_clk;

led_five_return

(1)<=return_clk;

led_five_return(0)<=return_clk;

elsifno_coin_five=2then

led_five_return

(1)<=return_clk;

led_five_return(0)<=return_clk;

elsifno_coin_five=1then

led_five_return(0)<=return_clk;

endif;

ifno_coin_ten=2then

led_ten_return

(1)<=return_clk;

led_ten_return(0)<=return_clk;

elsifno_coin_ten=1then

led_ten_return(0)<=return_clk;

endif;

elsif(diet_out='1'orcola_out='1')then

casetotal_amountis

when0=>null;

when5=>led_five_return

(2)<=return_clk;

when10=>led_ten_return

(1)<=return_clk;

when15=>null;

when20=>led_five_return

(2)<=return_clk;

when25=>led_ten_return(0)<=return_clk;

when30=>led_five_return

(1)<=return_clk;

led_ten_return

(1)<=return_clk;

whenothers=>led_ten_return(0)<=return_clk;

led_ten_return

(1)<=return_clk;

endcase;

elsif((diet_out='1'orcola_out='1')andcancel='1')then

casetotal_amountis

when20=>led_five_return(0)<=return_clk;

led_ten_return(0)<=return_clk;

when25=>led_ten_return

(1)<=return_clk;

led_ten_return(0)<=return_clk;

when30=>led_ten_return

(1)<=return_clk;

led_ten_return(0)<=return_clk;

led_five_return(0)<=return_clk;

whenothers=>null;

endcase;

endif;

endif;

endprocess;

endblockcoin_returned;

4.出货并计算存货处理电路

当money_ok,ok,饮料选择都同时为1时,才进行出货处理。

先假定两种存货量分别为20。

当发生出货时进行递减计数处理。

为了节省硬件资源与功耗,此系统并未采用数码管实时的显示存货量。

而且初始货存由软件设定。

为了使系统更加的人性化。

所以在货存不足2时加以显示,以提醒顾客作出其他选择。

所编程序为:

give_check:

block--input:

money_ok,ok,cola_choice,diet_choice,reset

--output:

cola_out,diet_out,led_cola_out,led_diet_out,led_cola_ok,led_diet

signalno_cola:

integerrange0to20;

signalno_diet:

integerrange0to20;

begin

cola_out<='1'when(money_ok='1'andok='1'andcola_choice='1')

else'0';

led_cola_out<=cola_out;

diet_out<='1'when(money_ok='1'andok='1'anddiet_choice='1')

else'0';

led_diet_out<=diet_out;

cola:

process(reset,cola_out)

begin

ifreset='1'thenno_cola<=2;--colastoreamount

led_cola_ok<='1';

elsifrising_edge(cola_out)thenno_cola<=no_cola-1;

elsenull;

endif;

ifno_cola=0thenled_cola_ok<='0';

elsifno_cola=1thenled_cola_ok<=return_clk;

elseled_cola_ok<='1';

endif;

endprocesscola;

diet:

process(reset,diet_out)

begin

ifreset='1'thenno_diet<=20;--dietstoreamount

led_diet_ok<='1';

elsifrising_edge(diet_out)thenno_diet<=no_diet-1;

elsenull;

endif;

ifno_diet=0thenled_diet_ok<='0';

elsifno_diet=1thenled_diet_ok<=return_clk;

elseled_diet_ok<='1';

endif;

endprocessdiet;

endblockgive_check;

(完整程序在软盘上)

十.仿真管脚分配图:

十一.结束语

通过软件的设计调试,硬件电路的制作。

最后软硬相结合,制作出了自动售货机系统的核心电路。

它不仅完成了设计之初的基本要求,而且还增加了精确退币,存货报警,以及接受退货服务等功能。

但是,由于受到学习时间和芯片逻辑单元的限制,在退货和复位上面还有待完善,还无法达到成为产品的要求。

这次实验使我对EDA技术有了更加深刻的理解。

对电路板的设计和制作,及对Protel99的使用也更加熟练。

通过对设计中遇到困难的排除,我学到了很多书本上学不到的知识,也知道自己还有很大差距。

自己要多学习,更要勇于实践,争取有更大的进步。

这次实验是在老师的耐心指导下完成的。

她们在授课中,对我们所遇到的问题都做了耐心细致的讲解,并提出许多宝贵的建议,使我们受益匪浅。

在此,感谢老师的关心指导。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2