当前位置:文档之家› 数字逻辑电路课程设计-全自动洗衣机控制器的设计

数字逻辑电路课程设计-全自动洗衣机控制器的设计

数字逻辑电路课程设计设计题目全自动洗衣机控制器的设计姓名学号专业班级完成日期目录一、实验目的 (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→蜂鸣15s2、控制器只要送出对应的控制信号就可以了。

这些控制信号控制的继电器不需要购买。

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 ISPORT( 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 ISSIGNAL 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); BEGINIF clear='1' THENmodel<=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' THENwater1<=1;--ADISP<="0001";IF (water1=1) THEN ADISP<="0000";--IF shuiwei = 1;--count<=7;shuiwei(3 downto 0):=model1;case shuiwei isWHEN "0000" => count<=4;--0WHEN "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) THENcount<=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) THENcount<=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) THENcount<=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) THENcount<=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) THENcount<=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:LOOPcount<=0;ADISP<="0111";v<='1';m<='1';IF(model=2)THENv<='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的值显示对应的数字--BEGINCASE count ISWHEN 0 => DISP<="0000";--0WHEN 1 => DISP<="0001";--1WHEN 2 => DISP<="0010";--2WHEN 3 => DISP<="0011";--3WHEN 4 => DISP<="0100";--4WHEN 5 => DISP<="0101";--5WHEN 6 => DISP<="0110";--6WHEN 7 => DISP<="0111";--7WHEN 8 => DISP<="1000";--8WHEN 9 => DISP<="1001";--9WHEN OTHERS => DISP<="0000";--0 END CASE;END PROCESS p2;END a;。

相关主题