智能洗衣机控制系统器设计Verilog编程.doc

上传人:李司机 文档编号:1088975 上传时间:2022-06-21 格式:DOC 页数:21 大小:242.33KB
返回 下载 相关 举报
智能洗衣机控制系统器设计Verilog编程.doc_第1页
第1页 / 共21页
智能洗衣机控制系统器设计Verilog编程.doc_第2页
第2页 / 共21页
智能洗衣机控制系统器设计Verilog编程.doc_第3页
第3页 / 共21页
智能洗衣机控制系统器设计Verilog编程.doc_第4页
第4页 / 共21页
智能洗衣机控制系统器设计Verilog编程.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《智能洗衣机控制系统器设计Verilog编程.doc》由会员分享,可在线阅读,更多相关《智能洗衣机控制系统器设计Verilog编程.doc(21页珍藏版)》请在三一办公上搜索。

1、word智能洗衣机控制器设计报告目录2二功能简介根本功能 2扩展功能 3三模块设计与端口设置主模块main 3工作模式设定模块mode 4进水量设定模块Water_t 4无供水信号产生模块waterless 5危险信号产生模块Unsafe 5洗衣过程控制模块wash 6报警模块alart 7LED灯状态模块LEDs 7模块级连线图8四电路工作原理 9以s的值为主要状态标志的根本工作流程图 10五Verilog源程序与注释11六小结18一.设计背景。如今,带有微型控制芯片的家用电器迅速普与。通过用户简单的设定,这些智能家电能自动完成家务,并向用户与时提供反响信息。这极方便了人们的生活。 智能洗衣

2、机是智能家电的代表。用户只需按几个键,智能洗衣机就能自动完成注水、洗衣、排水、甩干等一系列工作,并在发生事故时给予用户报警并作出正确反响,极大减轻用户的洗衣负担,同时保障用户安全。基于以上功能要求,本人进展了智能洗衣机控制器的设计,并作出此设计报告。二功能简介。根本功能:a.可选5种洗衣模式,列举如下 1强力洗衣模式:工作程序为,注水-洗衣-排水-甩干 -注水-漂洗-排水-甩干 -注水-漂洗-排水-甩干。 其中洗衣为30分钟; 2普通洗衣模式:工作程序为,注水-洗衣-排水-甩干 -注水-漂洗-排水-甩干 -注水-漂洗-排水-甩干。 其中洗衣为20分钟; 3强力洗衣模式:工作程序为,注水-洗衣-

3、排水-甩干 -注水-漂洗-排水-甩干 -注水-漂洗-排水-甩干。 其中洗衣为10分钟; 4漂洗模式:工作程序为,注水-漂洗-排水-甩干 -注水-漂洗-排水-甩干。 5甩干模式:工作程序为,甩干。 以上五种模式中,进水时间为1-3分钟,漂洗为5分钟,排水2分钟,甩干3分钟。 b.显示洗衣完成所需时间。 c.用不同LED灯显示洗衣机当前的工作状态注水、洗衣、排水、甩干。d.完成洗衣任务时蜂鸣3声提示。扩展功能:a. 进水量可调。根据衣物的多少,进水时间有1分钟、2分钟、3分钟三个档位,并用一个数码管显示所设时间。b. 进水时无水报警。蜂鸣器发出2秒的报警声,并中止洗衣工作。供水正常后恢复工作。c.

4、 甩干时洗衣机盖被打开如此报警。2秒报警声,同时中止甩干操作。重新盖上盖子后恢复工作。d. 有按键音。e. 设有 暂停/继续 键。可随时按下暂停洗衣机的工作。再次按下如此继续工作。f. 用两个LED灯标志给电机的控制信号。在洗衣或漂洗时交替闪亮,象征电机顺时针/逆时针转动的转换。g. 用数码管显示当前工作状态注水、洗衣、排水、甩干所剩时间。三模块设计与端口设置。 为完成预定功能,设置1个主模块,7个子模块;使用2个时钟信号端口,6个按键,6个数码管和7个LED。主模块main:调用其他模块,共同完成预定功能。输入端口:CP_1k,CP:分别为1kHz和1Hz方波,分别用于 产生蜂鸣信号 和 系

