微波炉eda_第1页
微波炉eda_第2页
微波炉eda_第3页
微波炉eda_第4页
微波炉eda_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

一 设计题目和要求设计题目为:微波炉定时控制器设计要求:1、复位开关: 2、启动开关: 3、烹调时间设置: 4、烹调时间显示:5、七段码测试:6、启动输出:7、按TEST键可以测试七段码管,显示为“8888”; 8、设定时间后,按启动键开始烹调,同时七段码显示剩余时间,时间为0时,显示烹调完成信息“CDEF”二 方案分析 根据题目要求,现需设计一个微波炉控制器,通过该控制器再配以4个七段数码二极管完成微波炉的定时及信息显示。该系统控制部分以FPGA芯片为核心,根据该微波炉控制器的功能设计要求,本系统可由以下4个模块组成: 时钟分频模块; 时间初始化模块; 烹调倒计时模块; 显示译码模块。系统端口图如下: clk是秒时钟脉冲输入,它接收每秒一个时钟脉冲的节拍信号。reset为复位信号,高电平有效,用于芯片的复位功能。test为测试信号,高电平有效,用于测试4个七段数码二极管工作是否正常。 start 为开始加热信号。sec1、sec10、min1、min10 为设定时间的秒位、十秒位、一分位、十分位。selectLed 为数码管位选信号共3位。Led 为数码管段码信号共7位。鉴于本课题,流程简单,所以用一般的VHDL语言设计,没有使用状态机。如果用状态机设计 状态图如下态图可以看出设计较为复杂,因而采用基本的vhdl 方法实现,反而更为简洁。时钟模块 由于需要实现倒计时功能 所以采用了 2KHz 频率 分频后 作为倒计时时钟 。设定时间模块 使用四个按钮分别设定 时间的 秒位 十秒位 一分位 十分位 单独控制,十秒位最大为5,其他位最大为9,超过则为0,重新计数。当检测到开始加热信号时,开始减计数。在设计此模块时 也考虑了多种方案:(1)设计四个按钮的初始话模块,四个按钮分别控制秒,十秒,分,十分4个数值的初始化; (2)设计两个按钮的初始化模块,两个按钮分别提供一个移位信号和一个加信号;由于考虑到产品的方便使用,和程序的复杂程度,相比两个方案,方案一明显更有优势。显示译码模块 采用的是动态扫描位选输出数据,不需对四个数码管都进行绑定。因为需要四个数码管,静态显示根本没法实现。测试信号 测试信号直接控制显示输出 按下后 不接收从倒计时模块传递的数据 直接显示 8888 。设计测试信号 test 时,开始讲 test 信号的检测放在设定时间模块 。 由于该模块本来就较为复杂,test信号的加入,并不是最好的方案。而且当test 信号 为高电平时 ,还需要通过 tsec1 ,tsec10,tmin1 ,tmin10 四个中间信号传递给译码模块 所以在设计此功能时,直接将信号处理 加在了显示译码模块 。使各模块功能更为平均。程序进程功能:数据显示分频模块 时间设定和倒计时减计数 复位 start sec1 sec10 tmin1 tmin10 测试 三 程序流程图 开始 结束减计数是否完毕 减计数开始Start 按键是否按下 时间设定 系统复位初始化 四 单元模块设计4.1 分频模块设计分频模块主要利用2Khz的时钟信号进行分频。得到1s的clock 时钟信号,用于计数模块的时钟信号。试验箱上有1Khz,2Khz,2MHz 等多个时钟信号。而在这里采用2Khz的信号使用。2Khz/2000=1s,所以采用2Khz进行千分频得到1s的信号。分频程序端口图如下: 分频程序如下:if reset = 1 then clock = 0;setFreq := 0 ;elsif clkevent and clk = 1 then setFreq := setFreq + 1;if setFreq = 2000 then setFreq := 0; clock = not clock ;end if;end if分频时序仿真结果:软件仿真采用的时钟周期为 1us,所以分频后得到的时间为2ms 。分频频率的选定,必须要考虑到译码模块的动扫描频率。选择的频率太小,将导致数码管显示不流畅等问题。4.2 时间设置模块设计时间设定模块主要用于对时间设定初始值而用,其中设有clk 和clock 两时钟信号,分别用于外接按钮信号和减计数。设定时间采用四个按钮控制,sec1、sec10、min1、min10 分别为 一秒,十秒,一分,十分的控制信号。而信号 tSec1、tSec10、tMin1、tMin10 为传递信号,传递给显示模块。 时间设置模块端口图: clk 信号 用于检测按钮的状态 ,当有按钮按下时,则相应的时间信号 加一 。 但 sec1 、 min1 、min10最大为 9 ,累加至9后,再次按下按钮累加则置0。sec10 为十秒位 所以最大为 5 ,再次按下累加则置零。 采用这种设计方案 可以降低产品的使用门槛 操作较为容易 。时间设定代码:if reset = 1 then time3 := 0000; - 复位处理elsif min10event and min10 = 1 then - 设置十分位时间if time3 9 then time3 := time3 + 1; else time3 := 0000; - 十分位最大为9,超过置0end if;end if; 时间设定模块的中需要注意很多细节上的问题。首先,微波炉的时间最大为 99分59秒 ,不应该有 99分 99 秒。明白这点是后面写代码的基础。由于采用的是四个按钮单独控制各个时间位。还需要注意的是当各位的时间到达最大值后,再次按下按钮,应该回零处理。时间初始化时序图仿真:其中t0,t1,t2,t3 为输出显示信号,为方便观察tSec1,tSec10,tMin1,tMin10的数据,加入的测试信号 4.3 减计数模块设计当 检测到 start 按钮按下时 则启动减计数程序 开始减计数,本次课设没有采用状态机实现倒计时而是使用了 基本的 vhdl 处理 。 较状态机而言 ,程序更为简洁,更具有可读性。减计数由于 显示模块 为四位 十进制数 ,所以需要单独控制各位的数值。减计数模块端口图:( 1 ) 开始减计数后,判断,秒位是否为0000,不为零则依据 clock 时钟 开始递减。为零则置位 借位判断位 borrow ,向十秒为借位。( 2 ) 当十秒为不为零时,如果 borrow 位 为1 则 减一后清零借位信号 borrow ,置位 一秒位为 1001 即为 9 。如果十秒位为零 borrow 为 1 ,则向一分位借位 。( 3 ) 当一分不为零 ,如果borrow 信号为 1 则 减一 清零借位信号borrow ,置位 十秒为 0101 即为 5 ,置位 一秒位 为 1001 即为 9 。如果一分位为零 borrow 为 1 ,则向十分位借位 。( 4 ) 当十分位不为零 ,如果 borrow 位 为 1 则 减一后清零借位信号 borrow ,置位 一分位和 一秒位 为 1001 即为 9 ,置位 十秒位 为 0101 。为零则 减计数完毕 。置位 tSec1 、tSec10 、 tMin1 、tMin10 为 1111 。结束减计数程序。减计数程序代码如下:timeTotal := time3&time2&time1&time0; - 并置各个时间位if timeTotal 0 then time0 := time0 - 1;- 不需要借位则直接用一秒位减一end if;end if;减计数模块的设计中,采用了if 嵌套的模式,处理各位的借位。当clock时钟上升沿到来即执行一次判断。程序中并没有采用直接对信号进行赋值,而是重新再进程中重新定义了四个临时的信号。处理完成后再赋值给中间信号 tSec1,tSec10,tMin1,tMin10。 由于变量赋值的即时性,程序也方便将信号赋给测试信号测试。程序中采用将四个数码管的各位并置后做一次判断的方法,判断是否减计数完毕。如果并置后二进制数在0000 00000 0000 0000 和 1001 10001 0101 1001 之间,即为00:00 - 99:59间 ,则继续减计数。 当并置后各位都为零时,则将数码管各位的值置一,此时四位并置后为 1111 1111 1111 1111 ,不在继续减计数,数据经过中间信号 传递给译码显示模块 译码后显示为 CDEF。减计数时序仿真:其中t0,t1,t2,t3 为输出显示信号,为方便观察tSec1,tSec10,tMin1,tMin10的数据,加入的测试信号 4.4 显示译码模块 显示译码模块采用动态扫描位选输出数据,不需对四个数码管都进行绑定。同时负责 test 信号的处理。当 test 按钮按下时 ,不再接收进程间传递信号tSec1、tSec10、tMin1、tMin10 的数据 ,直接给数码管送段码显示 1111111 。显示译码模块端口图: 显示译码负责对 0 - 9 的数字进行编码 编码表如下:还需对 完成信号 CDEF 进行编码 :C 为 0111001;D 为 0111111;E 为 1111001;F 为 1110001;显示译码代码如下:case tMin10 iswhen 0000 = led3 := 0111111;when 0001 = led3 := 0000110;when 0010 = led3 := 1011011;when 0011 = led3 := 1001111;when 0100 = led3 := 1100110;when 0101 = led3 := 1101101;when 0110 = led3 := 1111101;when 0111 = led3 := 0000111;when 1000 = led3 := 1111111;when 1001 = led3 := 1101111;when 1111 = led3 := 0111001; -加热完毕 输出 C when others = led3 := 0111111 ; - 异常情况都输出 0end case; 显示译码模块的设计,由于加热完毕需要显示为CDEF 。所以采用了对每一位数码管单独设计译码模块。 检测到 1111 时,各位显示对应的字符。还需要注意对其他状态的处理,每个数码管只需要显示 0-9 和 一个1111 状态,还需对其他状态 置零处理 。 动态扫描的原理是通过高频率的时钟轮流切换 数码管的显示,即 高速切换 位码 逐个 送入 段码。但由于人眼无法察觉如此快速的切换和延迟作用,数码管显示内容和静态输出一样。由于需要四个数码管,所以采用了动态扫描实现显示。动态扫描代码如下 : if clkevent and clk = 1 then - 扫描显示if count = 011 then- 只需四个数码管,当count = 3 时 将count 复位count := 000;elsecount := count + 1;end if;case count is - 依据位码选择对应数码管显示when 000 = led led led led null; end case;end if;动态扫描仿真:五 软件仿真代码完成后,开始进行仿真工作。 仿真中由于分频比为 2000 所以需将时钟设置小一些。仿真中所用时钟周期为 1us ,分频后所得时钟为 1ms 。时序仿真图 如下:其中t0,t1,t2,t3 为输出显示信号,为方便观察tSec1,tSec10,tMin1,tMin10的数据,加入的测试信号 程序和代码Library ieee ;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity microwave is port(clk,start,reset,test: in std_logic;min10,min1,sec10,sec1 : in std_logic; - 为设定时间的10分钟位 1分钟位 10秒钟位 1秒钟位light: out std_logic; - 启动输出显示灯selectLed: out std_logic_vector( 2 downto 0);- 数码管位选控制信号 即为 位码led : out std_logic_vector(6 downto 0) - 数码管 段码);end microwave;architecture controller of microwave issignal tMin10,tMin1,tSec10,tSec1 : std_logic_vector(3 downto 0); - 最大设定时间为 99分59秒(5999s) signal clock : std_logic;begin setClock:process(clk,reset) - 分频模块 -variable setFreq : integer range 2002 downto 0 ; - 设置选定频率 2kHzbeginif reset = 1 then clock = 0;setFreq := 0 ;elsif clkevent and clk = 1 then setFreq := setFreq + 1;if setFreq = 2000 then setFreq := 0; clock = not clock ;end if;end if;end process; - 显示时间处理模块 -setTime:process(min10,min1,sec10,sec1,reset,test,start,clock) variable time0,time1,time2,time3 : std_logic_vector(3 downto 0); - 最大设定时间为 99分59秒(5999s)variable timeTotal : std_logic_vector(15 downto 0);variable turnOn : std_logic;beginif start = 1 then turnOn := 1 ;light = 1;elsif reset = 1 then turnOn := 0;light = 0; end if;if turnOn = 0 then if reset = 1 then time3 := 0000; - 复位处理elsif min10event and min10 = 1 then - 设置十分位时间if time3 9 then time3 := time3 + 1; else time3 := 0000; - 十分位最大为9,超过置0end if;end if;if reset = 1 then time2 := 0000; elsif min1event and min1 = 1 then - 设置一分位时间if time2 9 then time2 := time2 + 1; else time2 := 0000; - 一分位最大为9,超过置0end if;end if;if reset = 1 then time1 := 0000; elsif sec10event and sec10 = 1 then - 设置十秒位时间if time1 5 then - 十秒位最大为5time1 := time1 + 1; elsetime1 := 0000; - 十秒位最大为5,超过置0end if;end if;if reset = 1 then time0 := 0000; elsif sec1event and sec1 = 1 then - 设置一秒位时间if time0 9 then time0 := time0 + 1; else time0 := 0000; - 一秒位最大为9,超过置0 end if;end if;elsif clockevent and clock = 1 then if turnOn = 1 thentimeTotal := time3&time2&time1&time0; - 并置各个时间位if timeTotal 0 then time0 := time0 - 1;- 不需要借位则直接用一秒位减一end if;end if;end if;end if;tSec1 = time0;tSec10 = time1;tMin1 = time2;tMin10 led3 := 0111111;when 0001 = led3 := 0000110;when 0010 = led3 := 1011011;when 0011 = led3 := 1001111;when 0100 = led3 := 1100110;when 0101 = led3 := 1101101;when 0110 = led3 := 1111101;when 0111 = led3 := 0000111;when 1000 = led3 := 1111111;when 1001 = led3 := 1101111;when 1111 = led3 := 0111001; -加热完毕 输出 C when others = led3 := 0111111 ; - 异常情况都输出 0end case;case tMin1 is- 显示译码模块when 0000 = led2 := 0111111;when 0001 = led2 := 0000110;when 0010 = led2 := 1011011;when 0011 = led2 := 1001111;when 0100 = led2 := 1100110;when 0101 = led2 := 1101101;when 0110 = led2 := 1111101;when 0111 = led2 := 0000111;when 1000 = led2 := 1111111;when 1001 = led2 := 1101111;when 1111 = led2 := 0111111; -加热完毕 输出 D when others = led2 := 0111111; - 异常情况都输出 0end case;case tSec10 is- 显示译码模块when 0000 = led1 := 0111111;when 0001 = led1 := 0000110;when 0010 = led1 := 1011

温馨提示

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

评论

0/150

提交评论