简易电磁炉控制系统设计.docx

上传人:精*** 文档编号:842049 上传时间:2023-09-08 格式:DOCX 页数:37 大小:404.30KB
下载 相关 举报
简易电磁炉控制系统设计.docx_第1页
第1页 / 共37页
简易电磁炉控制系统设计.docx_第2页
第2页 / 共37页
简易电磁炉控制系统设计.docx_第3页
第3页 / 共37页
简易电磁炉控制系统设计.docx_第4页
第4页 / 共37页
简易电磁炉控制系统设计.docx_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、 摘要通过分析题目要求以及实际生活中电磁炉的工作要求,设计了简易的电磁炉的控制电路。采用模块化设计思路在Quartus II软件中利用VHDL语言实现模块化电路设计,利用图形化编程实现系统整体搭建,并利用Quartus II 软件功能进行仿真和分析。使用核心为Atmel EMP1270T144C5 芯片拥有按键、点阵和数码管等外设的实验板进行实际系统的模拟运行。此电路主要有以下几方面特色:1. 通过设计6状态的状态机模块实现单一按键控制的烹饪模式切换功能;2. 通过时序双向增减计数器模块实现双按键控制的可增减的火力大小调节功能;3. 通过设计5状态的状态机实现单一按键控制的倒计时定时功能;4.

2、 通过显示控制模块实现点阵和数码管构成的交互功能;5. 自动和强制关机断电功能。关键字:模块化设计控制系统VHDL编程一、 实验要求1. 使用一个按键控制烹饪模式:火锅(H)、煎炒(J)、爆炒(B)、煲汤(T)和蒸炖(Z),并能在点阵显示相应的英文字母标识。2. 使用两个按键控制火力的大小,火力模式有:1900W、1500W、1100W、600W、100W。要求一个按键正向调整,另一个反向调整,模式依次变化,并能在数码管后四位显示当前火力值。3. 使用一个按键设定时间,由按键控制在60s、30s、10s、5s之间切换,时间在数码管前两位显示,并且计时结束自动关闭电磁炉。4. 不进行定时操作时,

3、爆炒(B)默认3s,蒸炖(Z)默认20s,其他模式默认90s,并且爆炒(B)模式不能自定义定时时间。倒计时结束后爆炒(B)模式进入煎炒(J)模式,其他模式倒计时结束后关机。5. 设定关机按键,按键后强制关机,熄灭LED指示灯、点阵和数码管,直到按选择模式按键时再次开机并点亮LED灯。一、二、 总体设计思路数码管火力显示改变改变火力?YN计时时间改为设定时间Y人为定时?NN点阵显示、倒计时、数码管显示当前功率定时到?Y启动(通电)指示灯灭、不加热NULL选择火力?Not null 三、 功能模块的设计和实现系统共通过8个模块实现,分别是:分频、输入控制、模式选择、火力调节、人为定时、点阵译码器、

4、倒计时、数码管译码器这8个模块实现的,具体设计如下。(一) 烹饪模式选择模块(modeselect)设计1. 模块整体思路使用状态机进行编写,共计6个状态分别是:待机(S)、火锅(H)、煎炒(J)、爆炒(B)、煲汤(T)、蒸炖(Z)。各模式间由一个按键进行切换,检测到按键有效按下一次后,即切换到下一状态。在不同的状态下输出不同的控制信号对后续模块进行控制,状态转移图如图1:图1图2 2. 外部接口设计设计输入端口: 时钟信号CLK:STD_LOGIC,频率1MHz; 模式选择按键信号SELECT_IN : STD_LOGIC,用于改变状态机的状态; 复位信号T_OVER: STD_LOGIC,

5、使状态机复位到待机(S)状态。设计输出端口: 点阵控制信号端口OUT_SHOW:STD_LOGIC_VECTOR(2 DOWNTO 0); 输出默认时间OUT_TIME:STD_LOGIC_VECTOR(1 DOWNTO 0); 控制LED指示灯LED:STD_LOGIC; 标记是否已选择了模块IS_SELECTED:STD_LOGIC,用作后续模块判断当前是否处于待机(S)状态。3. 内部逻辑设计主要逻辑思路:依照状态转移图,将T_OVER和SELECT_IN组合成一个两位输入,使用典型的状态机方式编码,在CLK的每个上升沿判断当前的状态,并依照此时的状态和输入判断状态是否改变和改变的方式。