5、统状态转换与计时的时钟信号; Start,Pause:开始 键和 暂停/继续 键;Set,Speed:功能设定,分别用来设定 工作模式 和 进水量; Open,No_water:警报信号,用来模拟打开洗衣机盖和供水中断事件的发生。输出端口: m3:0,v3:0:数码管显示信号,分别指示工作模式和进水量;Timer7:0,Timer_a7:0:数码管显示信号,分别表示当前过程剩余时间 和 完成所有工作剩余时间。LED_s,LED_wi,LED_wo,LED_w,LED_d和 LED_l,LED_r:LED驱动信号,分别指示 正在工作、进水、出水、洗衣、甩干 和 电机的顺时针、逆时针旋转 状态。a

6、:蜂鸣信号。用于 报警、提示 有键按下 和 洗衣完成。工作模式设定模块mode:设定工作模式。 输入端口: Set:设定工作模式模式的按键; 输出端口: m3:0:所设定的模式,BCD码,可取1到5的整数;进水量设定模块Water_t:设定进水量。输入端口: Speed:设定进水量,按键;输出端口:V3:0:所设定的进水时间,BCD码,可取取1到3的整数;无供水信号产生模块waterless:产生无水报警信号。输入端口:No_water:供水中断/恢复信号,按键;输出端口: water_out:供水情况指示量,值为1表示无供水,0表示供水正常; 危险信号产生模块Unsafe:产生危险报警信号。

7、输入端口: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表示工作完毕;timer7:0:当前工

8、作过程剩余时间,向上传给main中的Timer;timer_a7:0:完成全部工作剩余时间,传给main中的Timer_a;s2:0:工作状态指示量,从0到5分别指示 进水、洗衣、出水、甩干 和 完成信号有效;c2:0:取1到4,表示当前工作是第几轮; 报警模块alart:产生报警蜂鸣信号。输入端口:CP_1k:1kHz方波信号,用于产生蜂鸣信号,来自信号发生器;CP:1Hz方波信号,用于产生连续的蜂鸣信号,来自信号发生器;Start,Set,Pause,Speed:按键音有效信号。另外Pause还用于突发情况时人为控制暂停/继续的控制键;No_water,water_out,Open,dan

9、ger:控制报警音开始/完毕的信号,来自模块waterless和Unsafe;finish:完成工作后提示音有效信号,来自模块wash;输入端口: a:报警音驱动信号 tp:暂停/继续信号。tp=1时暂停,tp=0时继续。LED灯状态模块LEDs:控制LED的亮灭。输入端口:s,c:洗衣机的工作状态指示量,用作那个灯亮的判断条件,来自模块wash;p:运行/暂停状态标志量,用于暂停时的闪亮效果,来自模块alart;CP:1Hz方波信号, 造成闪亮效果,来自信号发生器。输出端口:LED指示灯驱动信号。LED_wi:进水; LED_wo:出水; LED_w:洗衣; LED_d:甩干; LED_s:

10、正在运行; LED_l:电机顺时针转; LED_r:逆时针转。用Leonardo综合出的模块级连线图如下:以上子模块端口具体用途在电工作原理中涉与。四电路工作原理。下面按电路的使用过程对电路工作原理进展描述。1. 按下Set键,在Set上升沿作用下,mode模块被调用,执行的操作是工作模式m增加1。其状态变化如下:m=1m=2m=3m=4m=5 设定好工作模式后,按Speed键设定进水时间,water_t模块被调用,执行的操作是进水时间v增加1。其变化原理与m类似,只是变化围是1-3分钟。 2.设定完毕,按Start键,洗衣过程开始,这时是wash模块被调用,wash模块中,由状态变量c记录洗

11、衣的轮数以进水到甩干为一轮,状态变量s代表当前的工作方式,即s=0为进水,s=1为洗衣,s=2为排水,s=3为甩干,s=4时进展完成提示音信号的延时,其状态转变流程如下:s=0s=1s=2=3s=3s=4=5其中,ok=1是上一任务完成的标志,模式1,2,3中,c初值为4。轮回3次后c=1,s由3变为4,finish置1有效,完成提示音响由module alart实现,同时延时计时器启动,计时完毕后,finish=0,提示音停。s=4状态的工作完成后,ok=0,s保持,直到下次启动Start再初始化。以s的值为主要状态标志的根本工作流程图: 3.报警功能,主要由alart模块实现。按No_wa

12、ter键,供水中断信号water_out=1有效。如果这时正在进水,如此置c_e=1使报警音延时计时器开始计时,同时c_t=1使报警信号有效,开始发出报警音。延时器计时完毕,c_e、c_t复位,报警音关闭,报警完毕。但进水工作仍处于中断状态。只有再此按下No_water键,表示供水恢复,如此继续进水。 甩干过程中由Open键触发的洗衣机盖被打开的报警原理同上。 工作完毕后的提示音由输入的finish信号控制。finish会有3个CP有效,和CP相与后,产生三声提示音。 暂停功能也有alart模块参与,按Pause键后,tp变化,会导致暂停有效信号取反,实现暂停/继续的功能。共用到7个LED来代

