智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx

上传人:b****1 文档编号:3896561 上传时间:2023-05-02 格式:DOCX 页数:22 大小:150.23KB
下载 相关 举报
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第1页
第1页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第2页
第2页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第3页
第3页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第4页
第4页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第5页
第5页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第6页
第6页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第7页
第7页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第8页
第8页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第9页
第9页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第10页
第10页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第11页
第11页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第12页
第12页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第13页
第13页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第14页
第14页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第15页
第15页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第16页
第16页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第17页
第17页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第18页
第18页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第19页
第19页 / 共22页
智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx

《智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx(22页珍藏版)》请在冰点文库上搜索。

智能洗衣机控制器设计 Verilog编程知识讲解Word格式文档下载.docx

3>

其中洗衣为10分钟;

4>

漂洗模式:

5>

甩干模式:

工作程序为,甩干。

以上五种模式中,进水时间为1-3分钟,漂洗为5分钟,

排水2分钟,甩干3分钟。

b.显示洗衣完成所需时间。

c.用不同LED灯显示洗衣机当前的工作状态(注水、洗衣、排水、甩干)。

d.完成洗衣任务时蜂鸣3声提示。

扩展功能:

a.进水量可调。

根据衣物的多少,进水时间有1分钟、2分钟、3分钟三个档位,并用一个数码管显示所设时间。

b.进水时无水报警。

蜂鸣器发出2秒的报警声,并中止洗衣工作。

供水正常后恢复工作。

c.甩干时洗衣机盖被打开则报警。

2秒报警声,同时中止甩干操作。

重新盖上盖子后恢复工作。

d.有按键音。

e.设有暂停/继续键。

可随时按下暂停洗衣机的工作。

再次按下则继续工作。

f.用两个LED灯标志给电机的控制信号。

在洗衣或漂洗时交替闪亮,象征电机顺时针/逆时针转动的转换。

g.用数码管显示当前工作状态(注水、洗衣、排水、甩干)所剩时间。

三.模块设计及端口设置。

为完成预定功能,设置1个主模块,7个子模块;

使用2个时钟信号端口,6个按键,6个数码管和7个LED。

主模块main:

调用其他模块,共同完成预定功能。

输入端口:

CP_1k,CP:

分别为1kHz和1Hz方波,分别用于产生蜂鸣信号和系统状态转换及计时的时钟信号;

Start,Pause:

开始键和暂停/继续键;

Set,Speed:

功能设定,分别用来设定工作模式和进水量;

Open,No_water:

警报信号,用来模拟打开洗衣机盖和供水中断

事件的发生。

输出端口:

m[3:

0],v[3:

0]:

数码管显示信号,分别指示工作模式和进水量;

Timer[7:

0],Timer_a[7:

0]:

数码管显示信号,分别表示当前过程

剩余时间和完成所有工作剩余时间。

LED_s,LED_wi,LED_wo,LED_w,LED_d和LED_l,LED_r:

LED驱动信号,分别指示正在工作、进水、出水、洗衣、

甩干和电机的顺时针、逆时针旋转状态。

a:

蜂鸣信号。

用于报警、提示有键按下和洗衣完成。

工作模式设定模块mode:

设定工作模式。

输入端口:

Set:

设定工作模式模式的按键;

输出端口:

所设定的模式,BCD码,可取1到5的整数;

进水量设定模块Water_t:

设定进水量。

Speed:

设定进水量,按键;