6、l 部分代码如下(完整代码见附录):IF(CLKEVENT AND CLK=1)THEN-时钟上升沿检测CASE STATE ISWHEN S=-待机模式CASE MT ISWHEN 00=STATE=S;MARK=0;OUT_MODE=000;OUT_TIME=11;SET_LED=0;IS_SELECT=0;FROM_BSTATE=S;MARK=0;OUT_MODE=000;OUT_TIME=11;SET_LED=0;IS_SELECT=0;FROM_B-T_OVER低、SELECT_IN高电平则切换为下一状态IF(MARK=0)THENSTATE=H;MARK=1;OUT_MODE=00

7、1;OUT_TIME=00;SET_LED=1;IS_SELECT=1;FROM_B=0;-用来保证每次按键只被响应一次ELSESTATE=S;OUT_MODE=000;OUT_TIME=11;SET_LED=0;IS_SELECT=0;FROM_BSTATE=S;MARK=1;OUT_MODE=000;OUT_TIME=11;SET_LED=0;IS_SELECT=0;FROM_BCASE MT ISWHEN 00=STATE=B;MARK=0;OUT_MODE=011;OUT_TIME=01;SET_LED=1;IS_SELECT=1;FROM_BSTATE=J;MARK=0;OUT_MO

8、DE=010;OUT_TIME=00;SET_LED=1;IS_SELECT=1;FROM_BIF(MARK=0)THENSTATE=T;MARK=1;OUT_MODE=010;OUT_TIME=00;SET_LED=1;IS_SELECT=1;FROM_B=0;ELSESTATE=B;OUT_MODE=011;OUT_TIME=01;SET_LED=1;IS_SELECT=1;FROM_BSTATE=J;MARK=1;OUT_MODE=010;OUT_TIME=00;SET_LED=1;IS_SELECT=1;FROM_B=1;END CASE;4. 模块仿真测试依照上述方法一次编写好6个状

9、态的进入条件和相应的输出,之后进行仿真测试。分析仿真图可以看到: 在T_OVER低电平时,每当SELECT_IN端口上升沿后,OUT_MODE改变一次; 当T_OVER为高电平时,状态切换回S状态,且若T_OVER持续高,则SELECT_IN按键失效,即T_OVER优先级高于SELECT_IN; OUT_TIME和OUT_MODE是根据当前不同的状态输出不同的二进制数,并且信号持续时间即为该状态的持续时间; 在B模式下当T_OVER信号到来时自动进入J模式而不是返回S模式; 在非S状态下,LED和IS_SELECT持续高电平。(二) 火力调节模块(fire_adjust)设计1. 模块整体思路

10、采用一个可增减计数器实现,使用两个按键输入信号控制加计数和减计数,每按一次按键响应一次,使用5进制循环计数器,每个数字分别代表功率1900W、1500W、1100W、600W、100W中的一个。在计数器中进行选择,不同的计数数字会给输出端口不同的二进制信号,这些信号有后续数码管译码器识别并根据约定显示不同的数字。2. 外部接口设计u 设计输入端口: 时钟信号CLK:STD_LOGIC,频率1MHz; 增减按键信号SELECT_IN : STD_LOGIC,用于加计数或减计数; 复位信号RESET: STD_LOGIC,使计数器回归1900W的初值; 判断信号MODE_SELECTED:STD_

11、LOGIC,为了判断系统是否处于待机状态。u 设计输出端口: 数码管信号端口SHOW_SHU:STD_LOGIC_VECTOR(2 DOWNTO 0);3. 内部逻辑设计设计思路:在RESET为低电平并且MODE_SELECTED为高电平时,在时钟上升沿(时钟频率为1MHz),检测按键接口IN_UP和IN_DOWN是否为高电平。并且定义A_MARK,D_MARK:STD_LOGIC信号,当IN_UP被响应过后,将A_MARK置为1,直到IN_UP变为低电平后将A_MARK归0,在IN_UP和A_MARK同时为1时不对IN_UP作出响应。同样对IN_DOWN和D_MARK做类似的编程。这样可以保

