




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编号: 1 电机控制综合课程设计报告书课 题: 基于FPGA的洗衣机控制器 院 (系): 机电工程学院 专 业: 电气工程及其自动化 学生姓名: 蒋岷君 学 号: 0800120313 题目类型:理论研究 实验研究 工程设计 工程技术研究 软件开发 2011 年 7月 6 日前言一、洗衣机控制器主要内容l.任务要求和内容 设计制作一个洗衣机的正反转定时控制线路。1)控制洗衣机的电机作如下运转定时开始正转10S暂停5S反转10S暂停5S定时到停止 定时未到2)用2位七段数码管显示定时时间(S)。2洗衣机控制器的使用步骤:(1)电路上电后,在Start拨码开关未闭合前可以由UpKey和DownKe
2、y按键开关“+”“-”设置总的工作时间,确定洗衣机控制器工作允许时间。(2)设定好允许工作时间后,闭合Start开关,洗衣机控制器开始工作。(3)可以看见指示正转LED灯亮10s,停转LED灯亮5S,反转LED灯亮10s,停转LED亮5s,如此反复直至工作允许时间为0,蜂鸣器发出警报。二、设计原理简介洗衣机控制器的设计主要是时序控制和定时器的设计,由一片FPGA和外围电路构成电器控制部分。FPGA接收键盘的控制命令,控制洗衣机的正转、反转、停机和定时时间为0报警的工作状态、控制并显示工作状态以及显示定时时间。对FPGA芯片的编程采用模块化的Verilog HDL (硬件描述语言)进行设计,设计
3、由分频模块,按键消抖模块,定时时间自减模块,时序中心控制模块,数码管显示模块组成,顶层实现整个芯片的功能。顶层使用原理图实现,底层由Verilog HDL语句实现。FPGA的输入时钟为20M hz,因此使用了分频模块输出1hz的方波给定时器设定自减模块提供每1s自减1的信号,定时器模块输出的自减值输入给数码管显示译码模块和时序控制模块,通过译码模块定时器的值可以在数码管上显示,同时定时器的值输入到时序控制模块由此可以控制洗衣机的正转、反转、停机和报警工作方式。通过按键消抖模块可以准确无抖动的设定定时器的工作时间。 目录一 、前言2二、 目录 3三 、正文 43.1洗衣机控制器的整体框图及原理
4、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的洗衣机控制器电路主要由五大模块组成,分别为按键消抖模块,时钟分频模块,定时器设定和自减模块,时序中心控制模块,数码管显示译码模块。具体电路如图1所示: 图1由于输入时钟为20M
5、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_f2; reg H_L_f3;reg H_L_f4; r
7、eg 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_L_f1); /延时的启动标志位always (pose
8、dge 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) begin H_L_f3=Key_in; endendalwa
9、ys (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 语言描述如下:module FrequencyDivider
10、(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=OutData; endelsebegin Count=C
11、ount+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,Clk_1hz,Rst,Start,UpKey,DownKe
12、y; 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
13、end /时间减一endalways (posedge Clk_1hz) /1s信号输入beginrTimer=Timer; if(!Start) beginif(rTimer=7d0) begin rTimer=0; end /时间到0保持以免错误else begin rTimer=rTimer-1b1; end end/每秒减一endassign SetTimer=rTimer;endmodule3.2.4时序中心控制模块的设计时序控制模块由定时器送来的值来控制洗衣机控制器的工作方式,正转、反转、停转和报警。时序中心控制模块图如图7; 时序中心控制模块图功能仿真如图8: 图7 图8其Ver
14、ilog HDL 语言描述如下:module Center(Clk,Start,Rst,Forward,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; endalwa
15、ys (posedge Clk or negedge Reset)beginif(!Reset) begin rBack=0; rStop=0; rSound=0;rForward=0; rSetTimer=0; i=0; j=0; num=0; end else if(!Start & SetTimer)begin /播下开始键并且倒计时不为0case(i) /01正转10s4d0: begin rSetTimer=SetTimer; rForward=1b1;rBack=1b0; rStop=1b0; rSound=1b0; i=i+1b1; end4d1: begin if(SetTim
16、er=rSetTimer-4d10) begin i=i+1b1; endend4d2: 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; endend4d4: begin rSetTimer=SetTimer; i=i+1b1; rForward=1b0; rBack=1b1; rStop=1b0; rSound=1b0;end/45反转10s4d5: b
17、egin if(SetTimer=rSetTimer-4d10) begin i=i+1b1; endend4d6: 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 )2d
18、0: begin /倒计时为0时停机并报警1sif(num=25d20_000_000) begin j=j+1b1; endelse begin num=num+1b1; rForward=1b0; rBack=1b0; rStop=1b1; rSound=1b1;endend2d1: begin rSound=1b0; end endcase endendassign Forward=rForward; assign Back=rBack; assign Stop=rStop; assign Sound=rSound;endmodule3.2.5数码管显示译码模块的设计数码管显示译码模块主
19、要功能是把定时器送来的值译码并通过数码管显示出来。fpga的Verilog HDL硬件语言是并行的这有别于软件的描述语言扫描方式。数码管显示译码模块图如图9: 图9数码管显示译码模块功能仿真图如图10:、图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_se
20、l; reg 7:0 Led_out; reg Reset;reg 20:0 Count; reg 9:0 rDate;parameter Time=d100_000;/并行扫描时间initialbegin Count=0; rDate=0; Led_sel5:0=b111_111; Display0=b1100_0000; Display1=b1111_1001;Display2=b1010_0100; Display3=b1011_0000;Display4=b1001_1001; Display5=b1001_0010;Display6=b1000_0010; Display7=b111
21、1_1000;Display8=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型变量提高
22、数据的稳定性if(!Reset) 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; endendassign Dig_sel = Led_sel;assign Dig_out = Led_out;endmodule四、电路调试1定时器自减值与洗衣机控制器的正转、反转,停机,报警在RTL仿真的时候是同步的,但是下载到硬件上运行的时候出错,不能同步。解决方法:反复的研究
23、Verilog HDL程序后发现,开始是使用分频器输出的1hz的时钟输入给时序中心控制器模块,而定时器模块的时钟是20M hz的,两个模块的时钟不能同步,因此就存在一定的延时不同步导致错误。然后我把时序中心控制模块的时钟也改为20M hz,让两个模块的时钟同步,定时器自减输出的值输入到时序中心控制模块作为时序控制的信号,问题顺利解决。2程序在运行的时有时候数码管会显示定时器的起始值,洗衣机控制器又重新从头开始运行。解决方法:研究硬件电路的设计发现,启动工作控制开关,默认设置为了低电平是不启动的,高电平启动并保持才能使洗衣机控制器正常工作,而在启动后工作中,电平出现不稳的状态,电平并不能很好的起
24、到拉高的作用,因此怀疑是上拉能力不足和电源纹波的干扰,导致电平的不稳定性使洗衣机控制器有时复位。随后我便在电源的输出端并接一个220uf的电解电容和一个0.1uf的瓷片电容,再用示波器测试发现纹波减少很多;同时为了防止上拉能力不足导致错误,我便把启动控制开关默认设置为高电平,低电平为启动和保持。然后再测试,问题解决。3使用按键修改定时器模块的设定值时,按一下按键,数据变化好几次,不是每按一次改变一个值。解决方法:根据以往的经验可以知道是因为按键没有消抖所致,在设计电路的时候忘记了使用按键消抖模块,随后编写了按键消抖模块,再接入控制系统测试,数据正确,问题解决。五、结束语和心得体会在经过了几天的学习设计仿
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届内蒙古赤峰市第二中学化学高二上期末统考模拟试题含答案
- 北京市航空航天大学附属中学2026届高二化学第一学期期末教学质量检测试题含答案
- 情商管理培训课件
- 市场促销活动策划方案
- 春节系列文化活动方案
- 生活喜好测试题及答案
- 植物保护考试试题及答案
- 家电公司风险报告编制规定
- 阿克地区温宿二中2026届化学高一上期中质量检测试题含解析
- 甲方采购面试题及答案
- 承接战略贴近业务人力资源规划设计到应用
- 2025年《3~6岁儿童学习与发展指南》测试卷(附答案)
- 精装修安全文明施工方案
- 肺结核共45张课件
- 岗位价值评估表-操作简单
- 施工现场签证单(模板)
- 达梦数据库DM8程序员手册
- GB-T-13663-2000-给水用聚乙烯(PE)管材
- 【审计工作底稿模板】SA营业收入
- 航运公司船员工作管理运营方案
- 18叶片维修作业指导书
评论
0/150
提交评论