基于FPGA的洗衣机控制器.docx

上传人:数据九部 文档编号:9585745 上传时间:2021-03-09 格式:DOCX 页数:21 大小:2.26MB
返回 下载 相关 举报
基于FPGA的洗衣机控制器.docx_第1页
第1页 / 共21页
基于FPGA的洗衣机控制器.docx_第2页
第2页 / 共21页
基于FPGA的洗衣机控制器.docx_第3页
第3页 / 共21页
基于FPGA的洗衣机控制器.docx_第4页
第4页 / 共21页
基于FPGA的洗衣机控制器.docx_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《基于FPGA的洗衣机控制器.docx》由会员分享,可在线阅读,更多相关《基于FPGA的洗衣机控制器.docx(21页珍藏版)》请在三一文库上搜索。

1、三、正文. 33.1 洗衣机控制器的整体框图及原理:. 33.2、洗衣机控制电路单元模块设计和仿真. 43.2.1 按键消抖模块的设计. 4由于使用的 FPGA 的输入时钟是 20M hz,定时模块的自减频率是 1hz,因此需要进行分频得到 1hz 的时钟频率输入给定时模块。 . 6时钟分频模块图如图 3: 时钟分频模块功能仿真图如图 4: .6四、 电路调试. 11五、 结束语和心得体会. 12六、 参考文献. 13前言一、洗衣机控制器主要内容l.任务要求和内容设计制作一个洗衣机的正反转定时控制线路。1)控制洗衣机的电机作如下运转定时开始正转 10S暂停 5S反转 10S暂停 5S定时到停止

2、定时未到2)用 2 位七段数码管显示定时时间(S)。2洗衣机控制器的使用步骤:(1) 电路上电后,在 Start 拨码开关未闭合前可以由 UpKey 和 DownKey 按键开关 “+”“-”设置总的工作时间,确定洗衣机控制器工作允许时间。(2) 设定好允许工作时间后,闭合 Start 开关,洗衣机控制器开始工作。(3) 可以看见指示正转 LED 灯亮 10s,停转 LED 灯亮 5S,反转 LED 灯亮 10s, 停转 LED 亮 5s,如此反复直至工作允许时间为 0,蜂鸣器发出警报。二、设计原理简介洗衣机控制器的设计主要是时序控制和定时器的设计,由一片 FPGA 和外围电路构成电器控制部分

3、。 FPGA 接收键盘的控制命令,控制洗衣机的正转、反转、停机和定时时间为 0 报警的工作状态、控制并显示工作状态以及显示定时时间。对 FPGA 芯片的编程采用模块化的 Verilog HDL (硬件描述语言)进行设计,设计由分频模块,按键消抖模块,定时时间自减模块,时序中心控制模块,数码1管显示模块组成,顶层实现整个芯片的功能。顶层使用原理图实现,底层由 Verilog HDL 语句实现。FPGA 的输入时钟为 20M hz,因此使用了分频模块输出 1hz 的方波给定时器设定自减模块提供每 1s 自减 1 的信号,定时器模块输出的自减值输入给数码管显示译码模块和时序控制模块,通过译码模块定时

4、器的值可以在数码管上显示,同时定时器的值输入到时序控制模块由此可以控制洗衣机的正转、反转、停机和报警工作方式。通过按键消抖模块可以准确无抖动的设定定时器的工作时间。目录一、 前言2一、 目录 3一、 正文 43.1 洗衣机控制器的整体框图及原理43.2 洗衣机控制电路单元模块设计和仿真 53.2.1按键消抖模块的设计53.2.2时钟分频模块的设计63.2.3定时器设定和自减模块的设计73.2.4时序中心控制模块的设计83.2.5 数码管显示译码模块的设计9四、电路调试11五、结束语和心得体会12六、七、参考文献 附录213137.1 FPGA 系统板部分原理图137.2 FPGA 系统板 PC

5、B 图15三、正文3.1 洗衣机控制器的整体框图及原理:基于 fpga 的洗衣机控制器电路主要由五大模块组成,分别为按键消抖模块,时钟分频模块,定时器设定和自减模块,时序中心控制模块,数码管显示译码模块。 具体电路如图 1 所示:3图 1由于输入时钟为 20M hz,因此使用了分频模块输出 1hz 的方波(中间上方模块)给定时器设定和自减模块(中间下方模块)提供每 1s 自减 1 的信号,定时器模块输出的自减值输入给数码管显示译码模块(右下方模块)和时序控制模块(右上模块),通过译码模块定时器的值可以在数码管上显示,同时定时器的值输入到时序控制模块由此可以控制洗衣机的正转、反转、停机和报警工作