12、证一次按键只被响应一次,避免因按键持续时长大于时钟周期导致多次响应的误判。之后对不同的状态数字输出不同的三位二进制编码。l 部分代码如下(完整代码见附录):COUNT:PROCESS(IN_UP,IN_DOWN,RESET,CLK,MODE_SELECTED)BEGINIF(RESET=1OR MODE_SELECTED=0)THEN-RESET或处于待机状态,关闭数码管的信号NUM=4)THEN-加计数NUM=0;ELSENUM=NUM+1;END IF;CONT=1;A_MARK=1;-A_MARK置1,避免对同一次按键反复响应ELSECONT=CONT+1;END IF;ELSECONT

13、=1;A_MARK=0;-按键弹起(归0)后将A_MARK归0,准备下一次按键的响应END IF;IF(IN_DOWN=1)THEN-IN_DOWN按键的响应IF(CONT1=5000 AND D_MARK=0)THENIF(NUM=0)THEN-减计数NUM=4;ELSENUM=NUM-1;END IF;D_MARK=1;ELSIF(CONT15000 OR D_MARK=0)THENCONT1=CONT1+1;END IF;ELSECONT1=1;D_MARK=0;END IF;END IF;END IF;END PROCESS;4. 模块的仿真与分析仿真图如下所示,其中CLK频率1MHz

14、仿真图分析如下: RESET=1或MODE_SELECTED=0时输出为”000”,表示为默认火力; 输出长度为两次按键的间隔时间长度; IN_UP实现加计数功能,IN_DOWN实现减计数功能 通过仿真图可见,按键时间远大于CLK的周期但通过A_MARK和D_MARK有效避免了同一次按键被重复响应的情况。(三) 人工定时模块(mansettime)设计1. 模块整体思路使用一个5状态的状态机实现,每个状态分别对应一个预定时间:未定时、60s、30s、10s、5s,每个状态都会将一个三位二进制传输给倒计时(daojishi)模块,用来设定倒计时的初值。按键信号会使状态机在不同状态间依次切换。2.

15、 外部接口设计u 设计输入端口: 时钟信号CLK:STD_LOGIC,使用1MHz频率; 按键输入信号:IN_SET:STD_LOGIC; 复位信号:RESET:STD_LOGIC; 状态标记:MODE_SELECTED:STD_LOGIC;u 设计输出端口: 蜂鸣器:O_SOUND:STD_LOGIC; 传输定时信号SHOW:STD_LOGIC_VECTOR(2 DOWNTO 0)。3. 内部逻辑设计l 设计思路:根据状态转移图,将IN_SET和RESET何为一个两位二进制数进行选择判断,根据该二进制数的不同选择不同的响应方式:切换到下一个状态或停留在此状态不变或返回未设定状态。同样采用1M

16、Hz时钟检测按键,采用与火力调节模块相同的MARK手法避免对同此按键的多次响应。l 主要部分代码如下:P1:PROCESS(CLK,MODE_SELECTED)BEGINIF(MODE_SELECTED=0)THEN-相当于定时器的使能开关STATE=S0;NUM=0;MARK-状态:未设定IF(RESET=1)THEN STATE=S0;NUM=0;MARK=0; -复位按键的响应,将状态归为未设定ELSIF(IN_SET=1)THEN IF(MARK=0)THEN-检测到一次按键,切换到5s状态STATE=S1;NUM=1;MARK=1;CC=499999; -CC控制蜂鸣器的叫声延续时间