V[3:

所设定的进水时间,BCD码,可取取1到3的整数;

无供水信号产生模块waterless:

产生无水报警信号。

No_water:

供水中断/恢复信号,按键;

water_out:

供水情况指示量,值为1表示无供水,0表示

供水正常;

危险信号产生模块Unsafe:

产生危险报警信号。

Open:

洗衣机盖开/合信号,按键;

danger:

洗衣机盖状态指示量,值为1表示打开,0表示关闭;

洗衣过程控制模块wash:

控制洗衣过程的转换。

CP:

1Hz时钟信号,来自时钟信号发生器;

Start:

开始工作命令信号,按键;

m:

工作模式,来自模块mode;

v:

进水时间,来自模块Water_t;

water_out:

供水情况,来自模块waterless;

danger:

危险状态,来自模块Unsafe;

tp:

暂停/继续的命令信号;

p:

运行/暂停工作状态量,1表示正在运行,0表示暂停;

finish:

工作结束状态量,由0变为1表示工作结束;

timer[7:

当前工作过程剩余时间,向上传给main中的Timer;

timer_a[7:

完成全部工作剩余时间,传给main中的Timer_a;

s[2:

工作状态指示量,从0到5分别指示进水、洗衣、出水、

甩干和完成信号有效;

c[2:

取1到4,表示当前工作是第几轮;

报警模块alart:

产生报警蜂鸣信号。

CP_1k:

1kHz方波信号,用于产生蜂鸣信号,来自信号发生器;

CP:

1Hz方波信号,用于产生间断的蜂鸣信号,来自信号发生器;

Start,Set,Pause,Speed:

按键音有效信号。

另外Pause还用于突

发情况时人为控制暂停/继续的控制键;

No_water,water_out,Open,danger:

控制报警音开始/结束的信号,来自模块waterless和Unsafe;

完成工作后提示音有效信号,来自模块wash;

a:

报警音驱动信号

tp:

暂停/继续信号。

tp=1时暂停,tp=0时继续。

LED灯状态模块LEDs:

控制LED的亮灭。

s,c:

洗衣机的工作状态指示量,用作那个灯亮的判断条件,来自模块wash;

p:

运行/暂停状态标志量,用于暂停时的闪亮效果,来自模块alart;

1Hz方波信号,造成闪亮效果,来自信号发生器。

LED指示灯驱动信号。

LED_wi:

进水;

LED_wo:

出水;

LED_w:

洗衣;

LED_d:

甩干;

LED_s:

正在运行;

LED_l:

电机顺时针转;

LED_r:

逆时针转。

用Leonardo综合出的模块级连线图如下:

以上子模块端口具体用途在电工作原理中涉及。

四.电路工作原理。

下面按电路的使用过程对电路工作原理进行描述。

1.按下Set键,在Set上升沿作用下,mode模块被调用,执行的操作是工作模式m增加1。

其状态变化如下:

设定好工作模式后,按Speed键设定进水时间,water_t模块被调用,执行的操作是进水时间v增加1。

其变化原理与m类似,只是变化范围是1-3分钟。

2.设定完毕,按Start键,洗衣过程开始,这时是wash模块被调用,wash模块中,由状态变量c记录洗衣的轮数(以进水到甩干为一轮),状态变量s代表当前的工作方式,即s=0为进水,s=1为洗衣,s=2为排水,s=3为甩干,s=4时进行完成提示音信号的延时,其状态转变流程如下:

其中,ok=1是上一任务完成的标志,模式1,2,3中,c初值为4。

轮回3次后c=1,s由3变为4,finish置1有效,完成提示音响(由modulealart实现),同时延时计时器启动,计时完毕后,finish=0,提示音停。

s=4状态的工作完成后,ok=0,s保持,直到下次启动(Start)再初始化。

以s的值为主要状态标志的基本工作流程图:

3.报警功能,主要由alart模块实现。

按No_water键,供水中断信号water_out=1有效。

如果这时正在进水,则置c_e=1使报警音延时计时器开始计时,同时c_t=1使报警信号有效,开始发出报警音。

延时器计时完毕,c_e、c_t复位,报警音关闭,报警结束。

但进水工作仍处于中断状态。

只有再此按下No_water键,表示供水恢复,则继续进水。

甩干过程中由Open键触发的洗衣机盖被打开的报警原理同上。

工作结束后的提示音由输入的finish信号控制。

finish会有3个CP有效,和CP相与后,产生三声提示音。

暂停功能也有alart模块参与,按Pause键后,tp变化,会导致暂停有效信号取反,实现暂停/继续的功能。

4.LED等指示状态

共用到7个LED来代表系统的工作状态。

其驱动信号有效与否由系统目前的工作状态来判断。

其具体代表的状态和实现方法已在端口介绍和源程序注释中说明,不另赘述。

五.Verilog源程序及注释。

1.主模块main:

modulemain(CP_1k,CP,Start,Pause,Set,Speed,Open,No_water,Timer,Timer_a,m,v,

LED_wi,LED_wo,LED_w,LED_d,LED_s,LED_l,LED_r,a);

inputCP_1k,CP,Start,Pause,Set,Speed,Open,No_water;

//输入端口声明,其中CP_1k、CP为时钟信号,其他为按键;

/**********************输出端口声明*************************/

outputLED_wi,LED_wo,LED_w,LED_d,LED_s,LED_l,LED_r,a;

//LED及蜂鸣信号

output[3:

0]m;

//工作模式

0]v;

//进水时间

output[7:

0]Timer,Timer_a;

//剩余时间

wire[3:

0]m;

wire[2:

0]s,c;

wirewater_out,danger,finish,p,a,tp;

modeU1(Set,m[3:

0]);

//调用模式选择模块

Water_tU2(Speed,v[3:

//调用进水时间设定模块

washU3(CP,Start,m[3:

0],water_out,danger,tp,p,finish,Timer[7:

0],

Timer_a[7:

0],s[2:

0],c[2:

//调用洗衣过程控制模块

waterlessU4(No_water,water_out);

//调用供水情况感应模块

UnsafeU5(Open,danger);

//调用洗衣机盖状态模块

alartU6(CP_1k,CP,Start,Set,Pause,Speed,No_water,water_out,Open,danger,

finish,s[2:

0],a,tp);

//调用报警信号产生模块

LEDsU7(s[2:

0],p,c[2:

0],CP,LED_wi,LED_wo,LED_w,LED_d,LED_s,LED_l,LED_r);

//调用LED驱动模块

Endmodule

2.模式选择模块mode:

modulemode(Set,m);

inputSet;

//设定键Set为输入

//模式选择结果m为输出

reg[3:

/***********Set上升沿触发下,m由1到5循环变化*********/

always@(posedgeSet)begin

if(m[3:

0]>

=4'

b0101||m==0)m[3:

0]=4'

b0001;

elsem[3:

0]=m[3:

0]+4'

end

endmodule

3.进水时间设定模块water_t:

moduleWater_t(Speed,v);

inputSpeed;

//设定键Speed为输入

//进水时间v为输出

0]v;

/***********Speed上升沿触发下,v由1到3循环变化*********/

always@(posedgeSpeed)begin

if(v[3:

b0011||v==0)v[3:

elsev=v+4'

4.洗衣过程控制模块wash:

modulewash(CP,Start,m,v,water_out,danger,tp,p,finish,timer,timer_a,s,c);

inputCP,Start,tp,water_out,danger;

//输入时钟信号及控制键

input[3:

0]m,v;

//输入设定的工作模式和进水时间

0]timer,timer_a;

//输出剩余时间

output[2:

//输出工作进程标志量

outputfinish,p;

//输出完成信号及暂停有效信号

reg[2:

reg[7:

0]timer,timer_a;

regok,d;

regfinish,p;

always@(posedgeCPorposedgeStartorposedgetp)begin

/*********按下Start键,根据所选模式给各变量赋初值*********/

if(Start==1)begin

case(m)

4'

b0001:

begins[2:

0]=3'

b000;

timer=v;

c=3'

b100;

timer_a=v+v+v+8'

b01100111;

if(timer_a[3:

4'

b1001)begintimer_a[7:

0]=timer_a[7:

0]+8'

b00000110;

end

b0010:

b01010111;

b0011:

b01000111;

b0100:

b011;

timer_a=v+v+8'

b00100111;

b0101:

beginc=3'

b010;

timer=8'

b00000011;

timer_a=8'

b00000100;

defaultc=0;

endcase

ok=0;

finish=0;

d=0;

p=1;

//使暂停标志量无效

elseif(tp==1)p=0;

//收到暂停信号,暂停标志量有效

elseif(CP==1)begin//时钟信号CP触发下,洗衣机按既定程序工作

/******一个任务完成(OK=1),s加1,进入下个任务的执行状态*******/

if(ok==1)begin

if(s[2:

0]==3'

b011&

&

3'

b001)begin

s[2:

timer=v;

elseif(c==1)begin

finish=1;

//c=1,则以洗过足够多轮,finish信号有效,经过s=4时的延时将在两CP周期后复位

timer=0;

elseif(c==0)begin

0]=s[2:

0];

elsebegins=s+3'

b001;

ok=0;

/*****本次任务未完成(OK=0),计数器继续计数,任务继续执行******/

elseif(ok==0)begin

if(tp==0)p=1;

//收到继续信号,暂停标志量无效

/****运行时(无警报、暂停),总剩余时间计时器减计数****/

if(p==1&

c>

1&

water_out==0&

danger==0)begin

if(timer_a[7:

0]==8'

b00000000)timer_a[7:

0]=0;

0]==0)begintimer_a[3:

b1001;

4]=timer_a[7:

4]-4'

elsetimer_a[3:

0]=timer_a[3:

0]-4'

/*******s=0时,供水正常、未暂停则按设定时间进水*******/

0]==2'

b000&

p==1&

water_out==0)begin

if(timer[3:

0]==0)begin

ok=1;

//计数器计到0,本任务完成,ok置1,下个CP时令s加1,进入下一任务

if(c[2:

b100)begin

if(m==4'

b0001&

b100)timer[7:

0]=8'

b00110000;

elseif(m==4'

b0010)timer[7:

b00100000;

b0011)timer[7:

b00010000;

elseif(c[2:

b011||c[2:

b010)timer[7:

b00000101;

elsebegintimer[3:

0]=timer[3:

end

/*******s=1时,未暂停则按设定时间洗衣******/

elseif(s[2:

b001&

p==1)begin

if(timer[7:

//计数器计到0,本任务完成,ok置1下个CP时令s加1,进入下一任务

timer[1:

0]=2'

b10;

elseif(timer[3:

timer[3:

timer[7:

4]=timer[7:

/*******s=2时,未暂停则按设定时间排水*******/

b010&

p==1)begin

if(timer[1:

//计数器计到0,本任务完成,ok置1,下个CP时令s加1,进入下一任务

b11;

elsebegintimer[1:

0]=timer[1:

0]-2'

b01;

/*******s=3时,洗衣机盖关闭、未暂停则按设定时间甩干******/

danger==0&

c=c-3'

//甩干完成,则是本轮完成,工作轮数标志位c减1

/****s=4时,计时1秒,完成后在下个时钟周期finish复位*****/

b100&

2'

b000)begin

if(d==1)begin

d=0;

c=c-3'

//延时完成,ok置1,下个CP时复位finish,关掉完成提示音

elsebegind=1;

elsebegintimer=timer;

p=p;

timer_a=timer_a;

end//暂停时,计时器保持

5.供水情况感应模块Waterless:

modulewaterless(No_water,water_out);

inputNo_water;

//设定键No_water为输入

outputwater_out;

//设定供水状态标志量water_out为输入

regwater_out;

always@(posedgeNo_water)begin//按键No_water,供水标志量变化

if(water_out==0)water_out=1;

//由有水变无水

elsewater_out=0;

//由无水变有水

6.洗衣机盖开

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2