6、方式。 按键消抖模块(左下方模块)的作用是为了消除按键抖动而设立的。3.2、洗衣机控制电路单元模块设计和仿真3.2.1 按键消抖模块的设计在进行独立按键或者矩阵式按键的设计的时候,我们在按下键盘的时候其实并不只是按下去而是有一个抖动的过程,就连松手的过程也有抖动,然而这个抖动通常被人们所忽略,从而导致输入数据的错误和乱码,因此我们必须对按键进行按键的消抖处理。我们通常在单片机的消抖使用的是延时消抖,这种消抖也称为软件消抖,但是 fpga 的 Verilog HDL 语言是硬件描述语言,所以也称作硬件4消抖,主要运用了状态机和延时的消抖方式。 按键消抖模块图如图 2:图 2其 Verilog H

7、DL 语言描述如下:module Key_module (Key_in,Key_out,Clk,Rst);input Clk,Rst,Key_in;output Key_out;reg Reset; reg H_L_f1;reg H_L_f2; reg H_L_f3;reg H_L_f4; reg 17:0 Count; wire H_L_sig;parameter Delay10ms = d200_000;always (posedge Clk ) /异步复位同步释放begin Reset=Rst; endalways (posedge Clk or negedge Reset )begin

8、if(!Reset) begin H_L_f1=1; H_L_f2=1; endelse begin H_L_f1=Key_in; H_L_f2=H_L_f1; endendassign H_L_sig = H_L_f2 & (H_L_f1); /延时的启动标志位 always (posedge Clk or negedge Reset )beginif(!Reset)begin Count=0;endelse if(Count = Delay10ms)begin Count=0; endelse if(H_L_sig) begin Count=0; endelse begin Count=C

9、ount+1; endendalways (posedge Clk or negedge Reset)beginif(!Reset) begin H_L_f3=1; endelse if(Count = Delay10ms) begin H_L_f3=Key_in; endendalways (posedge Clk or negedge Reset )beginif(!Reset) begin H_L_f4=1; endelse begin H_L_f4=H_L_f3; endendassign Key_out = H_L_f4 & (H_L_f3);endmodule53.2.2 时钟分频

10、模块的设计由于使用的 FPGA 的输入时钟是 20M hz,定时模块的自减频率是 1hz,因此 需要进行分频得到 1hz 的时钟频率输入给定时模块。时钟分频模块图如图 3:时钟分频模块功能仿真图如图 4:图 3其 Verilog HDL 语言描述如下: input CP;output Q;reg31:0CT;reg Q;always(negedge CP)beginCT=32d24999999)beginCT=32d0;Q=Q;endelse CT=CT+1d1;endendmodule图 4module fenpinqi(CP,Q);3.2.3 定时器设定和自减模块的设计定时器设定和自减模块

11、可以设定定时器的工作时间,通过输入的 1hz 的信号 使定时器的值每秒自减 1,直至为 0。其定时器的值输出给数码管译码模块和时 序控制模块。定时器设定和自减模块图如图 5;定时器设定和自减模块功能仿真图如图 6:6图 5图 6其 Verilog HDL 语言描述如下:module KeySet(Clk,Clk_1hz,Rst,Start,UpKey,DownKey,SetTimer);input Clk,Clk_1hz,Rst,Start,UpKey,DownKey; output 6:0 SetTimer; reg 6:0 Timer; reg 6:0 rTimer; reg Reset;

12、always (posedge Clk ) /异步复位同步释放begin Reset=Rst; endalways (posedge Clk or negedge Reset)beginif(!Reset) begin Timer=7d50; end /定时时间赋初值else if(Start) begin if(UpKey) begin Timer=Timer+1b1; end else if(DownKey) begin Timer=Timer-1b1; end end / 时 间 减 一endalways (posedge Clk_1hz) /1s 信号输入beginrTimer=Tim

