智能洗衣机控制器设计verilog编程
基于Verilog HDL的FPGA程序(智能洗衣机)

华中科技大学电子线路课程设计题目:智能洗衣机院系:控制科学与工程系班级:自动化100X班姓名:联系方式:fanjunchao1991@指导老师:目录一题目分析。
1二系统流程图.。
2三主要模块介绍.。
5四各按键功能.。
6 五仿真波形.。
7 六实验总结。
8 七附录。
9一:题目分析本次课程设计要求以Verilog HDL硬件描述语言为基础,以DE2开发板为工具,编写智能洗衣机的模拟程序。
首先,我在熟悉题目要求的前提下,将题目要求划分为以下几个小的项目,每个项目尽量用单独的模块实现其功能:①洗衣过程的转换:控制洗衣过程在每个过程对应的状态机之间转换,用control.v模块实现。
②洗衣时间的显示:通过直接调用上学期编写的24小时智能时钟程序的计时模块,并用总时间减去已用时间得到剩余时间,用led_show.v实现。
本程序的特色:①led灯表示水位:通过一定的算法,实现用led灯的亮灭表示水位。
Led依次点亮表示注水过程,相反,表示排水和甩干过程。
②1602 LCD液晶屏:用LCD显示所有操作步骤和过程,包括选择模式,当前洗衣模式和状态,洗衣完毕等。
这些过程都是用LCD液晶屏具体显示。
③按键使用和去抖:因为要使用按键进行模式的选择,所以我用软件去抖的方式实现按键按动时的去抖。
④暂停键模拟断电保护:设计了一个暂停键,模拟真实情况中的断电保护。
当暂停时模拟现实中的断电;暂停结束模拟现实中的重新上电,程序从断点继续运行。
二:系统流程图MODE 1 OR MODE 2 OR MODE 3:MODE 4MODE 5流程图说明:第一个为总的控制系统的流程图,后面三个为总流程图中,每种模式的详细流程图。
三:主要模块介绍module my_start:顶层模块,调用下层模块。
module HZ_1:分频模块,通过10分频和5分频将50Mhz分频成为1hz。
module control:控制模块,控制洗衣模式状态机的转换。
Verilog课程设计_洗衣机设计电路

