《洗衣机控制电路设计.doc》由会员分享,可在线阅读,更多相关《洗衣机控制电路设计.doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流洗衣机控制电路设计.精品文档.洗衣机控制电路 摘要: FPGA即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。他是作为专用集成电路(ASIC)领域中的一种半定制电路儿出现的,功能强大,具有相同的电路写入不同的程序就能实现不同的功能的特点,适合制作各种智能化产品。本课题所作的工作是基于FPGA的洗衣机设计,用verilog语言编写控制系统的程序,并通过Quartus软件编译后下载到硬件电路板上,模拟洗衣机控制系统的工作。本文主要以FPGA为基础来设计洗衣机控制系统。按照课程设计的要求,提出了系统的总设计方
2、案,详细的介绍了系统的总体设计思路;基本实现洗涤,漂洗,脱水,和注水等四种功能和转换;以及设定注水时间、浸泡时间、洗涤时间、脱水时间、并且具有上电复位功能,同时具有启动/暂停控制。关键字:FPGA verilog语言 洗衣机 功能一:总体方案设计1.1:设计要求:设计一个洗衣机控制器,能够实现洗涤,漂洗,脱水,注水四种功能。使用按键模拟对洗衣机的控制,能够设置工作模式(ModeVlaue),通过modeclk进行模式选择,具有上电复位功能,同时具有启动/暂停控制。为了便于观察,将洗衣机的工作模式(workmode),和所剩余的工作时间(worktime)用数码管倒计时显示出来,并将洗衣机当前所
3、处的状态用发光管LED显示出来,洗衣结束后,结束指示灯亮3秒钟。在漂洗时,如果没有注入,将出现无水报警声,同时LED不断闪烁,提示用户注水。1.2:模式选择说明:模式1 单洗涤模式:只洗涤(时间自选)模式2 单漂洗模式:只漂洗(25秒钟)模式3 单脱水模式:只脱水(15秒钟)模式4 漂洗+脱水模式:漂洗(25秒钟)+脱水(15秒钟)模式5 全程模式:洗涤+脱水(15秒钟)+漂洗(25秒钟)+脱水(15秒钟)操作完毕用发光二极管亮3秒钟提示,脱水后无水注入自动报警。外部分别提供频率1Hz,1kHz的方波信号,用于系统时钟与报警信号。当选择模式1与模式5时,需要先进行洗涤时间设定,系统才能工作。1
4、.3:洗涤时间设定如表1表1 洗衣时间选择(时间单位:秒)setwashtime(洗涤时间选择)washtime(洗涤时间)worktime1(模式1工作时间)worktime5(模式5工作时间)000011570152207520325802543085305359035二:设计原理2.1:预设置6个状态: 根据系统功能要求,采用状态机设计比较容易实现。整个系统有6个状态:洗涤,漂洗,脱水,等待注水,无水报警,结束。系统进入初始状态,将自动在各状态之间切换直至结束。 :洗涤状态S0 洗涤状态的持续时间由洗涤时间(washtime)确定,当ModeVlaue=1时,一旦洗涤时间到了,系统进入结
5、束状态S5。当ModeVlaue=5时,洗涤时间到时转化为下一个状态脱水状态S2。在洗涤过程中,洗涤状态等一直点亮,同时LED数码管显示洗衣工作时间的倒计时。 :漂洗状态S1 漂洗状态持续25秒钟。当ModeVlaue=2时,系统就进入漂洗状态S1,当漂洗时间到了,系统进入结束状态S5。当ModeVlaue=4时,系统首先进入漂洗状态S1,当漂洗时间到了,就转入下一个状态脱水状态S2,进行脱水。 :脱水状态S2 脱水持续15秒钟。如果工作时间worktime为1,表示脱水状态结束后,相应工作模式就运行完毕;如果工作时间大于1,表示需要继续运行其他状态。 :等待注水状态S3 等待注水状态给用户5
6、秒钟注水时间,如果5秒钟内用户注水了,则系统自动转入漂洗状态S1。如果没有注水,则进入无水报警状态S4。 无水报警状态S4 无水报警状态时,蜂鸣器一直发声,同时要求注水状态灯一直闪烁,如果有水注入,立即跳出报警状态,进入漂洗状态S1。 :结束状态S5 结束状态指示灯亮3秒钟,提示已结束。2.2:洗衣控制电路系统模块图洗衣控制系统可分为四个模块,洗衣状态显示,洗衣模式显示,工作时间显示,洗衣控制电路,外部输入,整个系统模块图如图洗衣状态显示洗衣模式显示工作时间显示洗衣控制电路工作模式选择a洗涤时间选择时钟模式选择使能开始注水系统复位启动暂停图1 洗衣控制电路系统模块图2.3: 系统程序流程图 设
7、置工作模式ModeValueModeValue=1或5设置洗衣时间开始工作NY洗衣i 脱水i YY注水漂洗报警结束TwashtimeT=washtimeT15T=3worktime=0T=5T25注水waterfull=1T=5无水waterfull=0T5注水waterfull=1Modevalue=3Modevalue=1或5Modevalue=2或4worktime=0图2 系统程序流程图流程图说明:1:系统启动后,按system_reset系统复位键进行系统复位,stateflag系统状态指示灯都不亮,2:setmode系统模式使能后, 当ModeValue=1,系统进入单洗涤工作模式
8、, 当ModeValue=2,系统进入单漂洗工作模式, 当ModeValue=3,系统进入单脱水工作模式, 当ModeValue=4,系统进入漂洗+脱水工作模式, 当ModeValue=5,系统进入全程工作模式。 当ModeValue=1或ModeValue=5时,通过setwashtime设置洗涤时间。3:只要工作时间到了就进入停止状态。系统脱水工作结束后,如果工作时间没有到,就要求5秒内给洗衣机注水,通过waterfull检测水是否满了。如果没有满(waterfull=0)就进入报警,报警不断进行,直到用户注入水满了,停止报警,系统进入漂洗状态。三:系统模块设计3.1 分频器模块EDA实验
9、箱提供的工作时钟为48MHz,而洗衣机系统工作的时钟为1Hz,报警频率1kHz,因此需要设计两个分频器,分频得到1Hz和1kHz. 分频器可用计数器实现,关键的两个always语句如下:always (posedge system_clk) begin count24=count24+1b1; if(count24=25d24000000) begin count24=25d0; clk=clk; end end always (posedge system_clk) begin count1kHz=count1kHz+1b1; if(count1kHz=25d240000) begin co
10、unt1kHz=25d0; clk_1kHz=clk_1kHz; end endsystem_clk为48MHz,分频得到clk,clk_1kHz信号分别为1Hz和1kHz。3.2计数器模块(count5):模5计数器,用于对预设置的5个状态进行计数转换。module count5(out,reset,clk); output3:0 out; input reset,clk; reg3:0 out; always (posedge clk) begin if (reset) out=4b0000; else if(out=4b0101) out=4b0000; /同步复位 else out=o
11、ut+4b0001; /计数 end endmodule 3.3动态扫描显示模块module scan_led(clk_1k,d,dig,seg); input clk_1k; /扫描时钟 input 11:0 d; /显示的数据,3为数码管显示 output 7:0dig; /位选择信号 output 7:0seg; /段码信号 reg7:0 seg_r; reg7:0 dig_r; reg3:0 disp_dat; reg1:0 count; assign dig = dig_r; assign seg = seg_r; always (posedge clk_1k) begin coun
12、t =count + 1b1; end always (posedge clk_1k) begin case(count) 2d0:disp_dat = d11:8; 2d1:disp_dat = d7:4; 2d2:disp_dat = d3:0; default: disp_dat = d11:8; endcase case(count) 2d0:dig_r = 8b01111111; 2d1:dig_r = 8b10111111; 2d2:dig_r = 8b11011111; default: dig_r = 8b01111111; endcase end always (disp_d
13、at) begin case(disp_dat) 4h0:seg_r = 8hc0; 4h1:seg_r = 8hf9; 4h2:seg_r = 8ha4; 4h3:seg_r = 8hb0; 4h4:seg_r = 8h99; 4h5:seg_r = 8h92; 4h6:seg_r = 8h82; 4h7:seg_r = 8hf8; 4h8:seg_r = 8h80; 4h9:seg_r = 8h90; 4ha:seg_r = 8h88; 4hb:seg_r = 8h83; 4hc:seg_r = 8hc6; 4hd:seg_r = 8ha1; 4he:seg_r = 8h86; 4hf:s
14、eg_r = 8h8e; endcase endendmodule四:洗衣机控制电路状态机仿真结果与分析:4.1单洗涤模式仿真图3-1单洗涤模式,工作时间15秒功能仿真图 分析: 1:从图3-1可以看到,首先system_reset出现上升沿时,系统复位,状态指示灯全灭(stateflag=“000”),显示工作模式的数码管(workmode)显示为0,表示没有选择任何模式。显示工作时间(wtimeHigh、wtimeLow)的数码管显示为“00”,表示时间开始为0,没有设置工作时间。2: 然后工作模式使能setmode为高电平,表示系统处于工作模式设置状态。 此时就可以设置工作模式了,按mo
15、declk键,产生一个脉冲,模式选择计数器就为1,这时显示工作模式的数码管显示为1,同时按washtimeclk键,选择洗涤时间,按一下产生一个脉冲,此时洗涤时间为15秒,工作时间也就为15秒钟。3:当setmode为低电平后,系统退出工作模式与工作时间设置状态,系统就开始进入状态机工作。这时状态指示灯stateflag显示100(亮, 灭,灭),stateflag三个LED灯分别表示进入洗涤状态,进入漂洗状态,进入脱水状态)。数码管显示工作时间倒计时,从“15”倒计到“00”。4:当暂停运行信号ispause为高电平时,表示按下ispause键,系统就暂停,数码管显示也暂停,当ispause
16、为低电平时,表示系统继续运行,数码管数字就继续倒数计数。图3-2 单洗涤模式,工作时间15秒功能仿真图 分析: 从图3-2可以看到,当显示工作时间的数码管显示为“00”后,系统工作结束指示灯enLED就会亮3秒钟,over指示灯也指示工作结束了。同时,状态指示灯stateflag为“000”表示,全灭,系统进入停止状态了。图4-1单洗涤模式,工作时间20秒功能仿真图分析: 从图4-1为系统工作在单洗涤模式,工作时间设置为20秒的情况。在setmode为高电平,即工作模式设置状态下,工作时间选择键washtimeclk,连续按两下,出现两个脉冲,表示设置工作时间为20秒。在正常工作的时候,数码管
17、显示从“20”倒计到“00”。当ispause为高电平时,系统暂停,当ispause为低电平时,系统继续运行。图4-2单洗涤模式,工作时间20秒功能仿真图 从图4-2可以看到,wtimeHigh,wtimeLow显示倒计数为“00”时,状态指示stateflag由“100”立即变为“000”,表示系统结束了。enLED亮3秒钟,显示系统进入结束状态。4.2 单漂洗模式仿真图5-1 单漂洗模式,工作时间25秒功能仿真图分析:1:从图5-1可以看到,首先system_reset出现上升沿时,系统复位,状态指示灯全灭(stateflag=“000”),显示工作模式的数码管(workmode)显示为0
18、,表示没有选择任何模式。显示工作时间(wtimeHigh、wtimeLow)的数码管显示为“00”,表示时间开始为0,没有设置工作时间。2:然后工作模式使能setmode为高电平,表示系统处于工作模式设置状态。此时就可以设置工作模式了,按modeclk键两下,产生2个脉冲,模式选择计数器就为2,这时显示工作模式的数码管显示为2,同时按washtimeclk键,选择洗涤时间,按两下产生两个脉冲,此时洗涤时间为25秒,工作时间也就为25秒钟。 当setmode为低电平后,系统退出工作模式与工作时间设置状态,系统就开始进入状态机工作。这时状态指示灯stateflag显示“010”(灭,亮,灭)。数码
19、管显示工作时间倒计时,从“25”倒计到“00”。3:当暂停运行信号ispause为高电平时,表示按下ispause键,系统就暂停,数码管显示也暂停,当ispause为低电平时,表示系统继续运行,数码管数字就继续倒数计数。图5-2 单漂洗模式,工作时间25秒功能仿真图分析:从图5-2可以看到,当显示工作时间的数码管显示为“00”后,系统工作结束指示灯enLED就会亮3秒钟,over指示灯也指示工作结束了。同时,状态指示灯stateflag由“010”,变为“000”表示,系统由漂洗状态转入停止状态了。4.3 单脱水模式仿真图6-1 单脱水模式,工作时间15秒功能仿真图分析:1:从图6-1可以看到
20、,首先system_reset出现上升沿时,系统复位,状态指示灯全灭(stateflag=“000”),显示工作模式的数码管(workmode)显示为0,表示没有选择任何模式。显示工作时间(wtimeHigh、wtimeLow)的数码管显示为“00”,表示时间开始为0,没有设置工作时间。2:然后工作模式使能setmode为高电平,表示系统处于工作模式设置状态。此时就可以设置工作模式了,按modeclk键三下,产生3个脉冲,模式选择计数器由1变为3,这时显示工作模式的数码管显示为3,同时按washtimeclk键,选择洗涤时间,按两下产生两个脉冲,此时洗涤时间变为15秒,工作时间也就为15秒钟。
21、当setmode为低电平后,系统退出工作模式与工作时间设置状态,系统就开始进入状态机工作。这时状态指示灯stateflag显示“001”(灭,灭,亮)。数码管显示工作时间倒计时,从数字“15”倒计到“00”。3:当暂停运行信号ispause为高电平时,表示按下ispause键,系统就暂停,数码管显示也暂停,当ispause为低电平时,表示系统继续运行,数码管数字就继续倒数计数。图6-2 单脱水模式,工作时间15秒功能仿真图分析: 从图6-2可以看到,当显示工作时间的数码管显示为“00”后,系统工作结束指示灯enLED就会亮3秒钟,over指示灯也指示工作结束了。同时,状态指示灯statefla
22、g由“001”(灭,灭,亮),变为“000”(全灭),系统由漂洗状态转入停止状态了。4.4漂洗+脱水模式仿真图7-1洗涤+漂洗模式,工作时间40秒功能仿真图分析:1:从图7-1可以看到,首先system_reset出现上升沿时,系统复位,状态指示灯全灭(stateflag=“000”),显示工作模式的数码管(workmode)显示为0,表示没有选择任何模式。显示工作时间(wtimeHigh、wtimeLow)的数码管显示为“00”,表示时间开始为0,没有设置工作时间。2:然后工作模式使能setmode为高电平,表示系统处于工作模式设置状态。此时就可以设置工作模式了,按modeclk键四下,产生
23、4个连续脉冲,模式选择计数器由1变到4,这时显示工作模式的数码管显示为4,同时按washtimeclk键,选择洗涤时间,按两下产生两个脉冲,此时洗涤时间变为40秒,工作时间也就为40秒钟。当setmode为低电平后,系统退出工作模式与工作时间设置状态,系统就开始进入状态机工作。这时状态指示灯stateflag显示由“111”全亮变为“010”(灭,亮,灭)。数码管显示工作时间“40”,倒计时,从数字“40”倒计到“00”。3:当暂停运行信号ispause为高电平时,表示按下ispause键,系统就暂停,数码管显示也暂停,当ispause为低电平时,表示系统继续运行,数码管数字就继续倒数计数。图
24、7-2洗涤+漂洗模式,工作时间40秒功能仿真图分析: 从图7-2可以看到,当显示工作时间的数码管显示为“15”后,系统转入脱水状态,状态指示灯由“010”(表示漂洗状态)变为“001”(表示脱水状态),数码管仍然倒计数,脱水工作15秒后,数码管显示工作时间结束“00”,状态指示灯变为“000”(表示全灭,系统停止) 系统工作结束指示灯enLED就会亮3秒钟,over指示灯也指示工作结束了。4.5全程模式仿真图8-1全程模式,工作时间75秒功能仿真图1: 从图8-1可以看到,首先system_reset出现上升沿时,系统复位,状态指示灯全灭(stateflag=“000”),显示工作模式的数码管
25、(workmode)显示为0,表示没有选择任何模式。显示工作时间(wtimeHigh、wtimeLow)的数码管显示为“00”,表示时间开始为0,没有设置工作时间。2:然后工作模式使能setmode为高电平,表示系统处于工作模式设置状态。此时就可以设置工作模式了,按modeclk键五下,产生5个连续脉冲,模式选择计数器由1变到5,这时显示工作模式的数码管显示为5,同时按washtimeclk键,选择洗涤时间,按两下产生两个脉冲,此时洗涤时间设置为20秒,工作时间就变为75秒,工作时间也就为75秒钟。当setmode为低电平后,系统退出工作模式与工作时间设置状态,系统就开始进入状态机工作。这时状
26、态指示灯stateflag显示由“111”全亮(表示模式选择状态)变为“100”(表示洗涤状态)。数码管显示工作时间“75”,倒计时,从数字“75”开始倒计。3:当暂停运行信号ispause为高电平时,表示按下ispause键,系统就暂停,数码管显示也暂停,当ispause为低电平时,表示系统继续运行,数码管数字就继续倒数计数。图8-2全程模式,工作时间75秒功能仿真图分析: 从图8-2所示,当洗涤工作20秒后,此时工作时间显示剩余55秒钟时,状态指示信号有“100”(表示洗涤状态)变为“001”(表示脱水状态),系统进入脱水工作,当脱水工作15秒钟后,系统进入漂洗状态,状态指示灯由“001”
27、(表示脱水状态)变为“010”(表示脱水状态),数码管一直显示工作模式为5,此时数码管显示工作剩余时间为40秒钟,系统进入漂洗状态。图8-3全程模式,工作时间75秒功能仿真图 从图8-3可以看到,系统漂洗工作25秒钟后,状态指示信号由“010”(表示漂洗状态)变为“001”(表示脱水状态),系统进入脱水工作。数码管此时显示“15”,表示需要脱水15秒钟。当脱水工作15秒钟后,系统就停止工作了,状态指示灯全灭“000”,工作模式与工作时间显示的数码管都为0,工作结束后,系统结束提示LED等高电平持续3秒钟,表示亮3秒钟。五:引脚锁定与编程图9 引脚锁定图锁定引脚后,编译,生成sof格式文件,通过
28、ByteBlasteII下载,然后进行硬件测试。六:问题与分析 1:在设计洗衣机的状态显示是,一开始设计的是用静态数码管显示,回来在实验箱上发现是共阳性的动态数码管,所以对程序做了相应的修改。本打算用七段数码管显示工作状态的,但通过编程实现,发现将状态变量译码在数码管上显示,并不是很容易,在编写程序的过程中遇到了一些困难,所以改用三个发光二极管是否发光来显示工作状态,这样可以将状态的传递变量,直接传递给控制发光二极管的发光控制信号,就可以实现功能,这样程序也变得较简单。 2:仿真时花费时间过多,后来发现自己设置的结束时间过长,于是缩短了结束时间。 3:注水量用时间来控制不够完善,有待改进,老师
29、建议此处可以添加一个控制模块,用测试洗衣机内部水位高低来衡量注水量。 4:事先未对实验室提供的实验箱进行了解,导致理论上设计的按键与实际提供的设备有所偏差,相应的对程序又做了一定的修改。增加了实验的繁琐。七:总结与心得关于这个洗衣机控制电路,是用状态机的工作原理进行系统的设计,这样分解下来,设计会容易点,思路也比较简单,洗衣机主要有6个状态:洗涤,漂洗,脱水,等待注水,无水报警,结束;要实现几种状态的多次循环的改变,其他的还有计时和数码显示的功能。所以电路可以设计为大致calwashtime、count5、scan_led、washer、通过每个模块的设计最后组合即可完成系统设计。通过这次设计
30、,对verilog的设计方法大致有了一些技巧性的了解,为以后的硬件设计打下了基础,对FPGA编程,定时器和计数器的设计都熟悉起来,加深了对时序组合电路的印象。虽然说实验并不完善,还有很多可以提高的地方,我也遇到了很多问题和困难,但能够基本解决问题,完成设计内容,也提高了我的动手能力。八:参考文献EDA技术实用教程(第三版)科学出版社EDA实验教程(一)周立功 等编著 广州致远电子有限公司九:附录 预置状态选择和编码电路(calwashtime)module calwashtime(setwashtime,washtime,worktime1,worktime5); input 3:0 setw
31、ashtime; output 5:0 washtime; output 7:0 worktime1,worktime5; reg 5:0 washtime; reg 7:0 worktime1,worktime5;always (setwashtime0 or setwashtime1 or setwashtime2 or setwashtime3) begin case(setwashtime)4b0000:begin washtime=0;worktime5=8h00;worktime1=8h00; end4b0001:begin washtime=15;worktime5=8h70;w
32、orktime1=8h15; end4b0010:begin washtime=20;worktime5=8h75;worktime1=8h20; end4b0011:begin washtime=25;worktime5=8h80;worktime1=8h25; end4b0100:begin washtime=30;worktime5=8h85;worktime1=8h30; end4b0101:begin washtime=35;worktime5=8h90;worktime1=8h35; end endcase endEndmodule主程序模块(washer)module washe
33、r( modeclk, washtimeclk,system_clk,system_reset,setmode,stateflag, /stateflag=wash,rinse,dewaterispause,needwaterflag,alarm,dig,seg,enLED); input modeclk,washtimeclk,ispause,setmode; input system_clk; input system_reset; output needwaterflag,alarm,enLED; output 2:0 stateflag; output 7:0dig; output 7
34、:0seg reg 3:0 workmode; reg 7:0 worktime; reg 5:0 state; reg 2:0 stateflag; reg 5:0 washtime; reg clk,clk_1kHz; reg over; reg waterfull; reg needwaterflag,enLED; reg 5:0 sec_cnt; reg 1:0 flag_1Hz; reg start,ModeChange; reg en_alarm,overflag; reg 2:0 flag_end; reg flag_first,pauseflag; reg 3:0 DSQ; r
35、eg askpause1,askpause2,setpause; reg 24:0 count24,count1kHz; wire 3:0 ModeVlaue,setwashtime,wtimeHigh,wtimeLow; wire 7:0 worktime1,worktime5; wire 5:0 washtime1; wire clk0; parameter S0=6b000001; parameter S1=6b000010; parameter S2=6b000100; parameter S3=6b001000; parameter S4=6b010000; parameter S5
36、=6b100000; count5 cnt_mode(ModeVlaue,system_reset,modeclk); count5 cnt_mode2(setwashtime,system_reset,washtimeclk); assign alarm=en_alarm & clk_1kHz; assign wtimeHigh=worktime7:4; assign wtimeLow=worktime3:0; scan_led scan_led1(.clk_1k(clk_1kHz),.d(workmode,wtimeHigh,wtimeLow),.dig(dig),.seg(seg); c
37、alwashtime calwashtime1(.setwashtime(setwashtime),.washtime(washtime1),.worktime1(worktime1),.worktime5(worktime5); always (posedge system_clk) begin count24=count24+1b1; if(count24=25d24000000) begin count24=25d0; clk=clk; end end always (posedge system_clk) begin count1kHz=count1kHz+1b1; if(count1
38、kHz=25d240000) begin count1kHz=25d0; clk_1kHz=clk_1kHz; end end always (posedge clk or posedge system_reset ) begin if(system_reset) DSQ=0; else begin if(over)beginif(DSQ=4b0011) begin DSQ=DSQ; /同步复位 enLED=0; endelse begin DSQ=DSQ+4b0001; /计数 enLED=1; end end else enLED=0; end end always (posedge cl
39、k or posedge system_reset ) begin if(system_reset)beginsec_cnt =0;flag_1Hz =0;en_alarm =0;needwaterflag =0;stateflag =3b000;over =0;flag_first=0;overflag=0;start=1;workmode=4b0000;worktime=8h00;washtime=6b000000;waterfull=1; end else begin if(setmode=1 ) begin if(ModeVlaue=1) /wash begin workmode=4b0001; state=S0; flag_end=0; washtime=washtime1; worktime=worktime1; stateflag=3b111; endelse if(ModeVlaue=2) /rinse begin workmode=4b0010; state=S1;
限制150内