当前位置:文档之家› 数电课程设计报告新编

数电课程设计报告新编

数电课程设计报告新编 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】《基于FPGA的洗衣机电机正反转控制器》学院:信息与控制工程学院专业:电子信息工程班级:姓名:学号:2014年7月目录1.设计任务与要求 (1)2.设计思路 (1)3.设计原理及方案 (2)4.总结与讨论 (14)一、设计任务及要求:1.控制洗衣机的电机作如下周期性运转,正转4S――暂停2S――反转4S――暂停2S,用8位七段数码管显示自己学号的后四位(显示在从左边数第一个到第四个数码管上)、定时时间(两位,单位:分钟,显示在第五个和第六个数码管上),剩余时间(两位,单位:分钟,显示在第七个和第八个数码管上2.洗衣机控制器的工作过程为:(1)上电后显示自己学号的后四位,在运行中不变;初始洗涤时间为10分钟,在开始前可用S1和S2按键设置总的工作时间,确定洗衣机控制器定时工作时间。

(按下并松开S1定时时间增加一分钟,按下并松开S2定时时间减少一分钟,时间范围为:00~30分钟)(2)设定好定时时间后,按下并松开S3(按下时S3=0,松开时S3=1),启动控制器,整个系统开始运行;再次按下并松开S3,停止运行;再次按下并松开S3继续运行;按下并松开S4则回到上电初始状态。

其他两个按键不起作用。

到达定时时间后,停止运行,按下并松开S4则回到初始状态,在运行中要显示定时时间和剩余工作时间,当剩余时间为0时,要显示“End”。

在工作过程中用三个LED指示灯指示电机工作状态,正转D1灯亮,反转D2灯亮,暂停D3灯亮,如此反复直至工作时间为0停止(三个LED灯都不亮)。

系统总体框图如下:二、设计思路为了便于计时,首先把1000Hz的外部时钟分频为1Hz。

正转时间设为4s,反转设为4s,暂停设为2s,令洗衣机按照正转4s、暂停2s、反转4s、暂停2s的顺序进行旋转,周期恰好为10秒,而定时时间单位为分钟,因此需要设计分钟计数器和秒计数器。

开发板提供的时钟信号CP频率为1000Hz,应该设计一分频器得到1Hz的时钟信号作为时间计数脉冲。

设计中七段数码管采用动态扫描的方式显示,扫描需要一个比较高频率的信号,本次设计选用1000HZ。

为了得到1000Hz信号,必须对输入的时钟信号50MHZ进行分频。

显示模块共用10个管脚,其中7个用于连接8个数码管的七段LED,还有3个管脚用于选择点亮哪个数码管,每隔很短的一段时间8个数码管交替点亮,依次循环,动态显示,由于人眼的视觉残留,可以观察到连续的测量计数器的计数值。

其原理框图如图所示:本系统采用层次化、模块化的设计方法,设计顺序为自下向上。

首先实现系统框图中的各子模块,然后由顶层模块调用各子模块(既可以采用原理图,也可以采用Verilog HDL语言)来完成整个系统。

三、设计原理及方案1.洗衣机点击正反转控制器的设计由由分频模块,模八计数器模块,s1s2s3s4控制电路模块,32位信号产生模块,数据选择器模块,数码管显示模块组成。

FPGA接收命令,控制洗衣机的正转、反转、停机和定时时间为0时显示End的工作状态。

对FPGA芯片的编程采用模块化的Verilog HDL (硬件描述语言)进行设计。

顶层使用原理图实现,底层由Verilog HDL语句实现。

(1)总体框图(2)功能实现2.分频器50MHz到1KHz本模块实现对50MHz到1KHz的分频,1KHz的信号为模八计数器提供时钟信号。

(1)源程序module lrfenpinqi50M(clk_50M,clk_1000);input clk_50M;output clk_1000;reg clk_1000;reg [15:0]cnt;always@(posedge clk_50M)beginif(cnt==16'd24999)beginclk_1000<=~clk_1000;cnt<=0;endelsecnt<=cnt+1;endendmoduleendmodule(2)元器件(3)功能仿真3.分频器1KHz到1Hz本模块实现对1KHz到1Hz的分频,1KHz的信号为s1s2s3s4控制电路提供时钟信号。

(1)源程序module lrfenpinqi1000(clk_1000,clk_1);input clk_1000;output clk_1;reg clk_1;reg [15:0]cnt;always@(posedge clk_1000)beginif(cnt==16'd499)beginclk_1<=~clk_1;cnt<=0;endelsecnt<=cnt+1;endendmodule(2)元器件(3)功能仿真4.模八计数器本模块实现显示数码管的动态扫描。

如果采用静态显示,则需要56根线实现,动态则只需要10根。

其输出还作为数据选择器的SEL端输入。

(1)源程序module lrjishuqi(cp,q);input cp;output q;reg [2:0]q;always@(posedge cp)beginif(q==3'd7)q<=0;else if(q==0||q>0)q<=q+1;endendmodule(2)元器件(3)功能仿真控制电路本模块实现时间加减,开始和复位的功能并且通过本模块来控制D1,D2,D3三个灯的循环产生,本模块还输出8位信号作为下一模块设置时间和剩余时间的输入。

(1)源程序module s1s2s3s4(clk,s1,s2,s3,s4,m_settime,m_left,d1,d2,d3); input clk;input s1,s2,s3,s4;output [4:0]m_left;output [4:0]m_settime;output d1,d2,d3;reg [5:0]s_out;reg [4:0]m_out;reg [4:0]m_left;reg [4:0]m_up;reg [4:0]m_down;reg [4:0]m_settime;reg str;reg d1,d2,d3;reg [3:0]i;reg stop;always@(posedge clk or negedge s4)beginif(!s4)begins_out<=0;m_out<=0;i<=0;d1<=0;d2<=0;d3<=0;stop<=0;endelse if(m_left==0)begini<=14;d1<=0;d2<=0;d3<=0;stop<=1;endelse if(str&&!stop)beginif(i<4&&i>=0)begini<=i+1;d1<=1;d3<=0;endif(i<6&&i>=4)begini<=i+1;d1<=0;d3<=1;endif(i<10&&i>=6)begini<=i+1;d3<=0;d2<=1;endif(i==10)begini<=i+1;d2<=0;d3<=1;endif(i==11)i<=0;if(i>12)d1<=0;if(s_out!=6'd59)s_out<=s_out+1;elsebegins_out<=0;m_out<=m_out+1;endendendalways@(posedge s1 or negedge s4) beginif(!s4)m_up<=0;else if(!str)m_up<=m_up+5'd1;endalways@(posedge s2 or negedge s4) beginif(!s4)m_down<=0;else if(!str)m_down<=m_down-5'd1;endalways@(posedge s3 or negedge s4)beginif(!s4)str<=0;else if(str==1)str<=0;else if(str==0)str<=1;endalways@( s1 or s2 or s4)beginm_settime<=5'd10+m_up+m_down;endalways@(clk or s3 or s4)beginm_left=m_settime-m_out;endendmodule(2)元器件(3)功能仿真5. 32位信号产生电路本模块长生32位信号实现显示学号和设置时间、剩余时间的功能。

(1)源程序module xinhao32(settime,lefttime,s1,s2,s3,s4,s5,s6,s7,s8); output [3:0]s1,s2,s3,s4,s5,s6,s7,s8;input [4:0]lefttime,settime;reg [3:0]s1,s2,s3,s4,s5,s6,s7,s8;always@(settime or lefttime)begins1=4'h2;s2=4'h2;s3=4'h0;s4=4'h3;if(lefttime==0)begins5=4'hd;s6=4'ha;s7=4'hb;s8=4'hc;endelsebegins5=settime/10;s6=settime%10;s7=lefttime/10;s8=lefttime%10;endendendmodule(2)元器件(3)功能仿真6.数据选择器通过本模块将四个八位信号分别选到译码器的输入端。

(1)源程序module lrshujuxuanze(in0,in1,in2,in3,in4,in5,in6,in7,sel,out); input[3:0]in0,in1,in2,in3,in4,in5,in6,in7;input[2:0]sel;output[3:0]out;reg[3:0]out;always@( in0 or in1 or in2 or in3 or in4 or in5 or in6 or in7 or sel) begincase(sel)3'd0:out=in0;3'd1:out=in1;3'd2:out=in2;3'd3:out=in3;3'd4:out=in4;3'd5:out=in5;3'd6:out=in6;3'd7:out=in7;endcaseendendmodule(2)元器件(3)功能实现7.译码电路本模块将数据选择器的4位输出信号译码为7位信号作为数码管的显示。

相关主题