数电课程设计报告.docx

上传人:b****9 文档编号:26360272 上传时间:2023-06-18 格式:DOCX 页数:13 大小:17.96KB
下载 相关 举报
数电课程设计报告.docx_第1页
第1页 / 共13页
数电课程设计报告.docx_第2页
第2页 / 共13页
数电课程设计报告.docx_第3页
第3页 / 共13页
数电课程设计报告.docx_第4页
第4页 / 共13页
数电课程设计报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数电课程设计报告.docx

《数电课程设计报告.docx》由会员分享,可在线阅读,更多相关《数电课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。

数电课程设计报告.docx

数电课程设计报告

《基于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个数码管交替点亮,依次循环,动态显示,由于人眼的视觉残留,可以观察到连续的测量计数器的计数值。

其原理框图如图所示:

本系统采用层次化、模块化的设计方法,设计顺序为自下向上。

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

3、设计原理及方案

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

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

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

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

(1)总体框图

(2)功能实现

2.分频器50MHz到1KHz

本模块实现对50MHz到1KHz的分频,1KHz的信号为模八计数器提供时钟信号。

(1)源程序

modulelrfenpinqi50M(clk_50M,clk_1000);

inputclk_50M;

outputclk_1000;

regclk_1000;

reg[15:

0]cnt;

always@(posedgeclk_50M)

begin

