自动售邮票机的控制电路设计范本模板Word文件下载.docx
《自动售邮票机的控制电路设计范本模板Word文件下载.docx》由会员分享,可在线阅读,更多相关《自动售邮票机的控制电路设计范本模板Word文件下载.docx(17页珍藏版)》请在冰点文库上搜索。
![自动售邮票机的控制电路设计范本模板Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/54c8d4b5-4d9f-4ead-993b-f89e7d3a82a4/54c8d4b5-4d9f-4ead-993b-f89e7d3a82a41.gif)
而对状态机得应用应注意其设计步骤:
a.逻辑抽象。
分析给定的逻辑问题,搞清楚输入和输出,通常取原因或者条件为输入,结果为输出.然后定义输入输出逻辑状态和每个电路状态的含义,并对电路各个状态进行排序和它们之间的转换关系搞清楚。
这个过程非常需要严谨务实的作风,因为定义电路的状态的优劣会影响你的整个设计。
如果大方向都没有搞好,接下来的设计会变得艰难,甚至走入死角。
到时候又回过头来重新定义分析.
b.通过从实际问题分析出来的时序问题,通过画出状态图一目了然搞清楚它们之间的转换关系.并对状态图进行化简优化。
对在相同的输入下有相同输出,并转换到同样一个次态的。
要进行合并,这样设计出来的状态机会更简单,高效。
3、设计思路
利用状态机,分别模拟所输入的钱的累积值,根据输入的钱的面值的不同,进入不同的次态,在各个不同的状态下,又通过比较所输入的钱的总值与所选邮票的面值,做出售出邮票并找出相应的零钱。
在下述实验原理中,进程一为脉冲发生电路,不断的通过脉冲变化来扫描是否有相应的输入。
进程二是状态转换,将次态的值重新付给现态,不断的改变现有状态.进程三中,首先判断了是选择的何种面值的邮票,而且在复位信号没有被按下的情况下对所售面值为六毛的邮票进行了分析处理,从刚开始输入为零时,根据输入不同的面值的钱来判断下一个状态是什么,并且对在每个相应状态下应该做什么进行了指明,例如如果刚开始输入了一毛,则由初始状态转到输入了一毛的这个状态,如果此时继续输入钱,根据输入的面值进入下一个对应状态,而如果此时按下复位信号,则找出这一毛钱,当然这时是不会售出邮票的,同时现态恢复为初始状态
在选购六毛邮票的情况下,设投币初始状态为ST0,如果投入一枚一毛硬币为(累积一毛)ST1,如果投入一枚五毛硬币为(累积五毛)ST5,如果投入一枚一元硬币则输出一枚邮票并且找零四毛且次态重新定义为初始状态ST0;
在ST1状态下如果再次输入一枚一毛硬币(累计两毛)为ST2,如果投入一枚五毛硬币(累计六毛)则输出一枚邮票且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块一)则输出一枚邮票并且找零五毛且次态重新定义为初始状态ST0;
在ST2状态下如果再次输入一枚一毛硬币(累计三毛)为ST3,如果投入一枚五毛硬币(累计七毛)则输出一枚邮票并且找零一毛且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块二)则输出一枚邮票并且找零六毛且次态重新定义为初始状态ST0;
在ST3状态下如果再次输入一枚一毛硬币(累计四毛)为ST4,如果投入一枚五毛硬币(累计八毛)则输出一枚邮票并且找零两毛且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块三)则输出一枚邮票并且找零七毛且次态重新定义为初始状态ST0;
在ST4状态下如果再次输入一枚一毛硬币(累计五毛)为ST5,如果投入一枚五毛硬币(累计九毛)则输出一枚邮票并且找零三毛且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块四)则输出一枚邮票并且找零八毛且次态重新定义为初始状态ST0;
在ST5状态下如果再次输入一枚一毛硬币(累计六毛)则输出一枚邮票并且态重新定义为初始状态ST0,如果投入一枚五毛硬币(累计一元)则输出一枚邮票并且找零四毛且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块五)则输出一枚邮票并且找零九毛且次态重新定义为初始状态ST0。
如果选择的邮票面值为八毛,七基本原理和六毛面值邮票的一样,在这里就不赘述了。
如果在累计钱数小于邮票面值的情况下按下复位键,这时找零端口的输出为此时的钱的总和,能够实现退钱是通过在每个状态下定义了两个找零信号,在为按复位键的情况下是将信号SIG_ZHAO赋值给找零信号端口,而在按下复位键的情况下,找零信号端口的输出为ZHAORE这个信号的值,而这两个信号的值在不同状态下有相应的不同的值,根据以上思路我们便可以进行程序的编写了.
4实验程序
LIBRARYIEEE;
USEIEEE。
STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYZIDONGIS
PORT(RESET:
INSTD_LOGIC;
——复位信号
CLK,LIU,BA:
INSTD_LOGIC;
——
INYM,INWM,INYY:
——钱输入端口
YOU:
OUTSTD_LOGIC;
-—邮票出口
ZHAO:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
-—找钱出口
ENDZIDONG;
ARCHITECTUREBEHAVOFZIDONGIS
TYPESTATESIS(ST0,ST1,ST2,ST3,ST4,ST5,ST6,ST7);
-—状态定义
SIGNALYIMAO,WUMAO,YIKUAI:
STD_LOGIC;
—-钱输入信号
SIGNALSIG_YOU:
--输出对应信号
SIGNALSIG_ZHAO:
STD_LOGIC_VECTOR(3DOWNTO0);
-—找零对应信号
SIGNALZHAORE:
STD_LOGIC_VECTOR(3DOWNTO0);
——复位时的找零
SIGNALCURRENT_STATE:
STATES;
--现态
SIGNALNEXT_STATE:
STATES;
—-次态
BEGIN
P1:
PROCESS(CLK)--将输入送相应的信号
IFCLK'
EVENTANDCLK='
1’THEN
YIMAO〈=INYM;
WUMAO<
=INWM;
YIKUAI〈=INYY;
ENDIF;
ENDPROCESSP1;
p2:
PROCESS(RESET,CLK)—-次态给现态
IFRESET='
1’THEN
CURRENT_STATE<
=ST0;
ELSIFCLK’EVENTANDCLK='
CURRENT_STATE〈=NEXT_STATE;
ENDPROCESSp2;
p3:
PROCESS(CLK,CURRENT_STATE,NEXT_STATE,YIMAO,WUMAO,YIKUAI)—-状态转换
IFRESET=’1’THENSIG_ZHAO<
=ZHAORE;
NEXT_STATE〈=ST0;
—-复位找钱
ELSIFLIU='
1’THEN
CASECURRENT_STATEIS
WHENST0=>
ZHAORE〈=”0000”;
-—状态S0
IFYIMAO=’1’THEN-—输入1毛
SIG_YOU〈='
0'
;
—-不出邮票
SIG_ZHAO〈=”0000"
——不找钱
NEXT_STATE<
=ST1;
——次态为ST1
ELSIFWUMAO='
1’THEN-—输入5毛
SIG_YOU<
=’1'
;
-—出邮票
SIG_ZHAO<
="
0000"
—-不找钱
NEXT_STATE<
=ST5;
-—次态为ST5
ELSIFYIKUAI='
1'
THEN-—输入1块
SIG_YOU〈='
1’;
——出邮票
SIG_ZHAO〈="
0100"
—-找4毛
NEXT_STATE<
=ST0;
--次态为ST0
ELSE
='
SIG_ZHAO〈="
—-不输入都不变
ENDIF;
WHENST1=>
ZHAORE<
=”0001"
;
IFYIMAO=’1'
THEN
SIG_ZHAO〈=”0000”;
=ST2;
ELSIFWUMAO='
SIG_YOU〈='
=”0000”;
ELSIFYIKUAI='
SIG_YOU<
SIG_ZHAO〈=”0101”;
NEXT_STATE〈=ST0;
SIG_YOU〈=’0'
WHENST2=〉ZHAORE<
="
0010"
=’0’;
0000”;
NEXT_STATE〈=ST3;
SIG_YOU<
0001"
ELSIFYIKUAI=’1'
0110”;
0’;
SIG_ZHAO<
0000”;
NEXT_STATE〈=ST2;
ENDIF;
WHENST3=〉ZHAORE<
0011”;
IFYIMAO='
=’0'
=”0000"
NEXT_STATE〈=ST4;
ELSIFWUMAO=’1'
SIG_YOU〈=’1'
=”0010"
NEXT_STATE〈=ST0;
ELSIFYIKUAI=’1’THEN
SIG_YOU〈=’1’;
0111”;
=”0000”;
WHENST4=〉ZHAORE〈="
0100”;
SIG_YOU〈=’0’;
NEXT_STATE〈=ST5;
ELSIFWUMAO='
1’;
SIG_ZHAO〈=”1000”;
0’;
=ST4;
WHENST5=〉ZHAORE〈=”0101"
SIG_YOU〈=’1'
SIG_ZHAO〈=”0000”;
NEXT_STATE〈=ST0;
SIG_ZHAO〈="
ELSIFYIKUAI='
SIG_YOU〈=’1'
SIG_ZHAO<
=”1001"
WHENOTHERS=>
NULL;
--其他状态空操作
ENDCASE;
ELSIFBA=’1'
THEN-—选择8毛的邮票
=”0000”;
--状态S0
IFYIMAO=’1’THEN——输入1毛
-—不找钱
=ST1;
—-次态为ST1
1’THEN--输入5毛
SIG_YOU〈=’0’;
——不出邮票
--不找钱
NEXT_STATE〈=ST5;
—-次态为ST5
THEN——输入1块
—-出邮票
SIG_ZHAO〈=”0010”;
-—找2毛
——次态为ST0
-—不输入都不变
;
IFYIMAO=’1’THEN
=ST2;
ELSIFWUMAO=’1’THEN
=ST6;
SIG_ZHAO〈=”0011”;
NEXT_STATE〈=ST1;
0010”;
SIG_YOU〈=’0'
NEXT_STATE〈=ST7;
ELSIFYIKUAI=’1’THEN
=’1’;
0100”;
NEXT_STATE〈=ST0;
WHENST3=>
ZHAORE〈="
0011"
NEXT_STATE〈=ST0;
0101"
=ST3;
WHENST4=>
ZHAORE〈="
SIG_ZHAO〈=”0001"
0110"
WHENST5=>
=”0101"
=’1’;
ELSIFYIKUAI=’1'
SIG_ZHAO〈=”0111"
=ST5;
WHENST6=〉ZHAORE<
0110”;
NEXT_STATE〈=ST7;
ELSIFWUMAO=’1’THEN
SIG_ZHAO〈=”1000”;
WHENST7=〉ZHAORE<
0111"
SIG_YOU〈=’1’;
=”0100"
SIG_ZHAO〈=”1001"
=ST7;
—-其他状态空操作
ENDPROCESSp3;
p4:
PROCESS(CLK,SIG_YOU,SIG_ZHAO)—-将输出信号送输出端
IFCLK’EVENTANDCLK='
YOU〈=SIG_YOU;
ZHAO〈=SIG_ZHAO;
ENDPROCESSp4;
ENDBEHAV;
三、电路的连接调试与问题
在程序编写完毕后按照编译仿真后的下载图正确连接电路,通过高低电平开关模拟钱的输入,通过在实验箱上的模拟仿真,发现在输入端存在输入一次而模拟机却扫描到有多次输入这一问题,后来我们将扫描脉冲与输入端的脉冲进行了分离,也就是定义了两个脉冲,扫描脉冲依旧频率很快,不断对输入信号进行扫描,另外将输入端得脉冲频率调低,经过这样的改进有所进步,不再是输入一次而被多次的扫描,但是这样的改进也并没有彻底解决问题,经过我们的讨论我们发现,我们的设计最适合弹片式的输入端,那样在一次输入的情况下,弹片只可能被压下一次,这样脉冲也只能在弹片被压下的那一刻扫描到有输入存在,在很短的时间内弹片又恢复原有状态,这样就避免了一次输入被误认为有多次输入的这一问题。
四、自我评价与心得体会
这是一次有意义的EDA实验设计课题,也是一次综合性很强的实验,通过这次实验课题设计,不仅加深了我们对EDA设计思路的理解,更重要的是对VHDL语言以及其中的状态机的设计与应用有了更进一步的了解,使我们的设计思路有了进一步的提高,而且进一步的回顾并巩固了以前所学的知识。
也让我们尝到一步步将问题克服收获到成功的喜悦,坚定了我们克服困难解决问题的意志,在这一次实验中,我们小组也充分发挥了小组的力量,认识到合作的精神所在,通过集体的合作,培养了我们每个人实际动手、分析问题、解决问题的能力,让我们每个人都受益匪浅!