基于FPGA的洗衣机控制器 verilog hdl 语言描述的设计与开发

上传人:夏** 文档编号:495365837 上传时间:2023-04-01 格式:DOC 页数:17 大小:1.07MB
返回 下载 相关 举报
基于FPGA的洗衣机控制器 verilog hdl 语言描述的设计与开发_第1页
第1页 / 共17页
基于FPGA的洗衣机控制器 verilog hdl 语言描述的设计与开发_第2页
第2页 / 共17页
基于FPGA的洗衣机控制器 verilog hdl 语言描述的设计与开发_第3页
第3页 / 共17页
基于FPGA的洗衣机控制器 verilog hdl 语言描述的设计与开发_第4页
第4页 / 共17页
基于FPGA的洗衣机控制器 verilog hdl 语言描述的设计与开发_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《基于FPGA的洗衣机控制器 verilog hdl 语言描述的设计与开发》由会员分享,可在线阅读,更多相关《基于FPGA的洗衣机控制器 verilog hdl 语言描述的设计与开发(17页珍藏版)》请在金锄头文库上搜索。

1、我们的爱情,我们的理想,我们的未来,我们的成长,我们的幸福编号: 1 电机控制综合课程设计报告书课 题: 基于FPGA的洗衣机控制器 院 (系): 机电工程学院 专 业: 电气工程及其自动化 学生姓名: 蒋岷君 学 号: 0800120313 题目类型:理论研究 实验研究 工程设计 工程技术研究 软件开发 2011 年 7月 6 日前言一、洗衣机控制器主要内容l.任务要求和内容 设计制作一个洗衣机的正反转定时控制线路。1)控制洗衣机的电机作如下运转定时开始正转10S暂停5S反转10S暂停5S定时到停止 定时未到2)用2位七段数码管显示定时时间(S)。2洗衣机控制器的使用步骤:(1)电路上电后,

2、在Start拨码开关未闭合前可以由UpKey和DownKey按键开关“+”“-”设置总的工作时间,确定洗衣机控制器工作允许时间。(2)设定好允许工作时间后,闭合Start开关,洗衣机控制器开始工作。(3)可以看见指示正转LED灯亮10s,停转LED灯亮5S,反转LED灯亮10s,停转LED亮5s,如此反复直至工作允许时间为0,蜂鸣器发出警报。二、设计原理简介洗衣机控制器的设计主要是时序控制和定时器的设计,由一片FPGA和外围电路构成电器控制部分。FPGA接收键盘的控制命令,控制洗衣机的正转、反转、停机和定时时间为0报警的工作状态、控制并显示工作状态以及显示定时时间。对FPGA芯片的编程采用模块

3、化的Verilog HDL (硬件描述语言)进行设计,设计由分频模块,按键消抖模块,定时时间自减模块,时序中心控制模块,数码管显示模块组成,顶层实现整个芯片的功能。顶层使用原理图实现,底层由Verilog HDL语句实现。FPGA的输入时钟为20M hz,因此使用了分频模块输出1hz的方波给定时器设定自减模块提供每1s自减1的信号,定时器模块输出的自减值输入给数码管显示译码模块和时序控制模块,通过译码模块定时器的值可以在数码管上显示,同时定时器的值输入到时序控制模块由此可以控制洗衣机的正转、反转、停机和报警工作方式。通过按键消抖模块可以准确无抖动的设定定时器的工作时间。 目录一 、前言2二、

4、目录 3三 、正文 43.1洗衣机控制器的整体框图及原理 4 3.2洗衣机控制电路单元模块设计和仿真5 3.2.1按键消抖模块的设计5 3.2.2时钟分频模块的设计6 3.2.3定时器设定和自减模块的设计7 3.2.4时序中心控制模块的设计83.2.5数码管显示译码模块的设计9 四、电路调试11五、结束语和心得体会12六、参考文献13七、附录137.1 FPGA系统板部分原理图13 7.2 FPGA系统板PCB图15三、正文3.1 洗衣机控制器的整体框图及原理:基于fpga的洗衣机控制器电路主要由五大模块组成,分别为按键消抖模块,时钟分频模块,定时器设定和自减模块,时序中心控制模块,数码管显示

5、译码模块。具体电路如图1所示: 图1由于输入时钟为20M hz,因此使用了分频模块输出1hz的方波(中间上方模块)给定时器设定和自减模块(中间下方模块)提供每1s自减1的信号,定时器模块输出的自减值输入给数码管显示译码模块(右下方模块)和时序控制模块(右上模块),通过译码模块定时器的值可以在数码管上显示,同时定时器的值输入到时序控制模块由此可以控制洗衣机的正转、反转、停机和报警工作方式。按键消抖模块(左下方模块)的作用是为了消除按键抖动而设立的。3.2、洗衣机控制电路单元模块设计和仿真3.2.1按键消抖模块的设计在进行独立按键或者矩阵式按键的设计的时候,我们在按下键盘的时候其实并不只是按下去而

6、是有一个抖动的过程,就连松手的过程也有抖动,然而这个抖动通常被人们所忽略,从而导致输入数据的错误和乱码,因此我们必须对按键进行按键的消抖处理。我们通常在单片机的消抖使用的是延时消抖,这种消抖也称为软件消抖,但是fpga的Verilog HDL语言是硬件描述语言,所以也称作硬件消抖,主要运用了状态机和延时的消抖方式。按键消抖模块图如图2: 图2其Verilog HDL 语言描述如下: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

7、_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 if(!Reset) begin H_L_f1=1; H_L_f2=1; end else begin H_L_f1=Key_in; H_L_f2=H_L_f1; endendassign H_L_sig = H_L_f2 & (H

8、_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=Count+1; endendalways (posedge Clk or negedge Reset)beginif(!Reset) begin H_L_f3=1; end else if(Count = Delay10ms) be

9、gin H_L_f3=Key_in; endendalways (posedge Clk or negedge Reset )begin if(!Reset) begin H_L_f4=1; end else begin H_L_f4=H_L_f3; endendassign Key_out = H_L_f4 & (H_L_f3); endmodule3.2.2时钟分频模块的设计由于使用的FPGA的输入时钟是20M hz,定时模块的自减频率是1hz,因此需要进行分频得到1hz的时钟频率输入给定时模块。时钟分频模块图如图3: 时钟分频模块功能仿真图如图4: 图3 图4其Verilog HDL 语

10、言描述如下:module FrequencyDivider(Clk,Rst,ClkOut);input Clk,Rst; output ClkOut;reg 23:0 Count; reg OutData; reg Reset;always (posedge Clk ) /异步复位同步释放begin Reset=Rst; endalways (posedge Clk or negedge Reset)begin if(!Reset) begin Count=0; OutData=0; endelse if(Count=24d10_000_000) begin Count=0; OutData=

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

12、lk_1hz,Rst,Start,UpKey,DownKey; output 6:0 SetTimer;reg 6:0 Timer; reg 6:0 rTimer; reg Reset;always (posedge Clk ) /异步复位同步释放begin Reset=Rst; endalways (posedge Clk or negedge Reset)begin if(!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=Timer; if(!Start) beginif(rTimer=7d0) begin rTimer=0; end /时间到0保持以免错误else begin rTimer=rTimer-1b1; end

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号