数字系统设计洗衣机控制器本科论文.docx
- 文档编号:26738972
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:16
- 大小:359.78KB
数字系统设计洗衣机控制器本科论文.docx
《数字系统设计洗衣机控制器本科论文.docx》由会员分享,可在线阅读,更多相关《数字系统设计洗衣机控制器本科论文.docx(16页珍藏版)》请在冰豆网上搜索。
数字系统设计洗衣机控制器本科论文
实验报告
COURSEPAPER
数字系统设计(洗衣机控制器)
学院:
机电工程与自动化学院
学号:
学生姓名:
打印日期:
评分:
评语:
一、实验目的:
(1)学习系统电路设计;
(2)巩固软件环境下的编程设计;
二、实验内容:
(1)实现以下系统功能:
洗衣机控制器。
●设计一个电子定时器,控制洗衣机作如下运转:
定时启动—>正转20秒—>
暂停10秒—>反转20秒—>暂停10秒—>定时未到回到“正转20秒—>暂停10秒—>……”,定时到则停止;
●若定时到,则停机发出音响信号;
●用两个数码管显示洗涤的预置时间(分钟数),按倒计时方式对洗涤过
程作计时显示,直到时间到停机;洗涤过程由“开始”信号开始;
●三只LED灯表示“正转”、“反转”、“暂停”三个状态。
三、实验要求;
●在PC机上完成相应的设计输入,编译,仿真,对结果进行分析;
●完成下载,在实验板上对程序进行验证。
4、实验步骤;
(1)实验分析
a.预设时间和编码电路(settime):
接受用户通过按钮预置的时间信息,编码成八位之后转给减法计数器。
b.减法计数器电路(counter):
接收编码之后的预置时间信息,向电机运转
控制电路传递运行信号,并将预置时间信息和剩余时间信息发给数码管显示电路进行实时显示。
c.数码管显示电路(showtime):
接收减法计数器电路传来的时间信息,进行
实时译码显示。
e.电机运转时序控制电路(analyse):
接收运行起止信号,安排电机运行状态并编码输出。
f.译码器(move):
接收电机运行状态信号,译码后实时控制电机的正传、反转和暂停。
程序框图如下:
(2)程序编写
a.预设时间和编码电路(settime):
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytimesetis
port
(
load:
instd_logic;
time_input:
instd_logic_vector(3downto0);
time_set:
outstd_logic_vector(7downto0)
);
endtimeset;
architecturetimesetoftimesetis
signalp1:
std_logic_vector(7downto0);
begin
process(load)
begin
if(load'eventandload='1')
then
casetime_inputis
when"0000"=>p1<="00000000";
when"0001"=>p1<="00000001";
when"0010"=>p1<="00000010";
when"0011"=>p1<="00000011";
when"0100"=>p1<="00000100";
when"0101"=>p1<="00000101";
when"0110"=>p1<="00000110";
when"0111"=>p1<="00000111";
when"1000"=>p1<="00001000";
when"1001"=>p1<="00001001";
whenothers=>p1<="00000000";
endcase;
endif;
endprocess;
time_set<=p1;
endtimeset;
b.减法计数器电路(counter):
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitysubis
port
(
clk,start:
instd_logic;
time_set:
instd_logic_vector(7downto0);
time_remain:
bufferstd_logic_vector(7downto0);
time_over:
bufferstd_logic
);
endsub;
architecturesubofsubis
begin
process(clk)
variabletime_second:
integerrange0to59;
begin
if(clk'eventandclk='1')
then
if(start='0')
then
if(time_remain(7downto0)=0)
then
time_remain<=time_set;
else
time_remain(7downto4)<=time_remain(3downto0);
time_remain(3downto0)<=time_set(3downto0);
endif;
time_second:
=59;
time_over<='1';
else
if(time_over='1')
then
if(time_second=0andtime_remain(7downto0)=0)
then
time_over<='0';
else
if(time_second=0)
then
if(time_remain(3downto0)=0)
then
time_remain(7downto4)<=time_remain(7downto4)-1;
time_remain(3downto0)<="1001";
time_second:
=59;
else
time_remain(7downto4)<=time_remain(7downto4);
time_remain(3downto0)<=time_remain(3downto0)-1;
time_second:
=59;
endif;
else
time_second:
=time_second-1;
endif;
endif;
endif;
endif;
endif;
endprocess;
endsub;
c.数码管显示电路(showtime):
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityshowtimeis
port
(
time_remain:
instd_logic_vector(7downto0);
clk:
instd_logic;
minuteshi,minutege:
outstd_logic;
a,b,c,d,e,f,g:
outstd_logic
);
endshowtime;
architectureshowtimeofshowtimeis
signaltemp:
std_logic_vector(6downto0);
signalbcd:
std_logic_vector(3downto0);
signalchoose:
std_logic;
begin
process(clk)
begin
if(clk'eventandclk='1')
then
choose<=notchoose;
if(choose='1')
then
minuteshi<='0';minutege<='1';
bcd<=time_remain(7downto4);
else
minuteshi<='1';minutege<='0';
bcd<=time_remain(3downto0);
endif;
endif;
endprocess;
process(bcd)
begin
casebcdis
when"0000"=>temp<="1111110";
when"0001"=>temp<="0110000";
when"0010"=>temp<="1101101";
when"0011"=>temp<="1111001";
when"0100"=>temp<="0110011";
when"0101"=>temp<="1011011";
when"0110"=>temp<="1011111";
when"0111"=>temp<="1110000";
when"1000"=>temp<="1111111";
when"1001"=>temp<="1111011";
whenothers=>temp<="1111011";
endcase;
a<=temp(6);b<=temp(5);c<=temp(4);d<=temp(3);e<=temp
(2);f<=temp
(1);g<=temp(0);
endprocess;
endshowtime;
e.电机运转时序控制电路(analyse):
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityanalyseis
port
(
clk,start,time_over:
instd_logic;
out_1,out_2:
outstd_logic
);
endanalyse;
architectureanalyseofanalyseis
begin
process(clk)
variablestate:
std_logic;
variablewash_time:
integerrange0to20;
variablewait_time:
integerrange0to10;
begin
if(clk'eventandclk='1')
then
if(start='0')
then
wash_time:
=0;
wait_time:
=0;
state:
='0';
out_1<='0';out_2<='0';
else
if(time_over='1')
then
if(wash_time=20)
then
if(wait_time=10)
then
wash_time:
=0;
state:
=notstate;
else
wait_time:
=wait_time+1;
endif;
else
wash_time:
=wash_time+1;
wait_time:
=0;
endif;
endif;
if(wash_time=20)
then
out_1<='0';out_2<='0';
else
if(state='0')
then
out_1<='1';out_2<='0';
else
out_1<='0';out_2<='1';
endif;
endif;
endif;
endif;
endprocess;
endanalyse;
f.译码器(move):
libraryieee;
useieee.std_logic_1164.all;
entitythreeyimaqiis
port
(
out_1,out_2:
instd_logic;
REV,RUN,PAUSE:
bufferstd_logic
);
endthreeyimaqi;
architecturemoveofthreeyimaqiis
signalchoose:
std_logic_vector(1downto0);
begin
choose
(1)<=out_1;choose(0)<=out_2;
process(choose)
begin
casechooseis
when"00"=>REV<='0';RUN<='0';PAUSE<='1';
when"10"=>REV<='0';RUN<='1';PAUSE<='0';
when"01"=>REV<='1';RUN<='0';PAUSE<='0';
whenothers=>REV<='0';RUN<='0';PAUSE<='0';
endcase;
endprocess;
endmove;
器件总电路图如下:
仿真波形如下:
实物图:
5、实验心得
通过这次的VHDL设计,我真的是受益匪浅。
看到洗衣机控制器的题目,对于初次接触vhdl语言的我来说,头脑里几乎是没有任何概念的,根本就不知道该从何处下手。
不过我并没有气馁,在老师的悉心指导以及同学们的热心帮助下,通过网上查阅相关资料,我渐渐有了眉目。
这次设计,让我初步掌握了VHDL的设计方法与一些技巧,让我对FPGA的编程、定时器和计数器的设计更加熟悉,也更加明白时序组合门电路设计思路和方法。
在设计中也参了和查阅了很多资料,从中学到不少课本上没有的东西,这些对我的学习有很大的帮助。
同时,我没那个明白了这次课程设计是一个理论与实际结合的过程,理论知识往往是不够的,只有把所学的理论与实际行动相结合,才能提高自己的综合实际能力和独立思考的能力。
在设计过程中我们都会遇到很多的问题,但往往是一个小问题都会导致设计的失败,这就要我们花大量的时间区思索和改正,这是一个很艰辛的过程,但同时也是我收获最大的过程。
考察我们的就是恒心与毅力。
设计往往是一个苦中有乐的过程,如果从兴趣出发,则就会释然很多,通过这次设计,是我对数字电路实验产生了浓厚的兴趣,我希望在以后的学习中继续加深对这一个方面的学习。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 系统 设计 洗衣机 控制器 本科 论文