EDA技术大作业全自动洗衣机控制器要点.docx
《EDA技术大作业全自动洗衣机控制器要点.docx》由会员分享,可在线阅读,更多相关《EDA技术大作业全自动洗衣机控制器要点.docx(16页珍藏版)》请在冰点文库上搜索。
EDA技术大作业全自动洗衣机控制器要点
《EDA技术》大作业
电子钟电路设计
要求:
1、准确计时,以数字形式显示时、分、秒的时间;
2、小时为24进制,分与秒的计时要求为60进制;
3、具有校时功能;
4、整点报时。
姓名:
武启明
学号:
1893130125
专业:
光电信息科学与工程
班级:
131
教
师
评
价
成绩:
评阅人:
安徽科技学院数理与信息工程学院物电系
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控制洗衣机的暂停和重新启动。
工作部分使用了一个进程来处理,在该进程中主要处理强制开盖,洗衣的各
个状态。
控制端中,中间变量SG是工作结束标志信号, DT是状态的中间变量。
COOK为强开洗衣机盖子信号端,DCP输入状态中间信号。
LOOK为时间到输出停机,当其输出为高电平时所有数据为0。
然后等待下次洗涤始工作,直至再次按下
START
键,又从新开洗衣机正常工作过程。
与暂停后的再次启动不同。
ST
为时间计数的中间变量。
整体设计方案如下:
图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;--端口说明
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
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;
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 --启动
CP<=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
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;
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;
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;
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;
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 出现两个高电平。
仿真时序图如下:
图5-1强洗-漂洗和甩干
(2)弱洗-漂洗和甩干
弱洗状态时,COUNT_N按三下按键,仿真中用11表示。
漂洗和甩干状态时COUNT_N按三下按键,仿真中用11表示。
如图则COUNT_N出现三个高平,COUNT_M 出现三个高电平。
仿真时序图如下
图5-2弱洗-漂洗和甩干
3)标准-甩干
标准状态时,COUNT_N按两下按键,甩干状态COUNT_N按三下按键,则COUNT_N出现两个高平,COUNT_M 出现三个高电平。
仿真时序图如下
图5-3标准-甩干
5.2强开盖
强开盖也有9种情况,既在上述9种洗涤状态下实现强开盖的功能。
现已强洗强开盖为例做仿真如下:
图5-4强洗强开盖
5.3暂停重启
(1)暂停功能仿真
第一次按下START键,洗衣机工作。
再次按下START键,洗衣机暂停。
若再一次又按下START键,洗衣机又从新洗衣。
做仿真时。
在时钟秒冲上升沿下,START为高电平则相当于按下START键。
则两次在时钟秒冲上升沿下,START为高电平则相当于两次按下代表暂停。
时序仿真如下:
图5-5强洗暂停
(2)重启功能仿真
第一次按下START键,洗衣机工作。
再次按下START键,洗衣机暂停。
若再一次又按下START键,洗衣机又从新洗衣。
做仿真时。
在时钟秒冲上升沿下,START为高电平则相当于按下START键。
则三次在时钟秒冲上升沿下,START为高电平则相当于三次按下代表重启。
时序仿真如下:
图5-6强洗重启动
5.4两次洗衣
在第一次设置好COUNT_N和COUNT_M所决定的洗衣状态后。
如到某一时
刻又再次设置COUNT_N和COUNT_M。
则实现两次洗衣的功能。
现以两次强洗衣为例做时序仿真如下;
图5-7两次强洗
6设计总结
这次EDA课程设计对我来说是一项很大的挑战,看到题目后几乎没有思路,去图书馆借阅教材,看了下自动洗衣机讲解,有了眉目,但是设计的内容过于庞杂,很难下手。
这时候,我选择从已有的程序着手,先看懂,然后和同学讨论思路,最后形成了这个结果。
其次在电路仿真的过程中也会出现一些这样那样的问
题,通过这次课程设计,我觉得许多困难的事都需要自己耐心去思考,或者通过问同学和请教老师使问题得以解决。
这次EDA课程设计中,我又学到了许多知识,包括书本上的和实际动手中的。
更加巩固了EDA和数电等相关的一些知识,尤其是VHDL语言的使用。
感谢学校给我们这次实际动脑动手的机会,使我们熟悉EDA的一些基础知识、理念,培养了我们的独立思考、动手能力和创新意识。
同时为以后的学习和实践都会起到很大的帮助。