17、ELSESTATE=S0;NUM=0;END IF;ELSE STATE=S0;NUM=0;MARK-状态:5sIF(RESET=1)THEN STATE=S0;NUM=0;MARK=0;ELSIF(IN_SET=1)THEN IF(MARK=0)THENSTATE=S2;NUM=2;MARK=1;CC=499998;ELSESTATE=S1;NUM=1;END IF;ELSE STATE=S1;NUM=1;MARK=0;-未检测到按键,保持原状态不变END IF;根据这一思路将余下状态写完,并依据NUM的数值分配输出的信号。4. 模块的仿真与分析仿真分析 时钟频率为1MHz; 只有在RESE

18、T=0 并且MODE_SELECTED=1的时候才能进行时间的设定; 每次按键只被响应一次,且按键的输出与两次按键间隔时间相等; 输出在“000”至“100”之间切换,每一个数代表一个倒计时的时间。(四) 倒计时模块(daojishi)设计1 整体思路设计编写一个十进制计数器,首先通过前面模块传来的信号译出当前设定的计时时间,之后通过十进制减计数器每一秒减一,并实时将倒计时的数字传给数码管译码器显示,一直到减为0,输出“时间到”的信号。2 外部接口的设计u 设计输入端口: 时钟信号CLK:STD_LOGIC,使用1Hz频率; 默认时间信号DEFAULT_TIME: STD_LOGIC_VECT

19、OR(1 DOWNTO 0); 人为定时时间MANSET_TIME:STD_LOGIC_VECTOR(2 DOWNTO 0); 状态标记:MODE_SELECTED:STD_LOGIC;u 设计输出端口: 十位数字TIME_10: INTEGER RANGE 0 TO 9; 个位数字TIME_1: INTEGER RANGE 0 TO 9; 时间到信号TIMEOVER : STD_LOGIC ,表示计时结束;3 内部逻辑的设计3.1 减计数器的实现先将DEFAULT_TIME和MANSET_TIME端口的数据进行比对:l DEFAULT_TIME=“01”是,即此时为爆炒(B)模式,不允许人工

20、定时,使用DEFAULT_TIME进行赋值;l MANSET_TIME=“000”时使用DEFAULT_TIME进行赋值l 其他情况用MANSET_TIME进行赋值;l 将值同时赋给SIGNAL TEMP,TOTAL: INTEGER RANGE 0 TO 90,其中TEMP用于减计数,TOTAL记录当前设定的时间,用于比对定时的设置是否更改。使用1Hz频率扫描,每遇到时钟上升沿将当前TEMP减一,运算过程中同时比对TOTAL与此刻传来的要求计时的时间是否相等,若相等则继续计时,若不等则改变计时初值并重新计时。n 部分代码-这部分是倒计时的功能,T_SHU(1)是十位,T_SHU(0)是个位D

