洗衣机VHDL控制器实验报告.docx
- 文档编号:28372139
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:22
- 大小:440.88KB
洗衣机VHDL控制器实验报告.docx
《洗衣机VHDL控制器实验报告.docx》由会员分享,可在线阅读,更多相关《洗衣机VHDL控制器实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
洗衣机VHDL控制器实验报告
数字电路和逻辑设计综合实验
实验报告
实验名称:
洗衣机控制器
班级:
班内序号:
姓名:
学号:
数电设计综合实验—洗衣机控制器
一.设计课题的任务要求
设计制作一个全自动洗衣机的控制器:
●洗衣机的工作步骤为洗衣、漂洗和脱水三个过程,工作时间分别为:
洗衣20秒,漂洗30秒,脱水15秒;
●用一个按键实现洗衣程序的手动选择:
A、单洗涤;B、单漂洗;C、单脱水;D、漂洗和脱水;E、洗涤、漂洗和脱水全过程;
●用显示器件显示洗衣机的工作状态(洗衣、漂洗和脱水),并倒计时显示每个状态的工作时间,全部过程结束后,应提示使用者;
●用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留的状态;
●选做:
三个过程的时间有多个选项供使用者选择。
●选做:
可以预约洗衣时间。
●选做:
自拟其它功能。
二.系统设计(包括设计思路、总体框图、分块设计)
◆设计思路
首先从题目进行分析,采用VHDL模块化的设计方法来进行洗衣机控制器的设计,即自顶向下,从系统总体要求出发,自上至下地将设计任务分解为不同的功能模块.最后将各功能模块连接形成顶层模块,完成系统硬件的整体设计。
本控制器基本功能描述洗衣机控制器可工作于五种模式下:
单洗涤、单漂洗、单脱水、漂洗十脱水、洗涤十漂洗+脱水,可以使洗衣机控制器工作在任意一种模式,并显示出洗衣机的工作状态和剩余工作时间,在剩余时间结束后有报警声提示使用者,并且可实现暂停洗衣和继续的功能,此外,加入附加功能,可自选三个过程是使用时间并且可预约洗衣时间。
由此分析可将洗衣机控制器分为控制模块、倒计时模块,初始模式选择模块,报警模块,洗衣时间选择模块,选通译码模块和分频器模块。
【设计过程】:
1)审题,初步确定思路。
2)用VHDL语言进行编程。
3)适时对程序进行修改。
4)编译成功后,进行仿真,观察波形图。
5)将程序下载到实验板上,调试各功能。
6)通过计算机仿真和下载调试,发现问题,返回原程序进行修改。
7)进行总体的调试。
◆总体框图
设计框图:
洗衣机系统结构框图:
洗衣机控制器逻辑方框划分图:
ASM图:
MDS图:
◆分块设计
Ø核心控制显示模块:
此模块是本程序的核心部分,要识别模式选择器送来的基本工作方式依次执行。
在执行过程中,控制模块中的倒计时装置要把剩余时间每一秒倒计时一次,并送至选通译码模块去显示;同时要通过3个发光二极管显示当前正在执行的工作状态;当全部工作结束后,控制器还要发给报警装置一个报警信号,产生一个持续5秒的报警声提示使用者。
Ø工作方式选择模块:
系统的五种工作方式的选择模块,此模式选择模块要能按照使用者意愿选择并显示出来,传送到控制模块。
Ø分频模块
分频模块把晶振来的频率分为1HZ传给控制器用于倒计时,再分一个比较大的频率传给选通译码器的选通端用于在七段数码管上显示一个两位数。
Ø选通译码模块
需要用一个1HZ的频率信号做触发信号,显示从控制模块送来的两位数字,即工作的剩余时间,并通过七段数码管显示出来。
Ø改变默认时间模块:
此模块可改变系统的默认工作时间,每拉高一次按钮工作时间加1
按洗衣机的愿望自行设置工作时间。
Ø预约模块:
用于预约工作模式。
三.仿真波形及波形分析
1.工作方式选择模块仿真
由波形分析可知,nextt是工作方式选择按钮,led是当前工作状态的LED灯显示,有图中可知,当按下第一下按钮时,第一个灯亮,选择了第一种工作方式,当按下第二下按钮时,第二个灯亮,选择了第二种工作方式,以此类推,当按下第五下按钮时,三个灯同时亮,选择了第五种工作模式。
2.完整过程仿真波形
⏹波形1:
有上面的波形分析,cat为数码显示管的选通,在实验中,使用了cat1和cat0两个显示管,在start开始信号拉高之后,cat信号显示。
Nextt为工作模式选择Led为模式选择灯,clr为复位按钮,拉高有效。
⏹波形2:
由上面波形分析,start信号开始之后,开始工作,pause为暂停按钮,当pause拉高之后,pause_show灯亮,并停止当前的工作,由波形可看出数码显示管在停止期间没有变,当Pause变低之后,工作继续进行,pause_show灯灭。
⏹波形3:
由上面波形,工作模式选的是第五种,洗衣、漂洗、脱水顺序进行,由state_now显示当前的工作状态,当洗衣、漂洗、脱水过程都结束之后,out_beeper发出警报声提醒使用者工作结束。
四.源程序
(1)核心控制显示模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcontrollerIS
PORT(
clk1s,pause:
INSTD_LOGIC;接收的时钟信号和暂停信号
start:
INSTD_LOGIC;工作开关
s1,s2,s3:
ININTEGERRANGE0TO3;从模式选择器接收来的三个基本状态的组合序列
cl_beeper:
INSTD_LOGIC;清空和从报警器接受的报警信号
tim_out:
OUTINTEGERRANGE0TO30;输出时间
pause_show:
OUTSTD_LOGIC;暂停显示
state_now:
OUTSTD_LOGIC_VECTOR(2DOWNTO0);显示当前工作模式
startbeeper:
OUTSTD_LOGIC;发给报警器的报警信号
);
ENDcontroller;
ARCHITECTUREaOFcontrollerIS
SIGNALtim_tmp:
INTEGERRANGE0TO30;
SIGNALstate_over:
INTEGERRANGE0TO1;某一工作状态完成后的反馈信号
SIGNALs_now,s_next,s_last:
INTEGERRANGE0TO3;内部信号,存储3个工作状态
BEGIN
p1:
PROCESS(clk1s,start,cl_beeper,state_over,pause,s_now)
BEGIN
IF(clk1s'EVENTANDclk1s='1')THEN
CASEstartIS
WHEN'0'=>--开关置零
state_over<=1;
s_now<=s1;
s_next<=s2;
s_last<=s3;
WHEN'1'=>--开关置1,开始工作
IFstate_over=1THEN
state_over<=0;
CASEs_nowIS
WHEN0=>
CASEcl_beeperIS
WHEN'1'=>startbeeper<='0';
WHENOTHERS=>startbeeper<='1';
ENDCASE;
tim_tmp<=0;state_now<="000";
WHEN1=>tim_tmp<=20;state_now<="100";
WHEN2=>tim_tmp<=30;state_now<="010";
WHEN3=>tim_tmp<=15;state_now<="001";
WHENOTHERS=>NULL;
ENDCASE;
ELSE
CASEpauseIS
WHEN'0'=>--暂停信号无效时,正常工作
pause_show<='0';
IFtim_tmp>0THEN
tim_out<=tim_tmp;
tim_tmp<=tim_tmp-1;
ELSE
tim_out<=0;
s_now<=s_next;
s_next<=s_last;
s_last<=0;
state_over<=1;
ENDIF;
WHEN'1'=>pause_show<='1';--暂停有效时,保持时间不变,同时点亮暂停状态灯
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
ENDPROCESS;
END;
(2)工作方式选择模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYchoiceIS
PORT(nextt:
INSTD_LOGIC;工作模式选择开关
start:
INSTD_LOGIC;开始工作
s1,s2,s3:
OUTINTEGERRANGE0TO3;选择后的初始状态,送到控制器
led:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));显示当前模式
ENDchoice;
ARCHITECTUREbodyofchoiceOFchoiceIS
TYPEchoice_stateIS(A,B,C,D,E);
SIGNALcs:
choice_state;
BEGIN
P1:
PROCESS(nextt)
BEGIN
IF(nextt'EVENTANDnextt='1')THEN
IFstart='0'THEN
CASEcsIS--用一个按钮实现不同模式的选择,把相应初始状态组合装到s1-s3中,送到控制器去
whenA=>s1<=1;s2<=0;s3<=0;led<="100";cs<=B;
whenB=>s1<=2;s2<=0;s3<=0;led<="010";cs<=C;
whenC=>s1<=3;s2<=0;s3<=0;led<="001";cs<=D;
whenD=>s1<=2;s2<=3;s3<=0;led<="011";cs<=E;
whenE=>s1<=1;s2<=2;s3<=3;led<="111";cs<=A;
whenothers=>null;
ENDCASE;
ENDIF;
ENDIF;
ENDPROCESSP1;
ENDbodyofchoice;
(3)分频模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYclk1000IS
PORT(
clkcl:
INSTD_LOGIC;
clk1000:
OUTSTD_LOGIC);
ENDclk1000;
ARCHITECTUREbodyofclk1000OFclk1000IS
SIGNALcount1:
INTEGERRANGE0TO499;
SIGNALbuf:
STD_LOGIC;
BEGIN
P1:
PROCESS(clkcl)
BEGIN
IF(clkcl'EVENTANDclkcl='1')THEN
IFcount1=499THEN
buf<=NOTbuf;clk1000<=buf;
ELSE
clk1000<=buf;
ENDIF;
count1<=count1+1;
ENDIF;
ENDPROCESSP1;
ENDbodyofclk1000;
(4)选通译码模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYseg7IS
PORT(
start,en_app:
INSTD_LOGIC;
cp:
INSTD_LOGIC;
time_cnt:
ININTEGERRANGE0TO30;
app_time:
ININTEGERRANGE0TO5;
clr:
INSTD_LOGIC;清零
cat:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);输入给数码管选通控制端
seg:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);输入给七位数码管显示数字
);
ENDseg7;
ARCHITECTUREbodyofseg7OFseg7IS
SIGNALtem:
INTEGERRANGE0TO1;
SIGNALnum:
INTEGERRANGE0TO9;
SIGNALcat0:
STD_LOGIC_VECTOR(5DOWNTO0);
BEGIN
PROCESS(cp)
BEGIN
IF(cp'EVENTANDcp='1')THEN
IFstart='1'THEN
CASEtemIS
WHEN0=>cat0<="111101";num<=INTEGER((time_cnt)MOD(10));tem<=tem+1;
WHEN1=>cat0<="111110";num<=INTEGER(time_cnt/10);tem<=0;
WHENOTHERS=>cat0<="111111";tem<=0;
ENDCASE;
cat<=cat0;
ELSE
IFen_app='1'THEN
CASEtemIS--数码管低两位选通
WHEN0=>cat0<="111101";num<=INTEGER((app_time)MOD(10));tem<=tem+1;两位数的个位给低位数码管
WHEN1=>cat0<="111110";num<=INTEGER(app_time/10);tem<=0;两位数的个位给高位数码管
WHENOTHERS=>cat0<="111111";tem<=0;
ENDCASE;
cat<=cat0;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(num,clr)
BEGIN
IFclr='1'THEN
seg<="1111110";
ELSE
CASEnumIS--译码部分
WHEN0=>seg<="1111110";
WHEN1=>seg<="0110000";
WHEN2=>seg<="1101101";
WHEN3=>seg<="1111001";
WHEN4=>seg<="0110011";
WHEN5=>seg<="1011011";
WHEN6=>seg<="1011111";
WHEN7=>seg<="1110000";
WHEN8=>seg<="1111111";
WHEN9=>seg<="1111011";
WHENothers=>seg<="0000000";
ENDCASE;
ENDIF;
ENDPROCESS;
ENDbodyofseg7;
(5)报警模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYbeeperIS
PORT(clk1s:
INSTD_LOGIC;
startbeeper:
INSTD_LOGIC;--控制器送来的报警信号
st_beeper:
OUTSTD_LOGIC;--送给板子上蜂鸣器的报警信号
cl_beeper:
OUTSTD_LOGIC);--报警够时间后,反馈给控制器信号,使之收回报警信号
ENDbeeper;
ARCHITECTUREbodyofbeeperOFbeeperIS
SIGNALtem:
INTEGERRANGE0TO5;
BEGIN
P1:
PROCESS(clk1s,startbeeper)
BEGIN
IF(clk1s'EVENTANDclk1s='1')THEN
IFstartbeeper='1'THEN;控制器送来报警信号
CASEtemIS
WHEN5=>st_beeper<='0';cl_beeper<='1';--够时间后,开始报警,同时反馈给控制器信号说明完成报警
WHENOTHERS=>st_beeper<='1';cl_beeper<='0';tem<=tem+1;
ENDCASE;
ELSE
cl_beeper<='0';st_beeper<='0';
tem<=0;
ENDIF;
ENDIF;
ENDPROCESSP1;
ENDbodyofbeeper;
(6)报警音设置模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYbeepbeepIS
PORT(clk1000:
INSTD_LOGIC;
st_beeper:
INSTD_LOGIC;
out_beeper:
OUTSTD_LOGIC);
ENDbeepbeep;
ARCHITECTUREbodyofbeepbeepOFbeepbeepIS
SIGNALtem:
INTEGERRANGE0TO5;
SIGNALtem_beeper:
STD_LOGIC;
BEGIN
P1:
PROCESS(clk1000,st_beeper)
BEGIN
IF(clk1000'EVENTANDclk1000='1')THEN
IFst_beeper='1'THEN
tem_beeper<=NOTtem_beeper;
out_beeper<=tem_beeper;
ENDIF;
ENDIF;
ENDPROCESSP1;
ENDbodyofbeepbeep;
(7)预约模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYyuyueis
port(
clk1s:
INSTD_LOGIC;
en_app:
INSTD_LOGIC;
start:
INSTD_LOGIC;
start_out:
OUTSTD_LOGIC;
app_time:
OUTINTEGERRANGE0TO5
);
ENDyuyue;
ARCHITECTUREbodyofyuyueOFyuyueIS
SIGNALtem:
INTEGERRANGE0TO5;
SIGNALstart_app:
STD_LOGIC;
BEGIN
p1:
PROCESS(clk1s)
BEGIN
IFclk1s'EVENTANDclk1s='1'THEN
CASEen_appIS
WHEN'1'=>
IFtem<5THEN
app_time<=5-tem;tem<=tem+1;start_app<='0';
ELSEstart_app<='1';
ENDIF;
WHEN'0'=>start_app<='1';
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
start_out<=start_appANDstart;
ENDPROCESS;
ENDbodyofyuyue;
五.功能说明
洗衣机控制器的实现功能:
1.使用了一个按键实现洗衣程序的手动选择,在洗涤、漂洗、脱水、漂洗+脱水、洗涤+漂洗+脱水五个模式中进行自由选择。
2.用灯显示洗衣机的工作状态,在设计中共使用了6个LED灯,其中三个灯显示洗衣机的工作模式(共五种模式),另外三个灯显示工作模式中正在进行的工作模式。
3.数码显示管倒计显示每个状态的工作时间,并且也可显示预约的时间。
4.全部过程结束后,会发出一个结束信号,会发出一个5秒的持续报警信号。
5.一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留的状态,并且设置一个灯,当洗衣机暂停时,灯亮,继续运行时,灯灭。
6.三个过程的时间使用者可自行设定,系统默认是设定好的时间,使用者如想改变时间,可拉低系统默认按钮,再分别拉高button1、button2、button3,每拉高一次,相应时间+1。
7.可以预约洗衣时间,拉高预约时间按钮,设定预约时间,倒计时结束后自动开始。
六.元器件清单及资源利用情况
元器件清单:
1.计算机
2.综合实验板
资源使用情况:
七.故障及问题分析
由于很长时间没有接触数电和VHDL语言的知识,刚接触这个课题最大的困难是要克服这个障碍,要不断熟悉以前学习过的知识,在其中遇到了很多故障,现列写如下:
1.VHDL语句编写问题:
在编写VHDL语言的功能选择模块时,最开始的时候我写了两个process进程,试图实现整合,编译通过了,但是在仿真的时候功能二不出波形,改了几次还是不行,后经同学指点,只需要写一个process,在里面加入else语句即可,改了程序之后,编译通过,但是在看仿真波形的时候,我发现在跳变那一刻,默认模式是从第二个灯开始亮,而不是第一个灯,反复修改了语句发现是由于重复使用状态的原因,重新设了几个状态之后问题解决。
2.模块连接问题:
在各个模块进行组合的时候,最开始我选用了component语句实现各个模块之间的连接,可是由于模块比较多,在进行语句连接的时候总会报错,而且在改错的时候看着不是很清晰,所以我改用了生成各个模块并用线连起来,这样简单明了,实现简单,容易改错。
3.状态触发问题:
设计控制器的状态程序时我使用当前的工作状态做敏感信号,但是这样只能处理某一状态到时后送来的触发信号,无法处理最初的模式选择传下来得的信号。
后经过咨询发现必须要加入了时钟的触发。
4.按钮的防抖问题:
把程序下载到实验板上之后,试验洗衣机控制器的功能,但是在我发现按钮功能不够稳定,很难获得正确的上升触发沿,和同学咨询之后,是需要加入防抖电路,这样按钮的功能实现就会相对稳定。
5.计时模块问题:
开始时,在赋值及输出控制信号部分无法正确配合,各模块编译成功后,但是整体仿真时就会出问题,分析原因是工作的状态由计时模块输出的使能信号确定,所以需要
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 洗衣机 VHDL 控制器 实验 报告