简易电磁炉控制器_第1页
简易电磁炉控制器_第2页
简易电磁炉控制器_第3页
简易电磁炉控制器_第4页
简易电磁炉控制器_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字电路与逻辑设计综合实验简易电磁炉控制器学 院:信息与通信工程学院 学生姓名: 班 级: 学 号: 班内序号:1、 摘要(150左右)与关键字(5个以内)摘要:电磁炉的设计中包含11个模块:模式调节,火力调节,时间模块,倒计时模块,关闭模块,点阵显示,数码管显示,分频器,防抖模块,蜂鸣器模块以及扩展模块的进度条模块,每个模块既可独立编写、仿真测试,又可在VHDL中将模块封装后,通过它们之间的控制关系进行连接,实现基本的电磁炉的功能。关键字:模式调节 火力调节 时间模块 倒计时模块 状态机2、 设计任务要求 题目一:简易电磁炉控制器的设计与实现 设计制作一个简易电磁炉控制器。基本要求: 1 、

2、烹饪模式选择:电磁炉的烹饪模式有火锅、煎炒、爆炒、煲汤和蒸炖五档可选。用一个按键(BTN7)实现烹饪档位的选择(按下此键依上述顺序依次变化),用点阵显示当前的烹调档位(火锅显示H、煎炒显示J、爆炒显示B 、煲汤显示T 和蒸炖显示Z),烹调档位的选择按键同时也是加热的开始按键,即烹调档位选定的同时电磁炉就以最大功率开始加热,没有选择时电磁炉处于停止状态,点阵不显示。 2 、火力调节:电磁炉的火力分 5 档可调: 1900W-1500W-1100W-600W-100W,用数码管DISP3-DISP0 显示当前的火力,用两个按键(BTN6 和BTN5)实现火力的增加或减少,烹调过程中,除爆炒模式外,

3、其它模式均可以随时可以调节火力,爆炒模式只能以最高功率加热。 3 、定时功能:用一个按键(BTN4)实现定时设置,按下定时键,蜂鸣器响一声,每按一次定时键,定时时间以5-10-30-60 秒钟的顺序依次递增,定时设定完毕后,电磁炉开始倒计时。用数码管 DISP5 和DISP4 显示定时档位和倒计时的过程,倒计时时间到后,电磁炉自动停止加热并关机。 4 、不进行定时操作时,电磁炉以默认加热时间进行加热。蒸炖模式的默认时间为 20秒钟;爆炒模式的默认时间是3 秒钟,爆炒3 秒钟后自动返回煎炒模式;其他模式的默认时间为90 秒。 5 、用点亮的发光二极管LD4 表示开机加热,熄灭表示关机。 6 、设

4、置关闭键,任何时候按下关闭键即可将电磁炉关机。 提高要求: 自拟其它功能。3、 设计思路、总体结构框图设计思路:首先确定该实验的功能,经过仔细分析后将该实验分为11个模块:模式调节,火力调节,时间模块,倒计时模块,关闭模块,点阵显示,数码管显示,分频器,防抖模块,蜂鸣器模块以及扩展模块的进度条模块,各个模块的功能的实现方法以及之间的联系如下:1.模式调节:6个状态的状态机,其中5个为循环状态机C-H-J-B-T-Z-H,C状态为启动循环而不参与循环;当有时间模块传来的timecontrol信号,爆炒模式B反向转换为煎炒模式J。2.火力调节:5个状态的状态机,190015001100600100

5、;当有模式调节传来的state2.0为爆炒模式B时,则状态机不起作用,输出只能为1900。3.时间模块:包含定时和不定时功能。系统默认为不定时计时,不同模式系统默认时间不同;当接受有外部按键信号BTN4时,通过二选一数据选择更改为定时计时,且不能返回不定时计时,包含5个状态,其中4个为循环状态机s0-s5-s10-s30-s60-s5,C状态为启动循环而不参与循环。两种计时方法均计时完毕发出close信号关机。4.倒计时模块:将时间模块传来的剩余时间显示在数码管上,需要时间模块传来的剩余时间lefttime信号。5.关闭模块:当接受有外部按键信号即模式调节按键BTN7,系统则由关闭状态转换为开