21、AO:PROCESS(CLK_1HZ,MARK,T_SHU)-实现倒计时的功能VARIABLE TOTAL_T:INTEGER RANGE 0 TO 90;BEGINIF(T_SHU(0)=0 AND T_SHU(1)=0)THEN -处于待机状态不计时TTOVER=0;MARK=0;ELSEIF(CLK_1HZEVENT AND CLK_1HZ=1)THEN-1s一次时钟上升沿IF(TOTAL_T/=T_SHU(1)*10+T_SHU(0)THEN-对比总时间的设定有无发生变化TOTAL_T:=T_SHU(1)*10+T_SHU(0);MARK=0;END IF;IF(MARK=0)THEN

22、-用于防止重复不停地给TEMP赋值TEMP=TOTAL_T;MARK=1;TTOVER=0;ELSIF(TEMP=0)THENTTOVER=1;-时间到的信号MARK=0;ELSETEMP=TEMP-1;-倒计时TTOVER=0;END IF;END IF;END IF;END PROCESS DAO;TIMEOVER=TTOVER;3.2 将数字分为十位和个位的实现使用VHDL中IEEE.numeric_std包内的REM函数实现取余,通过将当前的TEMP对10去余得到个位,再用TEMP减去个位再除以10得到十位,最后分别赋值给个位和十位的输出口传给数码管显示n 部分代码JISUAN:PRO

23、CESS(TEMP,O_SHU)BEGINO_SHU(0)=TEMP REM 10;O_SHU(1)=(TEMP-O_SHU(0)/10;END PROCESS JISUAN;TIME_10=O_SHU(1);TIME_1 -显示HCOLS(5)=00100100;COLS(4)=00100100;COLS(3)=00111100;COLS(2)=00100100;COLS(1)=00100100;COLS(0)-不显示COLS(5)=00000000;COLS(4)=00000000;COLS(3)=00000000;COLS(2)=00000000;COLS(1)=00000000;COL

24、S(0)T_COL=COLS(5);T_ROWT_COL=COLS(4);T_ROWT_COL=COLS(3);T_ROWT_COL=COLS(2);T_ROWT_COL=COLS(1);T_ROWT_COL=COLS(0);T_ROW=11111101;-ROW 1END CASE;END IF;END PROCESS SHOW;COL=T_COL;ROW=T_ROW;3. 仿真和分析波形分析: 在IN_DATA为“000”时,COL为全零,点阵不显示; 在IN_DATA为“001”时,可以看出在不同的ROWx为0时,COL依次为00100100,00100100,00111100,0010

25、0100,00100100,00100100,即为”H”字母。(八) 分频模块(fenpin)设计1. 设计思路为节省片上资源,此处采用串行分频,输入50MHz的时钟,依次分出1MHz,1KHz,500Hz和1Hz;采用多输出模式输出2. 代码较简单,此处略。四、 系统的整体搭建1. 使用Quartus II的图形界面编程的方法,将之前仿真成功的模块连成一个统一的系统,如图:2. 程序编译后,得到关于芯片资源占用的情况表,如下图:3. 系统接口连接说明输入端口硬件资源输出端口硬件资源CLK实验板硬件时钟ROW7.0row7row0MODEButton7COL7.0col7col0UPButto

26、n6CAT5.0cat5.cat0DOWNButton5SNUM7.0AA.APTIMEButton4LEDLED0RESETButton0SOUNDBeep4. 功能使用说明4.1 改变模式功能:按Button7键可以依次在火锅(H)、煎炒(J)、爆炒(B)、煲汤(T)和蒸炖(Z)模式之间循环切换,按一次按键切换一次,同时点阵会显示相应的字母提示当前的状态。4.2 改变火力功能:Button6为加大火力按键,Button5为减小火力按键,按这两个键可以在不同的火力档位:1900W-1500W-1100W-600W-100W之间切换,同时数码管末四位会显示当前的火力值。4.3 人工定时功能:B

27、utton4为人工定时功能,按此键可以自定义加热时间,除爆炒(B)模式外其他模式均可使用此功能,用户按按键设定时间在5s-10s-30-60s之中切换,按一次切换一次,不继续按键即认为使用此时间定时。4.4 人工/自动关机功能:机器会依照默认时间或人工定时进行家人,其中默认加热时间为90s(爆炒模式为3s、蒸炖模式为20s)加热时间到自动关机,停止加热。在自动时间到之前,可以人为通过按Button0键强制关机,关机后按Button7键可重新开机。五、 故障和问题分析1. 点阵显示异常,只有上下两条亮其他均不亮分析:通过检查代码和对问题状况的分析,发现问题出在将行和列的高低电平写反。将代码中的相

28、关代码改过来后点阵可以正常显示了。2. 蜂鸣器不响分析:由于代码中对Button4 的检测使用的是1MHz的时钟频率,而其中使蜂鸣器置高的时间不足1us,使蜂鸣器发出的声音不能被耳朵听到。解决:将蜂鸣器的控制与按键监听分开,当检测到按键被按下后,使能一个计时器,保证蜂鸣器的鸣叫时间不少于50ms。3. 按关机键后不能再次开机分析:这个问题是我这次实验最严重的问题了,原因应该是在我系统的逻辑中,如果按下Button0也就是关机键后,会有一个信号复位倒计时,将倒计时的总计时复位为0,导致倒计时会持续输出TIMEOVER的信号,该信号会继续复位系统导致系统在复位中循环,因此不能开机。解决:将倒计时模

29、块和火力加热模式选择模块改为状态机编程,并在火力选择模块上增加系统状态标记(MODE_SELECTED)信号,当系统处于关机状态将此信号置低。此信号为高时倒计时模块才处于运行状态,防止倒计时模块不停给出TIMEOVER信号。六、 总结和结论这次数电实验,我亲身经历了设计开发一个完整的数字电路系统的过程,从拿到题目时的一片空白到最后验收时一个完整的可操作的简易数字系统,这个过程不仅锻炼了我们VHDL语言的编写,更是对我们工程实践应用的极大锻炼。我学到:要想完成一个实际系统的设计,首先要从一个较高的角度去推测“我要做一个什么样的系统”从系统的功能出发将其拆分为几个模块。不要总想着代码该如何写,而是

30、要考虑模块之间的接口问题,有点像面向对象编程的思路。之后按照模块各自的需求,设计状态转移图等,逐步考虑模块的实现,不断细化功能直到把模块实现。之后通过各模块仿真,分析模块功能是否正常,并且要关注每个模块输入输出的特点,将相互需要连接的模块之间的信号长度等协调好,避免组成系统后出现信号时长不匹配的问题。最后将各模块连成系统仿真或进行试验,检验程序的健壮性和Bug。这次数电实验更锻炼了我的耐力,虽然不是很庞大的系统,但一个人在2周之内写出来也很不容易,尤其是在遇到“不能二次开机”的问题后,很苦恼,找不出问题所在也找不出解决办法。其实,这种时候最好的办法就是推到重来,我将相关的模块用另一种思路重写一

31、遍,在重写的过程中逐渐意识到问题是信号时长不匹配的问题,而且意识到以前的思路是不能解决的,这更证明我当时推到重来的举动是正确的。短短4周的数电实验,虽然很辛苦,但是我很开心,自己的努力和汗水终于结出了成功短短果实,其实我真心希望能有更多这样的实验机会,让我们更好的运用书本知识于实际,为日后的学习和发展打好基础。七、 附录(一) 烹饪模式选择模块完整代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE iEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY modeselect IS-声明模块PORT(CLK:IN STD_LOGIC;-时钟

32、1MHzT_OVER:IN STD_LOGIC;-to reset the modal-倒计时结束的复位信号SELECT_IN:IN STD_LOGIC;-signal which is used to choose mode-消抖后的按键信号OUT_MODE:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);-control diazhenOUT_TIME:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);-control time showIS_SELECT:OUT STD_LOGIC;-模式判断信号SET_LED:OUT STD_LOGIC-控制指示灯);

