《根据FPGA技术的微波炉控制器.doc》由会员分享,可在线阅读,更多相关《根据FPGA技术的微波炉控制器.doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、,*大学*学院现代电子系统设计*系(院)*专业题目:基于FPGA技术的微波炉控制器学生姓名: 班级: 学号: 指导教师: 完成日期: 年 月摘 要 本文介绍了应用FPGA芯片和硬件描述语言(VHDL)设计微波炉控制器系统的方法。系统使用VHDL编程实现各底层模块的功能,顶层的设计采用图形输入完成。本文主要阐述模块化设计的思想和状态图的描述方法,以及它们在硬件描述语言中的应用,并展示了其在Quartus开发系统下的仿真结果和烧写到EPM570T100C5后的现象。 主要有以下几个模块:状态控制器KZQ、数据装载器ZZQ、烹调计时器JSQ、显示译码器YMQ47以及分频器和动态显示电路。 该控制器具
2、有系统复位、状态控制、时间设定、烹饪计时、动态显示译码等功能。 关键字:FPGA;VHDL;微波炉;控制器;状态图;定时器目 录1.绪论11.1任务的提出11.2设计的基本要求11.3设计的目的和意义12.系统总体设计22.1系统总体方案设计22.2系统功能模块描述(具体的电路图和VHDL设计文件将在附件中给出)23.系统详细设计23.1 状态控制器KZQ的设计23.2 数据装载器ZZQ的设计53.3 烹调计时器JSQ的设计53.4 显示译码器YMQ47的设计54系统仿真64.1状态转换控制器KZQ仿真图64.2数据装载器ZZQ仿真图64.3计时器JSQ仿真74.4显示译码器YMQ47仿真图8
3、5.设计总结86.参考文献87.附件97.1整体的原理图97.2各个基本模块的VHDL语言972.1分频器97.2.2控制器KZQ107.2.3装载器ZZQ117.2.4计时器JSQ,和其中需用到的DCNT6和DCNT10127.2.5译码器YMQ47157.2.6动态显示电路需要用到的DCNT4和decoder151.绪论随着人民生活水平的提高,微波炉开始进入越来越多的家庭,它给人们的生活带来了极大的方便。它省事、省电、方便和卫生。作为现代的烹饪工具,微波炉控制器体现着它的重要性能指标。目前大部分微波炉控制器采用单片机进行设计,电路比较复杂,性能不够灵活。本文采用先进的EDA技术,利用Qua
4、rtus工作平台和VHDL设计语言,设计了一种新型的微波炉控制器系统。该控制器具有系统复位、状态控制、时间设定、烹饪计时、动态显示译码等功能。1.1任务的提出设计一个微波炉控制器1.2设计的基本要求(1)七段数码管及发光二极管完成微波炉的定时及状态显示;(2)控制器的输入信号包括定时控制信号、定时数据的输入、复位信号、开始煮饭的控制信号等;(3)其他(我们自己添加了测试数码管是否能够正常显示的TEST信号)。1.3设计的目的和意义目前大部分微波炉控制器采用单片机进行设计,电路比较复杂,性能不够灵活。本文采用先进的EDA技术,利用Quartus工作平台和VHDL设计语言,设计了一种新型的微波炉控
5、制器系统。该控制器具有系统复位、状态控制、时间设定、烹饪计时、动态显示译码等功能。2.系统总体设计2.1系统总体方案设计根据该微波炉控制器的功能设计要求,本系统可由以下6个模块组成:1.分频器; 2.状态控制器KZQ;3. 数据装载器ZZQ;4. 烹调计时器JSQ;5. 显示译码器YMQ47;6.动态显示电路。其内部组成原理图如图1所示。图12.2系统功能模块描述(具体的电路图和VHDL设计文件将在附件中给出)各个模块的功能介绍(1)分频器fenpinqi模块的功能是实现对实验箱上的50Mhz的分频,是整个系统能够正常显示的基础。(2) 状态控制器KZQ的功能是控制微波炉工作过程中的状态转换,
6、并发出有关控制信息;输入信号为CLK、TEST、START、SET_T、RESET和DONE,输出信号为LD_DONE、LD_CLK、LD_8888和COOK信号。 (3) 数据装载器ZZQ的功能是根据KZQ发出的控制信号选择定时时间、测试数据或烹调完成信息的装入。(4) 计时器JSQ的功能是负责烹调过程中的时间递减计数,并提供烹调完成时的状态信号供KZQ产生烹调完成信号。(5) 显示译码器YMQ47的功能就是负责将各种显示信息的BCD转换成七段数码管显示的驱动信息编码。需要译码的信息有:数字09,字母d、o、n、E。(6)动态显示电路的功能是将显示译码器YMQ47驱动信息编码在数码管有限的条
7、件下显示出来。3.系统详细设计3.1 状态控制器KZQ的设计 状态控制器KZQ的功能是控制微波炉工作过程中的状态转换,并发出有关控制信息,因此我们可用一个状态机来实现它。经过对微波炉工作过程中的状态转换条件及输出信号进行分析,我们可得到其状态转换图如图2所示,其输入、输出端口如图3所示。图2 KZQ的状态转换图图3 KZQ的输入、输出端口图 3.2 数据装载器ZZQ的设计 ZZQ的输入、输出端口如图4所示,根据其应完成的逻辑功能,它本质上就是一个三选一数据选择器。本设计采用一个进程来完成,但由于三个被选择的数据只有一个来自输入端口,因此另两个被选择的数据则通过在进程的说明部分定义两个常数来产生
8、。图4 ZZQ的输入、输出端口图3.3 烹调计时器JSQ的设计 烹调计时器JSQ为减数计数器,其最大计时时间为59:59。因此我们可用两个减计数十进制计数器DCNT10和两个减计数六进制计数器DCNT6级联构成。3.4 显示译码器YMQ47的设计 本显示译码器YMQ47不但要对数字09进行显示译码,还要对字母d、o、n、E进行显示译码,其译码对照表如表1所示。表1 YMQ47的译码对照表 4系统仿真4.1状态转换控制器KZQ仿真图4.2数据装载器ZZQ仿真图4.3计时器JSQ仿真因为计时器是由两个减计数十进制计数器DCNT10和两个减计数六进制计数器DCNT6级联构成,所以,先完成两个减计数十
9、进制和六进制计数器的仿真。以下分别是两减计数器的功能仿真图。十进制计数器DCNT10仿真图六进制计数器DCNT6仿真图在前面仿真正确的基础上,生成相应的元件,对两计数器进行级联,进行编译、仿真得到仿真结果图。下图是对59分59秒的仿真结果。由以上仿真结果可以看出,该JSQ模块实现了烹调计时的定时作用。4.4显示译码器YMQ47仿真图5.设计总结本设计使用Quartus软件进行编写,并在实验箱上实现。本设计有六个小模块模块,也可以分成两个大模块,一个模块是由KZQ、ZZQ、JSQ组成的,这个模块是本设计的基本,另一个模块是有分频器、译码器、动态显示电路组成的,这个模块是为了配合实验箱。第一次实验
10、的时候,发现管脚不够分配,知道这是因为实验箱上只有一个静态显示数码管,有8个动态显示数码管。于是,进行改进,在原来的基础上增加了动态显示模块。第二次实验的时候,发现数码管跳的过快,基本分辨不出来数字的变化,于是,想到是分频分的不够,于是,又改了一下分频器的分频系数。最后一次实验时,能够正确的进行显示,并能够完成系统复位、状态控制、时间设定、烹饪计时、动态显示译码等功能。唯一的缺陷是,当计时到00:00时,显示灯是灭了一下,然后继续亮。这是需要改进的地方。对于时间的设定,我们虽然没有实现键盘控制,但是我们可以通过软件进行设置,并不是通过接地或者接高电平写死了,而是可以改变的。我们自己添加了测试数
11、码管是否能够正常显示的TEST信号。6.参考文献1谭会生,张昌凡。EDA技术及其应用M.西安:西安电子科技大学出版社2江思敏.VHDL数字电路及系统设计.北京:机械工业出版社3*院现代电子设计课本和实验指导书7.附件7.1整体的原理图7.2各个基本模块的VHDL语言72.1分频器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpinqi is port (nreset:in std_logic; clk:in std_logic; co:out std_logic; qcnt:
12、buffer std_logic_vector(19 downto 0) ); end fenpinqi; architecture behave of fenpinqi is begin process(clk,nreset) begin if(nreset=0)then qcnt=00000000000000000000; elsif(clkevent and clk=1)then qcnt=qcnt+1; end if; end process; co=qcnt(19); end behave;7.2.2控制器KZQ-KZQ.VHDLIBRARY IEEE;USE IEEE.STD_LO
13、GIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY KZQ ISPORT(RESET,SET_T,START,TEST,CLK,DONE:IN STD_LOGIC; COOK,LD_8888,LD_CLK,LD_DONE:OUT STD_LOGIC);END ENTITY KZQ;ARCHITECTURE BEHAVE OF KZQ IS TYPE STATE_TYPE IS(IDLE,LAMP_TEST,SET_CLOCK,TIMER,DONE_MSG); SIGNAL NXT_STATE,CURR_STATE:STATE_TYPE; BEGIN
14、 PROCESS(CLK,RESET) IS BEGIN IF RESET=1 THEN CURR_STATE=IDLE; ELSIF CLKEVENT AND CLK=1 THEN CURR_STATE=NXT_STATE; END IF; END PROCESS; PROCESS(CLK,CURR_STATE,SET_T,START,TEST,DONE) IS BEGIN NXT_STATE=IDLE; -DEFAULT NEXT STATE IS IDLE; LD_8888=0; LD_DONE=0; LD_CLK=0; COOK LD_8888=1; COOK LD_CLK=1; CO
15、OK LD_DONE=1; COOK IF(TEST=1) THEN NXT_STATE=LAMP_TEST; LD_8888=1; ELSIF SET_T=1 THEN NXT_STATE=SET_CLOCK; LD_CLK=1; ELSIF (START=1) AND (DONE=0) THEN NXT_STATE=TIMER; COOK IF DONE=1 THEN NXT_STATE=DONE_MSG; LD_DONE=1; ELSE NXT_STATE=TIMER; COOK=1; END IF; END CASE; END PROCESS;END ARCHITECTURE BEHA
16、VE;7.2.3装载器ZZQ-ZZQ.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY ZZQ IS PORT(DATA1: IN STD_LOGIC_VECTOR(15 DOWNTO 0); LD_8888:IN STD_LOGIC; LD_CLK: IN STD_LOGIC; LD_DONE:IN STD_LOGIC; DATA2:OUT STD_LOGIC_VECTOR(15 DOWNTO 0); LOAD:OUT STD_LOGIC);END ENTITY ZZQ;ARCHIT
17、ECTURE BHV OF ZZQ IS BEGINPROCESS(DATA1,LD_8888,LD_CLK,LD_DONE)IS CONSTANT ALL_8:STD_LOGIC_VECTOR(15 DOWNTO 0):=1000100010001000; CONSTANT DONE:STD_LOGIC_VECTOR(15 DOWNTO 0):= 1010101111001101; VARIABLE TEMP:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN LOAD DATA2 DATA2 DATA2 NULL; END CASE; END PROCESS;END A
18、RCHITECTURE BHV; 7.2.4计时器JSQ,和其中需用到的DCNT6和DCNT10-JSQ.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY JSQ IS PORT(COOK:IN STD_LOGIC; DATA3:IN STD_LOGIC_VECTOR(15 DOWNTO 0); LOAD:IN STD_LOGIC; CLK:IN STD_LOGIC; SEC_L:OUT STD_LOGIC_VECTOR(
19、3 DOWNTO 0); SEC_H:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); MIN_L:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); MIN_H:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DONE:OUT STD_LOGIC);END ENTITY JSQ;ARCHITECTURE ART OF JSQ IS COMPONENT DCNT10 IS PORT(CLK,LOAD,ENA:IN STD_LOGIC; DATAIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); CQ:OUT STD_LO
20、GIC_VECTOR(3 DOWNTO 0); CARRY_OUT:OUT STD_LOGIC); END COMPONENT DCNT10; COMPONENT DCNT6 IS PORT(CLK,LOAD,ENA:IN STD_LOGIC; DATAIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CARRY_OUT:OUT STD_LOGIC);END COMPONENT DCNT6; SIGNAL NEWCLK:STD_LOGIC; SIGNAL S1:STD_LOGIC; SIGNAL S
21、2:STD_LOGIC; SIGNAL S3:STD_LOGIC; SIGNAL S4:STD_LOGIC; BEGIN U1:DCNT10 PORT MAP(CLK,LOAD,COOK,DATA3(3 DOWNTO 0),SEC_L,S1); U2:DCNT6 PORT MAP(S1,LOAD,COOK,DATA3(7 DOWNTO 4),SEC_H,S2); U3:DCNT10 PORT MAP(S2,LOAD,COOK,DATA3(11 DOWNTO 8),MIN_L,S3); U4:DCNT6 PORT MAP(S3,LOAD,COOK,DATA3(15 DOWNTO 12),MIN_
22、H,S4); DONE=S4 AND S3 AND S2 AND S1; END ARCHITECTURE ART;-DCNT6.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DCNT6 IS PORT(CLK:IN STD_LOGIC; LOAD:IN STD_LOGIC; ENA: IN STD_LOGIC; DATAIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CARR
23、Y_OUT: OUT STD_LOGIC );END ENTITY DCNT6; ARCHITECTURE ART OF DCNT6 ISSIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(CLK,LOAD,ENA) IS BEGIN IF LOAD=1 THEN CQI=DATAIN; ELSIF CLKEVENT AND CLK=1 THEN IF ENA=1 THEN IF CQI=0000 THEN CQI=0101; ELSE CQI=CQI-1; END IF; END IF; END IF;END PROCESS; PRO
24、CESS(CLK,CQI) IS BEGIN IF CLKEVENT AND CLK=1 THEN IF CQI=0000 THEN CARRY_OUT=1; ELSE CARRY_OUT=0; END IF; END IF; END PROCESS; CQ=CQI;END ARCHITECTURE ART;-DCNT10.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DCNT10 IS PORT(CLK:IN STD_LOGIC; LOAD:IN STD_LOGIC; EN
25、A: IN STD_LOGIC; DATAIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CARRY_OUT: OUT STD_LOGIC );END ENTITY DCNT10; ARCHITECTURE ART OF DCNT10 IS SIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(CLK,LOAD,ENA) IS BEGIN IF LOAD=1 THEN CQI=DATAIN; ELSIF CLKEVENT AND CLK=1
26、THENIF ENA=1 THEN IF CQI=0000 THEN CQI=1001; ELSE CQI=CQI-1; END IF; END IF; END IF; END PROCESS; PROCESS(CLK,CQI) IS BEGIN IF CLKEVENT AND CLK=1 THEN IF CQI=0000 THEN CARRY_OUT=1;ELSE CARRY_OUT=0;END IF; END IF; END PROCESS; CQDOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DO
27、UT7=0000000; END CASE; END PROCESS;END ARCHITECTURE ART;7.2.6动态显示电路需要用到的DCNT4和decoder-cntm4.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cntm4 is port (ci:in std_logic; nreset:in std_logic; clk:in std_logic; co:out std_logic; qcnt:buffer std_logic_vector(3 downt
28、o 0) );end cntm4;architecture behave of cntm4 is begin co=1 when (qcnt=0011 and ci=1) else 0; process(clk,nreset) begin if(nreset=0) then qcnt=0000; elsif(clkevent and clk=1) then if(qcnt=3)then qcnt=0000; else qcntseg=min_h; scanseg=min_l; scanseg=sec_h; scanseg=sec_l; scanseg=0000000; scan=0111; end case; end process;end bhv;