6、机状态;当接受到时间模块发出的计数完毕信号close或者外部关闭按键BTN3,则close模块产生复位信号reset,关闭所有模块。6.点阵显示:将模式调节的5个字母H、J、B、T、Z进行显示,通过逐行扫描点阵显示字母。7.数码管显示:显示火力调节的功率以及倒计时的时间,通过逐个选通CAT0CAT5来实现。8.分频器:将实验板的本振频率50MHz经过多级分频得到1kHz和100kHz。9.防抖模块:通过设计代码,将外部按键信号转换为一个标准的脉冲,此模块置于每个包含有外部按键的模块之前。10.蜂鸣器模块:当有外部按键BTN4时,即启动定时模块时,启动蜂鸣器,且蜂鸣的时间由一个计数统计上升沿的个

7、数,达到一定个数(10个)蜂鸣结束。11.进度条模块:倒计时开始时将8个LED灯均点亮,通过时间模块的剩余时间lefttime计算LED灯点亮的个数。 当所有模块分析清楚后,逐个编写每个部分的代码,编译成功后并测试单个模块的仿真波形,逐个下到实验板进行测试;如果下载到实验板不能完成功能,修改思路,重新编写本块代码,重新调试;当所有模块均能实现功能后,通过设计中各个模块之间的信号联系,将模块封装后进行连线,最终完成实验。总体结构框图:4、 控制器部分的状态转移图和流程图状态转移图:1. 模式调节2. 火力调节3. 时间模块流程图:5、 分块电路和总体电路的设计(含关键源程序或电路图)主要的分块电

8、路:1. 时间模块:包含不定时功能与定时功能(1) 系统默认的为不定时功能,即ordercontrol初始选择不定时norder模块;当有外部按键BTN4输入信号时,ordercontrol选择定时order模块,且改变只能一次,不能返回,直到计时结束关机;(2) 在选择功能时,如果有外部关闭按键BTN3的复位信号reset输入或者计时完毕时,则输出复位,且将ordercontrol重新初始化为norder状态;(3) 将输出的时间交付给倒计时模块count。 程序:ordercontrol.vhd architecture behave of ordercontrol issignal ma

9、sk:std_logic:=0;beginprocess(clk1kHz)begin if clk1kHzevent and clk1kHz =1 then if reset = 1 then resetorder=1;resetnorder=0; end if; if orderinput = 1 then resetorder=0;resetnorder=1; end if; orderset=orderinput; end if;end process;end behave;2. 倒计时模块:显示倒计时且使用频率时钟1kHz,需要进行转换leftimetemp/1000=leftime,

10、且将leftimetemp信号输出给进度条模块(1) ordercontrol是用来判断时间模块的时间改变时,计数是否要重新开始;(2) decount的功能是用来输出剩余时间,由于计时使用频率时钟1Hz会产生较大的延时,故采用频率时钟1kHz。对时钟的下降沿计数timecount,用总的时间*1000减去计数值timecount,则得到倒计时剩余的脉冲数;如果想得到时间,则需要leftimetemp/1000转换成真正的剩余时间leftime;(3) 将剩余时间leftime输出给div模块,整除后输出给十位,取余后输出给个位。(4) 将剩余的脉冲数leftimetemp输出给进度条模块,由

11、于进度条模块也采用频率时钟1kHz计时,且也需要倒计时,则可同时与倒计时模块共用leftimetemp。(5) 有一种特殊情况,当模式为爆炒模式B时,系统默认时间为3s,倒计时完毕后系统不关闭,而是转入煎炒模式J,继续倒计时90s后才能关闭。程序:decount.vhdarchitecture behave of decount isbeginprocess(clk1kHz)variable timecount:integer range 0 to 90000;variable timesetemp:integer range 0 to 90;variable mask:std_logic:=

12、0;beginif clk1kHzevent and clk1kHz=0 then if mask =0 then timesetemp:=timeset;mask:=1;timecount:=0; end if; timecontrol=0; timecount:=timecount+1; leftimetemp=timesetemp*1000-timecount; leftime=timesetemp-timecount / 1000; if reset=1 then mask:=0; timecount:=0; leftime=timeset; leftimetemp= timesete

13、mp*1000 then if timesetemp =3 then close=0; timecontrol=1; else close=1; end if; else close=0; end if; if timesetemp = 0 then close=0; leftime=0;leftimetemp=0; end if;end if;end process;end behave;3. 数码管显示模块:循环选通6个数码管进行扫频,通过驱动数码管的7个段进行显示(1) count6是产生循环的6个数,来循环选通6个数码管,当扫频频率足够大的时候,则由于人眼的视觉暂留,观察到的数字为同时