33、END modeselect;ARCHITECTURE SEL OF modeselect ISSIGNAL MARK,FROM_B:STD_LOGIC;SIGNAL MT:STD_LOGIC_VECTOR(1 DOWNTO 0);-MODE_&_TIMETYPE ALL_STATE IS(S,H,J,B,T,Z);SIGNAL STATE:ALL_STATE;BEGINMT-待机状态SCASE MT ISWHEN 00=STATE=S;MARK=0;OUT_MODE=000;OUT_TIME=11;SET_LED=0;IS_SELECT=0;FROM_BSTATE=S;MARK=0;OUT_

34、MODE=000;OUT_TIME=11;SET_LED=0;IS_SELECT=0;FROM_BIF(MARK=0)THEN STATE=H;MARK=1;OUT_MODE=001;OUT_TIME=00;SET_LED=1;IS_SELECT=1;FROM_B=0;-CHANGE TO NEXT STATEELSESTATE=S;OUT_MODE=000;OUT_TIME=11;SET_LED=0;IS_SELECT=0;FROM_BSTATE=S;MARK=1;OUT_MODE=000;OUT_TIME=11;SET_LED=0;IS_SELECT=0;FROM_B-火锅模式HCASE MT ISWHEN 00=STATE=H;MARK=0;OUT_MODE=001;OUT_TIME=00;SET_LED=1;IS_SELECT=1;FROM_BSTATE=S;MARK=0;OUT_MODE=000;OUT_TIME=11;SET_LED=0;IS_SELECT

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922