数字逻辑电路课程设计-全自动洗衣机控制器的设计课案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字逻辑电路课程设计
设计题目全自动洗衣机控制器的设计
姓名
学号
专业
班级
完成日期
目录
一、实验目的 (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.总体方案的设计
经过分析问题及初步的整体思考,拟定以下方案:
总体电路共分三大块。
第一块实现洗衣机运行过程控制;第二块实现花洗衣机水位控制;
第三块实现数码管状态显示。
主体框图如下:
CLK
四、使用元件
1.设计所需的元件:
TDS系列数字电路实验系统----------------------------------------- 1套;
ISP系统可编程器件以及集成电路------------------------------------- -1套;
PC 计算机----------------------------------------------------------- 1台;
实验板一个;
万用表一个;
导线若干;
五、分析与心得
这次课程设计对我来说是一项很大的挑战,看到题目后几乎没有思路,翻阅教材,看了下自动洗衣机那张的讲解,有了眉目,但是设计的内容过于庞杂,很难下手。
这时候,我选择从已有的程序着手,先看懂,然后和同学讨论思路,最后形成了这个作业。
做仿真波形的时候,就是验证结论的时候,过程还算顺利。
通过这次作业,掌握了从没接触过的VHDL语言,加强了动手能力,发现了学会查阅资料的重要性,受益匪浅。
附件:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY test IS
PORT( clk:IN STD_LOGIC;--500HZ信号,用于扫描数码管--
clear:IN STD_LOGIC; --复位信号--
start:IN STD_LOGIC; --开始暂停--
model1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);--模式控制--
--w:OUT STD_LOGIC;
m:OUT STD_LOGIC;
--d:OUT STD_LOGIC;
v:OUT STD_LOGIC;
SDISP:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--输出水位--
ADISP:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
DISP:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)--控制数码管显示的数字的信号-- );
END test;
ARCHITECTURE a OF test IS
SIGNAL water1:INTEGER RANGE 0 TO 1;
SIGNAL wash :INTEGER RANGE 0 TO 1;
SIGNAL drain1 :INTEGER RANGE 0 TO 1;
SIGNAL water2 :INTEGER RANGE 0 TO 1;
SIGNAL rains :INTEGER RANGE 0 TO 1;
SIGNAL drain2 :INTEGER RANGE 0 TO 1;
SIGNAL dry :INTEGER RANGE 0 TO 1;
SIGNAL beep :INTEGER RANGE 0 TO 1;
SIGNAL model:INTEGER RANGE 0 TO 7;
SIGNAL count:INTEGER RANGE 0 TO 9;--模值为9的计数器--
BEGIN
--water1!!!!!!!!!!!--
p1:PROCESS(clk,clear,start)
V ARIABLE shuiwei:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
IF clear='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";
ELSIF clk'event AND clk='1' AND start='1' THEN
water1<=1;
--ADISP<="0001";
IF (water1=1) THEN ADISP<="0000";
--IF shuiwei = 1;
--count<=7;
shuiwei(3 downto 0):=model1;
case shuiwei is
WHEN "0000" => count<=4;--0
WHEN "0001" => count<=5;
WHEN "0010" => count<=7;
WHEN "0011" => count<=8;
WHEN OTHERS =>count<=7;
END case;
SDISP<=shuiwei;
--WHEN 1 => SDISP<="0001";--1
--WHEN 2 => SDISP<="0010";--2
--WHEN 3 => SDISP<="0011";--3
--WHEN 4 => SDISP<="0100";--4
--WHEN OTHERS =>SDISP<="0000";--0 v<='0';
m<='0';
--ADISP<="0001";
--w<='1';
--m<='0';
--d<='0';
--IF (w<='1') THEN m<='0';d<='0';END IF; IF(count=0) THEN wash<=1;water1<=0; ELSE count<=count-1;ADISP<="0000"; END IF;
END IF;
---wash!!!!!!!!!!!!!!!!!-
IF (wash=1) THEN
count<=9;water1<=0;
ADISP<="0001";
v<='0';m<='0';
--w<='0';
--m<='1';
--d<='0';
--IF (m<='1') THEN w<='0';d<='0';END IF; IF(count=0) THEN drain1<=1;wash<=0; ELSE count<=count-1;ADISP<="0001"; END IF;
END IF;
---drain1!!!!!!!!!!!!!!!!!-
IF (drain1=1) THEN --ADISP<="0011"; count<=6;wash<=0;
v<='0';m<='1';
--w<='0';
--m<='0';
--d<='1';
--IF (d<='1') THEN m<='0';w<='0';END IF; IF(count=0) THEN water2<=1;drain1<=0; ELSE count<=count-1;ADISP<="0010"; END IF;
END IF;
---water2!!!!!!!!!!!!!!!!!-
IF (water2=1) THEN
count<=7;drain1<=0;
ADISP<="0011";
v<='0';m<='0';
--w<='1';
--m<='0';
--d<='0';
IF(count=0) THEN rains<=1;water2<=0; ELSE count<=count-1;ADISP<="0011"; END IF;
END IF;
---rinse!!!!!!!!!!!!!!!!!-
IF (rains=1) THEN
count<=9;
ADISP<="0100";
v<='0';m<='0';
--w<='1';
--m<='0';
--d<='0';
IF(count=0) THEN drain2<=1;rains<=0; ELSE count<=count-1;ADISP<="0100"; END IF;
END IF;
---drain2!!!!!!!!!!!!!!!!!-
IF (drain2=1) THEN
count<=6;
ADISP<="0101";
v<='0';m<='0';
--w<='0';
--m<='0';
--d<='1';
IF(count=0) THEN dry<=1;drain2<=0; ELSE count<=count-1;ADISP<="0101"; END IF;
END IF;
---dry!!!!!!!!!!!!!!!!!-
IF (dry=1) THEN
count<=1;
ADISP<="0110";
v<='0';m<='0';
--w<='0';
--m<='1';
--d<='0';
IF(count=0) THEN beep<=1;dry<=0; ELSE count<=count-1;ADISP<="0110"; END IF;
END IF;
---beep!!!!!!!!!!!!!!!!!-
IF (beep=1) THEN
--V ARIABLE a: integer:=0;
--L1:LOOP
count<=0;
ADISP<="0111";
v<='1';m<='1';
IF(model=2)THEN
v<='0';m<='0';ADISP<="0000";
ELSE model<=model+1;
--END loop L1;
END IF;
END IF;
END IF;
END PROCESS p1;
--SIGNAL disp_tmp:INTEGER RANGE 0 TO 9;--从0到9,显示在数码管上的数字-- --BEGIN
--p1:PROCESS(clk,clear) --500HZ扫描信号控制计数器当前值--
--BEGIN
-- IF clear='1' THEN
-- count<=0;
-- ELSIF clk'event AND clk='1' THEN
-- IF(count=0) THEN count<=9;
-- ELSE count<=count-1;
-- END IF;
-- END IF;
--END PROCESS p1;
p2:PROCESS(count)--根据disp_tmp的值显示对应的数字--
BEGIN
CASE count IS
WHEN 0 => DISP<="0000";--0
WHEN 1 => DISP<="0001";--1
WHEN 2 => DISP<="0010";--2
WHEN 3 => DISP<="0011";--3
WHEN 4 => DISP<="0100";--4
WHEN 5 => DISP<="0101";--5
WHEN 6 => DISP<="0110";--6
WHEN 7 => DISP<="0111";--7
WHEN 8 => DISP<="1000";--8
WHEN 9 => DISP<="1001";--9
WHEN OTHERS => DISP<="0000";--0 END CASE;
END PROCESS p2;
END a;。