您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 北京邮电大学-数字电路与逻辑设计-洗衣机控制器实验报告
北京邮电大学数字电路与逻辑设计实验题目:洗衣机控制器学院:信息与通信工程学院班级:学号:姓名:班内序号日期:2015年11月5日一、设计课题的任务要求:(1)实验目的:1、熟练掌握VHDL语言和QuartusII软件的使用;2、理解状态机的工作原理和设计方法;3、掌握利用EDA工具进行自顶向下的电子系统设计方法;(2)实验内容:基本要求:1、洗衣机的工作步骤为洗衣、漂洗和脱水三个过程,工作时间分别为:洗衣30秒(进水5秒,洗衣15秒,排水5秒,甩干5秒),漂洗25秒(进水5秒,漂洗10秒,排水5秒,甩干5秒),脱水15秒(排水5秒,甩干10秒);2、用一个按键实现洗衣程序的手动选择:A、单洗涤;B、单漂洗;C、单脱水;D、漂洗和脱水;E、洗涤、漂洗和脱水全过程;3、用发光二极管显示洗衣机的工作状态(洗衣、漂洗和脱水),并倒计时显示每个状态的工作时间,全部过程结束后,应有声音提示使用者;4、用点阵动画显示洗衣机工作过程中进水、波轮或滚筒转动、排水和甩干等的工作情况,四种工作情况的动画显示要有区别且尽可能的形象;5、用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留的状态。提高要求:1、三个过程的时间有多个选项供使用者选择。2、可以预约洗衣时间。3、自拟其它功能。二、系统设计:(1)设计思路和分块设计:实验的目的是模仿洗衣机的功能,设计出洗衣机控制器。包括开关控制,工作暂停,工作模式的选择,工作状态的显示,倒计时工作时间并显示和工作结束报警等功能。将整个控制器分为7个小模块,分别是分频模块、按键模块、控制器、防抖模块、报警模块、点阵显示和数码管译码输出显示,再将各个模块连接起来,实现洗衣机控制器功能。分频模块:选取主时钟频率为1kHz,为了使倒计时输出为1s的时间周期,需要将主频率进行1kHz分频,使得到的频率为1Hz,输入给控制器的时钟。按键模块:有模式选择、暂停和开始3个按键,模式选择可以选择5种洗衣模式,当开始按键按下并且有模式输入时,洗衣机开始工作。当暂停按键按下时,洗衣机暂停工作并保持当前工作状态。防抖模块:按键经过防抖后,可以输出时钟,去除了毛刺即抖动时钟。报警模块:时钟输入为1kHz,当洗衣结束后,报警模块接收到控制器给它的输入信号,会以1000Hz的频率报警,(由于人耳能听到的频率为20-20000Hz)持续5秒后停止。点阵显示:以1kHz的频率进行扫描,点阵上可以显示稳定的图案,在洗衣过程中分别显示进水、洗衣、漂洗、脱水和甩干5个小状态。数码管译码输出显示:控制器将倒计时十位和个位输出到译码器,译码电路分别显示十位和个位,扫描频率为1kHz,数码管可以稳定显示。控制器:控制器是整个电路的核心模块,控制各个模块的连接。时钟频率为1Hz,输出为3个大状态(洗衣、漂洗、脱水),用发光二极管显示,5个小状态,十位个位输出和报警输出。用状态转移控制各个过程的转换,控制各个小状态的转换,完成各个功能显示的连接。(2)总体框图:系统框图clk状态转移图001|101011010|100101101|101001010011|101|100分频模块防抖模块控制器按键模块数码管译码输出显示点阵显示报警模块开始结束洗衣漂洗脱水ASM图否是否否是是是否是否是否开始输入状态状态是否为0是否开始时间是否为0是否有新状态是否暂停是否继续倒计时报警暂停结束结束倒计时时间显示点阵显示(5种小状态)二极管显示(3种大状态)开始按键输入三、仿真波形及波形分析分频模块:clk为1000Hz的时钟,输出clkout为分频后的时钟,频率为1Hz。防抖模块:输入reset信号有抖动,输出resetn为无抖动的时钟。按键模块:输入pauseclk、startclk、stateclk分别为暂停、开始、模式输入按键,当按下暂停按键时,暂停输出pauseout变为高电平,洗衣机工作状态保持不变;当按下开始按键时,输出startout变为高电平,洗衣机开始工作;当按下模式按键时,可以选择5种工作模式,输出对应5种模式。报警模块:时钟clk为1000Hz,为蜂鸣器工作频率,当输入信号alarmin为高电平时,输出alarmout变为高电平,维持5秒后变为低电平,结束报警。数码管译码输出显示:clk为1kHz的扫描频率,gewei、shiwei分别为个位、十位输入,showout为数码管译码输出,十位个位交替显示,cat控制数码管的点亮,分别显示十位和个位输出。控制器:时钟clk为1Hz,输入按键信号pause(暂停)、start(开始),洗衣工作模式state,输出mode为洗衣、漂洗、脱水三个大状态,输出mode_mini为进水、洗衣、漂洗、排水、甩干五个小状态,输出time_gewei、time_shiwei为个位、十位转换为二经制的输出,alarm为报警输出,当洗衣结束输出高电平。四、源程序(1)、分频模块entitydivisport(clk:instd_logic;--1kHzclkout:outstd_logic--1Hz);enddiv;architecturediv_archofdivissignalt:std_logic;signalcount:integerrange0to499;--计数500个周期beginprocess(clk)beginif(clk'eventandclk='1')thenif(count=499)--1000分频thencount=0;t=nott;elsecount=count+1;endif;endif;endprocess;clkout=t;end;(2)、按键模块entitybuttonisport(stateclk,pauseclk,startclk:instd_logic;--按键输入stateout:outstd_logic_vector(2downto0);--5种模式输出pauseout,startout:outstd_logic--暂停、开始输出);endbutton;architecturearchiofbuttonisbeginp1:process(stateclk)--5种模式variablecout1:integerrange0to5;beginif(stateclk'eventandstateclk='1')thencout1:=cout1+1;if(cout15)thencout1:=cout1mod5;endif;endif;casecout1iswhen1=stateout=001;when2=stateout=010;when3=stateout=011;when4=stateout=100;when5=stateout=101;when0=stateout=000;endcase;endprocessp1;p2:process(pauseclk)--当有按键按下,暂停工作,再次按下继续工作variablecout2:integerrange0to1;beginif(pauseclk'eventandpauseclk='1')thencout2:=cout2+1;endif;if(cout2=1)thenpauseout='1';elsepauseout='0';endif;endprocessp2;p3:process(startclk)--按键按下开始工作variablecout3:integerrange0to1;beginif(startclk'eventandstartclk='1')thencout3:=cout3+1;endif;if(cout3=1)thenstartout='1';elsestartout='0';endif;endprocessp3;endarchi;(3)、防抖模块entitydoudongisport(clk,reset:instd_logic;--clk为1kHz,reset为按键信号resetn:outstd_logic--防抖后的按键信号);enddoudong;architectureaofdoudongissignaltmp1,tmp2:std_logic;beginprocess(clk)beginif(clk'eventandclk='0')thentmp2=tmp1;tmp1=reset;endif;endprocess;resetn=clkandtmp1and(nottmp2);enda;(4)、点阵显示entitydianzhenisport(clk_scan:instd_logic;--1kHz的时钟扫描频率condition:instd_logic_vector(2downto0);--5个小状态输入row:outstd_logic_vector(7downto0);--行扫描col_R:outstd_logic_vector(7downto0);--列扫描(红色亮)col_G:outstd_logic_vector(7downto0)--列扫描(绿色亮));enddianzhen;architecturearc_dianzhenofdianzhenissignalscan_row:std_logic_vector(2downto0);--行扫描beginp1:process(clk_scan,condition)beginifclk_scan'eventandclk_scan='1'thencaseconditioniswhen000=--进水casescan_rowiswhen000=row=10111111;col_R=01111110;col_G=01111110;when001=row=11011111;col_R=01000010;col_G=01000010;when010=row=11101111;col_R=01000010;col_G=11100010;when011=row=11110111;col_R=01000010;col_G=11010010;when100=row=11111011;col_R=01000010;col_G=01001010;when101=row=11111101;col_R=01111110;col_G=01111110;whenothers=row=11111111;col_R=00000000;col_G=00000000;endcase;ifscan_row=110orscan_row=111thenscan_row=000;elsescan_row=scan_row+1;endif;when001=casescan_rowis--洗衣when000=row=10111111;col_R=01111110;col_G=01111110;when001=row=11011111;col_R=01011010;col_G=01000010;when010=row=11101111;col_R=01100110;col_G=01000010;when011=row=11110111;col_R=01100110;col_G=01000010;when100=row=11111011;col_R=01011010;col_G=01000010;when101=row=11111101;col_R=01111110;col_G=01111110;whenothers=row=11111111;col_R=00000000;col_G=00000000;endcase;ifscan_row=110orscan_row=111thenscan_row=000;elsescan_row=scan_row+1;endif;when010=--漂洗casescan_rowis
本文标题:北京邮电大学-数字电路与逻辑设计-洗衣机控制器实验报告
链接地址:https://www.777doc.com/doc-3943832 .html