微波炉可编程逻辑控制系统设计

更新时间:2024-05-03 19:48:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

可编程微波炉控制器系统的计

目录

第1章 概述 ................................................................................. 2

1.1 VHDL介绍 ......................................................................................................................... 2 1.2 Quartus Ⅱ开发平台 .......................................................................................................... 2 1.3选题背景 ............................................................................................................................. 3 1.4选题的技术现状 ................................................................................................................. 3

第2章 微波炉控制器的设计要求 ............................................. 4

2.1基本要求 ............................................................................................................................. 4 2.2发挥部分 ............................................................................................................................. 4 2.3方案设想 ............................................................................................................................. 4

第3章 系统硬件的设计 ............................................................... 6

3.1系统硬件的组成原理图 ..................................................................................................... 6 3.2 电源电路 ....................................................................................................................... 6 3.3 有源晶体 ............................................................................................................................ 7 3.4数码管 ................................................................................................................................. 7 3.5LED ...................................................................................................................................... 8 3.6按键使用 ............................................................................................................................. 8 3.7报警电路 ............................................................................................................................. 9 3.8 8X8 点阵 ............................................................................................................................ 9 3.9 8路拨码开关输入 ............................................................................................................ 10

第4章 系统软件设计 ................................................................. 10

4.1 分频程序设计 .................................................................................................................. 10 4.2数码管显示设计程序设计 ............................................................................................... 11 4.3报警提示设计程序设计 ................................................................................................... 15 4.4门是否关紧程序设计 ....................................................................................................... 15 4.5 开关按键处理程序设计 .................................................................................................. 16

第5章管脚分配及显示结果 ....................................................... 17

5.1管脚分配图 ....................................................................................................................... 17 5.2 管脚分配表 ...................................................................................................................... 18 5.3硬件显示结果 ................................................................................................................... 18 5.4用户使用方法 ................................................................................................................... 19

第6章 总结 ................................................................................. 20 参考文献 ....................................................................................... 21 附录一 电路原理图 ................................................................... 22 附录二 微波炉控制器系统程序清单 ......................................... 25

0

可编程微波炉控制器系统的计

摘要

随着社会的发展与科学的进步微波炉在人们的生活中使用非常普遍。微波炉内部的电子元件有不多,本设计只设计其中的核心部分控制器,该控制器具有系统复位、状态控制、时间设定、火力档位、烹饪计时、温度控制、显示译码和音响效应等功能,基于CPLD 芯片实现。

本设计完成微波炉控制器的设计与分析。以VHDL语言为开发工具,QuartusⅡ作为程序运行平台。通过设计和实验,对开发的程序进行调试运行和波形仿真测试验证,初步实现了设计目标。运用硬件描述语言VHDL,大大降低了硬件数字系统设计,使得程序设计直观简洁,设计效率高。

关键词 微波炉、控制器、VHDL QuartusⅡ 仿真

1

可编程微波炉控制器系统的计

第1章 概述

本文所设计的电子钟系统是运行在QuartusⅡ环境下的一个小型的数字系统。我采用了自顶向下的设计方法,应用功能强大的硬件描述语言VHDL完成系统的设计仿真。下面就本设计所用到的技术作一下简单的介绍。

1.1 VHDL介绍

VHDL是Very High Speed Integrated Circuit Hardware Description Language的缩写,是在ADA语言的基础上发展起来的硬件描述语言。

VHDL诞生于1983年,1987年12月,VHDL被接纳为标准硬件描述语言,即IEEE1076标准。经过不断更改和改善,1993年,VHDL重新修订并增加了一些功能,即IEEE 1076-93标准。目前在电子工程领域,作为IEEE的工业标准硬件描述语言,VHDL已成为事实上的通用硬件描述语言。

电路设计的描述层次可分为系统级、算法级、寄存器传输级、门级和晶体管级,VHDL的建模范围可以从最抽象的系统级一直到门级,从多个层次对电路进行模拟仿真。它除了具有硬件特征的语句外,其语言形式和描述风格以及句法和一般的计算机高级语言相当类似,然而它又有同软件语言完全不同的性质。 以下是一个VHDL的实例:

这个程序是一个简单的2选1多路选择器的VHDL完整描述。它体现出了VHDL程序的一般结构:使用库(Use)定义区——实体(Entity)定义区——结构(Architecture)定义区。其中Use定义区描述的是这个程序使用的定义库,类似于C语言的头文件包括; Entity 定义区描述的电子的外部结构,就是指元件的输入和输出接口,它用以定义一个芯片的管脚状态;Architecture定义区里面是这个程序的关键部分,包括算法,功能,硬件的行为等都是在Architecture区里面描述的。

