
洗衣机程序实验报告.doc
7页洗衣机程序实验报告一. 设计内容设计一个智能洗衣机的控制系统,能够实现进水、洗涤、脱水一系列自动过程采用EP2C5TC144实验板,控制器部分采用Verilog HDL语言编写,主体程序采用了状态机作为主要控制方式最后利用 Quartus II 进行仿真二. 实现功能当按下开始按键时,洗衣机开始工作,洗衣工作指示灯亮先注水1分钟,注水指示灯亮,当注水达一分钟时,注水停止,注水指示灯熄灭,进入洗涤过程洗涤过程要求洗衣桶正反转3次,洗涤过程完成后,进入脱水过程脱水指示灯亮,脱水一分钟后,再次注水一分钟,注水指示灯亮,再次脱水;整个脱水需要完成以上描述过程3次,完成后脱水指示灯灭,洗涤完成,洗衣工作指示灯灭注水指示灯灭,注水过程完洗涤过程,电机正、反转3次脱水过程,每次进行一分钟,结合注水完成三次启动按钮洗衣指示灯亮注水指示灯亮,开始注水注水一分钟反复3次洗涤完成,洗衣指示灯灭三. 洗衣机的工作状态洗衣机控制器主要由状态机来描述,洗衣机工作共有6个状态:空闲(idle)、注水(flood)、正转(wash1)、反转(wash2)、脱水(dry)、完成(finish)下图为洗衣机控制器的状态转移图:IdleFloodstartWash1Times=60sWash2n1<3dryfinishn2=3n1=3Times=60s四. 设计思路整个程序分为两个子模块,分频子模块与洗衣机状态控制器子模块。
1. 分频模块将20MHZ的晶振频率分频为1HZ的时钟频率供洗衣机状态控制器模块2. 洗衣机状态控制器模块Ls:洗衣机开始工作的指示灯,洗衣完成后熄灭;Lf:注水灯,洗衣机注水时此灯点亮,注水完成后此灯熄灭;Ld:脱水灯,进入脱水过程此灯点亮,整个脱水过程完成后,此灯熄灭;Forward:电动机正转输出信号,当洗衣机正转时,forward=1;Back:反转输出信号,当洗衣机反转时,back=1;Drain:脱水指示信号,当洗衣机脱水时,drain=1;Fw:注水指示信号,当洗衣机注水时,fw=1五. 程序设计1. 程序整体源代码module wmtest(clock,reset,ls,lf,ld,forward,back,drain,fw,start);input clock,reset,start;output ls,lf,ld,forward,back,drain,fw;wire clk_1hz;fenpin ufp(.clk(clock),.rst(reset),.clkout(clk_1hz));wash uwash(.clk(clk_1hz),.rst(reset),.start(start),.ls(ls),.ld(ld),.lf(lf),.forward(forward),.back(back),.drain(drain),.fw(fw));endmodulemodule fenpin(clk,rst,clkout);input clk,rst;output reg clkout;reg[24:0] count;always@(posedge clk or posedge rst)beginif(rst)begin count<=0;clkout<=0;endelse if(count==25'd24_999_999) begin count<=0; clkout<=~clkout;end else count<=count+25'd1;endendmodulemodule wash(clk,rst,ls,lf,ld,forward,back,drain,fw,start);input clk,rst,start;output reg ls,lf,ld,forward,back,drain,fw;reg[2:0]n1,n2;reg[3:0]state;reg[5:0] times;reg s;parameter idle=0,flood=1,wash1=2,wash2=3,wash3=4,dry=5,finish=6;always@(posedge clk or posedge rst )beginif(rst)begin state<=idle;lf<=1;ls<=1;ld<=1;forward<=1;back<=1;drain<=1;fw<=1;times<=6'd0;n1<=3'd0;n2<=3'd0;s<=0;endelsebegincase(state)idle:begin if(start) begin ls<=0; state<=flood; end else state<=idle; endflood: begin if(n2==3) begin lf<=1; fw<=1; end else begin lf<=0; fw<=0; end if(times==6'd60) begin times<=0;lf<=1;fw<=1; if(s==1) state<=dry; else state<=wash1; end else begin times<=times+1; state<=flood; end endwash1: begin forward<=0;back<=1; state<=wash2; if(n1==3) begin forward<=1; end endwash2: begin back<=0;forward<=1; n1<=n1+1; if(n1==3) begin state<=dry; forward<=1; back<=1; end else state<=wash1; enddry: begin if(n2==3) begin ld<=1; drain<=1; end else begin ld<=0; drain<=0; end if(times==6'd60) begin times<=0; n2<=n2+1; drain<=1; if(n2==3) begin s<=0; state<=finish; end else begin s<=1; state<=flood; end end else begin times<=times+1; state<=dry; end endfinish: begin ls<=1; state<=idle; endendcaseendendendmodule2. 仿真实现按下start按键后,洗衣机开始工作,ls=1;注水过程开始,fw=1,lf=1;60s注水过程完成后进入洗涤状态,fw=0,lf=0,且此时洗衣机先正转再反转重复此过程3次停止转动进入脱水过程;先脱水60s,此时drain=1,ld=1,之后注水60s,drain=0,fw=1,lf=1,重复3次后,脱水过程完成,ld=0;洗衣结束,ls=0。












