※※
※ ※
※※※※※※※※※
EDA课程设计报告书
课题名称 基于EDA的全自动洗衣机控制器设计 姓 名
学 号 院 系 专 业 指导教师
一、 设计任务及要求: 1.强洗:洗涤18分钟,漂洗14分钟,甩干4分钟。 2.标准:洗涤14分钟,漂洗8 分钟,甩干4分钟。 3.弱洗: 洗涤10分钟,漂洗6 分钟,甩干4分钟。 4.有强制开洗衣机盖的能力。 5.可实行多次洗衣的功能。 6.有启动和暂停和再重起的功能。 指导教师签名: 年 月 日 二、指导教师评语: 指导教师签名: 年 月 日 三、成绩 验收盖章 年 月 日
1
基于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控制洗衣机的暂停和重新启动。
工作部分使用了一个进程来处理,在该进程中主要处理强制开盖,洗衣的各
2
个状态。控制端中,中间变量SG是工作结束标志信号, DT是状态的中间变量。COOK为强开洗衣机盖子信号端,DCP输入状态中间信号。LOOK为时间到输出停机,当其输出为高电平时所有数据为0。然后等待下次洗涤始工作,直至再次按下
START
键,又从新开洗衣机正常工作过程。与暂停后的再次启动不同。ST
为时间计数的中间变量。 整体设计方案如下:
开始暂停——START 时钟秒冲——clk 进程一COUNT-N 进程二COUNT-M 强开盖按钮——COOK 图3-1 整体设计方框图 控 制 部 分 输 出 部 分 洗 衣 机 不 同 工 作 状 态 4 软件设计
EDA工具在EDA技术应用中占据极其重要的位置,EDA的核心是利用计算机完成电子设计全程自动化,因此基于计算机环境的EDA软件的支持是必不可少的。此次设计所用EDA工具是由著名的Alter公司生产的MAX+plusⅡ工具软件,它是一种集成的开发环境,支持原理图、VHDL和Verilog语言文本文件,以及波形文件作为设计输入,并支持这些文件的人文混合设计。本实验主要采用单纯的软件仿真来做,不涉及硬件电路的设计。故主要是先编写程序,然后编译,再时序仿真。最后观查仿真结果是否符合当初的设计要求。
4.1库和实体及信号声明部分
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; --库使用说明 ENTITY xiyiji IS
PORT(COUNT_N,COUNT_M,START,COOK,CLK:IN STD_LOGIC;--端口说明
3
LOOK:OUT STD_LOGIC;
DOUT :OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END xiyiji;
ARCHITECTURE BEHAV OF xiyiji IS --内部信号声明
SIGNAL 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; BEGIN
4.2进程一(控制状态COUNT_N)
每次按下COUNT_N依次代表00-01-10-11状态。当COUNT_N为11时
又跳到01状态,如此循环。其中01状态代表强洗状态,10代表标准状态,11代表弱洗状态。由于是单纯的软件仿真,故用COUNT_N的上升沿代表按下COUNT_N键。
PROCESS(COUNT_N,SG) --进程一控制状态COUNT_N
BEGIN
4
IF SG='1' THEN
DT1<=\"00\";
ELSIF COUNT_N'EVENT AND COUNT_N='1' THEN
IF DT1=3 THEN
DT1<=\"01\";
ELSE
DT1<=DT1+1;
END IF;
END IF;
END PROCESS;
4.3进程二(控制状态COUNT_M)
每次按下COUNT_M依次代表00-01-10-11状态。当COUNT_M为11时又跳到01状态,如此循环。其中01状态代表洗涤状态,10代表漂洗甩干状态,11代表甩干状态。由于是单纯的软件仿真,故用COUNT_M的上升沿代表按下COUNT_M键。
PROCESS(COUNT_M,SG) --进程二控制状态COUNT_M
BEGIN
IF SG='1' THEN
DT2<=\"00\";
ELSIF COUNT_M'EVENT AND COUNT_M='1' THEN
IF DT2=3 THEN
DT2<=\"01\";
ELSE
DT2<=DT2+1;
END IF;
END IF;
END PROCESS;
4.4进程三(控制开始和暂停)
按下START代表开始洗衣状态,再次按下代表暂停状态,再次按下代表停止状态如此循序进行。由于是单纯的软件仿真。故用START的上升沿代表按下START键。
PROCESS(START) --进程三控制开始和暂停
BEGIN IF SG='1' THEN
CMKS<='0';
ELSIF START'EVENT AND START='1' THEN DICSOUNT<=DT1&DT2;CMKS<=CMKS XOR '1'; END IF;
END PROCESS;
5
4.5进程四(工作部分)
强开盖:当时钟信号为上升沿的时候,按下强开盖按钮,无论洗衣机是何种洗
衣状态都要开启洗衣机盖。用COOK的上升沿代表按下COOK按钮。 强洗(36分钟),洗涤时电机分别正、反转4分钟,正反转间停30秒;漂洗时电机分别正、反转3分钟,间停30秒;甩干时电机分别正转1.5分钟,间停30秒。 标准(28分钟),洗涤时电机分别正、反转3分钟,正反转间停30秒;漂洗时电机分别正反转1.5分钟,间停30秒;甩干时电机分别正转1.5分钟,间停30秒。 弱洗(20分钟),洗涤时电机分别正、反转2分钟,正反转间停30秒;漂洗时电机分别正、反转1分钟,间停30秒;甩干时电机分别正转1.5分钟,间停30秒。 PROCESS(CLK,START,COOK) --进程四工作部分
BEGIN
IF START='1' AND DCP=\"0000\" THEN --启动
DCP<=DICSOUNT; 分
ELSIF CLK'EVENT AND CLK='1' THEN
IF COOK='1' THEN --强开盖 DOUT<=\"00\";
ELSIF START='1' AND DCP>\"0000\" THEN DOUT<=\"00\"; ELSIF SG='1' THEN
IF CT1<\"0001\" THEN
CT1<=\"0000\";SG<='0';
END IF;
ELSIF CMKS='1' THEN CASE DCP IS
WHEN \"0101\"=> --强洗部
IF CT<35 THEN
CT<=CT+1;
IF CT1<8 THEN
6
DOUT<=\"01\";CT1<=CT1+1; ELSIF CT1=8 THEN DOUT<=\"00\";CT1<=CT1+1; ELSIF CT2<8 THEN DOUT<=\"10\";CT2<=CT2+1; ELSIF CT2=8 THEN
DOUT<=\"00\";CT1<=\"0000\";CT2<=\"0000\"; END IF;
ELSE
DCP<=\"0110\";CT<=\"000000\";CT1<=\"0000\";CT2<=\"0000\";DOUT<=\"00\";
END IF;
WHEN \"0110\"=> --强洗-漂洗-甩干
IF CT<27 THEN
CT<=CT+1; IF CT1<6 THEN
DOUT<=\"01\";CT1<=CT1+1; ELSIF CT1=6 THEN DOUT<=\"00\";CT1<=CT1+1; ELSIF CT2<6 THEN DOUT<=\"10\";CT2<=CT2+1; ELSIF CT2=6 THEN
DOUT<=\"00\";CT1<=\"0000\";CT2<=\"0000\";
END IF;
ELSE
DCP<=\"0111\";CT<=\"000000\";CT1<=\"0000\";CT2<=\"0000\";DOUT<=\"00\";
END IF;
WHEN \"0111\"=>
IF CT<8 THEN --强洗-甩干
CT<=CT+1;
7
IF CT1<3 THEN --甩干 DOUT<=\"01\";CT1<=CT1+1; ELSIF CT1=3 THEN DOUT<=\"00\";CT1<=CT1+1; ELSIF CT2<3 THEN DOUT<=\"10\";CT2<=CT2+1; ELSIF CT2=3 THEN
DOUT<=\"00\";CT1<=\"0000\";CT2<=\"0000\"; END IF;
ELSE
DCP<=\"0000\";CT<=\"000000\";CT1<=\"0000\";CT2<=\"0000\";SG<='1';
END IF;
WHEN \"1001\"=> -- 标准部分
IF CT<27 THEN
CT<=CT+1;
IF CT1<6 THEN DOUT<=\"01\";CT1<=CT1+1; ELSIF CT1=6 THEN DOUT<=\"00\";CT1<=CT1+1; ELSIF CT2<6 THEN DOUT<=\"10\";CT2<=CT2+1; ELSIF CT2=6 THEN
DOUT<=\"00\";CT1<=\"0000\";CT2<=\"0000\"; END IF;
ELSE
DCP<=\"1010\";CT<=\"000000\";CT1<=\"0000\";CT2<=\"0000\";DOUT<=\"00\";
END IF;
WHEN \"1010\"=> -- 标准-漂洗甩干
IF CT<15 THEN
CT<=CT+1;
8
IF CT1<3 THEN --甩干 DOUT<=\"01\";CT1<=CT1+1; ELSIF CT1=3 THEN DOUT<=\"00\";CT1<=CT1+1; ELSIF CT2<3 THEN DOUT<=\"10\";CT2<=CT2+1; ELSIF CT2=3 THEN
DOUT<=\"00\";CT1<=\"0000\";CT2<=\"0000\"; END IF;
ELSE
DCP<=\"1011\";CT<=\"000000\";CT1<=\"0000\";CT2<=\"0000\";DOUT<=\"00\";
END IF;
WHEN \"1011\"=>
IF CT<8 THEN --标准-甩干
CT<=CT+1;
IF CT1<3 THEN --甩干 DOUT<=\"01\";CT1<=CT1+1; ELSIF CT1=3 THEN DOUT<=\"00\";CT1<=CT1+1; ELSIF CT2<3 THEN DOUT<=\"10\";CT2<=CT2+1; ELSIF CT2=3 THEN
DOUT<=\"00\";CT1<=\"0000\";CT2<=\"0000\"; END IF;
ELSE
DCP<=\"0000\";CT<=\"000000\";CT1<=\"0000\";CT2<=\"0000\";SG<='1';
END IF;
WHEN \"1101\"=> -- 弱洗部分
IF CT<19 THEN
CT<=CT+1;
9
IF CT1<4 THEN DOUT<=\"01\";CT1<=CT1+1; ELSIF CT1=4 THEN DOUT<=\"00\";CT1<=CT1+1; ELSIF CT2<4 THEN DOUT<=\"10\";CT2<=CT2+1; ELSIF CT2=4 THEN
DOUT<=\"00\";CT1<=\"0000\";CT2<=\"0000\"; END IF;
ELSE
DCP<=\"1110\";CT<=\"000000\";CT1<=\"0000\";CT2<=\"0000\";DOUT<=\"00\";
END IF;
WHEN \"1110\"=> --弱洗-漂洗-甩干
IF CT<11 THEN
CT<=CT+1;
IF CT1<2 THEN DOUT<=\"01\";CT1<=CT1+1; ELSIF CT1=2 THEN DOUT<=\"00\";CT1<=CT1+1; ELSIF CT2<2 THEN DOUT<=\"10\";CT2<=CT2+1; ELSIF CT2=2 THEN
DOUT<=\"00\";CT1<=\"0000\";CT2<=\"0000\"; END IF;
ELSE
DCP<=\"1111\";CT<=\"000000\";CT1<=\"0000\";CT2<=\"0000\";DOUT<=\"00\";
END IF;
WHEN \"1111\"=> --弱洗-甩干 IF CT<8 THEN CT<=CT+1;
10
IF CT1<3 THEN --甩干 DOUT<=\"01\";CT1<=CT1+1; ELSIF CT1=3 THEN DOUT<=\"00\";CT1<=CT1+1; ELSIF CT2<3 THEN DOUT<=\"10\";CT2<=CT2+1;
ELSIF CT2=3 THEN DOUT<=\"00\";CT1<=\"0000\";CT2<=\"0000\"; END IF; ELSE
DCP<=\"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;
5 时序仿真
5.1洗涤
共有9种功能:强洗全过程,强洗漂洗和甩干,强洗甩干;标准全过程,标准漂洗和甩干,标准甩干;弱洗全过程,弱洗漂洗和甩干弱洗甩干。现就其中几种做仿真如下:
(1)强洗-漂洗和甩干
强洗状态时,COUNT_N按一下按键,仿真中用01表示。漂洗和甩干状态时COUNT_N按两下按键,仿真中用10表示。如图则COUNT_N出现一个高电平,COUNT_M 出现两个高电平。仿真时序图如下:
11
图5-1强洗-漂洗和甩干
(2)弱洗-漂洗和甩干
弱洗状态时,COUNT_N按三下按键,仿真中用11表示。漂洗和甩干状态时COUNT_N按三下按键,仿真中用11表示。如图则COUNT_N出现三个高平,COUNT_M 出现三个高电平。仿真时序图如下
图5-2弱洗-漂洗和甩干
(3)标准-甩干
标准状态时,COUNT_N按两下按键,甩干状态COUNT_N按三下按键,则COUNT_N出现两个高平,COUNT_M 出现三个高电平。仿真时序图如下
12
图5-3标准-甩干
5.2强开盖
强开盖也有9种情况,既在上述9种洗涤状态下实现强开盖的功能。现已强洗强开盖为例做仿真如下:
图5-4强洗强开盖
5.3暂停重启
(1)暂停功能仿真
第一次按下START键,洗衣机工作。再次按下START键,洗衣机暂停。若再一次又按下START键,洗衣机又从新洗衣。做仿真时。在时钟秒冲上升沿下,START为高电平则相当于按下START键。则两次在时钟秒冲上升沿下,START为高电平则相当于两次按下代表暂停。时序仿真如下:
图5-5强洗暂停
(2)重启功能仿真
第一次按下START键,洗衣机工作。再次按下START键,洗衣机暂停。若再一次又按下START键,洗衣机又从新洗衣。做仿真时。在时钟秒冲上升沿下,
13
START为高电平则相当于按下START键。则三次在时钟秒冲上升沿下,START为高电平则相当于三次按下代表重启。时序仿真如下:
图5-6强洗重启动
5.4两次洗衣
在第一次设置好COUNT_N和COUNT_M所决定的洗衣状态后。如到某一时
刻又再次设置COUNT_N和COUNT_M。则实现两次洗衣的功能。现以两次强洗衣为例做时序仿真如下;
图5-7两次强洗
6设计总结
这次EDA课程设计对我来说是一项很大的挑战,看到题目后几乎没有思路,去图书馆借阅教材,看了下自动洗衣机讲解,有了眉目,但是设计的内容过于庞杂,很难下手。这时候,我选择从已有的程序着手,先看懂,然后和同学讨论思路,最后形成了这个结果。其次在电路仿真的过程中也会出现一些这样那样的问
14
题,通过这次课程设计,我觉得许多困难的事都需要自己耐心去思考,或者通过问同学和请教老师使问题得以解决。这次EDA课程设计中,我又学到了许多知识,包括书本上的和实际动手中的。更加巩固了EDA和数电等相关的一些知识,尤其是VHDL语言的使用。感谢学校给我们这次实际动脑动手的机会,使我们熟悉EDA的一些基础知识、理念,培养了我们的独立思考、动手能力和创新意识。同时为以后的学习和实践都会起到很大的帮助。 7参考文献
[1] 潘松著.EDA技术实用教程(第二版)[M]. 北京:科学出版社,2005:88-123. [2] 康华光主编.电子技术基础—数字部分[M]. 北京:高教出版社,2006:256-323. [3] 阎石主编.数字电子技术基础[M].北京:高教出版社,2003:213-289.
[4] 赵岩岭.在Quartus II平台下用VHDL进行数字电路设计[M].西安:西电出版社,2005:45-65.
[5] 江国强.EDA技术与应用(第3版)[M].北京:电子工业出版社,2010:100-134.
15
因篇幅问题不能全部显示,请点此查看更多更全内容