数字逻辑电路课程设计全自动洗衣机控制器的设计.docx
《数字逻辑电路课程设计全自动洗衣机控制器的设计.docx》由会员分享,可在线阅读,更多相关《数字逻辑电路课程设计全自动洗衣机控制器的设计.docx(13页珍藏版)》请在冰豆网上搜索。
数字逻辑电路课程设计全自动洗衣机控制器的设计
数字逻辑电路课程设计
设计题目全自动洗衣机控制器的设计
姓名
学号
专业
班级
完成日期
一、实验目的…………………………………………………………………3
二、设计题目与思路…………………………………………………………3
三、总体方案的设计与选择…………………………………………………4
四、使用元件…………………………………………………………………5
五、分析与心得………………………………………………………………5
六、附件一:
实验代码………………………………………………………5
一、实验目的
1.进一步掌握数字电路课程所学的理论知识。
2.了解数字电路设计的基本思想和方法,学会科学分析和解决问题。
3.熟悉几种常用集成数字芯片,并掌握其工作原理,进一步学会使用其进行电路设计。
4.培养认真严谨的工作作风和实事求是的工作态度。
二、设计题目与思路
本次数字电路课程设计我选择的题目是“全自动洗衣机控制器”。
这个系统的主要功能是:
1.设计一个全自动洗衣机控制器电路,实现对洗衣机的全自动控制。
根据全自动洗衣机的控制原理设计一个控制电路,使之能够控制全自动洗衣机完成整个工作过程。
洗衣机工作过程如下:
当按下复位按钮时,洗衣机上电,控制电路复位到初始状态(默认水位为“中”);使用者可根据衣服的多少,按下水位控制按钮,改变水位设置,以控制上水时加水的多少;当按下启动/暂停按钮时,洗衣机开始洗衣的第一个操作:
进水阀门打开,开始上水,并根据水位设置(高、中、低、少)历时不同的时间timeadd(8s、7s、6s、5s);然后进水阀门关闭,电机开始运转,开始洗衣过程,并历时9s;然后电机停止运转,排水阀门打开,开始排水,并根据水位设置(高、中、低、少)历时不同的时间timedrain(7s、6s、5s、4s);然后排水阀门关闭,进水阀门打开,开始第二次上水,并历时timeadd……当甩干结束后,整个洗衣过程完成,扬声器发出持续15秒的急促的“嘀嘀”音,提示用户洗衣结束。
洗衣机工作过程简记如下:
空闲(idle)→第一次加水(water1)7s→洗衣(wash)9s→第一次排水(drain1)6s→第二次加水(water2)7s→漂洗(rinse)9s→第二次排水(drain2)6s→甩干(dry)5s→蜂鸣15s
2、控制器只要送出对应的控制信号就可以了。
这些控制信号控制的继电器不需要购买。
3、用开关启动洗衣机,数码管动态显示剩余时间,发光二极管点亮或停止,表示电机的运动规律。
三、总体方案的设计与选择
1.总体方案的设计
经过分析问题及初步的整体思考,拟定以下方案:
总体电路共分三大块。
第一块实现洗衣机运行过程控制;第二块实现花洗衣机水位控制;第三块实现数码管状态显示。
主体框图如下:
四、使用元件
1.设计所需的元件:
TDS系列数字电路实验系统-----------------------------------------1套;
ISP系统可编程器件以及集成电路--------------------------------------1套;
PC计算机-----------------------------------------------------------1台;
实验板一个;
万用表一个;
导线若干;
五、分析与心得
这次课程设计对我来说是一项很大的挑战,看到题目后几乎没有思路,翻阅教材,看了下自动洗衣机那张的讲解,有了眉目,但是设计的内容过于庞杂,很难下手。
这时候,我选择从已有的程序着手,先看懂,然后和同学讨论思路,最后形成了这个作业。
做仿真波形的时候,就是验证结论的时候,过程还算顺利。
通过这次作业,掌握了从没接触过的VHDL语言,加强了动手能力,发现了学会查阅资料的重要性,受益匪浅。
附件:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYtestIS
PORT(clk:
INSTD_LOGIC;--500HZ信号,用于扫描数码管--
clear:
INSTD_LOGIC;--复位信号--
start:
INSTD_LOGIC;--开始暂停--
model1:
INSTD_LOGIC_VECTOR(3DOWNTO0);--模式控制--
--w:
OUTSTD_LOGIC;
m:
OUTSTD_LOGIC;
--d:
OUTSTD_LOGIC;
v:
OUTSTD_LOGIC;
SDISP:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--输出水位--
ADISP:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
DISP:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)--控制数码管显示的数字的信号--
);
ENDtest;
ARCHITECTUREaOFtestIS
SIGNALwater1:
INTEGERRANGE0TO1;
SIGNALwash:
INTEGERRANGE0TO1;
SIGNALdrain1:
INTEGERRANGE0TO1;
SIGNALwater2:
INTEGERRANGE0TO1;
SIGNALrains:
INTEGERRANGE0TO1;
SIGNALdrain2:
INTEGERRANGE0TO1;
SIGNALdry:
INTEGERRANGE0TO1;
SIGNALbeep:
INTEGERRANGE0TO1;
SIGNALmodel:
INTEGERRANGE0TO7;
SIGNALcount:
INTEGERRANGE0TO9;--模值为9的计数器--
BEGIN
--water1!
!
!
!
!
!
!
!
!
!
!
--
p1:
PROCESS(clk,clear,start)
VARIABLEshuiwei:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFclear='1'THEN
model<=0;
shuiwei:
="0010";
v<='0';
m<='0';
count<=0;
water1<=0;
wash<=0;
drain1<=0;
water2<=0;
rains<=0;
drain2<=0;
dry<=0;
beep<=0;
ADISP<="0000";
ELSIFclk'eventANDclk='1'ANDstart='1'THEN
water1<=1;
--ADISP<="0001";
IF(water1=1)THENADISP<="0000";
--IFshuiwei=1;
--count<=7;
shuiwei(3downto0):
=model1;
caseshuiweiis
WHEN"0000"=>count<=4;--0
WHEN"0001"=>count<=5;
WHEN"0010"=>count<=7;
WHEN"0011"=>count<=8;
WHENOTHERS=>count<=7;
ENDcase;
SDISP<=shuiwei;
--WHEN1=>SDISP<="0001";--1
--WHEN2=>SDISP<="0010";--2
--WHEN3=>SDISP<="0011";--3
--WHEN4=>SDISP<="0100";--4
--WHENOTHERS=>SDISP<="0000";--0
v<='0';
m<='0';
--ADISP<="0001";
--w<='1';
--m<='0';
--d<='0';
--IF(w<='1')THENm<='0';d<='0';ENDIF;
IF(count=0)THENwash<=1;water1<=0;
ELSEcount<=count-1;ADISP<="0000";
ENDIF;
ENDIF;
---wash!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
-
IF(wash=1)THEN
count<=9;water1<=0;
ADISP<="0001";
v<='0';m<='0';
--w<='0';
--m<='1';
--d<='0';
--IF(m<='1')THENw<='0';d<='0';ENDIF;
IF(count=0)THENdrain1<=1;wash<=0;
ELSEcount<=count-1;ADISP<="0001";
ENDIF;
ENDIF;
---drain1!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
-
IF(drain1=1)THEN--ADISP<="0011";
count<=6;wash<=0;
v<='0';m<='1';
--w<='0';
--m<='0';
--d<='1';
--IF(d<='1')THENm<='0';w<='0';ENDIF;
IF(count=0)THENwater2<=1;drain1<=0;
ELSEcount<=count-1;ADISP<="0010";
ENDIF;
ENDIF;
---water2!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
-
IF(water2=1)THEN
count<=7;drain1<=0;
ADISP<="0011";
v<='0';m<='0';
--w<='1';
--m<='0';
--d<='0';
IF(count=0)THENrains<=1;water2<=0;
ELSEcount<=count-1;ADISP<="0011";
ENDIF;
ENDIF;
---rinse!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
-
IF(rains=1)THEN
count<=9;
ADISP<="0100";
v<='0';m<='0';
--w<='1';
--m<='0';
--d<='0';
IF(count=0)THENdrain2<=1;rains<=0;
ELSEcount<=count-1;ADISP<="0100";
ENDIF;
ENDIF;
---drain2!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
-
IF(drain2=1)THEN
count<=6;
ADISP<="0101";
v<='0';m<='0';
--w<='0';
--m<='0';
--d<='1';
IF(count=0)THENdry<=1;drain2<=0;
ELSEcount<=count-1;ADISP<="0101";
ENDIF;
ENDIF;
---dry!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
-
IF(dry=1)THEN
count<=1;
ADISP<="0110";
v<='0';m<='0';
--w<='0';
--m<='1';
--d<='0';
IF(count=0)THENbeep<=1;dry<=0;
ELSEcount<=count-1;ADISP<="0110";
ENDIF;
ENDIF;
---beep!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
-
IF(beep=1)THEN
--VARIABLEa:
integer:
=0;
--L1:
LOOP
count<=0;
ADISP<="0111";
v<='1';m<='1';
IF(model=2)THEN
v<='0';m<='0';ADISP<="0000";
ELSEmodel<=model+1;
--ENDloopL1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESSp1;
--SIGNALdisp_tmp:
INTEGERRANGE0TO9;--从0到9,显示在数码管上的数字--
--BEGIN
--p1:
PROCESS(clk,clear)--500HZ扫描信号控制计数器当前值--
--BEGIN
--IFclear='1'THEN
--count<=0;
--ELSIFclk'eventANDclk='1'THEN
--IF(count=0)THENcount<=9;
--ELSEcount<=count-1;
--ENDIF;
--ENDIF;
--ENDPROCESSp1;
p2:
PROCESS(count)--根据disp_tmp的值显示对应的数字--
BEGIN
CASEcountIS
WHEN0=>DISP<="0000";--0
WHEN1=>DISP<="0001";--1
WHEN2=>DISP<="0010";--2
WHEN3=>DISP<="0011";--3
WHEN4=>DISP<="0100";--4
WHEN5=>DISP<="0101";--5
WHEN6=>DISP<="0110";--6
WHEN7=>DISP<="0111";--7
WHEN8=>DISP<="1000";--8
WHEN9=>DISP<="1001";--9
WHENOTHERS=>DISP<="0000";--0
ENDCASE;
ENDPROCESSp2;
ENDa;