13、er; if(!Start) beginif(rTimer=7d0) begin rTimer=0; end /时间到 0 保持以免错误 else begin rTimer=rTimer-1b1; end end/每秒减一endassign SetTimer=rTimer;endmodule3.2.4 时序中心控制模块的设计7时序控制模块由定时器送来的值来控制洗衣机控制器的工作方式,正转、反 转、停转和报警。时序中心控制模块图如图 7; 时序中心控制模块图功能仿真如图 8:图 7图 8其 Verilog HDL 语言描述如下:module Center(Clk,Start,Rst,Forwar

14、d,Back,Stop,Sound,SetTimer);input Clk,Start,Rst; input 6:0SetTimer;output Back,Stop,Sound,Forward;reg rBack,rStop,rSound,rForward; reg 3:0 i; reg 1:0 j;reg 6:0 rSetTimer; reg 24:0 num; reg Reset;always (posedge Clk ) / 异步复位同步释放begin Reset=Rst; endalways (posedge Clk or negedge Reset)beginif(!Reset)

15、begin rBack=0; rStop=0; rSound=0;rForward=0; rSetTimer=0; i=0; j=0; num=0; endelse if(!Start & SetTimer) begin /播下开始键并且倒计时不为 0 case(i) /01 正转 10s4d0: begin rSetTimer=SetTimer; rForward=1b1;rBack=1b0; rStop=1b0; rSound=1b0; i=i+1b1; end4d1: begin if(SetTimer=rSetTimer-4d10) begin i=i+1b1; end end4d2:

16、 begin rSetTimer=SetTimer; i=i+1b1;rForward=1b0; rBack=1b0; rStop=1b1; rSound=1b0; end /23 停机 5s4d3: begin if(SetTimer=rSetTimer-3d5) begin i=i+1b1; end end84d4: begin rSetTimer=SetTimer; i=i+1b1; rForward=1b0;rBack=1b1; rStop=1b0; rSound=1b0; end /45 反转 10s4d5: begin if(SetTimer=rSetTimer-4d10) beg

17、in i=i+1b1; end end4d6: begin rSetTimer=SetTimer; i=i+1b1; rForward=1b0;rBack=1b0; rStop=1b1; rSound=1b0; end /67 停机 5s4d7: begin if(SetTimer=rSetTimer-3d5) begin i=i+1b1; end end4d8: begin i=4d0; end/倒计时不为 0,则循环,回到 case 0endcase endelse if(!SetTimer) begin case( j )2d0: begin /倒计时为 0 时停机并报警 1sif(nu

18、m=25d20_000_000) begin j=j+1b1; endelse begin num=num+1b1; rForward=1b0;rBack=1b0; rStop=1b1; rSound=1b1;end end2d1: begin rSound=1b0; end endcase endendassign Forward=rForward; assign Back=rBack;assign Stop=rStop; assign Sound=rSound;endmodule3.2.5 数码管显示译码模块的设计数码管显示译码模块主要功能是把定时器送来的值译码并通过数码管显示 出来。fp

19、ga 的 Verilog HDL 硬件语言是并行的这有别于软件的描述语言扫描方式。数码管显示译码模块图如图 9:图 9数码管显示译码模块功能仿真图如图 10:、9图 10其 Verilog HDL 语言描述如下:module digital (Clk,Rst,Date_in,Dig_sel,Dig_out);input Rst,Clk; input 6:0 Date_in; /MAX 99output 5:0 Dig_sel; output 7:0 Dig_out;reg 7:0 Display 0:9;/定义为 8 位,10 个地址reg 5:0 Led_sel; reg 7:0 Led_o

20、ut; reg Reset;reg 20:0 Count; reg 9:0 rDate;parameter Time=d100_000;/并行扫描时间initialbeginC ount=0; rDate=0; Led_sel5:0=b111_111;D isplay0=b1100_0000; Display1=b1111_1001;Display2=b1010_0100; Display3=b1011_0000;Display4=b1001_1001; Display5=b1001_0010;Display6=b1000_0010; Display7=b1111_1000;Display8=

