洗衣机控制电路设计 EDA课程设计

合集下载

EDA课程设计洗衣机控制器

EDA课程设计洗衣机控制器

北京印刷学院EDA课程设计报告课程题目:基于FPGA的洗衣机控制器的设计课程名称:EDA技术课程设计院(系):信息与机电工程学院专业:电子信息工程姓名:薛大神学号:098888888指导老师:xxx实习日期:2012年6月28日-6月30日目录1.系统设计 (3)1.1 设计要求 (3)1.2 总体设计方案 (3)1.2.1 设计思路 (3)1.2.2 系统组成 (3)2. 单元硬件电路设计 (4)2.1 键盘模块 (4)2.2 显示模块 (4)2.3 中心控制模块 (4)3. 软件设计 (4)3.1 控制模块程序设计 (5)3.2 显示译码程序设计 (5)3.3 按键去抖程序设计 (5)3.4 分频模块程序设计 (6)4. 系统仿真测试 (6)4.1 控制模块仿真 (6)4.2 按键去抖模块仿真 (7)4.3 分频模块仿真 (7)4.4 控制器操作演示 (8)附录一使用说明 (9)附录二电路原理图 (9)附录三管脚分配图 (9)附录四程序清单 (10)摘要:洗衣机控制电路由一片altera公司的cyclone2系列EP2C35F672C6的FPGA 作为中心控制器加上必要的外围电路组成,实现对洗衣机工作状态的控制。

芯片编程采用Quartus2作为开发工具,由控制模块,分频模块,按键去抖模块,显示译码模块组成,顶层使用原理图实现,底层由Verilog HDL语句实现。

中心控制器FPGA根据控制键盘的信号,向洗衣机发出正传,反转,待机信号,并通过数码管和LED灯显示当前的状态及剩余时间。

该洗衣机控制电路可以方便快捷的实现对洗衣机的控制和状态的显示功能。

关键字:洗衣机 FPGA Verilog HDL语言 cyclone21.系统设计1.1设计要求1.洗衣机的状态为待机5s→正转60s→待机5s→反转60s→,并用3个LED灯和7段显示器分别表示其工作状态和显示相应工作状态下的时间。

2.可自行设定洗衣机的循环次数,这里设置最大的循环次数为15次。

EDA-洗衣机控制器设计

EDA-洗衣机控制器设计
沈阳理工大学
2010年12月21日
主要内容:
设计一个洗衣机控制器,要求洗衣机有正转、反转、暂停三种状态。设定洗衣机的工作时间,要洗衣机在工作时间内完成:定时启动正转20秒暂停10秒反转20秒暂停10秒定时未到回到“正转20秒暂停10秒……”,定时到则停止,同时发出提示音。
基本要求:
1、设计一个电子定时器,控制洗衣机作如下运转:定时启动正转20秒暂停10秒反转20秒暂停10秒定时未到回到“正转20秒暂停10秒……”,定时到则停止;
2、设计框图
定时时间未到
二、设计步骤和调试过程
1、总体设计电路
洗衣机控制器电路主要有五大部分组成,包括:减法计数器、时序控制电路、预置时间和编码电路、数码管显示、译码器组成。
具体电路如下图所示:
2、模块设计和相应模块程序
⑴数码管显示
实现数码管显示
Library iee;
Use ieee.std_logic_1164.all;
"1000"=> "1111111"
"1001"=> "1111011"
End table;
a<=temp(6);b<=temp(5);c<=temp(4);d<=temp(3);e<=temp(2);f<=temp(1);
g<=temp(0);
end rtl
⑵时序电路
Library ieee;
Use ieee.std_logic_1164.all;
End if;
End if;
End if;
End process;
End rtl;
⑶预置时间和编码电路
Library ieee;
Use ieee.std_logic_1164.all;

EDA洗衣机实验

EDA洗衣机实验

实训报告课程名称:ED(洗衣机控制的设计)学生姓名:肖忠亮学号:8000610040专业班级:计算机软件南昌大学实训报告学生姓名:肖忠亮学号:8000610040专业班级:计算机软件实训类型:口验证□综合二设计口创新实训日期:实验成绩:一、实训工程名称洗衣机控制电路、实训目的1.熟悉verilog语言的程序的设计。

2.熟悉Quatus II软件的使用。

3.熟练掌握代码对硬件的烧写。

4.使用verilog语言设计具有创新的硬件电路三、实训要求1.熟悉EDA的开发环境Quartus II软件的使用;2.设计原理图或者功能模块;3.根据原理图或者功能图编写代码;4.实现洗衣机控制系统的仿真:四、实训基本原理(附原理图、源程序清单)控制功能说明:1.洗衣机的工作状态为待机5秒,正转60秒,待机5秒,反转60秒,并用3 个led灯和7段显示器表示工作的状态和显示相应工作状态下的时间。

2.可以自定义来控制洗衣机的循环次数。

3.具有紧急情况的处理功能,4.设定循环次数递减到0的时候就立刻报警,以表示设定的循环次数已经结束。

2 个数码管,34 表后二个数码管LED 洗衣机工作的的状态的显示//时钟信号// 暂停和开启按钮 (相当于洗衣机遇到经济情况的时候的处理) //电源开关//表示给增加循环次数的确定的按钮 //增加循环次数的开始//记录洗衣机的状态 //洗完后洗衣机的警报灯//4 个状态的灯管显示 //洗衣机工作的时间十位 //时间的个位显示 //记录洗衣要循环的次数十位显示 //循环次数的个位显示// 不工作状态,启动状态,第一个 5 秒状态, 60 秒状态,洗完了状态警报状态,停止状态。

// 用来对 COUNTER2 的数量进行的变换和计算的标志begindec=3'b000。

cur_state=END 。

COUNTER1='h00 。

COUNTER2='h00 。

