数电 电子 课程设计 洗衣机实验报告 兼程序.docx
《数电 电子 课程设计 洗衣机实验报告 兼程序.docx》由会员分享,可在线阅读,更多相关《数电 电子 课程设计 洗衣机实验报告 兼程序.docx(40页珍藏版)》请在冰豆网上搜索。
数电电子课程设计洗衣机实验报告兼程序
电子技术课程设计
题目:
洗衣机
设计者:
学号:
班级:
日期:
2012/6/28
指导老师:
总体方案分析及选择:
洗衣机电路包含有总的控制模块,洗涤控制模块,洗涤记时模块,电动机控制模块以及LCD液晶板的动态显示模块.经过分析后,我们把前四个模块进行组合,把他们合成一个模块即:
总控制模块.他们之间的逻辑联结关系,是对数电课程的一个很好总结,也是自己对新知识(LCD液晶板的动态显示)学习理解运用能力的一个很好的提升机会。
基本功能要求:
1要求设计制作一个普通功能洗衣机控制电路,使之能控制洗衣机的进水阀,排水阀,洗涤程序电机,甩干驱动装置等按预定程序工作.总体过程包括:
进水浸泡洗涤排水甩干五个过程.进水从电路启动开始.其中浸泡可供选择,洗涤时间可以预置,洗涤结束时发出铃声进行提示并自动切断电源.发生故障如:
缺水或进水超时排水超时甩干碰桶等时也可自动切断电源!
2用中小规模集成电路芯片或CPLD/FPGA设计符合上述任务要求的电路,并制作出能实际运行的装置.
3安装并调试电路,测试各部分电路功能或模型.
4演示并交验硬件装置.
基本思路:
整个洗衣过程可分为置位、进水、浸泡、洗涤、排水、甩干、洗涤完毕提醒、断电八个状态,断电只有在出现断电信号时才有效。
正常运行时,首先进行置位,恢复到初始状态,置位完成后可进入进水状态,进水完成后进入浸泡状态,浸泡时间结束后进入洗涤状态,洗涤时间可由手动开关控制,当洗涤时间设置为零时,跳过洗涤阶段,洗涤状态完成后进入排水状态,排水之后进入甩干状态,甩干结束后,进入洗涤完毕提醒,同时有铃声提醒。
在正常运行时,可将前一个状态的完成信号作为下一个状态的启动信号,这样可使这些状态依次实现。
总电路图:
局部功能模块
总控模块:
该模块实现了对洗衣机整个运行过程的控制,打开电源后由模块内部进行控制
按洗涤过程控制洗衣机的运转.同时在输入端还给了报警输入,当发生故障时洗衣机自动断电.复位端可以让洗衣机进入初始状态.在输入端还有10个总线输入可以人为进行置数,从而控制各个过程的时间长短.当给甩干时间一个时间,其他都置为0可以让洗衣机只进行甩干操作.
VHDL文件:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityxiyijiis
port(
clk0,clk1,rst,alarm:
instd_logic;
-----clk0:
控制开关脉冲.clk1:
记时开关脉冲.Rst:
复位端.arlarm:
报警输入端.-------
water_inh,water_inl,im_th,im_tl,wash_th:
instd_logic_vector(3downto0);
wash_tl,water_outh,water_outl,dry_th,dry_tl:
instd_logic_vector(3downto0);-----进水,浸泡,洗涤,出水,甩干指数端高位和地位输入端-----------
water_in,water_out,immersion,dry,z1,z2,voice,poweroff:
outstd_logic;
-----进水,出水,浸泡,甩干,洗涤,响铃,断电输出端-------
display_mh,display_ml,display_sh,display_sl:
outstd_logic_vector(3downto0)
-------------------输出时间显示高位低位输出端-------------
);
endentityxiyiji;
architecturebehaveofxiyijiis
signaljs,js_ten:
std_logic;
signalim,im_ten:
std_logic;
signalwa,wa_ten:
std_logic;
signalwa1,wa2,pwf:
std_logic;
signalcs,cs_ten:
std_logic;
signaldr,dr_ten:
std_logic;
signalxl,xl_ten:
std_logic;
signaljs_dh,js_dl,js_h,js_l:
std_logic_vector(3downto0);
signalim_dh,im_dl,im_h,im_l:
std_logic_vector(3downto0);
signalwa_dh,wa_dl,wa_h,wa_l:
std_logic_vector(3downto0);
signalcs_dh,cs_dl,cs_h,cs_l:
std_logic_vector(3downto0);
signaldr_dh,dr_dl,dr_h,dr_l:
std_logic_vector(3downto0);
signalxl_dh,xl_dl,xl_h,xl_l:
std_logic_vector(3downto0);
signaldis_mh,dis_ml:
std_logic_vector(3downto0);
signaldis_sh,dis_sl:
std_logic_vector(3downto0);
begin
-----------------------控制:
控制器件实现洗衣机的功能:
进水->浸泡->洗涤->出水->甩干->响铃->断电---------------
process(clk0,rst,alarm)
variablen:
integer;
begin
ifalarm='1'then
pwf<='1';----------判断是否有报警信号,有报警信号则pwf有效------
else
ifrst='1'then--------判断置位信号-------
n:
=0;
im_ten<='0';
js_ten<='0';
wa_ten<='0';
cs_ten<='0';
dr_ten<='0';
xl_ten<='0';
pwf<='0';----初始状态¬-----
elsifclk0='1'andclk0'eventthen
ifn=0then
ifwater_inh="0000"andwater_inl="0000"then
n:
=1;-----water_in不全为零则直接进入下一状态,不为零则继续判断-------
else
js_ten<='1';-----water_in不全为零则有js_ten为有效信号,使进水计时开始--------
ifjs='1'then-------进水计时时会使js为有效-----
n:
=1;-----进入进水状态¬-----
endif;
endif;
elsifjs='0'andn=1then------进水结束后js重新变为零,该判断有效------
ifim_th="0000"andim_tl="0000"then
n:
=2;
else
im_ten<='1';
ifim='1'then
n:
=2;
endif;
endif;
elsifim='0'andn=2then
ifwash_th="0000"andwash_tl="0000"then
n:
=3;
else
wa_ten<='1';
ifwa='1'then
n:
=3;
endif;
endif;
elsifwa='0'andn=3then
ifwater_outh="0000"andwater_outl="0000"then
n:
=4;
else
cs_ten<='1';
ifcs='1'then
n:
=4;
endif;
endif;
elsifcs='0'andn=4then
ifdry_th="0000"anddry_tl="0000"then
n:
=5;
else
dr_ten<='1';
ifdr='1'then
n:
=5;
endif;
endif;
elsifdr='0'andn=5then
ifxl_dh="0000"andxl_dl="0000"then
n:
=6;
else
xl_ten<='1';
ifxl='1'then
n:
=6;
endif;
endif;
elsifxl='0'andn=6then
pwf<='1';
endif;
endif;
endif;
endprocess;
-----------------------------记时-----------------------------
------------------进水记时--------------------------
process(clk1,js_ten)
begin
ifjs_ten='0'then---------当js_ten为1时,该判断无效,进入下一个判断-------
js_dh<=water_inh;
js_dl<=water_inl;
js_h<="0000";
js_l<="0000";
js<='0';
elsifclk1='1'andclk1'eventthen
ifjs_dh="0000"andjs_dl="0000"andjs_h="0000"andjs_l="0000"then
js<='0';---------从对电路图中可看出js_dl被设为0101,该判断无效-----
else
js<='1';
if(js_dl="0000"andjs_h="0000"andjs_l="0000")then
js_l<="1001";
js_h<="0101";
js_dl<="1001";
js_dh<=js_dh-1;
elsif(js_h="0000"andjs_l="0000")then------本条判断有效-------
js_l<="1001";
js_h<="0101";
js_dl<=js_dl-1;-----计数时js_dl减小,当计数结束,js_dl,js_h,js_l变为零,第一条判断有效,js变为零,满足下一个状态的条件-------
elsifjs_l="0000"then
js_l<="1001";
js_h<=js_h-1;
elsifjs_l>"0000"then
js_l<=js_l-1;
endif;
endif;
endif;
endprocess;
-------------浸泡记时----------------------
process(clk1,im_ten)
begin
ifim_ten='0'then
im_dh<=im_th;
im_dl<=im_tl;
im_h<="0000";
im_l<="0000";
im<='0';
elsifclk1='1'andclk1'eventthen
ifim_dh="0000"andim_dl="0000"andim_h="0000"andim_l="0000"then
im<='0';
else
im<='1';
if(im_dl="0000"andim_h="0000"andim_l="0000")then
im_l<="1001";
im_h<="0101";
im_dl<="1001";
im_dh<=im_dh-1;
elsif(im_h="0000"andim_l="0000")then
im_l<="1001";
im_h<="0101";
im_dl<=im_dl-1;
elsifim_l="0000"then
im_l<="1001";
im_h<=im_h-1;
elsifim_l>"0000"then
im_l<=im_l-1;
endif;
endif;
endif;
endprocess;
-----------------洗涤记时----------------------
process(clk1,wa_ten)
variablem:
integer;
begin
ifwa_ten='0'then
wa_dh<=wash_th;
wa_dl<=wash_tl;
wa_h<="0000";
wa_l<="0000";
wa<='0';
wa1<='0';
wa2<='0';
m:
=1;
elsifclk1='1'andclk1'eventthen
ifwa_dh="0000"andwa_dl="0000"andwa_l="0000"andwa_h="0000"then
wa<='0';wa1<='0';wa2<='0';
else
wa<='1';
ifm=1then
wa1<='1';
wa2<='0';
elsifm=11then
wa1<='0';
wa2<='0';
elsifm=14then
wa1<='0';
wa2<='1';
elsifm=24then
wa1<='0';
wa2<='0';
elsifm=27then
m:
=0;----m为循环的递增变量,m的不同状态可以控制洗衣机的正反转------
endif;
m:
=m+1;
if(wa_dl="0000"andwa_h="0000"andwa_l="0000")then
wa_l<="1001";
wa_h<="0101";
wa_dl<="1001";
wa_dh<=wa_dh-1;------wa_dh的初值根据开关来设置-----
elsif(wa_h="0000"andwa_l="0000")then
wa_l<="1001";
wa_h<="0101";
wa_dl<=wa_dl-1;
elsifwa_l="0000"then
wa_l<="1001";
wa_h<=wa_h-1;
elsifwa_l>"0000"then
wa_l<=wa_l-1;
endif;
endif;
endif;
endprocess;
--------------出水记时---------------------------
process(clk1,cs_ten)
begin
ifcs_ten='0'then
cs_dh<=water_outh;
cs_dl<=water_outl;
cs_h<="0000";
cs_l<="0000";
cs<='0';
elsifclk1='1'andclk1'eventthen
ifcs_dh="0000"andcs_dl="0000"andcs_h="0000"andcs_l="0000"then
cs<='0';
else
cs<='1';
if(cs_dl="0000"andcs_h="0000"andcs_l="0000")then
cs_l<="1001";
cs_h<="0101";
cs_dl<="1001";
cs_dh<=wa_dh-1;
elsif(cs_h="0000"andcs_l="0000")then
cs_l<="1001";
cs_h<="0101";
cs_dl<=cs_dl-1;
elsifcs_l="0000"then
cs_l<="1001";
cs_h<=cs_h-1;
elsifcs_l>"0000"then
cs_l<=cs_l-1;
endif;
endif;
endif;
endprocess;
--------------甩干记时-----------------------
process(clk1,dr_ten)
begin
ifdr_ten='0'then
dr_dh<=dry_th;
dr_dl<=dry_tl;
dr_h<="0000";
dr_l<="0000";
dr<='0';
elsifclk1='1'andclk1'eventthen
ifdr_dh="0000"anddr_dl="0000"anddr_h="0000"anddr_l="0000"then
dr<='0';
else
dr<='1';
if(dr_dl="0000"anddr_h="0000"anddr_l="0000")then
dr_l<="1001";
dr_h<="0101";
dr_dl<="1001";
dr_dh<=dr_dh-1;
elsif(dr_h="0000"anddr_l="0000")then
dr_l<="1001";
dr_h<="0101";
dr_dl<=dr_dl-1;
elsifdr_l="0000"then
dr_l<="1001";
dr_h<=dr_h-1;
elsifdr_l>"0000"then
dr_l<=dr_l-1;
endif;
endif;
endif;
endprocess;
------------------响铃记时----------------------
process(clk1,xl_ten)
begin
ifxl_ten='0'then
xl_dh<="0000";
xl_dl<="0010";
xl_h<="0000";
xl_l<="0000";
xl<='0';
elsifclk1='1'andclk1'eventthen
ifxl_dh="0000"andxl_dl="0000"andxl_h="0000"andxl_l="0000"then
xl<='0';
else
xl<='1';
if(xl_dl="0000"andxl_h="0000"andxl_l="0000")then
xl_l<="1001";
xl_h<="0101";
xl_dl<="1001";
xl_dh<=xl_dh-1;
elsif(xl_h="0000"andxl_l="0000")then
xl_l<="1001";
xl_h<="0101";
xl_dl<=xl_dl-1;
elsifxl_l="0000"then
xl_l<="1001";
xl_h<=xl_h-1;
elsifxl_l>"0000"then
xl_l<=xl_l-1;
endif;
endif;
endif;
endprocess;
----------------------------显示时间--------------------------
process(clk1,js_ten,im_ten,wa_ten,dr_ten,xl_ten)
begin
ifjs_ten='1'andim_ten='0'andwa_ten='0'andcs_ten='0'anddr_ten='0'andxl_ten='0'then--------在进水时-----
ifclk1='1'andclk1'eventthen
dis_mh<=js_dh;
dis_ml<=js_dl;-----显示分钟----
dis_sh<=js_h;
dis_sl<=js_l;------显示秒钟------
endif;
elsifim_ten='1'andwa_ten='0'andcs_ten='0'anddr_ten='0'andxl_ten='0'then---------在浸泡时,此时js_ten任然为1,只是不作为判别依据------
ifclk1='1'andclk1'eventthen
dis_mh<=im_dh;
dis_ml<=im_dl;
dis_sh<=im_h;
dis_sl<=im_l;
endif;
elsifwa_ten='1'andcs_ten='0'anddr_ten='0'andxl_ten='0'then
ifclk1='1'andclk1'eventthen
dis_mh<=wa_dh;
dis_ml<=wa_dl;
dis_sh<=wa_h;
dis_sl<=wa_l;
endif;
elsifcs_ten='1'anddr_ten='0'andxl_ten='0'then
ifclk1='1'andclk1'eventthen
dis_mh<=cs_dh;
dis_ml<=cs_dl;
dis_sh<=c