21、b1000_0000; Display9=b1001_0000;endalways (posedge Clk )begin Reset=Rst; endalways (posedge Clk or negedge Reset)begin if(!Reset) Count=0;else if(Count = Time) Count=0;else Count=Count+1; endalways ( posedge Clk or negedge Reset)/并行概念很重要begin /数码管显示rDate=Date_in;/从 wire 上读值过来赋给 reg 型变量提高数据的稳定性 if(!R

22、eset) begin rDated0 & Count=d50_000) begin Led_sel=b111_110; Led_out=DisplayrDate%10; end /段选else begin Led_sel=b111_101; Led_out=DisplayrDate/10; end endassign Dig_sel = Led_sel;10assign Dig_out = Led_out;endmodule四、电路调试1定时器自减值与洗衣机控制器的正转、反转,停机,报警在 RTL 仿真的时候 是同步的,但是下载到硬件上运行的时候出错,不能同步。解决方法:反复的研究 Veri

23、log HDL 程序后发现,开始是使用分频器输出的 1hz的时钟输入给时序中心控制器模块,而定时器模块的时钟是 20M hz 的,两个模块的时钟不能同步,因此就存在一定的延时不同步导致错误。然后我把时序中心控制模块的时钟也改为 20M hz,让两个模块的时钟同步,定时器自减输出的值 输入到时序中心控制模块作为时序控制的信号,问题顺利解决。2程序在运行的时有时候数码管会显示定时器的起始值,洗衣机控制器又重新 从头开始运行。解决方法:研究硬件电路的设计发现,启动工作控制开关,默认设置为了低电平是不启动的,高电平启动并保持才能使洗衣机控制器正常工作,而在启动后工作中,电平出现不稳的状态,电平并不能很

24、好的起到拉高的作用,因此怀疑是上拉能力不足和电源纹波的干扰,导致电平的不稳定性使洗衣机控制器有时复位。随后我便在电源的输出端并接一个 220uf 的电解电容和一个 0.1uf 的瓷片电容,再用示波器测试发现纹波减少很多;同时为了防止上拉能力不足导致错误,我便把 启动控制开关默认设置为高电平,低电平为启动和保持。然后再测试,问题解决。3使用按键修改定时器模块的设定值时,按一下按键,数据变化好几次,不是 每按一次改变一个值。解决方法:根据以往的经验可以知道是因为按键没有消抖所致,在设计电路的时候忘记了使用按键消抖模块,随后编写了按键消抖模块,再接入控制系统测试, 数据正确,问题解决。11五、结束语

25、和心得体会在经过了几天的学习设计仿真,我学到了很多东西,主要是对数字电路的基础理论知识的复习巩固和对 FPGA 方面知识的掌握,更加清楚了解到了 Verilog HDL语言的魅力,对以前学的理论知识通过实践来检验,更深入的理解了理论联系实 际的重要性。通过这次的 FPGA 设计,我可以说是受益良多。看到洗衣机控制器的题目,我首先想到的是状态机的设计,因为课本上说状态机其实就是控制器,后来经过看书觉得应该是摩尔型状态机,可是分析后发现设计题目比较复杂,如果用状态机的思路来设计,比较困难。结合以前做课程设计的经验,如果用模块化层次化的设计思路更清晰,设计起来也更容易,特别是更符合 FPGA 设计的

26、的流程,故自己开始设计各功能模块。洗衣机控制器主要实几种状态的循环改变,还有计时和数码显示的功能,所以我觉得电路主要有五大部分组成,包括:按键消抖模块,时钟分频模块,定时器设定和自减模块,时序中心控制模块,数码管显示译码模块。在设计的过程中,我也遇到了不少困难,在经过耐心的调试后还是顺利解决了所有问题。通过这次设计,让我更深入的掌握了 Verilog HDL 的设计方法与一些技巧,让我对 FPGA 的编程、定时器和计数器的设计更加熟悉,让我更加明白时序组合门电路设计思路和方法。在设计中学到不少课本上没有的东西,并且充分认识到家电控制电路设计在一片 FPGA 芯片内,具有体积小、可靠性高、降低 成本、设计周期短,功能灵活的特点,本人受益匪浅。我相信通过此次课程设计,一定会对以后的设计工作提供很大帮助。12六、参考文献1、 黑金开发板配套教程 VerilogHDL 那些事儿2、 康华光主编 电子技术基础 数字部分(第五版)3、 陈明义主编、电子技术课程设计实用教程S 2002 年 05 月第 1 版 4、EDA 先锋工作室 设计与验证 Verilog HDL5、马建国 孟宪元 编著 FPGA 现代数字系统设计七、附录7.1 FPGA 系统板部分原理图13147.2 FPGA 系统板 PCB 图15

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1