14、显示;(2) L24xuan4c是每次选出一组数进行译码,即每次只能显示一个数字;(3) dec7s为7段数码管驱动电路,将译码的结果驱动7个段,显示出一个数字。4. 进度条模块:进度条是将总体时间分为8份,每倒计时消耗一个step则熄灭一个灯。(1) 选用时钟频率1kHz,因为1Hz计时3s无法平均分成8份;(2) 使用来自倒计时模块的leftimetemp,leftimetemp/8为真正的时间,随时获得剩余时间进行显示。程序:process(clk1kHz)variable countdiv:integer range 0 to 90000;variable k:integer rang

15、e 0 to 90000;beginif(reset=1)thenk:=0;temp 8*countdiv or k = 8*countdiv THENlight 7*countdiv AND k 8*countdiv) OR k = 7*countdiv THENlight 6*countdiv AND k 7*countdiv) OR k = 6*countdiv THENlight 5*countdiv AND k 6*countdiv) OR k = 5*countdiv THEN light 4*countdiv AND k 5*countdiv) OR k = 4*countdiv

16、 THENlight 3*countdiv AND k 4*countdiv) OR k = 3*countdiv THENlight 2*countdiv AND k 3*countdiv) OR k = 2*countdiv THENlight countdiv AND k 2*countdiv) OR k = countdiv THENlight 0 AND k countdiv) OR k = 0 THENlight =11111111;END IF;ELSE light 1-2-3-4-5-1-2.;当有时间模块传来的信号timecontrol,使爆炒模式B(仿真波形中的3)模式反向

17、转换为煎炒模式J(仿真波形中的2);当输入关闭信号reset信号时,状态信号state复位为close状态(仿真波形中的0)。2. 火力调节模块:说明:循环状态机的循环模式为190015001100600100;当外部按键输入up信号,由于初始状态为1900w,故输出不会增加,维持在1900w;当外部按键输入down信号,会变为1500w;依次类推,up信号控制增加,down信号控制减少,本质是控制循环状态机转移的方向。3. 倒计时模块:说明:设置输入的倒计时时间为16s,倒计时完毕后输出关闭信号close为“1”,即系统关闭;当输入reset开启信号后,时间置位为最初的倒计时时间,开始进行倒

18、计时。4. 数码管模块:说明:当输入6个数给6个数码管显示器,经过译码后,输出为7段数码管驱动的组合码。5. 点阵模块:说明:经过行、列的扫描,实现一个周期的显示码字;当co为1时,完成了一个周期,继续扫描下一周期。6. 关闭模块:说明:当openinput信号输入时,整个程序开启;当任何一个关闭信号(closeinput1或closeinput2)输入时,则关闭整个系统;当再次输入openinput信号时,程序会被再次重新开启。7. 蜂鸣器模块:说明:当定时信号order输入时,则output计时10个脉冲,即蜂鸣器发出响声的时间10ms;再次输出定时信号order,蜂鸣器会再次计数、发出响

19、声;在此过程中,只要有reset输入,就将所有的值复位。必要的测试方法:1. 分模块编写,编译,通过后进行下一步骤;2. 仿真,观察仿真波形的正确性,正确后进行下一步骤;3. 下载到实验板进行调试,检验是否完成了设计的功能,如果需要其他模块的信号,则通过其他实验板上的按键替代。7、 故障及问题分析1.时钟选择导致延时问题:在最初设计时选择时钟频率1kHz,100Hz,1Hz,系统的各个模块使用时钟频率1kHz,防抖模块使用时钟频率100Hz,倒计时模块则使用时钟频率1Hz;在设计倒计时模块时,由于时钟频率为1Hz时倒计时正好以1s为单位,满足实际需求。然后设计好代码后会得到下面的仿真波形(由于

20、仿真时使用1Hz会使仿真时间很久,故仿真时选用了1kHz,不影响观测结果),在开始两个时间周期内倒计时还没有开始,所以这种设计方案会有延时缺陷;在通过思考之后,决定采用时钟频率1kHz取代时钟频率1Hz,使得时钟沿分的更细一些,整个系统更加灵敏,产生的延时很小,人眼几乎察觉不出来。正确的代码原理以及仿真波形已在第五模块、第六模块已阐述,这里不再赘述。具有延时的仿真波形:具有延时的倒计时代码:architecture behave of decount isbeginprocess(clk1Hz)variable timecount:integer range 0 to 90;variable