13、表系统的工作状态。其驱动信号有效与否由系统目前的工作状态来判断。其具体代表的状态和实现方法已在端口介绍和源程序注释中说明,不另赘述。五Verilog源程序与注释。1.主模块main:module main(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); input CP_1k,CP,Start,Pause,Set,Speed,Open,No_water;/输入端口声明,其中CP_1k、CP为时钟信号,其他为按键;/*输出端

14、口声明*/ output LED_wi,LED_wo,LED_w,LED_d,LED_s,LED_l,LED_r,a;/LED与蜂鸣信号 output3:0m;/工作模式 output3:0v;/进水时间 output7:0Timer,Timer_a;/剩余时间 wire3:0 m; wire2:0 s,c; wire water_out,danger,finish,p,a,tp; mode U1(Set,m3:0); /调用模式选择模块 Water_t U2(Speed,v3:0);/调用进水时间设定模块 wash U3(CP,Start,m3:0,v3:0,water_out,danger

15、,tp,p,finish,Timer7:0,Timer_a7:0,s2:0,c2:0);/调用洗衣过程控制模块 waterless U4(No_water,water_out);/调用供水情况感应模块 Unsafe U5(Open,danger);/调用洗衣机盖状态模块 alart U6(CP_1k,CP,Start,Set,Pause,Speed,No_water,water_out,Open,danger,finish,s2:0,a,tp);/调用报警信号产生模块 LEDs U7(s2:0,p,c2:0,CP,LED_wi,LED_wo,LED_w,LED_d,LED_s,LED_l,LE

16、D_r);/调用LED驱动模块Endmodule2.模式选择模块mode:module mode(Set,m); input Set; /设定键Set为输入 output3:0 m; /模式选择结果m为输出 reg3:0m;/*Set上升沿触发下,m由1到5循环变化*/ always(posedge Set)begin if(m3:0=4b0101|m=0)m3:0=4b0001; else m3:0=m3:0+4b0001; endendmodule3.进水时间设定模块water_t:module Water_t(Speed,v); input Speed; /设定键Speed为输入 out

17、put3:0v;/进水时间v为输出 reg3:0 v;/*Speed上升沿触发下,v由1到3循环变化*/ always(posedge Speed)begin if(v3:0=4b0011|v=0)v3:0=4b0001; else v=v+4b0001; endendmodule4.洗衣过程控制模块wash:module wash(CP,Start,m,v,water_out,danger,tp,p,finish,timer,timer_a,s,c); input CP,Start,tp,water_out,danger;/输入时钟信号与控制键 input 3:0m,v;/输入设定的工作模式

18、和进水时间 output7:0 timer,timer_a;/输出剩余时间 output2:0 s,c;/输出工作进程标志量 output finish,p;/输出完成信号与暂停有效信号 reg2:0 s,c; reg7:0timer,timer_a; reg ok,d; reg finish,p; always(posedge CP or posedge Start or posedge tp)begin/*按下Start键,根据所选模式给各变量赋初值*/ if(Start=1)begin case(m) 4b0001:begin s2:0=3b000;timer=v;c=3b100; ti

19、mer_a=v+v+v+8b01100111; if(timer_a3:04b1001)begin timer_a7:0=timer_a7:0+8b00000110;end end 4b0010:begin s2:0=3b000;timer=v;c=3b100; timer_a=v+v+v+8b01010111; if(timer_a3:04b1001)begin timer_a7:0=timer_a7:0+8b00000110;end end 4b0011:begin s2:0=3b000;timer=v;c=3b100; timer_a=v+v+v+8b01000111; if(timer

20、_a3:04b1001)begin timer_a7:0=timer_a7:0+8b00000110;end end 4b0100:begin s2:0=3b000;timer=v;c=3b011; timer_a=v+v+8b00100111; if(timer_a3:04b1001)begin timer_a7:0=timer_a7:0+8b00000110;end end 4b0101:begin c=3b010;s2:0=3b011;timer=8b00000011; timer_a=8b00000100; end default c=0; endcase ok=0; finish=0