一个完整的VHDL程序是对一个功能元件从外部和内部两个方面来进行描述,由于元件本身具有层次性,因此它既可以作为完成某一功能的逻辑电路单元而独立存在,也可以作为一个部件,和其他功能元件一起构成更复杂的功能元件或数字系统,因此其单元的概念很清晰,可以灵活地应用于自顶向下的数字系统设计流程。

1.2 Quartus Ⅱ开发平台

Quartus II是Altera公司的第四代可编程逻辑器件集成开发环境,提供从设计输入到器件编程的全部功能。Quartus II可以产生并识别EDIF网表文件、VHDL网表文件,为其他 EDA 工具提供了方便的接口;可以在Quartus II集成环境中自动运行其他 EDA 工具。Quartus II 软件的开发流程可概括为以下几步:设计输入、设计编译、设计时序分析、设计仿真和器件编程,具有FPGA和CPLD芯片设计的所有阶段的解决方案。

2

可编程微波炉控制器系统的计

(1)设计输入 Quartus II软件在File菜单中提供“New Project Wizard...”向导,引导设计者完成项目的创建。当设计者需要向项目中添加新的VHDL文件时,可以通过“New”选项选择添加。

(2)设计编译 Quartus II编译器完成的功能有:检查设计错误、对逻辑进行综合、提取定时信息、在指定的Altera系列器件中进行适配分割,产生的输出文件将用于设计仿真、定时分析及器件编程。

(3)设计定时分析 单击Project菜单下的“Timing Settings...”选项,可以方便地完成时间参数的设定。Quartus II软件的时序分析功能在编译过程结束之后自动运行,并在编译报告的Timing Analyses文件夹中显示。

(4)设计仿真 Quartus II软件允许设计者使用基于文本的向量文件(.vec)作为仿真器的激励,也可以在Quartus II软件的波形编辑器中产生向量波形文件(.vwf)作为仿真器的激励。

(5)器件编程 设计者可以将配置数据通过MasterBlaster或ByteBlasterMV通信电缆下载到器件当中,通过被动串行(Passive Serial)配置模式或JTAG模式对器件进行配置编程,还可以在JTAG模式下给多个器件进行编程。

1.3选题背景

随着生活水平的不断提高, 人们对家用电器的功能和质量的要求越来越高。而现有市售的微波炉其主要弊端为: 不能按既有程序进行烹调, 需要使用者根据食物的类型、数量、温度等因素去设定微波炉的工作时间, 若设定的工作时间过长, 含水分较多的食物可能会产生过热碳化的现象, 若时间过短则达不到预期的烹调效果。 不仅在节能方面未做过多考虑,使用者还需要经常翻看使用说明书才能完成操作过程。针对这些问题, 笔者认为有必要研制一种操作简单且烹调效果好的微波炉,根据一些家常菜按固定程序烹调的现象,可采取分时、分档火力加热,节时又节能。

1.4选题的技术现状

应用CPLD 芯片和硬件描述语言(VHDL)设计该微波炉控制器系统,该系统用VHDL 编程实现各底层模块的功能,顶层设计用图形输入完成。

设计依据如下:

1)技术可行性:采用EDA作为开发方法,VHDL语言为开发工具,通过设计和实验,对开发的程序进行调试运行和波形仿真测试验证,实现设计目标;

2)经济可行性:合理利用实验室已有软件、实验箱、开发板,对该微波炉控制器设计进行开发、调试运行、仿真测试,以及结果验证等;

3

可编程微波炉控制器系统的计

3)以现有网络资源为依据,以辅导老师的指导为参考,根据已学知识,综合该控制器设计要求,具体细化设计;

第2章 微波炉控制器的设计要求

2.1基本要求

(1) 制定一个在不同功能时火力的控制时序表。具有三档微波加热功能,分别表示微波炉

工作状态为烹调、烘烤、解冻,试验使用LED模拟。

(2) 实现工作步骤:复位待机——〉检测显示电路——〉设置输出功能和定时器初值—

—〉启动定时和工作开始——〉结束烹调、音响提示。

(3) 在上电或手动按复位键时,控制器输出的微波功率控制信号为0,微波加热处于待

机状态,时间显示电路显示为00.00。

(4) 具有4位时间预置电路,按键启动时间设置,最大预设数为99分99秒。 (5) 设定初值后,按开启键,一方面按选择的挡位启动相应的微波加热;另一方面使计

时电路以秒为单位作倒计时。当计时到时间为0则断开微波加热器,并给出声音提示,即扬声器输出2~3s的双音频提示音。

(6) 若在待机状态时按测试键,则4位数码管交替显示全亮和全灭两种状态,以检测数

码管各发光段的好坏。

2.2发挥部分

(7) 微波炉火力档位的增加。 (8) 输出显示方面的扩展。 (9) 实现智能控制、信息控制。

2.3方案设想