end*/reg [2:0] state 。

eda技术课程设计洗衣机控制器

eda技术课程设计洗衣机控制器

课程EDA技术课程设计题目洗衣机控制器专业电子信息工程姓名主要内容、基本要求、主要参考资料等主要内容:设计一个洗衣机控制器,要求洗衣机有正转、反转、暂停三种状态。

设定洗衣机的工作时间,要洗衣机在工作时间内完成:定时启动→正转20秒→暂停10秒→反转20秒→暂停10秒→定时未到回到“正转20秒→暂停10秒→……”,定时到则停止,同时发出提示音。

基本要求:1、设计一个电子定时器,控制洗衣机作如下运转:定时启动→正转20秒→暂停10秒→反转20秒→暂停10秒→定时未到回到“正转20秒→暂停10秒→……”,定时到则停止;2、若定时到,则停机发出音响信号;3、用两个数码管显示洗涤的预置时间(分钟数),按倒计时方式对洗涤过程作计时显示,直到时间到停机;洗涤过程由“开始”信号开始;4、三只LED灯表示“正转”、“反转”、“暂停”三个状态。

主要参考资料:[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.[2] 康华光主编.电子技术基础模拟部分. 北京:高教出版社,2006.[3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.完成期限2011.3.11指导教师专业负责人2011年3月7日一、总体设计思想1.基本原理从课程设计要求来看,要求实现电机的正传、反转、暂停,需要用LED灯的状态来表示,当显示时间前20秒正传、暂停10秒、反转20秒、再暂停10秒,如此一来,周期恰好是60秒。

洗衣机控制器的设计主要是定时器的设计。

由一片FPGA和外围电路构成了电器控制部分。

FPGA接收键盘的控制命令,控制洗衣机的进水、排水、水位和洗衣机的工作状态、并控制显示工作状态以及设定直流电机速度、正反转控制、制动控制、起停控制和运动状态控制。

对芯片的编程采用模块化的VHDL (硬件描述语言)进行设计,设计分为三层实现,顶层实现整个芯片的功能。

顶层和中间层多数是由VHDL的元件例化语句实现。

中间层由无刷直流电机控制、运行模式选择、洗涤模式选择、定时器、显示控制、键盘扫描、水位控制以及对直流电机控制板进行速度设定、正反转控制、启停控制等模块组成,它们分别调用底层模块。

EDA设计基于VHDL的简易全自动控制洗衣机

EDA设计基于VHDL的简易全自动控制洗衣机

华东理工大学2009 -2010 学年第2学期《电子综合设计DEA》课程设计作业 2010.6班级:XXXX 学号: XXX 姓名:XXXX电子综合设计EDA综合设计题设计一简易全自动洗衣机控制器。

该控制器由两大状态A和B组成,每个状态分三个子状态,每个状态分别由选择A和选择B控制。

其中A为步进选择按纽,每步跳转一个子状态、B也为步进选择按纽,但每步选择B中的所有组合中的一种。

当启动时,时间序列控制器按已选的B类子状态顺序执行。

过程启动由启动/暂停键控制(暂停键在过程启动后任意时间可暂停/恢复过程)过程启动后机盖开启应均能暂停过程,复盖间停30秒后重新继续原过程。

A:强洗标准弱洗B:洗涤漂洗甩干(脱水)(洗涤,漂洗时电机分别正转、反转)强洗:(共36分钟)洗涤 18分漂洗 14分甩干 4分(洗涤时电机分别正转4分、反转4分,正反转间停30秒;漂洗时电机分别正转3分、反转3分,正反转间停30秒;甩干时电机分别正转1.5分,间停30秒)标准:(共26分钟)洗涤 14分漂洗 8 分甩干 4分(洗涤时电机分别正转3分、反转3分,正反转间停30秒;漂洗时电机分别正转1.5分、反转1.5分,正反转间停30秒;甩干时电机分别正转1.5分,间停30秒)弱洗(共20分钟)洗涤 10分漂洗 6分甩干4分(洗涤时电机分别正转2分、反转2分,正反转间停30秒;漂洗时电机分别正转1分、反转1分,正反转间停30秒;甩干时电机分别正转1.5分,间停30秒)设定秒脉冲已给定,指示为LED,整过程完成后,蜂鸣器响30秒。

整个设计为正逻辑。

一、程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY student ISPORT(COUNT_N,COUNT_M,START,COOK,CLK:IN STD_LOGIC;LOOK:OUT STD_LOGIC;DOUT :OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END STUDENT;ARCHITECTURE BEHAV OF student ISSIGNAL DT1,DT2:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL DICSOUNT,TEM:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL DCP:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL CT:STD_LOGIC_VECTOR(5 DOWNTO 0);SIGNAL CT1,CT2:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SG,CMKS:STD_LOGIC;BEGINPROCESS(COUNT_N,SG)BEGINIF SG='1' THENDT1<="00";ELSIF COUNT_N'EVENT AND COUNT_N='1' THENIF DT1=3 THENDT1<="01";ELSEDT1<=DT1+1;END IF;END IF;END PROCESS;PROCESS(COUNT_M,SG)BEGINIF SG='1' THENDT2<="00";ELSIF COUNT_M'EVENT AND COUNT_M='1' THENIF DT2=3 THENDT2<="01";ELSEDT2<=DT2+1;END IF;END IF;END PROCESS;PROCESS(START)BEGINIF SG='1' THENCMKS<='0';ELSIF START'EVENT AND START='1' THENDICSOUNT<=DT1&DT2;CMKS<=CMKS XOR '1';END IF;END PROCESS;PROCESS(CLK,START,COOK)BEGINIF START='1' AND DCP="0000" THENDCP<=DICSOUNT;ELSIF CLK'EVENT AND CLK='1' THENIF COOK='1' THENDOUT<="00";ELSIF START='1' AND DCP>"0000" THENDOUT<="00";ELSIF SG='1' THENIF CT1<"0001" THENCT1<="0000";SG<='0';END IF;ELSIF CMKS='1' THENCASE DCP ISWHEN "0101"=>IF CT<35 THENCT<=CT+1;IF CT1<8 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=8 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<8 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=8 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="0110";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";END IF;WHEN "0110"=>IF CT<27 THENCT<=CT+1;IF CT1<6 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=6 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<6 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=6 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="0111";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";END IF;WHEN "0111"=>IF CT<8 THENCT<=CT+1;IF CT1<3 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=3 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<3 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=3 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="0000";CT<="000000";CT1<="0000";CT2<="0000";SG<='1';END IF;WHEN "1001"=>IF CT<27 THENCT<=CT+1;IF CT1<6 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=6 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<6 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=6 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="1010";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";END IF;WHEN "1010"=>IF CT<15 THENCT<=CT+1;IF CT1<3 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=3 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<3 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=3 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="1011";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";END IF;WHEN "1011"=>IF CT<8 THENCT<=CT+1;IF CT1<3 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=3 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<3 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=3 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="0000";CT<="000000";CT1<="0000";CT2<="0000";SG<='1';END IF;WHEN "1101"=>IF CT<19 THENCT<=CT+1;IF CT1<4 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=4 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<4 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=4 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="1110";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";END IF;WHEN "1110"=>IF CT<11 THENCT<=CT+1;IF CT1<2 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=2 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<2 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=2 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="1111";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";END IF;WHEN "1111"=>IF CT<8 THENCT<=CT+1;IF CT1<3 THENDOUT<="01";CT1<=CT1+1;ELSIF CT1=3 THENDOUT<="00";CT1<=CT1+1;ELSIF CT2<3 THENDOUT<="10";CT2<=CT2+1;ELSIF CT2=3 THENDOUT<="00";CT1<="0000";CT2<="0000";END IF;ELSEDCP<="0000";CT<="000000";CT1<="0000";CT2<="0000";SG<='1';END IF;WHEN OTHERS=>DOUT<="00";END CASE;END IF;END IF;END PROCESS;LOOK<=SG;END BEHAV;二、仿真波形如下强洗全部过程强洗漂洗、甩干强洗(甩干)标准全部过程标准(漂洗、甩干)标准(甩干)弱洗(漂洗、甩干)九、弱洗(甩干)一、强洗强开盖一、标准强开盖二、弱洗强开盖暂停和启动一、强洗暂停二、强洗重新启动三、标准暂停四、标准重新启动五、弱洗暂停六、弱洗重新启动两次洗衣: 两次强洗两次标准(漂洗、甩干)一、两次弱甩三、设计思想讨论设计时参考了已有程序,此芯片有五个输入和三个输出,输入COUNT_M和输入COUNT_N是状态控制键,输入START是输入启动和暂停键,以及一个时钟CLK。

eda洗衣机控制器课程设计课程设计报告

eda洗衣机控制器课程设计课程设计报告

燕山大学课程设计说明书题目:洗衣机控制器学院(系):电气工程学院年级专业:08应用电子技术4班学号: 0204学生姓名:贾灵宇指导教师:吕宏诗张强教师职称:实验师燕山大学课程设计(论文)任务书院(系):电气工程学院基层教学单位:电子实验中心说明:此表一式四份,学生、指导教师、基层教学单位、系部各一份。

2011年 1 月 14 日目录第一章设计说明 (3)设计思路 (3)模块介绍 (3)真值表 (5)第二章Verilog HDL设计源程序 (6)第四章管脚锁定及硬件连线 (10)管脚锁定 (10)硬件连线 (11)第五章总结 (12)参考文献 (13)第一章设计说明设计思路本课程设计共应用:三个计数器,分别为五进制计数器、十进制计数器、十五进制计数器;三个拨码开关;两个时钟信号,分别为和1Hz;和三个动态数码显示管。

“洗衣机控制器”课程设计要求,洗衣机工作在两种工作方式:洗衣、甩干。

这两种工作方式分别由拨码开关SW1和拨码开关SW2控制,开关拨起为高电平工作状态即启动。

洗衣机工作在洗衣状态时,工作时间为5分钟,用数码管显示倒计时时间并最终停止在“0”,可以利用五进制加法计数器来计数控制,采用的时钟信号和十五进制计数器共同实现计时1分钟的功能。

洗衣机工作在甩干状态时,工作时间为15秒钟,采用1Hz 的时钟信号,用数码管显示倒计时时间并最终停止在“0”,利用初值为五的十进制减法计数器来控制个位的数码管显示,利用十进制计数器的进位来控制十位的数码管的显示数字。

另外,设计要求有紧急情况手动停止功能,由拨码开关3控制,当拨码开关3为高电平时洗衣机为可启动状态由拨码开关2和3控制在不同工作状态正常工作,当拨码开关3为低电平时,计数器全部清零数码管显示为零,洗衣机紧急急停。

并在完成了任务书的要求功能的基础上,增加了完成洗衣或甩干的工作时蜂鸣的效果。

模块介绍本课程设计程序上运用了一个模块,综合了任务的所有要求。

利用十五进制计数器和的时钟信号组合获得了以分钟为变化周期的控制信号,来驱动五进制加法计数器的工作,是数码管显示5分钟倒计时时间。

基于EDA的全自动洗衣机控制器设计

基于EDA的全自动洗衣机控制器设计

※※※※※※※※※※※※※※※※※※※※※※※※EDA课程设计报告书课题名称基于EDA的全自动洗衣机控制器设计姓名学号院系专业指导教师一、设计任务及要求:1.强洗:洗涤18分钟,漂洗14分钟,甩干4分钟。

2.标准:洗涤14分钟,漂洗8 分钟,甩干4分钟。

3.弱洗: 洗涤10分钟,漂洗6 分钟,甩干4分钟。

4.有强制开洗衣机盖的能力。

5.可实行多次洗衣的功能。

6.有启动和暂停和再重起的功能。

指导教师签名:年月日二、指导教师评语:指导教师签名:年月日三、成绩验收盖章年月日基于EDA的全自动洗衣机控制器设计1设计目的《EDA技术与应用》课程是电子信息工程、自动控制、计算机科学与工程等专业的技术课之一,具有很强的工程实践性。

通过本次课程设计来掌握现代硬件数字电路的软件化设计的基本方法、掌握应用VHDL及EDA工具开发设计各种电路的基本方法,以及对现代电子设计自动化技术有一定的了解,会把所学的专业知识更好的用到实践中去。

2设计的主要内容和要求(1)设计一简易全自动洗衣机控制器。

该控制器由两大状态A和B组成,每个状态分三个子状态,每个状态分别由选择A和选择B控制。

其中A为步进选择按纽,每步跳转一个子状态、B也为步进选择按纽,但每步选择B中的所有组合中的一种。

(2)过程启动由启动/暂停键控制(暂停键在过程启动后任意时间可暂停/恢复过程)。

(3)过程启动后洗衣机盖开启能任意控制。

(4)能设置实现多次洗衣的功能。

3整体设计方案本次设计大致可以分成两个模块来看待:控制端和工作端。

控制部分使用了三个进程来处理,进程一控制状态COUNT_M,进程二控制状态COUNT_N,进程三控制开始和暂停。

其中,COUNT_M:当连顺出现一个,两个,三个高电平时分别表示强洗,标准,弱洗三种状态的洗衣过程。

再者,COUNT_N:当出现一个,两个,三个高电平时分别表示洗涤,漂洗与甩干,甩干。

其次,信号START控制洗衣机的暂停和重新启动。

沈阳理工大学EDA洗衣机时控电路课程设计

沈阳理工大学EDA洗衣机时控电路课程设计

沈阳理工大学课程设计专用纸目录1设计目的 (1)2设计要求和任务 (1)3总体设计思路及原理描述 (1)3.1设计思想 (1)4分层次方案设计及代码描述 (2)4.1各模块代码 (2)4.2功能模块整体结构设计 (7)5逻辑仿真与时序仿真的实现 (8)6设计结论 (12)7参考文献 (12)1设计目的科技的进步多少体现在了日常生活必需品的进步,本次课设目的是设计一个与现实生活中很多家庭使用的洗衣机具有相同功能的时序控制的洗衣机。

熟练掌握 QuartusⅡ软件,编写程序,绘制原理图,可进行编译及功能仿真,实现软件上的洗衣机功能。

2设计要求和任务任务:设计洗衣机时控电路要求:1、洗衣机工作时间可在1~15分钟任意设定(正分钟数);2、规定电动机运行规律为正转20s.停10s.反转20s.停10s.再正转20s,以后反复运行;3、要求能显示洗衣机剩余工作时间,每当电机运行1分钟,显示计数器自动减1,直到显示器为“0”时,电机停止运转;4、电机正转和反转要有指示灯指示。

3总体设计思路及原理描述3.1设计思想基本原理:洗衣机时控电路,主要思想就是时间控制洗衣机的工作状态,设计该电路得有如下功能,时间预置,时间显示,状态控制,减法计数等,所以电路大概分一下5部分:(1)时间设置(2)数码管显示电路(3)时序控制电路(4)预置时间和编码电路(5)译码器电路顶层文件用原理图来实现,通过创建各个子模块的原件,在顶层文件中按照底层文件实现的功能进行连线就可以得到完整的顶层原理图。

层次图如图3.1所示:图3.14分层次方案设计及代码描述4.1各模块代码(1)预设时间和编码电路:本模块将输入的四位时间信号编码成八位二进制数输出到减法计数器电路。

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity settime is ——定义实体名port(load:in std_logic;time_input:in std_logic_vector(3 downto 0); ——输入时间time_set:out std_logic_vector(7 downto 0)); ——设置时间end settime; ——VHDL实体描述部分architecture settime of settime issignal p1:std_logic_vector(7 downto 0); ——结构体描述部分beginprocess(load) beginif(load'event and load='1') then ——load有效case time_input iswhen "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";when others=>p1<="00000000"; ——设置时间end case;end if;time_set<=p1; ——输出设置的时间P1 end settime;(2)减法计数器模块:由于洗衣机有工作时间,必须要一模块来控制它的工作时间范围,当洗衣机开始工作后,减法计数器即会实现减数功能,直到时间减到零,洗衣机便停止工作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

HUNAN UNIVERSITY数字电子技术课程设计报告设计课题:洗衣机控制电路设计学生姓名:王建平学生学号:专业班级:08级自动化1班学院名称:电气与信息工程学院指导教师:叶佳卓第2页一课程设计的目的:1、能够全面巩固和应用“电子技术基础数字部分”课程中所学的基本理论和方法,并初步掌握小型数字系统设计的基本方法。

2、掌握VHDL语言编制小型模块的方法,并采用层次化设计。

3、培养电路设计能力,懂得理论设计与实物实现的有效结合。

4、掌握Altium Designer软件的应用。

二总体方案分析及选择:洗衣机电路包含有总的控制模块,洗涤控制模块,洗涤记时模块,电动机控制模块以及LCD液晶板的动态显示模块.经过分析后,我们把前四个模块进行组合,把他们合成一个模块即:总控制模块.他们之间的逻辑联结关系,是对数电课程的一个很好总结,也是自己对新知识(LCD液晶板的动态显示)学习理解运用能力的一个很好的提升机会。

三基本功能要求:1要求设计制作一个普通功能洗衣机控制电路,使之能控制洗衣机的进水阀,排水阀,洗涤程序电机,甩干驱动装置等按预定程序工作.总体过程包括:进水浸泡洗涤排水甩干五个过程.进水从电路启动开始.其中浸泡可供选择,洗涤时间可以预置,洗涤结束时发出铃声进行提示并自动切断电源.发生故障如:缺水或进水超时排水超时甩干碰桶等时也可自动切断电源!2根据洗衣机工作时不同的洗衣服数量,我们设计了三个档(duoxi zhongxishaoxi)来对洗衣机的进水浸泡洗涤排水甩干的五个过程分别预置时间。

以此来区分洗衣机不同洗衣数量下的工作状态。

3用中小规模集成电路芯片或CPLD/FPGA设计符合上述任务要求的电路,并制作出能实际运行的装置.4安装并调试电路,测试各部分电路功能或模型.5演示并交验硬件装置.下载实现图:第3页第4页四总控制模块的生成程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity washer isport(clk0, clk1, rst, alarm: in std_logic;-----clk0:控制开关脉冲.clk1:记时开关脉冲.Rst:复位端.alarm报警输入端.-------duoxi,zhongxi,shaoxi : in std_Logic;-----qiangxi:强洗输入端。

zhongxi:中洗输入端。

ruoxi:弱洗输入端。

------------- water_in, water_out, immersion, dry, z1, z2, voice, poweroff: out std_logic; -----进水,出水,浸泡,甩干,洗涤,响铃,断电输出端-------display_th, display_tl: out std_logic_vector(3 downto 0)-------------------输出时间显示高位低位输出端-------------);end entity washer;architecture behave of washer issignal js, js_ten : std_logic;signal im, im_ten : std_logic;signal wa, wa_ten : std_logic;signal wa1, wa2, pwf: std_logic;signal cs, cs_ten : std_logic;signal dr, dr_ten : std_logic;signal xl, xl_ten : std_logic;signal js_dh, js_dl: std_logic_vector(3 downto 0);signal im_dh, im_dl: std_logic_vector(3 downto 0);signal wa_dh, wa_dl: std_logic_vector(3 downto 0);signal cs_dh, cs_dl: std_logic_vector(3 downto 0);signal dr_dh, dr_dl: std_logic_vector(3 downto 0);signal xl_dh, xl_dl: std_logic_vector(3 downto 0);signal dis_th,dis_tl: std_logic_vector(3 downto 0);signal water_inh, water_inl, im_th, im_tl, wash_th: std_logic_vector(3 downto 0);signal wash_tl, water_outh, water_outl, dry_th, dry_tl: std_logic_vector(3 downto 0);begin-----------------------控制:控制器件实现洗衣机的功能:进水->浸水->洗涤->出水->甩第5页干control:process(clk0, rst,alarm,duoxi,zhongxi,shaoxi)variable n: integer;beginif duoxi='1' and zhongxi='0' and shaoxi='0' thenwater_inh<="0001";water_inl<="0010";im_th<="1001";im_tl<="0000";wash_th<="1001";wash_tl<="0000";water_outh<="0001";water_outl<="0010";dry_th<="1001";dry_tl<="0000";elsif duoxi='0' and zhongxi='1' and shaoxi='0' thenwater_inh<="0000";water_inl<="0110";im_th<="0110";im_tl<="0000";wash_th<="0110";wash_tl<="0000";water_outh<="0000";water_outl<="0110";dry_th<="0110";dry_tl <="0000";elsif duoxi='0' and zhongxi='0' and shaoxi='1' thenwater_inh<="0000";water_inl<="0110";im_th<="0011";im_tl<="0000";wash_th<="0011";wash_tl<="0000";water_outh<="0000";water_outl<="0110";dry_th<="0011";dry_tl <="0000";elsewater_inh<="0000";water_inl<="0000";im_th<="0000";im_tl<="0000";第6页 wash_th<="0000";wash_tl<="0000";water_outh<="0000";water_outl<="0000";dry_th<="0000";dry_tl <="0000";end if;if alarm = '1' thenpwf <= '1';elseif rst = '1' thenn := 0;im_ten <= '0';js_ten <= '0';wa_ten <= '0';cs_ten <= '0';dr_ten <= '0';xl_ten <= '0';pwf <= '0';elsif clk0 = '1' and clk0 'event thenif n = 0 thenif water_inh = "0000" and water_inl = "0000" thenn := 1;elsejs_ten <= '1';if js = '1' thenn := 1;end if;end if;elsif js = '0' and n = 1 thenif im_th = "0000" and im_tl = "0000" thenn := 2;elseim_ten <= '1';if im = '1' thenn := 2;end if;end if;elsif im = '0' and n = 2 thenif wash_th = "0000" and wash_tl = "0000" thenn := 3;else第7页 wa_ten <= '1';if wa = '1' thenn := 3;end if;end if;elsif wa = '0' and n = 3 thenif water_outh = "0000" and water_outl = "0000" then n := 4;elsecs_ten <= '1';if cs = '1' thenn := 4;end if;end if;elsif cs = '0' and n = 4 thenif dry_th = "0000" and dry_tl = "0000" thenn := 5;elsedr_ten <= '1';if dr = '1' thenn := 5;end if;end if;elsif dr = '0' and n = 5 thenxl_ten <= '1';if xl = '1' thenn := 6;end if;elsif xl = '0' and n = 6 thenpwf <= '1';end if;end if;end if;end process;-----------------------------记时-----------------------------------------------进水记时--------------------------js_jishiqi:process(clk1, js_ten,water_inh,water_inl)beginif js_ten = '0' thenjs_dh <= water_inh;js_dl <= water_inl;js <= '0';第8页elsif clk1 = '1' and clk1 'event thenif js_dh = "0000" and js_dl = "0000" thenjs <= '0';elsejs <= '1';if js_dl = "0000" thenjs_dl <= "1001";js_dh <= js_dh - 1;elsejs_dl <= js_dl - 1;end if;end if;end if;end process;-------------浸泡记时-----------------------im_jishiqi:process(clk1, im_ten,im_th,im_tl)beginif im_ten = '0' thenim_dh <= im_th;im_dl <= im_tl;im <= '0';elsif clk1 = '1' and clk1 'event thenif im_dh = "0000" and im_dl = "0000" thenim <= '0';elseim <= '1';if im_dl = "0000" thenim_dl <= "1001";im_dh <= im_dh - 1;elseim_dl <= im_dl - 1;end if;end if;end if;end process;-----------------洗涤记时----------------------wa_jishiqi:process(clk1, wa_ten,wash_th,wash_tl)variable m: integer;beginif wa_ten = '0' thenwa_dh <= wash_th;wa_dl <= wash_tl;第9页 wa <= '0';wa1 <= '0';wa2 <= '0';m := 0;elsif clk1 = '1' and clk1 'event thenif wa_dh = "0000" and wa_dl = "0000" thenwa <= '0';wa1 <= '0';wa2 <= '0';elsewa <= '1';if m = 0 thenwa1 <= '1';wa2 <= '1';elsif m = 10 thenwa1 <= '0';wa2 <= '1';elsif m = 13 thenwa1 <= '1';wa2 <= '0';elsif m = 23 thenwa1 <= '0';wa2 <= '0';elsif m = 26 thenm := 0;wa1 <= '1';wa2 <= '1';end if;m := m + 1;if wa_dl = "0000" thenwa_dl <= "1001";wa_dh <= wa_dh - 1;elsewa_dl <= wa_dl - 1;end if;end if;end if;end process;--------------出水记时---------------------------cs_jishiqi:process(clk1, cs_ten,water_outh,water_outl)beginif cs_ten = '0' then第10页 cs_dh <= water_outh;cs_dl <= water_outl;cs <= '0';elsif clk1 = '1' and clk1 'event thenif cs_dh = "0000" and cs_dl = "0000" thencs <= '0';elsecs <= '1';if cs_dl = "0000" thencs_dl <= "1001";cs_dh <= cs_dh - 1;elsecs_dl <= cs_dl - 1;end if;end if;end if;end process;--------------甩干记时-----------------------dr_jishiqi:process(clk1, dr_ten,dry_th,dry_tl)beginif dr_ten = '0' thendr_dh <= dry_th;dr_dl <= dry_tl;dr <= '0';elsif clk1 = '1' and clk1 'event thenif dr_dh = "0000" and dr_dl = "0000" thendr <= '0';elsedr <= '1';if dr_dl = "0000" thendr_dl <= "1001";dr_dh <= dr_dh - 1;elsedr_dl <= dr_dl - 1;end if;end if;end if;end process;------------------响铃记时----------------------xl_jishiqi:process(clk1, xl_ten)beginif xl_ten = '0' then第11页xl_dh <= "0010";xl_dl <= "0000";xl <= '0';elsif clk1 = '1' and clk1 'event thenif xl_dh = "0000" and xl_dl = "0000" thenxl <= '0';elsexl <= '1';if xl_dl = "0000" thenxl_dl <= "1001";xl_dh <= xl_dh - 1;elsexl_dl <= xl_dl - 1;end if;end if;end if;end process;----------------------------显示时间--------------------------xianshishijian: process(clk1, js_ten, im_ten, wa_ten,cs_ten,dr_ten,xl_ten) beginif js_ten = '1' and im_ten = '0' and wa_ten = '0' and cs_ten = '0' and dr_ten = '0' and xl_ten = '0' thenif clk1 = '1' and clk1 'event thendis_th <= js_dh;dis_tl <= js_dl;end if;elsif im_ten = '1' and wa_ten = '0' and cs_ten = '0' and dr_ten = '0' and xl_ten = '0' thenif clk1 = '1' and clk1 'event thendis_th <= im_dh;dis_tl <= im_dl;end if;elsif wa_ten = '1' and cs_ten = '0' and dr_ten = '0' and xl_ten = '0' then if clk1 = '1' and clk1 'event thendis_th <= wa_dh;dis_tl <= wa_dl;end if;elsif cs_ten = '1' and dr_ten = '0' and xl_ten = '0' thenif clk1 = '1' and clk1 'event thendis_th <= cs_dh;dis_tl <= cs_dl;end if;第12页 elsif dr_ten = '1' and xl_ten = '0' thenif clk1 = '1' and clk1 'event thendis_th <= dr_dh;dis_tl <= dr_dl;end if;elsif xl_ten = '1' thenif clk1 = '1' and clk1 'event thendis_th <= xl_dh;dis_tl <= xl_dl;end if;end if;end process;----------------------------输出-----------------------------output:process(dis_th, dis_tl, im, js, cs, dr, wa1, wa2, xl, pwf)begindisplay_th <= dis_th;display_tl <= dis_tl;immersion <= im;water_in <= js;water_out <= cs;dry <= dr;z1 <= wa1;z2 <= wa2;voice <= xl;poweroff <= pwf;end process;end behave;测试文件:-------------------------------------------------------------- VHDL Testbench for washer-- 2010 11 26 21 48 4-- Created by "EditVHDL"-- "Copyright (c) 2002 Altium Limited"------------------------------------------------------------Library IEEE;Use IEEE.std_logic_1164.all;Use IEEE.std_logic_textio.all;Use STD.textio.all;------------------------------------------------------------第13页------------------------------------------------------------entity Testwasher isend Testwasher;------------------------------------------------------------------------------------------------------------------------architecture stimulus of Testwasher isfile RESULTS: TEXT open WRITE_MODE is "results.txt";procedure WRITE_RESULTS(alarm: std_logic;clk0: std_logic;clk1: std_logic;display_th: std_logic_vector(3 downto 0);display_tl: std_logic_vector(3 downto 0);dry: std_logic;duoxi: std_logic;immersion: std_logic;poweroff: std_logic;rst: std_logic;shaoxi: std_logic;voice: std_logic;water_in: std_logic;water_out: std_logic;z1: std_logic;z2: std_logic;zhongxi: std_logic) isvariable l_out : line;beginwrite(l_out, now, right, 15);write(l_out, alarm, right, 2);write(l_out, clk0, right, 2);write(l_out, clk1, right, 2);write(l_out, display_th, right, 5);write(l_out, display_tl, right, 5);write(l_out, dry, right, 2);write(l_out, duoxi, right, 2);write(l_out, immersion, right, 2);write(l_out, poweroff, right, 2);write(l_out, rst, right, 2);write(l_out, shaoxi, right, 2);write(l_out, voice, right, 2);第14页 write(l_out, water_in, right, 2);write(l_out, water_out, right, 2);write(l_out, z1, right, 2);write(l_out, z2, right, 2);write(l_out, zhongxi, right, 2);writeline(RESULTS, l_out);end procedure;component washerport (alarm: in std_logic;clk0: in std_logic;clk1: in std_logic;display_th: out std_logic_vector(3 downto 0);display_tl: out std_logic_vector(3 downto 0);dry: out std_logic;duoxi: in std_logic;immersion: out std_logic;poweroff: out std_logic;rst: in std_logic;shaoxi: in std_logic;voice: out std_logic;water_in: out std_logic;water_out: out std_logic;z1: out std_logic;z2: out std_logic;zhongxi: in std_logic);end component;signal alarm: std_logic;signal clk0: std_logic;signal clk1: std_logic;signal display_th: std_logic_vector(3 downto 0);signal display_tl: std_logic_vector(3 downto 0);signal dry: std_logic;signal duoxi: std_logic;signal immersion: std_logic;signal poweroff: std_logic;signal rst: std_logic;signal shaoxi: std_logic;signal voice: std_logic;第15页 signal water_in: std_logic;signal water_out: std_logic;signal z1: std_logic;signal z2: std_logic;signal zhongxi: std_logic;beginDUT:washer port map (alarm => alarm,clk0 => clk0,clk1 => clk1,display_th => display_th,display_tl => display_tl,dry => dry,duoxi => duoxi,immersion => immersion,poweroff => poweroff,rst => rst,shaoxi => shaoxi,voice => voice,water_in => water_in,water_out => water_out,z1 => z1,z2 => z2,zhongxi => zhongxi);STIMULUS0:processbegin-- insert stimulus herealarm <= '0';duoxi<='0';zhongxi<='1';shaoxi<='0' ;rst <= '1';wait for 10ns;rst <= '0';wait for 1000ns;alarm <= '1';wait;end process;第16页 processbeginclk0 <= '1';clk1 <= '1';wait for 1ns;clk0 <= '0';clk1 <= '0';wait for 1ns;end process;WRITE_RESULTS(alarm,clk0,clk1,display_th,display_tl,dry,duoxi,immersion,poweroff,rst,shaoxi,voice,water_in,water_out,z1,z2,zhongxi);end architecture;------------------------------------------------------------生成的器件和仿真波形:第17页第18页显示模块生成程序:LIBRARY IEEE;USE IEEE.std_Logic_1164.ALL;ENTITY OUTPUT ISPORT(R, CP, BUSY :IN Std_Logic;-----使能输入端,脉冲输入端,输入信号忙输入端-------- LINE_OUT,STROBE,RST:OUT STD_LOGIC;------行选择输出端,输入数据使能输出端,复位输出端---TIME_IN :IN STD_LOGIC_VECTOR(7 DOWNTO 0);--------输入时间-----------ADDR_OUT :OUT Std_Logic_Vector( 3DOWNTO 0);--------地址输出端----------DATA_OUT : OUT Std_Logic_Vector(7 DOWNTO 0));-----数据输出端---------END OUTPUT;ARCHITECTURE XS OF OUTPUT ISTYPE State_type IS(S0,S1,S2,S3,S4);SIGNAL S :State_Type;SIGNAL LCDPT:INTEGER RANGE 0 TO 14;BEGINPROCESS(CP,R)BEGINIF R='1' THENS<=S0;LCDPT<=0;RST<='1';ELSIF CP='1' AND CP 'EVENT THENCASE S ISWHEN S0=> S<=S1;LCDPT<=0;RST<='1';WHEN S1=> RST<='0';STROBE<='0';IF BUSY='0' THENLCDPT<=LCDPT+1;IF LCDPT=15 THENS<=S3;ELSES<=S2;END IF;END IF;WHEN S2=> S<=S1;STROBE<='1';WHEN S3=> STROBE<='0';IF BUSY='0' THENIF LCDPT=16 THENLCDPT<=15;第19页ELSELCDPT<=LCDPT+1;END IF;S<=S4;END IF;WHEN S4=> STROBE<='1';S<=S3;WHEN OTHERS=> NULL;END CASE;END IF;END PROCESS;PROCESS (LCDPT,TIME_IN)BEGINCASE LCDPT ISWHEN 0 => NULL;WHEN 1 => DATA_OUT<="01010111" ; ADDR_OUT<="0000"; LINE_OUT<='0';WHEN 2 => DATA_OUT<="01000001" ; ADDR_OUT<="0001"; LINE_OUT<='0';WHEN 3 => DATA_OUT<="01010011" ; ADDR_OUT<="0010"; LINE_OUT<='0';WHEN 4 => DATA_OUT<="01001000" ; ADDR_OUT<="0011"; LINE_OUT<='0';WHEN 5 => DATA_OUT<="01000101" ; ADDR_OUT<="0100"; LINE_OUT<='0';WHEN 6 => DATA_OUT<="01010010" ; ADDR_OUT<="0101"; LINE_OUT<='0';WHEN 7 => DATA_OUT<="01001111" ; ADDR_OUT<="0111"; LINE_OUT<='0';WHEN 8 => DATA_OUT<="01000110" ; ADDR_OUT<="1000"; LINE_OUT<='0';WHEN 9 => DATA_OUT<="01010000" ; ADDR_OUT<="1010"; LINE_OUT<='0';WHEN 10 => DATA_OUT<="01001001" ; ADDR_OUT<="1011"; LINE_OUT<='0';WHEN 11=> DATA_OUT<="01001110" ; ADDR_OUT<="1100"; LINE_OUT<='0';WHEN 12 => DATA_OUT<="01000111" ; ADDR_OUT<="1101"; LINE_OUT<='0';WHEN 13 => DATA_OUT<="0011"&TIME_IN(7 DOWNTO 4);ADDR_OUT<="0111";LINE_OUT<='1';WHEN 14=> DATA_OUT<="0011"&TIME_IN(3 DOWNTO 0);ADDR_OUT<="1001";LINE_OUT<='1';END CASE;END PROCESS;END ARCHITECTURE;--1,2,3,4,6,7,8,9,10,11,12,13,14输入字母WASHER OF LTTWWQ,15,16输入时间变化------测试文件:-------------------------------------------------------------- VHDL Testbench for output-- 2010 11 16 14 31 28第20页-- Created by "EditVHDL"-- "Copyright (c) 2002 Altium Limited"------------------------------------------------------------Library IEEE;Use IEEE.std_logic_1164.all;Use IEEE.std_logic_textio.all;Use STD.textio.all;------------------------------------------------------------------------------------------------------------------------entity Testoutput isend Testoutput;------------------------------------------------------------------------------------------------------------------------architecture stimulus of Testoutput isfile RESULTS: TEXT open WRITE_MODE is "results.txt";procedure WRITE_RESULTS(ADDR_OUT: std_logic_vector(3 downto 0);BUSY: std_logic;CP: std_logic;DATA_OUT: std_logic_vector(7 downto 0);LINE_OUT: std_logic;R: std_logic;RST: std_logic;STROBE: std_logic;TIME_IN: std_logic_vector(7 downto 0)) isvariable l_out : line;beginwrite(l_out, now, right, 15);write(l_out, ADDR_OUT, right, 5);write(l_out, BUSY, right, 2);write(l_out, CP, right, 2);write(l_out, DATA_OUT, right, 9);write(l_out, LINE_OUT, right, 2);write(l_out, R, right, 2);write(l_out, RST, right, 2);write(l_out, STROBE, right, 2);write(l_out, TIME_IN, right, 9);writeline(RESULTS, l_out);第21页 end procedure;component outputport (ADDR_OUT: out std_logic_vector(3 downto 0);BUSY: in std_logic;CP: in std_logic;DATA_OUT: out std_logic_vector(7 downto 0);LINE_OUT: out std_logic;R: in std_logic;RST: out std_logic;STROBE: out std_logic;TIME_IN: in std_logic_vector(7 downto 0));end component;signal ADDR_OUT: std_logic_vector(3 downto 0);signal BUSY: std_logic;signal CP: std_logic;signal DATA_OUT: std_logic_vector(7 downto 0);signal LINE_OUT: std_logic;signal R: std_logic;signal RST: std_logic;signal STROBE: std_logic;signal TIME_IN: std_logic_vector(7 downto 0);beginDUT:output port map (ADDR_OUT => ADDR_OUT,BUSY => BUSY,CP => CP,DATA_OUT => DATA_OUT,LINE_OUT => LINE_OUT,R => R,RST => RST,STROBE => STROBE,TIME_IN => TIME_IN);STIMULUS0:PROCESSBEGIN第22页 WAIT FOR 25NS;TIME_IN<="10000000";WAIT FOR 20NS;TIME_IN<="01000000";WAIT FOR 20NS;TIME_IN<="00110000";WAIT;END PROCESS;processbegin-- insert stimulus hereR<='1';BUSY<='0';WAIT FOR 2NS;R<='0';WAIT FOR 100NS;R<='1';WAIT FOR 100NS;wait;end process;PROCESSBEGINCP<='0';WAIT FOR 1NS;CP<='1';WAIT FOR 1NS;end process;WRITE_RESULTS(ADDR_OUT,BUSY,CP,DATA_OUT,LINE_OUT,R,RST,STROBE,TIME_IN第23页 );end architecture;------------------------------------------------------------------------------------------------------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CT60 isport (CP ,DIR ,R: IN STD_LOGIC;Z: OUT STD_LOGIC;QH,QL: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));end CT60;architecture JGT of CT60 ISSIGNAL YH,YL: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CP,R)BEGINIF R='1' THENYH<="0000";YL<="0000";ELSIF CP='1' AND CP 'EVENT THENIF DIR='1' THENIF YL="1001" AND YH="0101" THENYH<="0000";YL<="0000";Z<='1';ELSE Z<='0';IF YL="1001" THENYL<="0000";YH<=YH+1;ELSE第24页 YL<=YL+1;END IF;END IF;ELSEIF YL="0000" AND YH="0000"THENYL<="1001";YH<="0101" ;Z<='1';ELSE Z<='0';IF YL="0000" THENYL<="1001";YH<=YH-1;ELSEYL<=YL-1;END IF;END IF;END IF;END IF;END PROCESS;PROCESS(YH,YL)BEGINQH<=YH;QL<=YL;END PROCESS;END JGT;生成的器件::第25页模拟波形:五总结:1.通过这次课程设计,使我们又学会了一种编程语言——HDLE语言。

相关文档
最新文档