21、; d=0; p=1;/使暂停标志量无效 end else if(tp=1)p=0;/收到暂停信号,暂停标志量有效 else if(CP=1) begin/时钟信号CP触发下,洗衣机按既定程序工作/*一个任务完成OK=1,s加1,进入下个任务的执行状态*/ if(ok=1)begin if(s2:0=3b011&c2:03b001)begin s2:0=3b000; timer=v; ok=0; end else if(c=1)begin s2:0=3b100; finish=1; /c=1,如此以洗过足够多轮,finish信号有效,经过s=4时的延时将在两CP周期后复位 ok=0; time

22、r=0; end else if(c=0)begin s2:0=s2:0; ok=0; finish=0; timer=0; end else begin s=s+3b001;ok=0;end end/*本次任务未完成OK=0,计数器继续计数,任务继续执行*/ else if(ok=0)begin if(tp=0)p=1;/收到继续信号,暂停标志量无效/*运行时无警报、暂停,总剩余时间计时器减计数*/ if(p=1&c1&water_out=0&danger=0)begin if(timer_a7:0=8b00000000)timer_a7:0=0; if(timer_a3:0=0)begin

23、 timer_a3:0=4b1001;timer_a7:4=timer_a7:4-4b001;end else timer_a3:0=timer_a3:0-4b0001; end/*s=0时,供水正常、未暂停如此按设定时间进水*/ if(s2:0=2b000&p=1&water_out=0)begin if(timer3:0=0)begin ok=1;/计数器计到0,本任务完成,ok置1,下个CP时令s加1,进入下一任务 if(c2:0=3b100)begin if(m=4b0001&c2:0=3b100)timer7:0=8b00110000; else if(m=4b0010)timer7

24、:0=8b00100000; else if(m=4b0011)timer7:0=8b00010000; end else if(c2:0=3b011|c2:0=3b010)timer7:0=8b00000101; end else begin timer3:0=timer3:0-4b0001;ok=0;end end /*s=1时,未暂停如此按设定时间洗衣*/ else if(s2:0=2b001&p=1)begin if(timer7:0=0)begin ok=1;/计数器计到0,本任务完成,ok置1下个CP时令s加1,进入下一任务timer1:0=2b10; end else if(ti

25、mer3:0=0)begin timer3:0=4b1001; timer7:4=timer7:4-4b0001; ok=0; end else begin timer3:0=timer3:0-4b0001;ok=0;end end/*s=2时,未暂停如此按设定时间排水*/ else if(s2:0=2b010&p=1)begin if(timer1:0=0)begin ok=1;/计数器计到0,本任务完成,ok置1,下个CP时令s加1,进入下一任务timer1:0=2b11; end else begin timer1:0=timer1:0-2b01;ok=0;end end/*s=3时,洗

26、衣机盖关闭、未暂停如此按设定时间甩干*/ else if(s2:0=3b011&c2:03b001&danger=0&p=1)begin if(timer1:0=0)begin ok=1;/计数器计到0,本任务完成,ok置1,下个CP时令s加1,进入下一任务 c=c-3b001;/甩干完成,如此是本轮完成,工作轮数标志位c减1 end else begin timer1:0=timer1:0-2b01;ok=0;end end/*s=4时,计时1秒,完成后在下个时钟周期finish复位 */ else if(s2:0=3b100&c2:02b000)begin if(d=1)begin ok=

27、1;d=0;c=c-3b001;/延时完成,ok置1,下个CP时复位finish,关掉完成提示音 end else begin d=1;ok=0;end end else begin timer=timer;p=p;timer_a=timer_a;end/暂停时,计时器保持 end end endendmodule5.供水情况感应模块Waterless:module waterless(No_water,water_out); input No_water;/设定键No_water为输入 output water_out;/设定供水状态标志量water_out为输入 reg water_out

28、; always(posedge No_water)begin/按键No_water,供水标志量变化 if(water_out=0)water_out=1;/由 有水 变 无水 else water_out=0;/由 无水 变 有水 endendmodule6.洗衣机盖开合状态感应模块Unsafe:module Unsafe(Open,danger); input Open;/设定键Open为输入 output danger;/设定洗衣机盖状态标志量danger为输入 reg danger; always(posedge Open)begin/按键Open,洗衣机盖状态标志量变化 if(dan

29、ger=1)danger=0;/由 合上 变 打开 else danger=1;/由 打开 变 合上 endendmodule7.报警模块alart:module alart(CP_1k,CP,Start,Set,Pause,Speed,No_water,water_out,Open,danger,finish,s,a,tp); input CP_1k,CP,Start,Set,Pause,Speed,No_water,water_out,Open,danger,finish;/输入时钟信号与报警音控制信号 input 2:0s; /输入当前工作状态 output a,tp;/输出报警信号和暂