根据该微波炉的功能设计要求,和慎重的思考后,我的方案确定为以EPM240芯片为核心的基础上结合外围电路,再加上软件上的设计,从而实现可编程逻辑微波炉控制设计。

在EPM240的学习板上,我运用了板上的时钟电路、数码管显示电路、按键控制电路、电源电路、点阵显示电路、报警提示电路。

在程序编程方面采用了分频器、计数器、点阵显示、调节控制、显示译码器、彩灯控制、门是否关紧。

系统预计操作流程如下

4

可编程微波炉控制器系统的计

开始待机状态,状态转换过程显示,等待数据装入时间选择功能火力档位系统预置方案系统自定方案系统菜单测试装载设置启动语言设置时间定时启动用户定义帮助系统烹调属性数据装载完成设置加时设置烹调属性返回待机确认信息功能执行返回待机图2.3 系统流程图

其相应的键盘控制布局如下所示:

5

可编程微波炉控制器系统的计

图2.4 系统控制键布局图

第3章 系统硬件的设计

3.1系统硬件的组成原理图

电源电路 LED电路 下载电路 Max Ⅱ 提示报警电路 EMP240T100C5 50M时钟 振荡电路 点阵显示电路 键盘控制电路 数码管显示电路

3.2 电源电路

6

可编程微波炉控制器系统的计

电源可以采用 USB 上电,也可以外接5V DC 电源。外接5V DC电源时请注意正

负极性.内正外负。

3.3 有源晶体

采用有源晶体频率为 50M Hz 给 CPLD 的 I/O12(CLKIN)提供时钟。 我们在使用时钟的时候要分配对应的脚。

3.4数码管

本设计采用共阴极动态显示驱动。因为CPLD的I/O驱动能力比较强,所以可以直接驱动数码管,但为了保护I/O口在一个回路之中串接100欧姆的限流电阻。为了灵活使用I/O口,采用了插针方式,硬件上并没有直接连接上去。

7

可编程微波炉控制器系统的计

3.5LED

注意:在 LED 发光二极管的时候,要把二极管的 J10 用跳冒短接起来,J10 是 LED 发光二极管的电源跳线设置.如果你不用 LED 发光二极管也可以把 J10 的跳冒取下来,当然 也可以不用取。

3.6按键使用

8

可编程微波炉控制器系统的计

注意:板子上面的几个独立按键都可以作为程序的复位脚,CPLD 和其他的 51 单片机或者 ARM 或者 DSP 不一样的。可编程 CPLD 器件每一个可编程的 I/O 口都可以作为复位 脚。而其他的 MPU 就是一个固定的脚,这个大家要分清楚。

3.7报警电路

BELL当 I/O15 为低电平时 BELL发出嘟嘟的声音。

3.8 8X8 点阵

为了让用户在选择档位调节火候大小的时候能更加明显显示,我也设计一个8*8 共阴极的点阵显示,通过程序不断进行扫描,使得行高列低。从而实现要显示的符号。具体电路如图3-9-1。

9

可编程微波炉控制器系统的计

3.9 8路拨码开关输入

通过拨码开关可做相应的输入等实验,拨码开关和按键的用途差不多,只不过拨码开关可以固定电平,而按键一松手又回到以前的状态了。

第4章 系统软件设计

4.1 分频程序设计

在接口电路中,时钟信号的作用至关重要,一般CPLD的外部时钟信号可达到几十MHZ,但是由于一些接口电路的特性所致,这样高频率的时钟不适合电路工作,所以应该引入时钟分频电路产生适合接口的工作频率。时钟发生器的输入是全局时钟clk,是从50MHZ的晶振得到的信号。为了产生合适的扫描时钟、计数时钟和闪烁时钟,所以要让50MHZ信号变成clk1为50000hz和 clk2为1hz。

具体程序如下:

--***********50000hz分频信号***********----------

process(clk)

variable cntt : integer range 1 to 500; begin