if(cnt==16'd24999)

begin

clk_1000<=~clk_1000;

cnt<=0;

end

else

cnt<=cnt+1;

end

endmoduleendmodule

(2)元器件

(3)功能仿真

3.分频器1KHz到1Hz

本模块实现对1KHz到1Hz的分频,1KHz的信号为s1s2s3s4控制电路提供时钟信号。

(1)源程序

modulelrfenpinqi1000(clk_1000,clk_1);

inputclk_1000;

outputclk_1;

regclk_1;

reg[15:

0]cnt;

always@(posedgeclk_1000)

begin

if(cnt==16'd499)

begin

clk_1<=~clk_1;

cnt<=0;

end

else

cnt<=cnt+1;

end

endmodule

(2)元器件

(3)功能仿真

4.模八计数器

本模块实现显示数码管的动态扫描。

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

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

(1)源程序

modulelrjishuqi(cp,q);

inputcp;

outputq;

reg[2:

0]q;

always@(posedgecp)

begin

if(q==3'd7)

q<=0;

elseif(q==0||q>0)

q<=q+1;

end

endmodule

(2)元器件

(3)功能仿真

控制电路

本模块实现时间加减,开始和复位的功能并且通过本模块来控制D1,D2,D3三个灯的循环产生,本模块还输出8位信号作为下一模块设置时间和剩余时间的输入。

(1)源程序

modules1s2s3s4(clk,s1,s2,s3,s4,m_settime,m_left,d1,d2,d3);

inputclk;

inputs1,s2,s3,s4;

output[4:

0]m_left;

output[4:

0]m_settime;

outputd1,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;

regstr;

regd1,d2,d3;

reg[3:

0]i;

regstop;

always@(posedgeclkornegedges4)

begin

if(!

s4)

begin

s_out<=0;

m_out<=0;

i<=0;

d1<=0;

d2<=0;

d3<=0;

stop<=0;

end

elseif(m_left==0)

begin

i<=14;

d1<=0;

d2<=0;

d3<=0;

stop<=1;

end

elseif(str&&!

stop)

begin

if(i<4&&i>=0)

begin

i<=i+1;

d1<=1;

d3<=0;

end

if(i<6&&i>=4)

begin

i<=i+1;

d1<=0;

d3<=1;

end

if(i<10&&i>=6)

begin

i<=i+1;

d3<=0;

d2<=1;

end

if(i==10)

begin

i<=i+1;

d2<=0;

d3<=1;

end

if(i==11)

i<=0;

if(i>12)

d1<=0;

if(s_out!

=6'd59)

s_out<=s_out+1;

else

begin

s_out<=0;

m_out<=m_out+1;

end

end

end

always@(posedges1ornegedges4)

begin

if(!

s4)

m_up<=0;

elseif(!

str)

m_up<=m_up+5'd1;

end

always@(posedges2ornegedges4)

begin

if(!

s4)

m_down<=0;

elseif(!

str)

m_down<=m_down-5'd1;

end

always@(posedges3ornegedges4)

begin

if(!

s4)

str<=0;

elseif(str==1)

str<=0;

elseif(str==0)

str<=1;

end

always@(s1ors2ors4)

begin

m_settime<=5'd10+m_up+m_down;

end

always@(clkors3ors4)

begin

m_left=m_settime-m_out;

end

endmodule

(2)元器件

(3)功能仿真

5.32位信号产生电路

本模块长生32位信号实现显示学号和设置时间、剩余时间的功能。

(1)源程序

modulexinhao32(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@(settimeorlefttime)begin

s1=4'h2;

s2=4'h2;

s3=4'h0;

s4=4'h3;

if(lefttime==0)begin

s5=4'hd;

s6=4'ha;

s7=4'hb;

s8=4'hc;end

else

begin

s5=settime/10;

s6=settime%10;

s7=lefttime/10;

s8=lefttime%10;

end

end

endmodule

(2)元器件

(3)功能仿真

6.数据选择器

通过本模块将四个八位信号分别选到译码器的输入端。

(1)源程序

modulelrshujuxuanze(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@(in0orin1orin2orin3orin4orin5orin6orin7orsel)

begin

case(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;

endcase

end

endmodule

(2)元器件

(3)功能实现

7.译码电路

本模块将数据选择器的4位输出信号译码为7位信号作为数码管的显示。

(1)源程序

modulelryimaqi(decode_out,decode_in);

output[6:

0]decode_out;

input[3:

0]decode_in;

reg[6:

0]decode_out;

always@(decode_in)

begin

case(decode_in)

4'h0:

decode_out=7'b1111110;

4'h1:

decode_out=7'b0110000;

4'h2:

decode_out=7'b1101101;

4'h3:

decode_out=7'b1111001;

4'h4:

decode_out=7'b0110011;

4'h5:

decode_out=7'b1011011;

4'h6:

decode_out=7'b1011111;

4'h7:

decode_out=7'b1110000;

4'h8:

decode_out=7'b1111111;

4'h9:

decode_out=7'b1111011;

4'ha:

decode_out=7'b1001111;

4'hb:

decode_out=7'b0010101;

4'hc:

decode_out=7'b0111101;

4'hd:

decode_out=7'b0000000;

endcase

end

endmodule

(2)元器件

(3)功能仿真

4、总结与讨论

本次课程设计设计了基于EPGA的洗衣机电机正反转控制器。

在课程开始之前,要提前预习,掌握设计的总体思路。

由于没有好好预习,所以在第一天花费很长时间了解设计任务、设计要求及思考总体思路。

本次设计要根据系统采取层次化、模块化的设计方法,设计顺序自下而上。

首先实现系统框图中的各子模块,然后由顶层设计调用各子模块来完成整个系统。

在显示管的管脚分配的时候由于基础知识掌握不牢固,将管脚分配弄反,得到了镜像的数字显示。

第二次验证程序的时候,数字可以正常显示,但D1,D2,D3三个灯均不亮,检查了很多遍才发现自己的错误。

最后,顺利完成了本次设计并且实现了题目要求的功能。

本次设计,学到了很多东西:

①在经过了几天的设计仿真,学到的东西,主要是对数字电路的基础理论知识的复习巩固和对FPGA方面知识的掌握,更加清楚了解到了VerilogHDL语言的魅力,对以前学的理论知识通过实践来检验,更深入的理解了理论联系实际的重要性。

②要有坚持不懈的耐心和毅力,程序实现不可能一次成功,可能会出现很多错误,所以要持之以恒。

③要先把握事物大概,然后详细了解其各个组成部分。

本次设计中采用层次化。

模块化的设计方法,设计顺序自上而下。

首先实现系统框图中的各子模块,然后由顶层设计调用各子模块来完成整个系统。

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

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1