30、停允许信号 reg c_e,c_t,tp; reg2:0 count; always(posedge Pause)begin/暂停/继续键Pause上升沿触发下, if(tp=1)tp=0;暂停允许信号改变; else tp=tp+1; end always(posedge CP or posedge No_water or posedge Open or posedge Start)begin if(Start)c_e=0;/启动时,延时计时器使能位c_e复位为0 else if(No_water|Open)begin if(water_out=1&s2:0=3b000)|(danger=1

31、&s2:0=3b011)c_e=1;/发生危险事件,使能端c_e置1 else c_e=0; end else if(CP)begin/c_e=1,以CP为时钟信号开始计时 if(count2:0=3b010)begin c_t=0;c_e=0;count2:0=0;end else if(c_e=1)begin count2:0=count2:0+3b001;c_t=1;end/计时中,计时进展标志位c_t=1 else if(c_e=0)count=0; end end assign a=(c_t|CP&finish)|(Start|Set|Pause|Speed)&CP_1k;/假设警报

32、延时计时器正在计时c_t=1或工作完成提示信号有效finish=1或有键按下Start、Set、Pause、Speed如此发出相应报警音。endmodule 8.LED驱动模块LEDs:module LEDs(s,p,c,CP,LED_wi,LED_wo,LED_w,LED_d,LED_s,LED_l,LED_r); input p,CP;/输入暂停允许信号p、时钟信号CP input 2:0s,c;/输入工作状态标志位s、c output LED_wi,LED_wo,LED_w,LED_d,LED_s,LED_l,LED_r;/输出各LED灯驱动电平 assign LED_wi=p?(s=3

33、b000&c1):CP&(s=3b000&c0);/进水时,LED_wi灯亮;暂停时闪烁 assign LED_w=p?(s=3b001&c1):CP&(s=3b001&c1);/洗衣时,LED_w灯亮;暂停时闪烁 assign LED_wo=p?(s=3b010&c1):CP&(s=3b010&c0);/排水时,LED_wo灯亮;暂停时闪烁 assign LED_d=p?(s=3b011&c1):CP&(s=3b011&c0);/甩干时,LED_wi灯亮;暂停时闪烁 assign LED_s=p?(s!=3b100&c1):CP&(s!=3b100&c1);/运行时,LED_s灯亮;暂停时闪

34、烁 assign LED_l=(s=3b001|s=3b011)&c1)&p&CP; assign LED_r=(s=3b001&c1)&p&!CP;/LED_l与LED_r交替亮,表示电机的换向endmodule六小结。本着尝试的心态,我摸索着使用Quartus2 9.0软件进展本次设计。与之前使用的Maxplus2相比,所用到的根本功能相似。在程序调试仿真过程中,我体会到Quartus2功能更为强大。它的报错比拟准确,更有利于debug。而且Quartus2对程序语法的要求更严格。比如在以A、B两信号触发的模块中,最上层的条件判断语句必须以A、B的状态为判断依据,如果写个ifc=0之类的,

35、即使逻辑上没有冲突,编译程序也会报错。而maxplus2没有这么严格。这样虽然写程序时要注意很多东西,会“麻烦些,但正规的语法更能保障程序在实践中的可行性。本次设计的根本功能在第一周就实现,而对扩展功能的编写、调试如此花了近两周。可见功能变复杂,实现起来会成倍的复杂。还好我前期的框架设计的比拟好,防止了推倒重来的情况发生。对于本次设计的具体容,个人觉得对洗衣机工作状态的划分和状态之间转变条件的把握是设计成功的难点和关键。我见过其他选此题目同学的编程思路,他们根本是按模式确定总工作时间,开始倒计时,计到一定数段,点亮响应的LED灯。我个人觉得这更像一个秒表而不是洗衣机智能控制器。而不以总时间为设计根底,针对洗衣机工作状态与其转换方式编程,更有效,也更易于功能扩展。将模式13理解为洗衣3个轮回,模式4是2个轮回,而每个轮回周期包含类似的几个状态,这是这类设计的精华所在。本设计中最多洗3个轮回,两种设计思路难分伯仲,但如果这个控制器有成百上千次周期性运作,显然要采用基于状态转换的编程方法,否如此需要一个很大的计数器,过程冗杂,浪费资源。除了技术上的经验增长,本次设计的最大收获是又一次体会到设计工作的艰巨性。任何一个小疏忽都可能造成很大的损失,整个设计过程要投入充分的时间精力,专注慎重的做好每个环节。20 / 21

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号