基于FPGA技术的微波炉控制器_第1页
基于FPGA技术的微波炉控制器_第2页
基于FPGA技术的微波炉控制器_第3页
基于FPGA技术的微波炉控制器_第4页
基于FPGA技术的微波炉控制器_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、基于FPGA技术的微波炉控制器*大学*学院现代电子系统设计*系(院)*专业题目:基于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

3、显示译码器YMQ47仿真图85.设计总结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和decoder15171.绪论随着人民生活水平的提高,微波炉开始进入越来越多的家庭,它给人们的生活带来了极大的方便。它省事、省电、方便和卫生。作为现代的烹饪工具,微波炉控制器体现着它的重要性能指标。目前大部分微波炉控制器采用单片机进行设计,电路比较复杂,性能不够灵活。本文

4、采用先进的EDA技术,利用Quartus工作平台和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)动态显示电路的功能是将显示译码器YMQ

7、47驱动信息编码在数码管有限的条件下显示出来。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

12、std_logic; qcnt: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(clk'event and clk='1')then qcnt<=qcnt+1; end if; end process; co<=qcnt

13、(19); end behave;7.2.2控制器KZQ-KZQ.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_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_CLOC

14、K,TIMER,DONE_MSG); SIGNAL NXT_STATE,CURR_STATE:STATE_TYPE; BEGIN PROCESS(CLK,RESET) IS BEGIN IF RESET='1' THEN CURR_STATE<=IDLE; ELSIF CLK'EVENT 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<

15、=IDLE; -DEFAULT NEXT STATE IS IDLE; LD_8888<='0' LD_DONE<='0' LD_CLK<='0' COOK<='0' CASE CURR_STATE IS WHEN LAMP_TEST=> LD_8888<='1' COOK<='0' WHEN SET_CLOCK=> LD_CLK<='1' COOK<='0' WHEN DONE_MSG => LD_D

16、ONE<='1' COOK<='0' WHEN IDLE=> 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<='1&#

17、39; END IF; WHEN TIMER=> 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 BEHAVE;7.2.3装载器ZZQ-ZZQ.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY ZZ

18、Q 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;ARCHITECTURE BHV OF ZZQ IS BEGINPROCESS(DATA1,LD_8888,LD_CLK,LD_DONE)IS CONSTANT ALL_8:STD_LOGIC_VECTOR(15

19、DOWNTO 0):="1000100010001000" CONSTANT DONE:STD_LOGIC_VECTOR(15 DOWNTO 0):= "1010101111001101" VARIABLE TEMP:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN LOAD<=LD_8888 OR LD_DONE OR LD_CLK; TEMP:=LD_8888 & LD_DONE & LD_CLK; CASE TEMP IS WHEN "100" => DATA2<=ALL_

20、8;-LOAD_8888 =1 WHEN "010" => DATA2<=DONE;-LOAD_DONE WHEN "001" => DATA2<=DATA1;-LOAD_CLK WHEN OTHERS=> NULL; END CASE; END PROCESS;END ARCHITECTURE BHV; 7.2.4计时器JSQ,和其中需用到的DCNT6和DCNT10-JSQ.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL

21、;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(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

22、 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_LOGIC_VECTOR(3 DOWNTO 0); CARRY_OUT:OUT STD_LOGIC); END COMPONENT DCNT10; COMPONENT DCNT6 IS PORT(CLK,LOAD,ENA:IN STD_LOGIC; DATAI

23、N: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 S2: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:DC

24、NT6 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_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_LO

25、GIC_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); CARRY_OUT: OUT STD_LOGIC );END ENTITY DCNT6; ARCHITECTURE ART OF DCNT6 ISSIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(

26、CLK,LOAD,ENA) IS BEGIN IF LOAD='1' THEN CQI<=DATAIN; ELSIF CLK'EVENT 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; PROCESS(CLK,CQI) IS BEGIN IF CLK'EVENT AND C

27、LK='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 S

28、TD_LOGIC; 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 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;

29、 ELSIF CLK'EVENT AND CLK='1' 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 CLK'EVENT AND CLK='1' THEN IF CQI="0000" THEN CARRY_OUT<=

30、'1'ELSE CARRY_OUT<='0'END IF; END IF; END PROCESS; CQ<=CQI;END ARCHITECTURE ART;7.2.5译码器YMQ47-YMQ47.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY YMQ47 IS PORT(AIN4:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT7: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); EN

31、D ENTITY YMQ47;ARCHITECTURE ART OF YMQ47 IS BEGIN PROCESS(AIN4) BEGIN CASE AIN4 IS WHEN "0000"=>DOUT7<="0111111" -显示0的ga WHEN "0001"=>DOUT7<="0000110" -1 WHEN "0010"=>DOUT7<="1011011" -2 WHEN "0011"=>DOUT7<

32、="1001111" -3 WHEN "0100"=>DOUT7<="1100110" -4 WHEN "0101"=>DOUT7<="1101101" -5 WHEN "0110"=>DOUT7<="1111101" -6 WHEN "0111"=>DOUT7<="0000111" -7 WHEN "1000"=>DOUT7<=&quo

33、t;1111111" -8 WHEN "1001"=>DOUT7<="1101111" -9 WHEN "1010"=>DOUT7<="1011110" -d WHEN "1011"=>DOUT7<="1011100" -o WHEN "1100"=>DOUT7<="1010100" -n WHEN "1101"=>DOUT7<="111

34、1001" -E WHEN OTHERS=>DOUT7<="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; q

温馨提示

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

评论

0/150

提交评论