Verilog课程设计----洗衣机控制器设计要求:设计一个电子定时器,控制洗衣机作如下运转:定时启动--->正转20秒-->暂停10秒-->反转20秒-->暂停10秒-->定时未到,回到“正转20秒-->暂停10秒-->反转20秒-->暂停10秒”;若定时到,则停机发出音响信号。
用两个数码管显示洗涤的预置时间(分钟数),按倒计时的方式计时,直到时间到停机;洗涤过程由“开始”信号开始。
三只LED灯表示“正转”、“反转”、“暂停”三个状态。
设计过程中用三个表示状态的寄存器zz(正转)、fz(反转)、pause(暂停),以及三个寄存器表示LED灯,LED1表示zz;LED2表示fz;LED3表示pause。
用data_out1,data_out2显示预置时间。
Beep为音响信号。
实验源程序如下:`timescale 1ns/1ns //源程序的测试文件module tb_wash;parameter DELY=5;reg clk,start,sure;reg[6:0]count0;wire beep,led1,led2,led3,zz,fz,pause;wire [6:0]data_out1,data_out2;wash C1(data_out1,data_out2,beep,led1,led2,led3,zz,fz,pause,start,count0,sure,clk); initialbeginstart=0;sure=0;count0=7'b0000111;#DELY start=1;#(DELY*10) sure=1;#(DELY*20) sure=0;endalwaysbeginclk=0;#(DELY*2) clk=~clk;#(DELY*2) clk=~clk;//产生振荡时钟endinitial#(DELY*3000)$finish;endmodulemodulewash(data_out1,data_out2,beep,led1,led2,led3,zz,fz,pause,start,count0,sure,clk); input clk,sure;//sure用于输入数据之后的确定键,确定后洗衣机开始工作input[6:0]count0;//count0输入洗涤时间input start;//电源开关output [6:0]data_out1,data_out2;//数码管时间输出reg [6:0]data_out1,data_out2;output zz,fz,pause;reg zz,fz,pause;output led1,led2,led3;reg led1,led2,led3;reg[5:0]counts;output beep; //音响reg beep;reg[6:0]count;//计数分钟reg[3:0]countm;//计数秒wire [3:0]bcd_1;reg [3:0]bcd_2;reg signal;//用于控制音响信号initial begindata_out1=7'b0;data_out2=7'b0;counts<=6'b0;countm<=4'b0;count<=count0;bcd_2<=4'b0;zz<=0;fz<=0;pause<=0;beep<=0;led1<=0;led2<=0;led3<=0;signal<=0;endalways@(posedge clk)beginif(sure==1)beginsignal<=1;count<=count0;//对count赋初值endif((count>0)&&(start==1)&&(signal==1))beginif(counts==6'b111100)//60begincounts<=6'b1;count<=count-1;endelsebegincounts<=counts+1'b1;if(counts<=5'b10100) //20beginzz<=1;fz<=0;pause<=0;led1<=1;led2<=0;led3<=0;endelseif(counts<=6'b11110|counts>6'b110010&&counts<=6'b111011)//30 50~59 beginpause<=1;zz<=0;fz<=0;led2<=1;led1<=0; led3<=0;endelsebeginfz<=1;zz<=0;pause<=0;led3<=1;led1<=0; led2<=0;endendendif(signal==1&&count==0)//控制洗涤结束时音响响的时间beginif(countm==4'b1001)beep<=0;elsebegincountm<=countm+1;beep<=1;led2=0;pause=0;endendend//always//show the numberalways@(count)beginif(count>=7'd90)bcd_2<=4'd9;else if(count>=7'd80)bcd_2<=4'd8;else if(count>=7'd70)bcd_2<=4'd7;else if(count>=7'd60)bcd_2<=4'd6;else if(count>=7'd50)bcd_2<=4'd5;else if(count>=7'd40)bcd_2<=4'd4;else if(count>=7'd30)bcd_2<=4'd3;else if(count>=7'd20)bcd_2<=4'd2;else if(count>=7'd10)bcd_2<=4'd1;elsebcd_2<=4'd0;endassign bcd_1=count-bcd_2*4'd10; always@(bcd_1)//数码管个位的显示begincase (bcd_1)4'b0000:data_out1=7'b0111111;//04'b0001:data_out1=7'b0000110;4'b0010:data_out1=7'b1011011;4'b0011:data_out1=7'b1001111;4'b0100:data_out1=7'b1100110;4'b0101:data_out1=7'b1101101;4'b0110:data_out1=7'b1111100;4'b0111:data_out1=7'b0000111;4'b1000:data_out1=7'b1111111;4'b1001:data_out1=7'b1100111;default:data_out1=7'b0000000;endcaseendalways@(bcd_2)//数码管十位的显示begincase (bcd_2)4'b0000:data_out2=7'b0111111;//04'b0001:data_out2=7'b0000110;4'b0010:data_out2=7'b1011011;4'b0011:data_out2=7'b1001111;4'b0100:data_out2=7'b1100110;4'b0101:data_out2=7'b1101101;4'b0110:data_out2=7'b1111100;4'b0111:data_out2=7'b0000111;4'b1000:data_out2=7'b1111111;4'b1001:data_out2=7'b1100111;default:data_out2=8'b0000000;endcaseendendmodule程序编号之后在linux系统的nclaunch里面仿真出来波形如下:波形符合设计的要求。
智能洗衣机控制器设计 Verilog编程

智能洗衣机控制器设计报告鑫鑫出品2010-3-18目录一.设计背景 (2)二.功能简介基本功能 (2)扩展功能 (3)三.模块设计及端口设置主模块main (3)工作模式设定模块mode (4)进水量设定模块Water_t (4)无供水信号产生模块waterless (5)危险信号产生模块Unsafe (5)洗衣过程控制模块wash (6)报警模块alart (7)LED灯状态模块LEDs (7)模块级连线图 (8)四.电路工作原理 (9)以s的值为主要状态标志的基本工作流程图 (10)五.Verilog源程序及注释 (11)六.小结 (18)一.设计背景。
如今,带有微型控制芯片的家用电器迅速普及。
通过用户简单的设定,这些智能家电能自动完成家务,并向用户及时提供反馈信息。
这极方便了人们的生活。
智能洗衣机是智能家电的代表。
用户只需按几个键,智能洗衣机就能自动完成注水、洗衣、排水、甩干等一系列工作,并在发生事故时给予用户报警并作出正确反应,极大减轻用户的洗衣负担,同时保障用户安全。
基于以上功能要求,本人进行了智能洗衣机控制器的设计,并作出此设计报告。
二.功能简介。
基本功能:a.可选5种洗衣模式,列举如下1>强力洗衣模式:工作程序为,注水->洗衣->排水->甩干->注水->漂洗->排水->甩干->注水->漂洗->排水->甩干。
其中洗衣为30分钟;2>普通洗衣模式:工作程序为,注水->洗衣->排水->甩干->注水->漂洗->排水->甩干->注水->漂洗->排水->甩干。
其中洗衣为20分钟;3>强力洗衣模式:工作程序为,注水->洗衣->排水->甩干->注水->漂洗->排水->甩干->注水->漂洗->排水->甩干。
Verilog数字电子技术-洗衣机控制器

Verilog数字电子技术-洗衣机控制器2010学年度第一学期电子技术基础课程设计——智能洗衣机控制器院系: 控制科学与工程系专业: 自动化班级: 1006班姓名: ******* 学号: ********指导教师:课程设计名称智能洗衣机控制器的设计设计内容及要求设计一个智能洗衣机控制器~能够实现洗衣~漂洗和脱水的功能。
要求能够使用按键模拟对洗衣机的控制~能够设置工作模式~为了便于观察~将洗衣机设定的工作模式(1~5)和整个过程所剩的工作时间用数码管显示出来(时间分辨率为1分钟)~能够将洗衣机当前所处的状态,注水~洗衣~排水~甩干,用发光管或者数码管显示出来。
【模式1】: 洗衣模式,,强力洗, 洗衣30分钟, 【模式2】 :洗衣模式,,普通洗 ,洗衣20分钟, 【模式3】 :洗衣模式,,轻柔洗,洗衣10分钟, 【模式4】 :漂洗模式【模式5】 :甩干模式注:在以上5个模式中~每次注水1分钟~漂洗5分钟~排水1分钟,甩干1分钟~模式1,3的洗衣时间如上所示~具体的洗衣步骤如下:【模式1,3】:注水->洗衣->排水->甩干->注水->漂洗->排水->甩干->注水->漂洗->排水->甩干。
【模式4】:注水->漂洗->排水->甩干->注水->漂洗->排水->甩干。
【模式5】:甩干。
【要求】:实现逻辑控制过程~可以选择性的加入注水口无水报警等人性化的状态提示~操作完毕使用蜂鸣器鸣叫两秒提示。
画出洗衣机控制器的状态机~写出状态编码方案。
用Verilog语言对设计进行描述~设计一个测试方案~并能够下载到实验板上调试成功。
写出设计性实验报告~并打印各层次的源文件和仿真波形~然后作简要说明。
并谈谈此次实验的收获、感想及建议系统设计1 系统框图与说明本次设计的重点在于智能控制器状态之间转换的条件和关系~并且在此基础上输出相应的显示。
基于Verilog的洗衣机控制电路设计

基于Verilog的洗衣机控制电路设计作者:赵根陈正楠叶琳琳兰兴宇孙静马彧来源:《电脑知识与技术》2019年第09期摘要:为了实现洗衣机的控制功能,应用FPGA技术,以Verilog语言为基础,包含控制器,计时器,状态显示,控制对象,报警电路等模块,实现电路的设计,经验证,功能良好。
关键词:Verilog;FPGA;洗衣机电路系统中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2019)09-0225-02洗衣机电路系统是通过对洗衣机运行时间,循环次数的设定,可根据人们的需要,实现全自动洗衣功能,洗衣过程中发生突发情况可以报警示意,洗衣结束后发出提示音提醒,方便人们的日常生活,为人们带来生活中的便利。
1 原理Verilog HDL是一种硬件描述的语言(采用文本形式描述数字系统的硬件结构和行为语言),用它可以表示(逻辑表达式、逻辑电路图、示数字逻辑系统)。
程序主要包括计数器8421BCD码显示模块,控制器模块,受控器模块。
控制器通过端口的输入,向洗衣机发出正转,反转,待机指令,并通过数码管和LED显示控制时间。
2 总体设计3 详细设计3.1 设计要求(1)控制功能1)洗衣机的工作状态:待机5秒,正转60秒,待机5秒,反转60秒,并用3个LED和7段显示器分别表示洗衣机工作状态和显示相应工作状态下时间。
2)使用者可自行设定循环次数,当前设定最大循环次数为15次。
3)具有紧急情况处理功能,如果发生紧急情况,会立即待机,等待紧急解除后,继续执行下一步骤。
4)设定循環次数到零时即刻报警,表示设定次数已完成,在顶层电路定义各输入及输出变量。
(2)在Qaurtus∏建立计数器电路的顶层电路文件并完成编译或仿真。
(3)信号说明,输入信号:时钟CLK,直接清零RD,暂停/连续EN,洗衣机的循环次数I3I2I1I0;输出信号:三个工作状态S,R,L,一个工作过程周期T(T4),8421BCD码num[7..0],报警信号。
基于Verilog HDL的洗衣机控制电路设计

信息与电HChina Computer&Communication 秋件开茨爲惑用2021年第2期基于Verilog HDL的洗衣机控制电路设计杨凯饪王颖*(大连理工大学城市学院电子与自动化学院,辽宁大连116024)摘要:随着人们的生活水平提高,人们对洗衣机的需求越来越大,因此洗衣机的市场逐步扩大,洗衣机行业竞争也愈演愈烈。
在此背景下,本文以Verilog HDL为基础实现了以洗衣机控制电路为核心,结合所需的外围电路,共同对洗衣机的工作状态进行自由控制。
关键词:Verilog HDL;硬件描述语言;中心控制模块;洗衣机控制电路中图分类号:TN702文献标识码:A文章编号:1003-9767(2021)02-151-02Design of Washing Machine Control Circuit Based on Verilog HDLYANG Kaiyu,WANG Ying*(School of Electronics and Automation,City Institute,Dalian University of Technology,Dalian Liaoning116024,China)Abstract:With the improvement of people's living standards,people's demand for washing machines is increasing.Therefore, the market for washing machines is gradually expanding,and the competition in the washing machine industry is intensifying.In this context,this article uses Verilog HDL as the basis to realize the washing machine control circuit as the core,combined with the required peripheral circtdts,to jointly control the working state of the washing machine freely.Keywords:Verilog HDL;hardware description language;central control module;washing machine control circuit1总体设计系统包括中心控制模块、分频模块、按键去抖模块、BCD码转换电路和数码显示电路21。
智能洗衣机控制器设计 Verilog编程

智能洗衣机控制器设计报告鑫鑫出品2010-3-18目录一.设计背景 (2)二.功能简介基本功能 (2)扩展功能 (3)三.模块设计及端口设置主模块main (3)工作模式设定模块mode (4)进水量设定模块Water_t (4)无供水信号产生模块waterless (5)危险信号产生模块Unsafe (5)洗衣过程控制模块wash (6)报警模块alart (7)LED灯状态模块LEDs (7)模块级连线图 (8)四.电路工作原理 (9)以s的值为主要状态标志的基本工作流程图 (10)五.Verilog源程序及注释 (11)六.小结 (18)一.设计背景。
如今,带有微型控制芯片的家用电器迅速普及。
通过用户简单的设定,这些智能家电能自动完成家务,并向用户及时提供反馈信息。
这极大地方便了人们的生活。
智能洗衣机是智能家电的代表。
用户只需按几个键,智能洗衣机就能自动完成注水、洗衣、排水、甩干等一系列工作,并在发生事故时给予用户报警并作出正确反应,极大减轻用户的洗衣负担,同时保障用户安全。
基于以上功能要求,本人进行了智能洗衣机控制器的设计,并作出此设计报告。
二.功能简介。
基本功能:a.可选5种洗衣模式,列举如下1>强力洗衣模式:工作程序为,注水->洗衣->排水->甩干->注水->漂洗->排水->甩干->注水->漂洗->排水->甩干。
其中洗衣为30分钟;2>普通洗衣模式:工作程序为,注水->洗衣->排水->甩干->注水->漂洗->排水->甩干->注水->漂洗->排水->甩干。
其中洗衣为20分钟;3>强力洗衣模式:工作程序为,注水->洗衣->排水->甩干->注水->漂洗->排水->甩干->注水->漂洗->排水->甩干。
全自动洗衣机的设计-Verilog程序

实验报告2016 年 5 月 24学 院:大数据与信息工程学院 专 业:电子与通信工程 学 号:2015021718 学生姓名:杨 鹏 举 指导教师: 李 良 荣目录一、实验题目 (3)二、实验目的 (3)三、实验要求 (3)四、洗衣机工作原理与功能说明 (3)状态图如下 (4)程序RTL视图如下 (5)五、详细代码如下 (5)模块一实现洗衣机状态转换和各状态输出控制 (6)模块二实现复位信号的异步复位同步释放 ·····错误!未定义书签。
模块三实现当前状态的数码管显示 (6)模块四实现按键检测 (14)模块五实现顶层的调用 (16)一、实验题目自动洗衣机设计二、实验目的1、熟练掌握Quartus II 工程文件的建立过程。
2、掌握Verilog的基本语法、语句、模块的使用。
3、了解模块的建立与使用。
4、了解FPGA的开发基本流程。
三、实验要求1、初始状态,准备启动。
2、开始进水;为防止进水过程出现故障,故不用定时器控制,而是手动给一个信号模拟水位检测传感器,表示进水完成。
3、开始洗涤:正反洗涤4次开始排水。
4、排水后立即脱水。
5、洗涤之后漂洗2次,每次漂洗过后都排水甩干。
6、整个过程全部用数码管来显示状态机状态,并用两个led灯表示电机的正转与反转状态。
四、洗衣机工作原理与功能说明自动洗衣机的工作原理:洗衣机有7个工作状态分别为空闲(idle)、加水(water)、洗衣(wash)、排水(drain)、甩干(dry)、漂洗(rinse)、结束音乐提示(music)。
一次完整的洗涤,进水3次、洗涤1次、漂洗两次、排水3次、甩干3次。
一次完整的状态转换为:空闲(idle)、加水(water)、洗衣(wash)、排水(drain)、甩干(dry)、加水(water)、漂洗(rinse)、排水(drain)、甩干(dry)、加水(water)、漂洗(rinse)、排水(drain)、甩干(dry)、结束音乐提示(music)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
智能洗衣机控制器设计V e r i l o g编程-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN智能洗衣机控制器设计报告鑫鑫出品2010-3-18目录一.设计背景 (2)二.功能简介基本功能 (2)扩展功能 (3)三.模块设计及端口设置主模块main (3)工作模式设定模块mode (4)进水量设定模块Water_t (4)无供水信号产生模块waterless (5)危险信号产生模块Unsafe (5)洗衣过程控制模块wash (6)报警模块alart (7)LED灯状态模块LEDs (7)模块级连线图 (8)四.电路工作原理 (9)以s的值为主要状态标志的基本工作流程图 (10)五.Verilog源程序及注释 (11)六.小结 (18)一.设计背景。
如今,带有微型控制芯片的家用电器迅速普及。
通过用户简单的设定,这些智能家电能自动完成家务,并向用户及时提供反馈信息。
这极大地方便了人们的生活。
智能洗衣机是智能家电的代表。
用户只需按几个键,智能洗衣机就能自动完成注水、洗衣、排水、甩干等一系列工作,并在发生事故时给予用户报警并作出正确反应,极大减轻用户的洗衣负担,同时保障用户安全。
基于以上功能要求,本人进行了智能洗衣机控制器的设计,并作出此设计报告。
二.功能简介。
基本功能:a.可选5种洗衣模式,列举如下1>强力洗衣模式:工作程序为,注水->洗衣->排水->甩干->注水->漂洗->排水->甩干->注水->漂洗->排水->甩干。
其中洗衣为30分钟;2>普通洗衣模式:工作程序为,注水->洗衣->排水->甩干->注水->漂洗->排水->甩干->注水->漂洗->排水->甩干。
其中洗衣为20分钟;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:设定工作模式模式的按键;输出端口:m[3:0]:所设定的模式,BCD码,可取1到5的整数;进水量设定模块Water_t:设定进水量。
输入端口:Speed:设定进水量,按键;输出端口:V[3:0]:所设定的进水时间,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:0]:当前工作过程剩余时间,向上传给main中的Timer;timer_a[7:0]:完成全部工作剩余时间,传给main中的Timer_a;s[2:0]:工作状态指示量,从0到5分别指示进水、洗衣、出水、甩干和完成信号有效;c[2:0]:取1到4,表示当前工作是第几轮;报警模块alart:产生报警蜂鸣信号。
输入端口:CP_1k:1kHz方波信号,用于产生蜂鸣信号,来自信号发生器;CP:1Hz方波信号,用于产生间断的蜂鸣信号,来自信号发生器;Start,Set,Pause,Speed:按键音有效信号。
另外Pause还用于突发情况时人为控制暂停/继续的控制键;No_water,water_out,Open,danger:控制报警音开始/结束的信号,来自模块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:正在运行; 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记录洗衣的轮数(以进水到甩干为一轮),状态变量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有效,完成提示音响(由module alart实现),同时延时计时器启动,计时完毕后,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变化,会导致暂停有效信号取反,实现暂停/继续的功能。
等指示状态共用到7个LED来代表系统的工作状态。
其驱动信号有效与否由系统目前的工作状态来判断。
其具体代表的状态和实现方法已在端口介绍和源程序注释中说明,不另赘述。
五.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; 式选择模块mode:module mode(Set,m);input Set; 水时间设定模块water_t:module Water_t(Speed,v);input Speed; 衣过程控制模块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; 水情况感应模块Waterless:module waterless(No_water,water_out);input No_water; 衣机盖开合状态感应模块Unsafe:module Unsafe(Open,danger);input Open; 警模块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:0]s; //输入当前工作状态output a,tp; //输出报警信号和暂停允许信号reg c_e,c_t,tp;reg[2:0] count;always@(posedge Pause)begin //暂停/继续键Pause上升沿触发下,if(tp==1)tp=0; 暂停允许信号改变;else tp=tp+1;endalways@(posedge CP or posedge No_water or posedge Open or posedge Start)beginif(Start)c_e=0; //启动时,延时计时器使能位c_e复位为0else if(No_water|Open)beginif((water_out==1&&s[2:0]==3'b000)||(danger==1&&s[2:0]==3'b011))c_e=1; //发生危险事件,使能端c_e置1else c_e=0;endelse if(CP)begin //c_e=1,以CP为时钟信号开始计时if(count[2:0]==3'b010)begin c_t=0;c_e=0;count[2:0]=0;endelse if(c_e==1)begin count[2:0]=count[2:0]+3'b001;c_t=1;end//计时中,计时进行标志位c_t=1else if(c_e==0)count=0;endendassign a=((c_t|CP&finish)|(Start|Set|Pause|Speed))&CP_1k;//若警报延时计时器正在计时(c_t=1)或工作完成提示信号有效(finish=1)或有键按下(Start、Set、Pause、Speed)则发出相应报警音。