1、简易微波炉控制器的设计与实现数电综合实验报告简易微波炉控制器的设计与实现班级:姓名: 学号: 日期::设计课题的任务要求 3基本要求: 3提高要求: 3二:系统设计(包括设计思路、总体框图、分块设计) 3设计思路 3总体框图 3分块设计 41分频器 42:防抖模块 43:控制器 44:数据装载 54:倒计时模块 65:译码模块 76:数码管驱动模块 77:火力显示 88: led显示模块 99:蜂鸣器模块 9三:仿真波形及波形分析 91:控制器仿真 92数据装载仿真 103倒计时模块: 104:decoder译码电路模块 115:驱动数码管模块 116: led显示模块 117:蜂鸣器模块 1
2、2&总体仿真 12四:源程序 121:分频器 122:防抖模块 133:控制器 144:数据装载模块 165:倒计时模块 179:火力模块 2311:蜂鸣器模块 27五:功能说明 28六:元件清单和利用情况 28七:故障和问题分析 28八:总结和结论 29一:设计课题的任务要求设计制作一个简易微波炉控制器。基本要求:1、 微波炉的火力有大、中、小三档可选。用一个按键实现火力的选择,用点阵显示火力档位,点阵的显示随着按键的按下次数而变化 ,没有选择时默认的火力为大。2、 微波加热时间在0-59分59秒之间可选。用4个按键分别设置加热时间各位的长 度,用数码管显示加热时间。3、 设置一个开始键,按
3、下此键后开始加热。加热过程中,用数码管倒计时显示剩余时 间。4、 加热过程中,不能修改火力和加热时间。5、 加热完成后蜂鸣器至少鸣响两声以提醒使用者加热已结束,加热结束后回到等待状 态。6、 设置复位键,任何时候按下复位键可以取消加热,回到等待状态,只有在等待状态 下才可以修改火力和加热时间。提高要求:1、用8个LED灯作为加热进度显示条,随着加热时间的增加匀速增加点亮 LED灯的个数,无论加热时间是多长,最后都必须将 8个LED灯全部点亮。2、增加烧烤功能,用一个键选择微波或烧烤功能,用一个数码管指示当前处于微波还 是烧烤功能。3、 烧烤火力和加热时间要求与微波功能相同。4、 自拟其它功能。
4、二:系统设计(包括设计思路、总体框图、分块设计)设计思路由一个总的控制器完成各个状态的转换。主要分两个大状态,一为没有开始前的可编辑状态。二为开始后的不可编辑状态。所以总的控制器中应有个 edit输出控制各个模块是否可改变。Start开始前,为设置时间状态和火力状态和烧烤选择状态。 Start开始后edit变量为0,各个模块不可在编辑。控制器转入倒计时模块,同时 led灯进入工作状态。需要注意的是需要为所有模块设置 reset输入,以重置各个模块状态值。主要考虑问题:1:由于键盘输入不稳定,数字跳变太快,所以需要加键盘防抖模块。2:键盘防抖模块需要特殊的频率,所以分频器模块不止一个。综上,主要
5、涉及以下几个模块。 分频器,键盘防抖模块,控制器,数据选择,数据装载,数字译码,数码管显示模块,led进度显示模块,火力选择和显示模块,倒计时模 块,蜂鸣器模块总体框图分块设计1分频器10khz是火力防抖所用(也1hz用于倒计时,100hz是时间输入防抖所用频率, 可以用100hz的,不过就是输入稳定性略差)2:防抖模块左边为时间输入防抖,右边为火力输入和开始键的防抖。3:控制器.f controiierRESETCOOK KEY3 0LD_CLKSTARTDATA15.0CLKLDDONEDOMELD_EDITi: i状态控制器的功能根据输入信号和自身当时所处的状态完成状态的转换和 输出相应
6、的控制信号,其模块框图如图所示。其中,输出信号LD_DON指示数据装载电路载入的烹调结束的状态信息的显示的驱动信息 数据;LD_CLK显示数据装载电路的设置的时间数据;LD_EDIT用于输出给其他分模块以便设置是否可改变;COOI指示烹饪的状态,并提示计时器进行减法计算;DATA15.O:将key转化为二进制编码;KEY为定时时间输入信号,用于设置烹饪时间的长短,其高到低分别表示 时间分、秒的十位、个位。当LD_DON有效时,输出烹调结束数据。当 LD_CLK有效时,输出烹调的设 置时间数据。4:数据装载loader-DATAIN15 QDATAOUT16 0LD TESTLOADLD_CLK
7、LDDONEinstIO当LD_DON有效时,输出烹调结束的信息数据数据。当 L_CLK有效时,输出烹调的设置时间数据。由于结构内部用到与或表达式LOADv=LD_TESTRLD_DONBORLD_CLK;TEMP:=LD_TEST&LD_DONE&LD_CLK;必须3个变量才能使用,所以 LD-Test是用于完成这个表达式的。程序中 默认接地。4:倒计时模块i instl电路计时模块可以由十进制减法计数器和六进制减法计数器级联组成,其 中,两个十进制的减法计数器用于分、秒的个位减法计数,两个六进制的减法 计数器用于分、秒的十位减法计数。由六进制计数器和十进制计数器级联构成 的计时模块原理图如
8、图所示。LOAD有效时完成装入功能,COO( EN有效时执行减计数;载已存的数 据;DON返回给控制器,MIN和SEC显示所剩时间和测试状态信息、烹调结束 状态信息等。5:译码模块decoderJAIN43 0DOin76 01 * inst2a S - y 厂 r - J 叫 用于将coun ter输出的sec和min信号转化成数码管显示信号。输出分别对应每 个数码管的管脚。6:数码管驱动模块 qudong0-! 恬i tnst22edit xuanze5.OT114接受来自四个decoder的译码信号。分别代表秒,十秒,分,十分位的信号。Clk是用于显示的分频信号。数码管不能做到同时显示,
9、只能以较快速度分别显 示每个数码管的数字,由于人眼分辨不出快速的变化,看起来的效果是同时显 示的。T输出是管脚信号,每个clk上升沿t就输出下一个t的信息,轮流显示 t1-t4的信号。a是选择数码管的信号,低电平表示该数码管工作。轮流显示111110,111101,111011,110111.011111.T5是烧烤信号,作用与第一个数码管,为1时是普通功能,0时换做烧烤。Edit 来自控制器,表示t5信号是否可改变7:火力显示Dianzhenjishu用于完成火力按钮按的次数计数。3个一循环,分别对应大中 小3档。Dianzhenxuanzelie用于选择显示点阵中的哪列,原理通数码管一样,
10、快速 完成 when 0=qv=00000001;when 仁qv=00000010;when 2=qqqqqq3TWAD11 | | t| 4 1 1 FlLD clk有效时, 信号DATAOUT=DATAIN同时load信号有效,表示倒计时接受来自 LOADER的3倒计时模块:DATA勺值进行减法计数,并在每个时钟周期都输出减法计数器的当前值。仿真 结果与预先设定的电路功能相吻合4:decoder译码电路模块67 us 3. 31 ue 3. 95 心 4.59 ue 5.23 us 5- 8* ue 6. 51 uewAIH4ii)(51X )(CIO XTeirTuTTCTilxD9
11、r少1-肛 N43J 1r 1 L-AIN421rM辜-AIS4114LaIN40! ! : 1i諺5曰DownbiHoilnoiidi X XIouho XTiuioT 1 oooooooXoooorio|liofiif r:-U0UT7L611I ii i -WUT7 5iLT-D0UT74111g-D0UT7 311 I 1I rO10-D0UT7 21i1i011-B0UT7LIL0 12Luoirn u! : 1Ir每个数字对应相应的数码管脚显示信号如 0的时候数码管脚为0111111,与预期一致。5:驱动数码管模块可见a轮流显示每个数码管T则相应的数码管上显示相应的数字。符合预期6
12、: led显示模块7:蜂鸣器模块&总体仿真四:源程序1分频器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpinqi1hz isport(clk_in : in std_logic;clk_out : out std_logic);end;architecture a of fenpinqi1hz issignal cnt : integer range 0 to 24999999;-用于 clk 计数。(10khz 为 2499, 100hz 为 249999) signa
13、l clk_tmp : std_logic;beginprocess(clk_in)beginif (clk_inevent and clk_in=1) thenif cnt=24999999 thencnt=0;clk_tmp= not clk_tmp;-输出相反电平elsecnt=cnt+1;end if;end if;end process;clk_out=clk_tmp;end;2:防抖模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.A
14、LL;entity fangdou isport (CLK_100hz:in std_logic; _-定义端口key:in std_logic_vector(3 downto 0);-按键输入 keyout:out std_logic_vector(3 downto 0) -_ 按键输出);end fangdou;architecture art of fangdou issignal tmp1:std_logic_vector(3 downto 0);signal tmp2:std_logic_vector(3 downto 0);beginPROCESS(CLK_100h z,key)B
15、EGINIF(CLK_100hzevent AND CLK_100hz=0)THE消抖部分tmp2(0)v=tmp1(0);tmp1(0)v=key(0);tmp2(1)=tmp1(1);tmp1(1)=key(1);tmp2(2)=tmp1(2);tmp1(2)=key(2);tmp2(3)=tmp1(3);tmp1(3)=key(3);END IF;keyout(0) = CLK_100hz AND tmp1(0) AND (NOT tmp2(0);keyout(1) =CLK_100hz AND tmp1(1) AND (NOT tmp2(1);keyout(2) =CLK_100hz
16、AND tmp1(2) AND (NOT tmp2(2);keyout(3) =CLK_100hz AND tmp1(3) AND (NOT tmp2(3);END PROCESS;end art;3:控制器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY controller ISPORT(RESET:IN STD_LOGIC; -复位KEY: IN STD_LOGIC_VECTOR(3 DOWNTO 0键盘时间输入START
17、:IN STD_LOGIC; -开始键CLK:IN STD_LOGIC;DONE:IN STD_LOGIC;COOK:OUT STD_LOGIC;-1hz输入_完成信号LD_CLK:OUT STD_LOGIC将 key载入作为时间信号DATA:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);-转换后的输出LD_DONE:OUT STD_LOGIC ; -完成输出LD_EDIT:OUT STD_LOGIC);END controller;ARCHITECTURE rtl OF controller ISTYPE STATES IS(IDLE,SET_CLOCK,TIMER,D
18、ONE_MSG);SIGNAL NXT,CUR:STATES;_两个状态,当前和下一个PROCESS(CLK,RESET)BEGIN一-时钟和复位进程IF RESET=1 THEN 复位时将idle (显示0000)赋予当前状态SIGNAL DATATMP:STD_LOGIC_VECTOR(15 DOWNTO 0);SIGNAL EDIT:STD_LOGIC;-signal startn:std_logic:=0;BEGINCUR=IDLE;ELSIF CLKEVENT AND CLK=1 THENCUR=NXT;END IF;END PROCESS;PROCESS(RESET,KEY)BEG
19、INIF RESET = 1 THEN_如果不是,遇到上边沿则自动跳转下一状态复位和输入的进程-可以让输入4位数字显示时间复位时不论任何状态数码管都将显示 0000DATATMP 0);ELSEIF KEY(3)EVENT AND KEY(3) = 1 THEN -设置分的十位IF DATATMP(15 DOWNTO 12) = 0101 THEN -自 动跳转至U 0DATATMP(15 DOWNTO 12) = 0000;ELSEDATATMP(15 DOWNTO 12) = DATATMP(15 DOWNTO 12) + 1;END IF; -否则自动加1END IF;IF KEY(2)
20、EVENT AND KEY(2) = 1 THEN -设置分的个位IF DATATMP(11 DOWNTO 8) = 1001 THEN -9 自动跳转至U 0 DATATMP(11 DOWNTO 8) = 0000;ELSEDATATMP(11 DOWNTO 8) = DATATMP(11 DOWNTO 8) + 1;END IF; _否则自动加1END IF;IF KEY(1)EVENT AND KEY(1) = 1 THEN -设置秒的十位IF DATATMP(7 DOWNTO 4) = 0101 THEN -5 自动跳转至U 0DATATMP(7 DOWNTO 4) = 0000;EL
21、SEDATATMP(7 DOWNTO 4) = DATATMP(7 DOWNTO 4) + 1;END IF; _否则自动加1END IF;IF KEY(0)EVENT AND KEY(0) = 1 THEN -设置秒的个位IF DATATMP(3 DOWNTO 0) = 1001 THEN -9 自动跳转至U 0DATATMP(3 DOWNTO 0) = 0000;ELSEDATATMP(3 DOWNTO 0) = DATATMP(3 DOWNTO 0) + 1;END IF;END IF; _否则自动加1END IF;DATA = DATATMP;END PROCESS;PROCESS(S
22、TART,RESET) - e ?o?,,?3iBEGINIF RESET = 1 THEN -将 edit 置 1EDIT = 1;ELSIF STARTEVENT AND START = 1 THEN-如何 start 按下将 edit 置 0EDIT = 0;END IF;END PROCESS;PROCESS(CLK,CUR,EDIT,DONE) ISBEGINNXT=IDLE; -将 IDLE 载入 NXT-LD_POWER=0; -?LD_DONE=0;LD_CLK=0;COOKLD_CLKv=1;COOKv=0;WHEN DONE_MSG=LD_DONEv=0;COOKv=0;-
23、烹调时间测试状态-完成信息显示状态WHEN IDLE= -初始状态定义IF EDIT=1 THEN -_设置计时模式NXT=SET_CLOCK;LD_CLK=1;ELSIF DONE=0 THENNXT=TIMER;C00KIF DONE=1 THEN -设置计时完成NXT=DONE_MSG;LD_DONE=0;cook=0;ELSENXT=TIMER;C00KNULL;END CASE;END PROCESS;PROCESS(EDIT) ISBEGINLD_EDIT=EDIT;END PROCESS;END rtl;4:数据装载模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY loader ISPORT(DATAIN:IN STD_L0GIC_V
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1