21、timesetemp:integer range 0 to 90;beginif clk1Hzevent and clk1Hz=0 then timecontrol=0; timecount:=timecount+1; leftime=timesetemp-timecount; if reset=1 then timecount:=0; timesetemp:=timeset; leftime= timesetemp then if timesetemp =3 then close=0; timecontrol=1; else close=1; end if; else close=0; en

22、d if; if timesetemp = 0 then close=0; leftime if modecontrol=1 thennext_state= H; elsenext_state= C;if reset= 1 then next_state if modecontrol=1 thennext_state= J; elsenext_state= H;if reset= 1 then next_state if modecontrol=1 thennext_state= B;else next_state= J; if reset= 1 then next_state if mode

23、control=1 thennext_state= T; else if timecontrol=1 then next_state= J; else next_state= B; end if; if reset= 1 then next_state if modecontrol=1 thennext_state= Z; elsenext_state= T;if reset= 1 then next_state if modecontrol=1 thennext_state= H; elsenext_state= Z; if reset= 1 then next_state=C; end i

24、f; end if;end case;end process;state_register:process(clk)begin if (clkevent and clk=1)then present_state state state state state state state state if up=1 then next_state= f1900; elsif down=1 then next_state= f1500; else next_state if up=1 then next_state= f1900; elsif down=1 then next_state= f1100

25、; else next_state if up=1 then next_state= f1500; elsif down=1 then next_state= f600; else next_state if up=1 then next_state= f1100; elsif down=1 then next_state= f100; else next_state if up=1 then next_state= f600; elsif down=1 then next_state= f100; else next_state=f100; end if;end case;if state

26、= 011 then -如果是爆炒模式,只能以1900W加热 next_state= f1900;end if;end process;state_register:process(clk) -将下一状态转为现状态,如果有复位信号则输出1900Wbegin if(clkevent and clk=1) then present_state= next_state; if reset = 1 then present_state out1=0001;out2=1001;out3=0000;out4 out1=0001;out2=0101;out3=0000;out4 out1=0001;out2

27、=0001;out3=0000;out4 out1=0000;out2=0110;out3=0000;out4 out1=0000;out2=0001;out3=0000;out4=0000;end case;end process;end behave;(3) 时间模块ordercontrol.vhdlibrary ieee;use ieee.std_logic_1164.all;entity ordercontrol isport(clk1kHz:in std_logic; orderinput:in std_logic; -外部按键控制定时还是不定时模式 resetorder,reset

28、norder:out std_logic; -输出定时还是不定时模式 reset:in std_logic; -复位信号 orderset:out std_logic); end;architecture behave of ordercontrol isbeginprocess(clk1kHz)begin if clk1kHzevent and clk1kHz =1 then if reset = 1 then resetorder=1;resetnorder=0; -如果复位信号来到,则将初始状态为不定时状态,输出reset为0才不会使norder置位 end if; if orderin

29、put = 1 then -如果外部有按键信号输入,则输出状态为定时状态,改变原来的不定时状态 resetorder=0;resetnorder=1; end if; orderset if ordercontrol = 1 then next_state=s5; else next_state if ordercontrol = 1 then next_state=s10; else next_state if ordercontrol = 1 then next_state=s30; else next_state if ordercontrol = 1 then next_state=s

30、60; else next_state if ordercontrol = 1 then next_state=s5; else next_state=s60; end if;end case;end process;state_register:process(clk1kHz) -将下一状态转换为现在的状态begin if (clk1kHzevent and clk1kHz=1)then present_state= next_state; if reset= 1 thenpresent_state timeset timeset timeset timeset timeset timese

31、t timeset timeset timeset timeset timeset=0;end case;if reset=1 then -当有复位信号,输出时间置0 timeset=0;end if;end process;end behave;(4) 倒计时模块countcontrol.vhdlibrary ieee;use ieee.std_logic_1164.all;entity countcontrol is port (clk1kHz:in std_logic; setime:in integer range 0 to 90; output:buffer std_logic);e

32、nd countcontrol;architecture behave of countcontrol issignal temp1,temp2:integer range 0 to 90:=0;beginprocess(clk1kHz)beginif clk1kHzevent and clk1kHz=1 then temp1=setime; if temp1=temp2 then -如果外部输入时间与当前时间相等,则不产生复位信号 output=0; else output=1; -如果由不定时状态转换为定时状态,则产生复位信号 temp2=temp1; end if;end if;end process;end behave;decount.v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论