EDA 设计基于VHDL的简易全自动控制洗衣机.docx
- 文档编号:28172722
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:18
- 大小:690.75KB
EDA 设计基于VHDL的简易全自动控制洗衣机.docx
《EDA 设计基于VHDL的简易全自动控制洗衣机.docx》由会员分享,可在线阅读,更多相关《EDA 设计基于VHDL的简易全自动控制洗衣机.docx(18页珍藏版)》请在冰豆网上搜索。
EDA设计基于VHDL的简易全自动控制洗衣机
华东理工大学2009-2010学年第2学期
《电子综合设计DEA》课程设计作业2010.6班级:
XXXX学号:
XXX姓名:
XXXX开课学院:
信息学院任课老师:
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秒。
整个设计为正逻辑。
一、程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYstudentIS
PORT(COUNT_N,COUNT_M,START,COOK,CLK:
INSTD_LOGIC;
LOOK:
OUTSTD_LOGIC;
DOUT:
OUTSTD_LOGIC_VECTOR(1DOWNTO0;
ENDSTUDENT;
ARCHITECTUREBEHAVOFstudentIS
SIGNALDT1,DT2:
STD_LOGIC_VECTOR(1DOWNTO0;
SIGNALDICSOUNT,TEM:
STD_LOGIC_VECTOR(3DOWNTO0;
SIGNALDCP:
STD_LOGIC_VECTOR(3DOWNTO0;
SIGNALCT:
STD_LOGIC_VECTOR(5DOWNTO0;
SIGNALCT1,CT2:
STD_LOGIC_VECTOR(3DOWNTO0;
SIGNALSG,CMKS:
STD_LOGIC;
BEGIN
PROCESS(COUNT_N,SG
BEGIN
IFSG='1'THEN
DT1<="00";
ELSIFCOUNT_N'EVENTANDCOUNT_N='1'THENIFDT1=3THEN
DT1<="01";
ELSE
DT1<=DT1+1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(COUNT_M,SG
BEGIN
IFSG='1'THEN
DT2<="00";
ELSIFCOUNT_M'EVENTANDCOUNT_M='1'THENIFDT2=3THEN
DT2<="01";
ELSE
DT2<=DT2+1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(START
BEGIN
IFSG='1'THEN
CMKS<='0';
ELSIFSTART'EVENTANDSTART='1'THEN
DICSOUNT<=DT1&DT2;CMKS<=CMKSXOR'1';ENDIF;
ENDPROCESS;
PROCESS(CLK,START,COOK
BEGIN
IFSTART='1'ANDDCP="0000"THEN
ELSIFCLK'EVENTANDCLK='1'THEN
IFCOOK='1'THEN
DOUT<="00";
ELSIFSTART='1'ANDDCP>"0000"THEN
DOUT<="00";
ELSIFSG='1'THEN
IFCT1<"0001"THEN
CT1<="0000";SG<='0';
ENDIF;
ELSIFCMKS='1'THEN
CASEDCPIS
WHEN"0101"=>
IFCT<35THEN
CT<=CT+1;
IFCT1<8THEN
DOUT<="01";CT1<=CT1+1;
ELSIFCT1=8THEN
DOUT<="00";CT1<=CT1+1;
ELSIFCT2<8THEN
DOUT<="10";CT2<=CT2+1;
ELSIFCT2=8THEN
DOUT<="00";CT1<="0000";CT2<="0000";
ENDIF;
ELSE
DCP<="0110";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";
ENDIF;
WHEN"0110"=>
IFCT<27THEN
CT<=CT+1;
IFCT1<6THEN
DOUT<="01";CT1<=CT1+1;
ELSIFCT1=6THEN
DOUT<="00";CT1<=CT1+1;
ELSIFCT2<6THEN
DOUT<="10";CT2<=CT2+1;
ELSIFCT2=6THEN
DOUT<="00";CT1<="0000";CT2<="0000";
ENDIF;
ELSE
DCP<="0111";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";
ENDIF;
IFCT<8THEN
CT<=CT+1;
IFCT1<3THEN
DOUT<="01";CT1<=CT1+1;
ELSIFCT1=3THEN
DOUT<="00";CT1<=CT1+1;
ELSIFCT2<3THEN
DOUT<="10";CT2<=CT2+1;
ELSIFCT2=3THEN
DOUT<="00";CT1<="0000";CT2<="0000";
ENDIF;
ELSE
DCP<="0000";CT<="000000";CT1<="0000";CT2<="0000";SG<='1';
ENDIF;
WHEN"1001"=>
IFCT<27THEN
CT<=CT+1;
IFCT1<6THEN
DOUT<="01";CT1<=CT1+1;
ELSIFCT1=6THEN
DOUT<="00";CT1<=CT1+1;
ELSIFCT2<6THEN
DOUT<="10";CT2<=CT2+1;
ELSIFCT2=6THEN
DOUT<="00";CT1<="0000";CT2<="0000";
ENDIF;
ELSE
DCP<="1010";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";
ENDIF;
WHEN"1010"=>
IFCT<15THEN
CT<=CT+1;
IFCT1<3THEN
DOUT<="01";CT1<=CT1+1;
ELSIFCT1=3THEN
DOUT<="00";CT1<=CT1+1;
ELSIFCT2<3THEN
DOUT<="10";CT2<=CT2+1;
ELSIFCT2=3THEN
DOUT<="00";CT1<="0000";CT2<="0000";
ENDIF;
ELSE
DCP<="1011";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";
ENDIF;
WHEN"1011"=>
IFCT<8THEN
CT<=CT+1;
IFCT1<3THEN
DOUT<="01";CT1<=CT1+1;
ELSIFCT1=3THEN
DOUT<="00";CT1<=CT1+1;
ELSIFCT2<3THEN
DOUT<="10";CT2<=CT2+1;
ELSIFCT2=3THEN
DOUT<="00";CT1<="0000";CT2<="0000";
ENDIF;
ELSE
DCP<="0000";CT<="000000";CT1<="0000";CT2<="0000";SG<='1';
ENDIF;
WHEN"1101"=>
IFCT<19THEN
CT<=CT+1;
IFCT1<4THEN
DOUT<="01";CT1<=CT1+1;
ELSIFCT1=4THEN
DOUT<="00";CT1<=CT1+1;
ELSIFCT2<4THEN
DOUT<="10";CT2<=CT2+1;
ELSIFCT2=4THEN
DOUT<="00";CT1<="0000";CT2<="0000";
ENDIF;
ELSE
DCP<="1110";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";
ENDIF;
WHEN"1110"=>
IFCT<11THEN
CT<=CT+1;
IFCT1<2THEN
DOUT<="01";CT1<=CT1+1;
ELSIFCT1=2THEN
DOUT<="00";CT1<=CT1+1;
ELSIFCT2<2THEN
DOUT<="10";CT2<=CT2+1;
ELSIFCT2=2THEN
DOUT<="00";CT1<="0000";CT2<="0000";ENDIF;
ELSE
DCP<="1111";CT<="000000";CT1<="0000";CT2<="0000";DOUT<="00";ENDIF;
WHEN"1111"=>
IFCT<8THEN
CT<=CT+1;
IFCT1<3THEN
DOUT<="01";CT1<=CT1+1;
ELSIFCT1=3THEN
DOUT<="00";CT1<=CT1+1;
ELSIFCT2<3THEN
DOUT<="10";CT2<=CT2+1;
ELSIFCT2=3THEN
DOUT<="00";CT1<="0000";CT2<="0000";
ENDIF;
ELSE
DCP<="0000";CT<="000000";CT1<="0000";CT2<="0000";SG<='1';ENDIF;
WHENOTHERS=>
DOUT<="00";
ENDCASE;
ENDIF;
ENDIF;
ENDPROCESS;
LOOK<=SG;
ENDBEHAV;
二、仿真波形如下
强洗全部过程
强洗漂洗、甩干
强洗(甩干)
标准全部过程
标准(漂洗、甩干)
标准(甩干)
弱洗全过程
弱洗(漂洗、甩干)
九、弱洗(甩干)
强开盖子:
一、强洗强开盖
一、标准强开盖
二、弱洗强开盖
暂停和启动
一、强洗暂停
二、强洗重新启动
三、标准暂停
四、标准重新启动
五、弱洗暂停
六、弱洗重新启动
两次洗衣
一、两次强洗
两次标准(漂洗、甩干)
二、两次弱甩干
信工073余海军10079006三、设计思想讨论设计时参考了已有程序,此芯片有五个输入和三个输出,输入COUNT_M和输入COUNT_N是状态控制键,输入START是输入启动和暂停键,以及一个时钟CLK。
输出是洗衣结束铃声端口和电机驱动端口。
在设计中,为便于调试和观察将时钟周期假设为30S。
本次设计大致可以分成两个模块来看待,控制端和工作端。
控制部分使用了三个进程来处理,进程一控制状态COUNT_M,进程二控制状态COUNT_N,进程三控制开始和暂停。
工作部分使用了一个进程来处理,在该进程中主要处理强制开盖,洗衣的各个状态,以及洗衣结束后的铃声。
控制端COUNT_M中,SG是工作结束标志信号,信号TS控制洗衣机的暂停和重新启动,DT是状态的中间变量。
COOKK为强开洗衣机盖子信号端,DCP输入状态中间信号。
洗衣机正常工作过程:
洗衣机总共有九种工作状态,这九种状态可以分成三大部分,强洗,标准,弱洗,此三种状态的洗衣过程类似,因此以强洗来解释说明。
洗涤完成后,将信号TP变换到漂洗状态,然后变换到甩干,甩干结束后将TP置零,以及输出状态置一。
然后等待下次洗涤。
洗涤定时器主分频器主分频器水流控制器正反向控制CLK
信工073余海军10079006四、心得体会这次EDA对我来说是一项很大的挑战,看到题目后几乎没有思路,翻阅教材,看了下自动洗衣机那张的讲解,有了眉目,但是设计的内容过于庞杂,很难下手。
这时候,我选择从已有的程序着手,先看懂,然后和同学讨论思路,最后形成了这个作业。
做仿真波形的时候,就是验证结论的时候,过程还算顺利。
通过这次作业,我觉得许多困难的事,需要借鉴已有的经验,请查阅资料,和同学交流讨论,就基本可以完成。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 设计基于VHDL的简易全自动控制洗衣机 设计 基于 VHDL 简易 全自动 控制 洗衣机