北邮简易电磁炉控制器的设计与实现实验报告.docx
- 文档编号:11214229
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:38
- 大小:1.68MB
北邮简易电磁炉控制器的设计与实现实验报告.docx
《北邮简易电磁炉控制器的设计与实现实验报告.docx》由会员分享,可在线阅读,更多相关《北邮简易电磁炉控制器的设计与实现实验报告.docx(38页珍藏版)》请在冰点文库上搜索。
北邮简易电磁炉控制器的设计与实现实验报告
数字电路与逻辑设计综合实验
实验报告
一、设计课题的任务要求
二、系统设计基本思想
三、仿真波形及波形分析:
四、实验结果及分析:
五、元器件清单及资源利用情况
六、故障及问题分析
七、实验总结和心得体会
八、源程序
数电设计综合实验—微波炉控制器
一、设计课题的任务要求
设计制作一个简易微波炉控制器。
【基本要求】
1、烹饪模式选择:
电磁炉的烹饪模式有火锅、煎炒、爆炒、煲汤和蒸炖五档可选。
用一个按键(BTN7)实现烹饪档位的选择(按下此键依上述顺序依次变化),用点阵显示当前的烹调档位(火锅显示H、煎炒显示J、爆炒显示B、煲汤显示T和蒸炖显示Z),烹调档位的选择按键同时也是加热的开始按键,即烹调档位选定的同时电磁炉就以最大功率开始加热,没有选择时电磁炉处于停止状态,点阵不显示。
2、火力调节:
电磁炉的火力分5档可调:
1900W-1500W-1100W-600W-100W,用数码管DISP3-DISP0显示当前的火力,用两个按键(BTN6和BTN5)实现火力的增加或减少,烹调过程中,除爆炒模式外,其它模式均可以随时可以调节火力,爆炒模式只能以最高功率加热。
3、定时功能:
用一个按键(BTN4)实现定时设置,按下定时键,蜂鸣器响一声,每按一次定时键,定时时间以5-10-30-60秒钟的顺序依次递增,定时设定完毕后,电磁炉开始倒计时。
用数码管DISP5和DISP4显示定时档位和倒计时的过程,倒计时时间到后,电磁炉自动停止加热并关机。
4、不进行定时操作时,电磁炉以默认加热时间进行加热。
蒸炖模式的默认时间为20秒钟;爆炒模式的默认时间是3秒钟,爆炒3秒钟后自动返回煎炒模式;其他模式的默认时间为90秒。
5、用点亮的发光二极管LD4表示开机加热,熄灭表示关机。
6、设置关闭键,任何时候按下关闭键即可将电磁炉关机。
提高要求:
用8个LED灯作为加热进度显示条,随着加热时间的增加匀速增加点亮LED灯的个数,无论加热时间是多长,最后都必须将8个LED灯全部点亮。
增加烧烤功能,用一个键选择微波或烧烤功能,用一个数码管指示当前处于微波还是烧烤功能。
烧烤火力和加热时间要求与微波功能相同。
二、系统设计基本思想
1、【设计过程】
1)审题,初步确定思路。
2)画出流程图,状态转移图。
3)用VHDL语言进行编程。
适时对程序进行修改。
4)编译成功后,进行仿真,观察波形图。
5)将程序下载到实验板上,调试各功能。
6)通过计算机仿真和下载调试,发现问题,返回原程序进行修改。
7)进行总体的调试,并验收。
2、【设计思路】
电路由烹饪模式选择模块、火力调节模块、定时模块、倒计时模块、分频器模块,关机模块,译码和数码显示电路,点阵显示电路等模块组成。
1、烹饪模式选择模块
电磁炉的烹饪模式有火锅、煎炒、爆炒、煲汤和蒸炖五档可选。
通过按键的次数来控制。
将模式信息传递到点阵显示模块。
2、火力调节模块
电磁炉的火力分5档可调:
1900W-1500W-1100W-600W-100W,将火力信息传递到数码显示模块。
3、定时模块
定时时间以5-10-30-60秒钟的顺序依次递增。
将倒计时信息传递到数码显示模块。
4、倒计时模块
微波炉以数码管显示的方式提示用户当前剩余的加热时间。
从默认时间或者已调定时时间开始,依次减少1秒钟。
5、分频器模块
将系统时钟分频,设计一个大小合适的分频器使得系统能够正确的实现一秒的计时以及数码管和点阵显示扫描的扫描时钟。
6、关机模块
当倒计时结束时,会自动关机。
当然,按下关机键的时候,也可以随时关机
7、译码和数码显示电路
译码和数码显示电路是将计时状态直观清晰地反映出来,被人们的视觉器官所接受。
显示器件选用LED七段数码管。
在译码显示电路输出的驱动下,依次显示,只是扫描频率很高,所以在人的视觉里可以看到稳定显示的数字符号。
8、点阵显示电路
点阵的row为低电平,col为高电平的时候,相应的点才可以亮。
在这里逐行进行扫描,扫描频率很高,所以在我们看来就是静止显示所有的亮点。
3、【微波炉逻辑划分方块图】
4、【状态转移图】
1)烹饪模式状态转移图
2)火力调节状态转移图
3)倒计时状态转移图
5、【流程图】
三、仿真波形及波形分析:
通过仿真软件QUATUSII进行仿真。
1)烹饪模式选择模块
当modelSel第一次出现上升沿的时候,开机,同时点阵显示H
当modelSel第二次出现上升沿的时候,点阵显示J
之后如果继续设置modelSel的上升沿的话,就可以实现H,J,B,T,Z五中模式的循环转换。
2)火力调节
如果fireDown出现上升沿的时候,火力下调
如果fireUp出现上升沿的时候,火力上调
3)倒计时调节
每当timeset出现上升沿的时候,将会改变数码管的较高两位,5-10-30-60,然后继续回到5循环。
4)power为1的时候表示按下关机键,所有的数码管,点阵,led都灭掉了
四、实验结果及分析:
1)开机
2)选择烹饪模式
3)火力调节
5)调节倒计时
6)爆炒模式转换为煎炒模式
7)关机(BTN7)
五、元器件清单及资源利用情况
(1)实验器材
1.计算机;
2.EDA开发板及相应元器件。
(2)资源利用情况
逻辑原件:
15%,引脚使用:
32%。
总体来说还是可以的。
六、故障及问题分析
1.【问题】刚开始点阵显示不了。
【解决方案】后来发现,只有row=0,col=1的时候,相应的点才会亮。
2.【问题】实验中遇到的最大的问题,就是产生不了倒计时。
一直都显示00。
思路都检查了好多遍。
【解决方案】在分频上出错了。
分频当时是进行2499999次循环。
后来改成24999之后发现倒计时可以用了。
一直以为是倒计时部分写错了,花费了好多时间。
3.【问题】在设置关机键的时候,每次关机,再开机,不能恢复到初始状态,而是停留在关机前的状态。
【解决方案】解决方案通过Power和ModelSel键控制,如果有按键,就恢复状态。
4.【问题】蜂鸣器刚开始是响的,但是加上消抖后,就不响了。
【解决方案】也有改过代码,但是一直没有成功。
七、实验总结和心得体会
在本次的数字电路综合实验中,我选择的题目是设计实现微波炉控制器。
觉得电磁炉挺有意思的,心想,一定要好好去做这个实验。
但是,看到那么多功能还是有点懵的。
第一次实验,老师让我们画流程图,一点一点的去理思路。
后来终于觉得自己可以开动了。
第一次实验结束后,我便开始写一些小段程序,比如说,数码管显示,点阵显示等等小程序。
第二次实验结束的时候,我的小程序大部分可以运行了。
第三次实验的时候,发现我的数码管显示电路加上就开始出错。
解决了一整天都没有成功。
后来只能放弃,开始了一个新的思路,就是按部就班的,按照最简单的思路去写代码。
第四次实验就要验收了,可是我的倒计时出了问题,一直显示不了,上面的故障分析中也有提到。
后来又一点点的改代码,一点点的去验证。
最后终于发现是我的分频有问题。
书上写的是循环2499999次,所以从来没觉得是分频有问题,一直找别的原因,浪费了很多时间。
可能实际与理论还是有一定差距的。
之后又花了点时间,处理了一些小细节。
最终验收成功。
这次的经验教训还是挺多的。
一、如果我能把我的代码分块写的话,出现问题的时候也不会牵一发动全身。
没有分块,每一个问题,解决的时候都很困难。
二、分频问题。
要根据实际的板子时钟频率去写代码。
而不是把书上的理解了,就照搬过来。
很多时候都是要联系实际的。
三、代码优化问题。
这次代码写的挺冗长的,因为问题多,解决完的时候都需要马上验收了,所以很多代码,完全可以写得更简单的。
这次代码有386行。
总得来说,实验还是成功的,遇到了好多问题,也有让我焦头烂额的时候。
但是我还是坚持了下来。
我想,在实验成功的那一刹那,那些努力都得到了见证。
八、参考文献
《数字电路与逻辑设计实验教程》————北京邮电大学电路实验中心
<《VHDL硬件描述语言与数字逻辑电路设计》侯伯亨西安电子科技大学出版社
《数字逻辑设计实验技术与EDA工具》————北京邮电大学
九、源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYdclIS
PORT(clk:
INSTD_LOGIC;--时钟输入
modelSel:
INSTD_LOGIC;--烹饪模式选择
fireUp:
INSTD_LOGIC;--增加火力
fireDown:
INSTD_LOGIC;--减小火力
timeset:
INSTD_LOGIC;--定时设置
power:
INSTD_LOGIC;--开关
row,col:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);--点阵显示的行列控制
time1:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);--时间显示
scan:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);--数码管显示控制
powerled:
OUTSTD_LOGIC;--电源指示灯控制
beef:
OUTSTD_LOGIC);--蜂鸣器控制
ENDdcl;
ARCHITECTUREaOFdclIS
TYPEstate_type1IS(s0,s1,s2,s3,s4);
SIGNALstate:
state_type1;
TYPEstate_type2IS(f0,f1,f2,f3,f4);
SIGNALfire:
state_type2;
TYPEstate_type3IS(t0,t1,t2,t3);
SIGNALpre_time:
state_type3;
SIGNALtimemodel:
STD_LOGIC_VECTOR(1DOWNTO0);--时间选择信号
SIGNALled:
STD_LOGIC;
SIGNALclock1:
STD_LOGIC;--1Hz时钟信号
SIGNALclock2:
STD_LOGIC;--200Hz时钟信号
SIGNALCOUNT2:
INTEGERRANGE0TO249999;--产生clock1过程中用到的信号
SIGNALjump:
INTEGERrange0to1;--表示跳转
--SIGNALjump:
STD_LOGIC;--表示跳转
SIGNALfinish:
STD_LOGIC;--倒计时结束
SIGNALsetge:
INTEGERRANGE0TO9;--设定时间的个位
SIGNALsetshi:
INTEGERRANGE0TO9;--设定时间的十位
SIGNALbeef1:
STD_LOGIC;
signaltemp1:
std_logic;
signaltemp2:
std_logic;
signaltemp3:
std_logic;
signaltemp4:
std_logic;
SIGNALfun1_tmp3:
INTEGERRANGE0TO7;
SIGNALfun:
STD_LOGIC;
SIGNALsig:
STD_LOGIC;
SIGNALfun1:
STD_LOGIC;
signalge:
INTEGERRANGE0TO9;
signalshi:
INTEGERRANGE0TO9;
BEGIN
p1:
PROCESS(ge,shi,state,modelSel,jump)
begin
IF(ge=0ANDshi=0)THEN
CASEstateIS
WHENs2=>jump<=1;
WHENOTHERS=>jump<=0;
ENDCASE;
endif;
endprocessp1;
p2:
process(clk,COUNT2,setge,setshi,led,modelsel,timeset,state,beef1)
begin
if(clk'eventandclk='1')then
IF(timeset='1'ORsig='1')THEN
ge<=setge;shi<=setshi;finish<='0';
endif;
ifCOUNT2=49999thenCOUNT2<=0;
elseCOUNT2<=COUNT2+1;
endif;
if(COUNT2=49999)thenclock2<='1';
elseclock2<='0';
endif;
IF(clock2='1')THENbeef<=beef1;
IF(led='1')THEN
IF(ge=0ANDshi=0)THENge<=9;shi<=shi-1;
ELSIF(ge=0ANDshi=0)THENfinish<='1';
ELSEge<=ge-1;
ENDIF;
ENDIF;
endif;
endif;
ENDPROCESSp2;
p3:
PROCESS(clk,power,led)--电源控制
BEGIN
IF(clk'EVENTANDclk='1')THEN
IFmodelSel='1'THENled<='1';
ELSIF(power='1'orfinish='1')THENled<='0';
ENDIF;
powerled<=led;
ENDIF;
ENDPROCESSp3;
p4:
PROCESS(clk,modelSel,led,jump)--烹饪模式选择
BEGIN
IF(clk'EVENTANDclk='1')THENtemp2<=modelSel;
IF(power='1'orfinish='1')THENstate<=s0;
ENDIF;
IF(led='1')THEN
IF(jump=1)THENstate<=s1;
ELSE
CASEstateIS
WHENs0=>
IF(modelSel='1'andtemp2='0')THENstate<=s1;
ELSEstate<=s0;
ENDIF;
WHENs1=>
IF(modelSel='1'andtemp2='0')THENstate<=s2;
ELSEstate<=s1;
ENDIF;
WHENs2=>
IF(modelSel='1'andtemp2='0')THENstate<=s3;
ELSEstate<=s2;
ENDIF;
WHENs3=>
IF(modelSel='1'andtemp2='0')THENstate<=s4;
ELSEstate<=s3;
ENDIF;
WHENs4=>
IF(modelSel='1'andtemp2='0')THENstate<=s0;
ELSEstate<=s4;
ENDIF;
ENDCASE;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESSp4;
p5:
PROCESS(clk,state,led)--点阵显示
BEGIN
IF(clk'EVENTANDclk='1')THEN
IF(led='0')THEN
row<="11111111";col<="00000000";--如果开关指示灯未亮,点阵不显示
ELSE
CASEstateIS
WHENs0=>
CASEfun1_tmp3IS
WHEN0=>fun1_tmp3<=1;---------------H
col<="00000000";row<="01111111";
WHEN1=>fun1_tmp3<=2;
col<="00000000";row<="10111111";
WHEN2=>fun1_tmp3<=3;
col<="00100100";row<="11011111";
WHEN3=>fun1_tmp3<=4;
col<="00100100";row<="11101111";
WHEN4=>fun1_tmp3<=5;
col<="00111100";row<="11110111";
WHEN5=>fun1_tmp3<=6;
col<="00100100";row<="11111011";
WHEN6=>fun1_tmp3<=7;
col<="00100100";row<="11111101";
WHENothers=>fun1_tmp3<=0;
col<="00000000";row<="11111110";
ENDCASE;
WHENs1=>----------------------------J
CASEfun1_tmp3IS
WHEN0=>fun1_tmp3<=1;
col<="00000000";row<="01111111";
WHEN1=>fun1_tmp3<=2;
col<="00111100";row<="10111111";
WHEN2=>fun1_tmp3<=3;
col<="00010000";row<="11011111";
WHEN3=>fun1_tmp3<=4;
col<="00010000";row<="11101111";
WHEN4=>fun1_tmp3<=5;
col<="00010000";row<="11110111";
WHEN5=>fun1_tmp3<=6;
col<="00010100";row<="11111011";
WHEN6=>fun1_tmp3<=7;
col<="00011000";row<="11111101";
WHENothers=>fun1_tmp3<=0;
col<="00000000";row<="11111110";
ENDCASE;
WHENs2=>-----------B
CASEfun1_tmp3IS
WHEN0=>fun1_tmp3<=1;
col<="00000000";row<="01111111";
WHEN1=>fun1_tmp3<=2;
col<="00011110";row<="10111111";
WHEN2=>fun1_tmp3<=3;
col<="00100010";row<="11011111";
WHEN3=>fun1_tmp3<=4;
col<="00100010";row<="11101111";
WHEN4=>fun1_tmp3<=5;
col<="00011110";row<="11110111";
WHEN5=>fun1_tmp3<=6;
col<="00100010";row<="11111011";
WHEN6=>fun1_tmp3<=7;
col<="00100010";row<="11111101";
WHENothers=>fun1_tmp3<=0;
col<="00011110";row<="11111110";
ENDCASE;
WHENs3=>-----------------T
CASEfun1_tmp3IS
WHEN0=>fun1_tmp3<=1;
col<="00000000";row<="01111111";
WHEN1=>fun1_tmp3<=2;
col<="01111100";row<="10111111";
WHEN2=>fun1_tmp3<=3;
col<="00010000";row<="11011111";
WHEN3=>fun1_tmp3<=4;
col<="00010000";row<="11101111";
WHEN4=>fun1_tmp3<=5;
col<="00010000";row<="11110111";
WHEN5=>fun1_tmp3<=6;
col<="00010000";row<="11111011";
WHEN6=>fun1_tmp3<=7;
col<="00000000";row<="11111101";
WHENothers=>fun1_tmp3<=0;
col<="00000000";row<="11111110";
ENDCASE;
--Z
WHENOTHERS=>
CASEfun1_tmp3IS
WHEN0=>fun1_tmp3<=1;
col<="00000000";row<="01111111";
WHEN1=>fun1_tmp3<=2;
col<="00111110";row<="10111111";
WHEN2=>fun1_tmp3<=3;
col<="00010000";row<="11011111";
WHEN3=>fun1_tmp3<=4;
col<="00001000";row<="11101111";
WHEN4=>fun1_tmp3<=5;
col<="00000100";row<="11110111";
WHEN5=>fun1_tmp3<=6;
col<="00111110";row<="11111011";
WHEN6=>fun1_tmp3<=7;
col<="00000000";row<="11111101";
WHENothers=>fun1_tmp3<=0;
col<="00000000";row<="11111110";
ENDCASE;
ENDCASE;
ENDIF;
ENDIF;
ENDPROCESSp5;
p6:
PROCESS(clk,led,state,fireUp,fireDown)--火力选择
BEGIN
IF
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 电磁炉 控制器 设计 实现 实验 报告