if(clk'event and clk='1')then if cntt=500 then

cntt:=1; clk1<= not clk1; else

cntt:=cntt+1; end if; end if; end process;

---***************1hz钟信号 ****************------

process(clk1)

10

可编程微波炉控制器系统的计

variable cnt : integer range 1 to 25000; begin

if(clk1'event and clk1='1')then if cnt =25000 then

cnt:=1;clk2<= not CLK2; else

cnt:=cnt+1; end if; end if; end process;

在产生1HZ信号的进程中之所以用了上一个进程中产生的5000hz的clk1,这样用的目的是为让系统剩下资源,因为EPM240的系统资源本来就是很少的,为了更好的实现更加智能化,所以要尽量节约系统资料。所以用clk1来产生clk2。

4.2数码管显示设计程序设计

根据要求,通过数码管的显示来显示倒计时的其实时间,客户调节时间的显示,调节火候的显示,所以程序必须设计一个可以进行倒计时的计数器,一个调节时间功能的进程。让用户通过调节时间来制定要进行倒计时的开始时间。

一开始时我原本打算通过设计一个4*4矩阵键盘来实现更加智能化设计,让用户可以很轻松通过键盘上的数字按键来控制显示数字来设置全自动时间以及其他功能。程序及硬件电路图都设计好了,但是由于EPM240的系统资源极其有限,矩形键盘所需的系统资源大。所以让我不得不放弃用矩形键盘来控制。所以最终选择用6个独立按键来控制。再说EPM240的端口又多,6个端口对它也只是小菜一碟。

整个程序中需要一个倒计时进程来控制数码管到显示计时,原理很简单就是相当计时秒表一样,只是把条件的当0就变为9,变成当9变为0就好了,这样就能实现数码管倒计时功能了。

为了控制指示灯和防止用户忘记关门就直接开始工作导致微波伤害人体健康,所以在进行倒计时工作时我加上了一个条件判断是否要进行计时工作。

为了实现假如用户调节时间的时候不用一定要调节四位,就直接可以按开始按钮,数码管就不会不停止那里闪烁。所以又要在工作计时时加上一个判断条件。

具体程序如下

ELSIF(CLK2'EVENT AND CLK2='1') THEN

if (L='0' and kaimeng='0')then ----------为了控制指示灯和防止用户忘

记关门就直接开始工作导致微波伤害人体健康----------

cnt1<=0; ---------------为了实现假如用户调节时

间的时候不用一定要调节四位,就直接可以按开始按钮,数码管就不会不停止那里闪烁。

case led3 is

when\

11

可编程微波炉控制器系统的计

case led4 is

when\ case led5 is

when\ case led6 is

when\ led5<=\ led4<=\

led3<=\

when others=>led6<=led6-1; end case;

when others=> led5<=led5-1; end case;

when others=>led4<=led4-1; end case;

when others=>led3<=led3-1; end case; end if;

在写这段程序是要对全局思路要很清晰,特别是这里用到信号量最多,每个信号要知道它的具体作用。

调节时间进程我的主要思路是利用一个移位和两个分别为递增和递减的按键来控制,利用case 语句来控制数码管的位置,利用case语句也有一个好处就是能够节约系统资源。

例如实现递增功能的程序如下:

elsif (dizeng='0') THEN -----dizeng=0时递增调时

case cnt1 is

when 4=>case led3 is

when\ when others=> led3<=led3+1; end case;

when 3=>case led4 is

when\ when others=> led4<=led4+1; end case;

when 2=>case led5 is

when\ when others=> led5<=led5+1; end case;

when 1=>case led6 is

when\

12

可编程微波炉控制器系统的计

when others=> led6<=led6+1; end case;

when others => null; end case;

同理就可以编写实现递减功能的程序。

因为我的数码管到管脚是统一连在一起的,目的是为了节约IO口,所以要用不断扫描数码管才能让数码管显示你想要的数字,扫描数码管到方法有很多种,为了让用户知道他调节时间时所控制数码管到位置,所以我加上了当那个数码管受到控制时,还会不断闪烁,加以显示。这因为加上了这个功能,所以要打破传统的扫描方法。顺便节约系统资源。编写程序如下:

--********-调整闪烁时间*******************---- process(cnt,en_xhdl,data4) begin

if(clk1'event and clk1='1')then if cnt=4 then cnt<=0; else

cnt<=cnt+1; end if; end if; case cnt is

when 0 => en_xhdl<=\

when 1 => case cnt1 is when 4=>

en_xhdl<=(2=>clk2,others=>'1');dian<='1'; when others=>

en_xhdl<=\为0时数码管的小数点就不

显示------

end case;

when 2 =>

case cnt1 is when 3=>

en_xhdl<=(3=>clk2,others=>'1');dian<='1'; when others=>

en_xhdl<=\ end case; when 3 =>

case cnt1 is when 2=>

en_xhdl<=(4=>clk2,others=>'1');dian<='0';

13

可编程微波炉控制器系统的计

when others=>

en_xhdl<=\ end case; when 4 =>

case cnt1 is when 1=>

en_xhdl<=(5=>clk2,others=>'1');dian<='1'; when others=>

en_xhdl<=\ end case; when others => null; end case;

case en_xhdl is

when \ when \ when '1'=>DATA4<=led31 ; when others=>data4<=led3; end case;

when \ when '1'=>DATA4<=led41 ; when others=>data4<=led4; end case;

when \ when '1'=>DATA4<=led51 ; when others=>data4<=led5; end case;

when \ when '1'=>DATA4<=led61 ; when others=>data4<=led6; end case;

when others => null; end case; END PROCESS;

前面完成编码后肯定要完成译码显示,所以一定要一个译码进程来通过对数码管管脚的输出进行编码。我选择的数码管是8段共阴极。当为“1”时该管对应的段显示变亮。

具体程序

--*******************---译码----******************----- process(data4) begin

14

可编程微波炉控制器系统的计

case data4 is

WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN OTHERS =>null; END CASE; END PROCESS;

4.3报警提示设计程序设计

根据要求,当用户设置微波炉加热时间到时要产生报警提示,所以我就设计一个当倒计时到最后两秒钟的时间就开始提示加热时间以到的报警信号,通过蜂鸣器来提示。

具体程序的原理就是当数码管显示到最后两秒的时间就激活一个信号让蜂鸣器产生鸣叫报警,用绿色的LED点亮来让用户知道加热结束了,红灯灭。

软件设计的提示报警程序应该是在数码管正常倒计时的程序进程里面的,原因是为了控制绿灯显示。所以这里不能单独作为一个进程处理。

具体程序如下:

-------------提示语音-----------

if (led6=\led3=\

bell<='1';------------提示时间到了,响声2s---------- green<='1'; led1<=\ else

bell<='0';

end if;

4.4门是否关紧程序设计

炉门是食品的进出口,也是微波炉炉腔的重要组成部分。对它要求很高,绝对不能让微波泄漏出来。炉门由金属框架和玻璃观察窗组成。观察窗的玻璃夹层中有一层金属微孔网,既可透过它看到食品,又可防止微波泄漏。由于玻璃夹层中的金属网的网孔大小是经过精密计算的,所以完全可以阻挡微波的穿透。钛膜也多作为微波炉炉门的材料。

15

可编程微波炉控制器系统的计

为了防止微波的泄漏,微波炉的开关系统由多重安全联锁微动开关装置组成。炉门没有关好,就不能使微波炉工作,微波炉不工作,也就谈不上有微波泄漏的问题 。

所以为了让用户使用的更加放心舒心和符合现代家用电器的制作理念。我也设置一个开门按钮,当用户不小心或者忘记关门的时候能够及时让微波炉不工作,以致对用户的安全负责。

当用户不小心或者忘记时,微波炉的倒计时进程就不能实现,这个在上面的数码管显示那里就已经设置了,加上了一句检测是否开门,如果开门,它就不能进行倒计时工作。为了更加明显告诉用户门是否关紧,我还设计了一个进程负责处理,关不紧的时候,黄色的LED就会以1s钟不停闪烁来更加明显告诉用户。 具体程序如下:

------***************检查门有没有关好**************-------------- process(kaimeng,CLK2) begin

IF(CLK2='1' and kaimeng='1' ) then ---当kaishi为1时 为危险使用

----黄灯1s不停闪烁-------

yellow<='1'; else

yellow<='0'; end if;

end process;

4.5 开关按键处理程序设计

开关按钮就是当用户将时间设置和档位选择好了之后就可以按下按钮就可以让微波炉正常启动工作

具体程序如下:

---******************开关按键处理***********-- process(start,P)

variable n:integer range 0 to 1:=0;-----用于锁存---- begin

IF(CLK2'EVENT AND CLK2='1') THEN if (start='0' and n=0) then

L<='0';--------是为了让倒计时能是否正常工作的信号指示---------- n:=n+1; red<='1';

elsif (start='0' and n=1)OR (led6=\and led4=\and led3=\当倒计时结束时,红灯能自动灭。

n:=n+1; L<='1'; red<='0'; end if; end if; END PROCESS;

16

可编程微波炉控制器系统的计

第5章管脚分配及显示结果

5.1管脚分配图

图 5-3-1 管脚分配图

17

可编程微波炉控制器系统的计

5.2 管脚分配表

表5-3-2 管脚分布表

5.3硬件显示结果

这里所用到的硬件是天祥电子CPLD/FPGA系列TX-2A的开发板,所用的芯片是EPM240T100C5。

先测试一下数码管,看看闪烁时数码管显示是否正常,测试好之后复位,测试和复位都是用按键开关,之后调档位,用按钮开关控制火力档位,火力显示为一个数码管,和点阵显示,火力为0时不能工作(不能倒计时),档位调好之后就是设置时间,设置时间只用一个按键调节按键来控制位置,按递加或递减按键进行自加,自减。自加或者自减的频率是一秒加或着减一次,加或减到想要的时间后按下开始按钮,红灯变亮。检测关门键(拨码开关)如果门关和开始按键按下则就可以开始工作,即可以进行倒数。如果工作中突然关门按键开着则就不能进行工作,并且黄灯以1s一下闪烁提醒用户,关门键其实是对微波炉系统的扩

18

可编程微波炉控制器系统的计

展,这里只能简单的用一个拨码开关进行描述,设想关门键是装在微波炉的门那边,用来感应微波炉的门是否关紧,如没关紧,则不能工作。倒计时进行时,红灯亮,说明正处于工作状态,当倒计时完毕时,亮绿灯,说明工作已完毕,最后二秒蜂鸣器还会进行报警。

5.4用户使用方法

1、把需放入微波炉的食物放入,关好微波炉的门

2、.上电按下复位按钮(数码管显示00.00 0,前四位表示时间,最后一位表示当前选择档位)。

3、.选择火力(有三个档位,每按一下选档按钮,数码管就会改变数字0-3,点阵就会产生不同的图案形象告诉用户你选择的火候大小)

4、.按下移位按键(先按下调节按键,看对应是那个数码管在闪烁,那个闪烁就表示对应控制那位数码管显示,通过按下递增或者递减来控制闪烁那位数码管对应的数字显示。调节范围为00∶00到99∶59)。

5、按下开始按键(当按下开始按键时,对应的红灯会亮,表示在加热中,当加热到最后两秒时红灯就会灭,绿灯亮,蜂鸣器会产生两秒钟报警提示,从而提示用户加热结束可以安全打开。当然假如用户操作不当,中途打开门,那么黄灯亮,红灯也亮。微波炉暂停工作)。

19

可编程微波炉控制器系统的计

第6章 总结

会选择可编程微波炉这个课题是因为我对可编程这门课还是比较喜欢的,为了完成这个

设计,我由查阅资料编辑设计总体框架,再完成代码编辑,到最后的程序仿真成功。用了两周的时间完成,在完成的过程中经历了一次又一次的挫折,从开始只有计时功能到慢慢的能够调时,报警,彩灯,点阵,看着最后全部功能都实现的那一下,我真的是觉得很有成就感。下面是我对实现每个功能的一些设计技巧

a) 在产生1HZ信号的进程中之所以用了上一个进程中产生的5000hz的clk1,这样用

的目的是为让系统剩下资源,为了更好的实现更加智能化,所以要尽量节约系统资料。所以用clk1来产生clk2。

b) 在数码管显示调时反面,最大的定时是59.59.而调时我是采用了按键,同时有递

增递减功能,能够让用户更快捷方便的进行定时。

c) 具体程序的原理就是当数码管显示到最后两秒的时间就激活一个信号让蜂鸣器产

生鸣叫报警,用绿色的LED点亮来让用户知道加热结束了,红灯灭。

d) 开关按钮就是当用户将时间设置和档位选择好了之后就可以按下按钮就可以让微

波炉正常启动工作

e) 在微波炉工作状态的选档方面,除了数码管会显示选当的号码,在点阵反面也会给

予提示

通过这次的毕业设计,让我在可编程这门课程有了更深的了解,而且也提高了我的专业知识,总的来说这样的课程设计比上课有意思多了,在实际中还是有很多不是在课本上能学的到的东西,这个需要自己去理解,去总结的。

20

可编程微波炉控制器系统的计

参考文献

【1】. 谭会生,瞿遂春. EDA技术综合应用实例与分析 西安电子科技大学出版社,2004 【2】. 廖日坤 CPLD/FPGA应用开发技术白金手册. 中国电力出版社,2005 【3】. 张友汉. 数字电子技术基础[M]. 北京:高等教育出版社,2004 【4】. 顾斌. 数字电路EDA设计[M]. 西安:西安电子科技大学出版社,2004 【5】. 徐志军. CPLD/FPGA的开发与应用[M]. 北京:北京电子工业出版社,2002 【6】. 李国丽. EDA与数字系统设计[M]. 北京:北京机械工业出版社,2004 【7】. 罗朝霞. CPLD/FPGA设计及应用[M]. 北京:人民邮电出版社,2007 【8】. 辛春燕. VHDL硬件描述语言. 北京:国防工业出版社,2002

【9】. 龚兰芳. EDA技术课程设计及实训指导书. 广东水利电力职业技术学院, 2007 【10】. 龚兰芳. EDA技术实验指导书. 广东:广东水利电力职业技术学院,2007 【11】. 尹常永. EDA技术与数字系统设计. 西安:电子科技大学出版社,2006 【12】. 韩亚萍. Protel DXP基础教程. 北京:清华大学出版社,2005

21

可编程微波炉控制器系统的计

附录一 电路原理图

22

可编程微波炉控制器系统的计

23

可编程微波炉控制器系统的计

24

可编程微波炉控制器系统的计

附录二 微波炉控制器系统程序清单

library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY seg73 IS

PORT (clk:IN std_logic; ---------- 时钟信号---------12

jiance,yiwei,dizeng,dijian,start,kaimeng:IN STD_LOGIC; ---分别是上电检测,移位,递增,递减,开始,开门-------53,58,57,56,52,39----

rst,xuandang:IN std_logic; ---------------复位,火候选挡----61,55-------

dataout:OUT std_logic_vector(6 DOWNTO 0); --------数码管的段输出---(99-91)-- en:out std_logic_vector(5 DOWNTO 0); ------数码管管脚----(1-6)------ dian:out std_logic;-------数码管的点输出------100------ bell:out std_logic; -----------蜂鸣器--------7----------

Lie:out std_logic_vector(7 downto 0);------点阵列-----------(82-73) hang:out std_logic_vector(7 downto 0); ---------点阵行---------(90-83) red,green,yellow:out std_logic;--72-70-71---彩灯

tishi:out std_logic_vector(3 downto 0));----69-66--彩灯组位置 END seg73;

ARCHITECTURE arch OF seg73 IS

signal clk1,clk2,dingshi,L,P:std_logic;-----------频率1和2,调时信号,绿色指示灯信号,开始信号,绿灯信号----------

signal cnt,cnt1:integer range 0 to 4; -----------用于计时------ signal data4:std_logic_vector(3 downto 0);

signal dataout_xhdl1:std_logic_vector(6 downto 0);-----------数码管段显示------------ signal en_xhdl:std_logic_vector(5 downto 0); --------数码管使能端的信号-----

signal led1,led3,led4,led5,led6,led21,led31,led41,led51,led61: std_logic_vector(3 downto 0); signal t:std_logic_vector(2 downto 0); -----点阵扫描信号传输---- begin

dataout<=dataout_xhdl1; ----------数码管端输出--------

en<=en_xhdl; -------------数码管位输出--------

tishi<=\ -----------只显示北面三盏灯-------------

--***********5000hz分频***********---------- process(clk)

variable cntt : integer range 1 to 500; begin

if(clk'event and clk='1')then if cntt=500 then

25

可编程微波炉控制器系统的计

cntt:=1; clk1<= not clk1; else

cntt:=cntt+1; end if; end if; end process;

---***************1s钟信号 ****************------ process(clk1)

variable cnt : integer range 1 to 25000; begin

if(clk1'event and clk1='1')then if cnt =25000 then

cnt:=1;clk2<= not CLK2; else

cnt:=cnt+1; end if; end if; end process;

--***********************正常时间倒计时设置*************************--- process(clk2,rst,L) begin

IF(rst='0') THEN

led1<=\ led3<=\ led5<=\ cnt1<=0;dingshi<='1';P<='1';

ELSIF(CLK2'EVENT AND CLK2='1') THEN

if (L='0' and kaimeng='0')then ---------------为了控制指示灯和防止用户忘记关门就直接开始工作导致微波伤害人体健康----------

cnt1<=0;---------------为了实现假如用户调节时间的时候不用一定要调节四位,就直接可以按开始按钮,数码管就不会不停止那里闪烁。 case led3 is when\ case led4 is when\ case led5 is

when\ case led6 is when\ led5<=\

26

可编程微波炉控制器系统的计

led4<=\ led3<=\ when others=>led6<=led6-1; end case; when others=> led5<=led5-1; end case;

when others=>led4<=led4-1; end case;

when others=>led3<=led3-1; end case;

elsif xuandang='0' then-----------------火候选挡---------- case led1 is

when \ when others=>led1<=led1+1; end case; end if;

--******************调时******************-- if dingshi='1' THEN if (yiwei='0') THEN if cnt1=4 then cnt1<=0; else

cnt1<=cnt1+1; end if;

elsif (dizeng='0') THEN -----dizeng=0时递增调时

case cnt1 is

when 4=>case led3 is

when\ led3<=\通过移移位按钮控制要调节的数码管, when others=> led3<=led3+1; end case;

when 3=>case led4 is when\ led4<=\ when others=> led4<=led4+1; end case;

when 2=>case led5 is

when\ led5<=\ when others=> led5<=led5+1; end case;

27

可编程微波炉控制器系统的计

when 1=>case led6 is

when\ led6<=\ when others=> led6<=led6+1; end case;

when others => null; end case;

elsif (dijian='0') THEN -----dijian=0时递减调时 case cnt1 is

when 4=>case led3 is

when\ led3<=\ when others=> led3<=led3-1; end case; when 3=>case led4 is

when\ led4<=\ when others=> led4<=led4-1; end case; when 2=>case led5 is

when\ led5<=\ when others=> led5<=led5-1; end case; when 1=>case led6 is

when\ led6<=\ when others=> led6<=led6-1; end case; when others => null; end case; end if; end if; end if;

----------------上电检查--------------------- IF jiance='0' then led1<=\ led3<=\ led5<=\ else led1<=\ led3<=\ led5<=\ end if;

--------------------------------------------------

28

可编程微波炉控制器系统的计

-------------提示语音-----------

if (led6=\then

bell<='1';------------提示时间到了,响声2s---------- green<='1'; led1<=\ else

bell<='0';

end if; END PROCESS;

------***************检查门有没有关好**************-------------- process(kaimeng,CLK2) begin IF(CLK2='1' and kaimeng='1' ) then ---当kaishi为1时 为危险使用----黄灯1s不停闪烁------- yellow<='1'; else

yellow<='0'; end if; end process;

---******************开关按键处理***********-- process(start,P)

variable n:integer range 0 to 1:=0;-----用于锁存---- begin

IF(CLK2'EVENT AND CLK2='1') THEN if (start='0' and n=0) then L<='0'; n:=n+1; red<='1';1 elsif (start='0' and n=1)OR (led6=\and led5=\and led4=\and led3=\ ------当倒计时结束时,红灯能自动灭。 n:=n+1; L<='1'; red<='0'; end if; end if;

29

可编程微波炉控制器系统的计

END PROCESS;

--********-调整闪烁时间*******************---- process(cnt,en_xhdl,data4) begin

if(clk1'event and clk1='1')then if cnt=4 then cnt<=0; else cnt<=cnt+1; end if; end if; case cnt is

when 0 => en_xhdl<=\

when 1 => case cnt1 is when 4=>

en_xhdl<=(2=>clk2,others=>'1');dian<='1'; when others=>

en_xhdl<=\为0时数码管的小数点就不显示------

end case; when 2 =>

case cnt1 is when 3=>

en_xhdl<=(3=>clk2,others=>'1');dian<='1';数码管还处于选择状态,处于闪烁

when others=>

en_xhdl<=\ when 3 =>

case cnt1 is dian<='0'; end case; when 2=>

en_xhdl<=(4=>clk2,others=>'1');dian<='0'; when others=>

en_xhdl<=\ end case; when 4 =>

case cnt1 is when 1=>

30

可编程微波炉控制器系统的计

en_xhdl<=(5=>clk2,others=>'1');dian<='1'; when others=>

en_xhdl<=\ end case; when others => null; end case;

case en_xhdl is when \

when \

when '1'=>DATA4<=led41 ; when others=>data4<=led4; end case; when \

when '1'=>DATA4<=led51 ; when others=>data4<=led5; end case; when \

when '1'=>DATA4<=led61 ; when others=>data4<=led6; end case; when others => null; end case;

END PROCESS;

----*********点阵显示********--- -------------------- process(clk1) variable count:integer range 0 to 8; begin if clk1'event and clk1='1' then if count<=8 then ------count数用于循环扫描行用,由于变量只在进程内出现,故不用担心变量重名情况 if count=8 then count:=0; end if; case count is when 0 => hang<=\扫描第一行,并把t赋予000 由于信号t的变化触发下一个进程

31

可编程微波炉控制器系统的计

when 1 => hang<=\扫描第二行 when 2 => hang<=\扫描第三行 when 3 => hang<=\ when 4 => hang<=\ when 5 => hang<=\ when 6 => hang<=\ when 7 => hang<=\ when others =>hang<=\ end case; count:=count+1; end if; end if; end process;

---------------------------------------------------t的触发进程 process(t,clk2) variable shu:integer range 0 to 7; begin case t is -----根据t的值去查表 when \ when \变量的赋值是立即发生的 when \ when \ when \ when \ when \ when \ when others =>null; end case; -------------------------------------------

----------------------- if led1=\

case shu is -----------开始状态------------- when 0 => lie<=\ when 1 => lie<=\ when 2 => lie<=\ when 3 => lie<=\ when 4 => lie<=\ when 5 => lie<=\ when 6 => lie<=\ when 7 => lie<=\ when others =>lie<=\ END CASE;

32

可编程微波炉控制器系统的计

elsif led1=\ case shu is -----------第一档------------- when 0 => lie<=\ when 1 => lie<=\ when 2 => lie<=\ when 3 => lie<=\ when 4 => lie<=\ when 5 => lie<=\ when 6 => lie<=\ when 7 => lie<=\ when others =>lie<=\ END CASE; elsif led1=\ case shu is -----------第二档------------- when 0 => lie<=\ when 1 => lie<=\ when 2 => lie<=\ when 3 => lie<=\ when 4 => lie<=\ when 5 => lie<=\ when 6 => lie<=\ when 7 => lie<=\ when others =>lie<=\ END CASE; elsif led1=\ case shu is ----------第三档------------- when 0 => lie<=\ when 1 => lie<=\ when 2 => lie<=\ when 3 => lie<=\ when 4 => lie<=\ when 5 => lie<=\ when 6 => lie<=\ when 7 => lie<=\ when others =>lie<=\ END CASE; end if; END process;

--*******************---译码----******************----- process(data4)

33

可编程微波炉控制器系统的计

begin

case data4 is

WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN OTHERS =>null; END CASE; END PROCESS;

------------------------------------------------------------------ end arch;

34

本文来源:https://www.bwwdw.com/article/w9ig.html

Top