收藏 分销(赏)

基于FPGA技术的微波炉控制器.doc

上传人:快乐****生活 文档编号:3979590 上传时间:2024-07-24 格式:DOC 页数:14 大小:62.04KB 下载积分:8 金币
下载 相关 举报
基于FPGA技术的微波炉控制器.doc_第1页
第1页 / 共14页
基于FPGA技术的微波炉控制器.doc_第2页
第2页 / 共14页


点击查看更多>>
资源描述
基于FPGA技术的微波炉控制器 **大学**学院 现代电子系统设计 **系(院)**专业 题目:基于FPGA技术的微波炉控制器 学生姓名: 班级: 学号: 指导教师: 完成日期:年月 摘要 本文介绍了应用FPGA芯片和硬件描述语言(VHDL)设计微波炉控制器系统的方法.系统使用VHDL编程实现各底层模块的功能,顶层的设计采用图形输入完成。本文主要阐述模块化设计的思想和状态图的描述方法,以及它们在硬件描述语言中的应用,并展示了其在QuartusⅡ开发系统下的仿真结果和烧写到EPM570T100C5后的现象. 主要有以下几个模块:状态控制器KZQ、数据装载器ZZQ、烹调计时器JSQ、显示译码器YMQ47以及分频器和动态显示电路。 该控制器具有系统复位、状态控制、时间设定、烹饪计时、动态显示译码等功能. 关键字:FPGA;VHDL;微波炉;控制器;状态图;定时器 目录 1。绪论1 1.1任务的提出1 1.2设计的基本要求1 1。3设计的目的和意义1 2。系统总体设计2 2。1系统总体方案设计2 2。2系统功能模块描述(具体的电路图和VHDL设计文件将在附件中给出)2 3.系统详细设计2 3。1 状态控制器KZQ的设计2 3.2 数据装载器ZZQ的设计5 3。3 烹调计时器JSQ的设计5 3。4 显示译码器YMQ47的设计5 4系统仿真6 4.1状态转换控制器KZQ仿真图6 4。2数据装载器ZZQ仿真图6 4。3计时器JSQ仿真7 4。4显示译码器YMQ47仿真图8 5.设计总结8 6。参考文献8 7。附件9 7。1整体的原理图9 7.2各个基本模块的VHDL语言9 7.2。1分频器9 7。2.2控制器KZQ10 7。2。3装载器ZZQ11 7.2。4计时器JSQ,和其中需用到的DCNT6和DCNT1012 7。2。5译码器YMQ4715 7。2.6动态显示电路需要用到的DCNT4和decoder15 12 1。绪论 随着人民生活水平的提高,微波炉开始进入越来越多的家庭,它给人们的生活带来了极大的方便。它省事、省电、方便和卫生。作为现代的烹饪工具,微波炉控制器体现着它的重要性能指标。目前大部分微波炉控制器采用单片机进行设计,电路比较复杂,性能不够灵活。本文采用先进的EDA技术,利用QuartusⅡ工作平台和VHDL设计语言,设计了一种新型的微波炉控制器系统.该控制器具有系统复位、状态控制、时间设定、烹饪计时、动态显示译码等功能。 1。1任务的提出 设计一个微波炉控制器 1。2设计的基本要求 (1)七段数码管及发光二极管完成微波炉的定时及状态显示; (2)控制器的输入信号包括定时控制信号、定时数据的输入、复位信号、开始煮饭的控制信号等; (3)其他(我们自己添加了测试数码管是否能够正常显示的TEST信号)。 1.3设计的目的和意义 目前大部分微波炉控制器采用单片机进行设计,电路比较复杂,性能不够灵活。本文采用先进的EDA技术,利用QuartusⅡ工作平台和VHDL设计语言,设计了一种新型的微波炉控制器系统。该控制器具有系统复位、状态控制、时间设定、烹饪计时、动态显示译码等功能。 2.系统总体设计 2.1系统总体方案设计 根据该微波炉控制器的功能设计要求,本系统可由以下6个模块组成:1。分频器;2.状态控制器KZQ;3。 数据装载器ZZQ;4。 烹调计时器JSQ;5。 显示译码器YMQ47;6。动态显示电路.其内部组成原理图如图1所示。 图1 2。2系统功能模块描述(具体的电路图和VHDL设计文件将在附件中给出) 各个模块的功能介绍 (1)分频器fenpinqi模块的功能是实现对实验箱上的50Mhz的分频,是整个系统能够正常显示的基础。 (2) 状态控制器KZQ的功能是控制微波炉工作过程中的状态转换,并发出有关控制信息;输入信号为CLK、TEST、START、SET_T、RESET和DONE,输出信号为LD_DONE、LD_CLK、LD_8888和COOK信号。 (3) 数据装载器ZZQ的功能是根据KZQ发出的控制信号选择定时时间、测试数据或烹调完成信息的装入. (4) 计时器JSQ的功能是负责烹调过程中的时间递减计数,并提供烹调完成时的状态信号供KZQ产生烹调完成信号. (5) 显示译码器YMQ47的功能就是负责将各种显示信息的BCD转换成七段数码管显示的驱动信息编码。需要译码的信息有:数字0~9,字母d、o、n、E。 (6)动态显示电路的功能是将显示译码器YMQ47驱动信息编码在数码管有限的条件下显示出来. 3。系统详细设计 3。1 状态控制器KZQ的设计 状态控制器KZQ的功能是控制微波炉工作过程中的状态转换,并发出有关控制信息,因此我们可用一个状态机来实现它。经过对微波炉工作过程中的状态转换条件及输出信号进行分析,我们可得到其状态转换图如图2所示,其输入、输出端口如图3所示。 图2 KZQ的状态转换图 图3 KZQ的输入、输出端口图 3。2 数据装载器ZZQ的设计 ZZQ的输入、输出端口如图4所示,根据其应完成的逻辑功能,它本质上就是一个三选一数据选择器。本设计采用一个进程来完成,但由于三个被选择的数据只有一个来自输入端口,因此另两个被选择的数据则通过在进程的说明部分定义两个常数来产生。 图4 ZZQ的输入、输出端口图 3。3 烹调计时器JSQ的设计 烹调计时器JSQ为减数计数器,其最大计时时间为59:59.因此我们可用两个减计数十进制计数器DCNT10和两个减计数六进制计数器DCNT6级联构成. 3.4 显示译码器YMQ47的设计 本显示译码器YMQ47不但要对数字0~9进行显示译码,还要对字母d、o、n、E进行显示译码,其译码对照表如表1所示. 表1 YMQ47的译码对照表 4系统仿真 4。1状态转换控制器KZQ仿真图 4。2数据装载器ZZQ仿真图 4。3计时器JSQ仿真 因为计时器是由两个减计数十进制计数器DCNT10和两个减计数六进制计数器DCNT6级联构成,所以,先完成两个减计数十进制和六进制计数器的仿真.以下分别是两减计数器的功能仿真图。 十进制计数器DCNT10仿真图 六进制计数器DCNT6仿真图 在前面仿真正确的基础上,生成相应的元件,对两计数器进行级联,进行编译、仿真得到仿真结果图。下图是对59分59秒的仿真结果. 由以上仿真结果可以看出,该JSQ模块实现了烹调计时的定时作用。 4。4显示译码器YMQ47仿真图 5.设计总结 本设计使用QuartusⅡ软件进行编写,并在实验箱上实现. 本设计有六个小模块模块,也可以分成两个大模块,一个模块是由KZQ、ZZQ、JSQ组成的,这个模块是本设计的基本,另一个模块是有分频器、译码器、动态显示电路组成的,这个模块是为了配合实验箱。 第一次实验的时候,发现管脚不够分配,知道这是因为实验箱上只有一个静态显示数码管,有8个动态显示数码管。于是,进行改进,在原来的基础上增加了动态显示模块.第二次实验的时候,发现数码管跳的过快,基本分辨不出来数字的变化,于是,想到是分频分的不够,于是,又改了一下分频器的分频系数.最后一次实验时,能够正确的进行显示,并能够完成系统复位、状态控制、时间设定、烹饪计时、动态显示译码等功能.唯一的缺陷是,当计时到00:00时,显示灯是灭了一下,然后继续亮。这是需要改进的地方。对于时间的设定,我们虽然没有实现键盘控制,但是我们可以通过软件进行设置,并不是通过接地或者接高电平写死了,而是可以改变的. 我们自己添加了测试数码管是否能够正常显示的TEST信号。 6。参考文献 [1]谭会生,张昌凡。EDA技术及其应用[M]。西安:西安电子科技大学出版社 [2]江思敏.VHDL数字电路及系统设计.北京:机械工业出版社 [3]**院《现代电子设计》课本和实验指导书 7。附件 7。1整体的原理图 7。2各个基本模块的VHDL语言 7.2。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: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(19); end behave; 7.2.2控制器KZQ -—KZQ.VHD LIBRARY IEEE; USE IEEE。STD_LOGIC_1164.ALL; USE IEEE。STD_LOGIC_ARITH.ALL; ENTITY KZQ IS PORT(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 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〈=IDLE; -—DEFAULTNEXTSTATE 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_DONE<='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'; 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.VHD LIBRARY 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; ARCHITECTURE BHV OF ZZQ IS BEGIN PROCESS(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<=LD_8888 OR LD_DONE OR LD_CLK; TEMP:=LD_8888 & LD_DONE & LD_CLK; CASE TEMP IS WHEN "100” => DATA2〈=ALL_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。VHD LIBRARY 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(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_LOGIC_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 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: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_H,S4); DONE<=S4 AND S3 AND S2 AND S1; END ARCHITECTURE ART; --DCNT6。VHD LIBRARY 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); CARRY_OUT: OUT STD_LOGIC ); END ENTITY DCNT6; ARCHITECTURE ART OF DCNT6 IS SIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(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 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。VHD LIBRARY 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; 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; ELSIF CLK’EVENT AND CLK=’1’ THEN IF 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〈=’1’; ELSE CARRY_OUT<=’0’;END IF; END IF; END PROCESS; CQ〈=CQI; END ARCHITECTURE ART; 7。2。5译码器YMQ47 --YMQ47.VHD LIBRARY 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)); END ENTITY YMQ47; ARCHITECTURE ART OF YMQ47 IS BEGIN PROCESS(AIN4) BEGIN CASE AIN4 IS WHEN "0000”=>DOUT7<=”0111111”; -—显示0的g~a WHEN ”0001”=〉DOUT7〈=”0000110”; --1 WHEN ”0010”=>DOUT7<="1011011"; ——2 WHEN ”0011”=〉DOUT7〈=”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〈="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〈=”1111001”; ——E WHEN OTHERS=〉DOUT7〈=”0000000”; END CASE; END PROCESS; END ARCHITECTURE ART; 7。2。6动态显示电路需要用到的DCNT4和decoder —-cntm4。vhd library 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 downto 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(clk'event and clk='1') then if(qcnt=3)then qcnt〈="0000”; else qcnt<=qcnt+1; end if; end if; end process; end behave; -—decoder。vhd library ieee; use ieee。std_logic_1164.all; use ieee.std_logic_unsigned。all; entity decoder is port( adr :in std_logic_vector(3 downto 0); seg :out std_logic_vector(6 downto 0); scan :out std_logic_vector(3 downto 0); sec_l,sec_h,min_l,min_h:in std_logic_vector(6 downto 0) ); end decoder; architecture bhv of decoder is begin process(adr) begin case adr is when ”0000”=>seg〈=min_h; scan〈="0111”; when ”0001”=>seg〈=min_l; scan<="1011”; when ”0010”=〉seg〈=sec_h; scan<="1101"; when ”0011”=〉seg<=sec_l; scan〈=”1110”; when others=〉seg<="0000000”; scan〈=”0111"; end case; end process; end bhv;
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服