北邮数电实验下LED点阵风扇的设计与实现.docx

上传人:b****8 文档编号:9848769 上传时间:2023-02-07 格式:DOCX 页数:33 大小:299.74KB
下载 相关 举报
北邮数电实验下LED点阵风扇的设计与实现.docx_第1页
第1页 / 共33页
北邮数电实验下LED点阵风扇的设计与实现.docx_第2页
第2页 / 共33页
北邮数电实验下LED点阵风扇的设计与实现.docx_第3页
第3页 / 共33页
北邮数电实验下LED点阵风扇的设计与实现.docx_第4页
第4页 / 共33页
北邮数电实验下LED点阵风扇的设计与实现.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

北邮数电实验下LED点阵风扇的设计与实现.docx

《北邮数电实验下LED点阵风扇的设计与实现.docx》由会员分享,可在线阅读,更多相关《北邮数电实验下LED点阵风扇的设计与实现.docx(33页珍藏版)》请在冰豆网上搜索。

北邮数电实验下LED点阵风扇的设计与实现.docx

北邮数电实验下LED点阵风扇的设计与实现

数字电路与逻辑设计实验

实验报告

实验名称:

Ied点阵风扇的设计与实现

学院:

电子工程学院

专业:

电子科学与技术

班级:

班内序号:

学号:

姓名:

北京邮电大学

2015年11月9日

一、任务要求3...

1.基本要求:

3...

2.提高要求:

3...

二、系统设计3...

1.设计思路3...

2.总体框图4...

3.分块设计7...

三、仿真波形及波形分析8...

四、源程序(包括注释)1.2.

五、功能说明及资源利用情况2..3

1.功能说明2..3.

2.资源利用情况2..4.

六、故障及问题分析2..5.

七、总结和结论2..7.

1.总结2..7.

2.结论2..7.

1.基本要求:

(1)用8*8点阵模拟风扇转动,并采用双色点阵显示。

(2)风扇转动方式如图1所示,包括四个点阵显示状态并按顺序循环显示。

风扇转动速度根据环境温度分为4档,其中1档的四个显示状态之间的切换时间为2秒,2档为1秒,3档为0.5秒,4档为静止不动。

(3)环境温度通过2个BTN按键设置,一个用来增加,一个用来减少,

温度可设置范围为10C~40C,温度精度为1C,并用两个数码管进行温度显示。

风扇根据不同的温度自动采用不同的转动速度,其中20C~24C

对应1档,25C~29C对应2档,30C~40C对应3档,10C~19C对应4档,用一个数码管显示档位。

(4)定时模式:

在风扇不同转动速度下,可以通过按键切换进入定时模

式。

定时时间可设置范围为20~59秒,采用两个数码管进行倒计时,当倒计时结束后,风扇状态保持静止不动。

(5)设置开关键。

风扇开机初始状态为20C、1档,并有不小于5秒的开机音乐。

关机状态为点阵全灭。

OOO<0000OOo<0000000<0000OOO

∙000OOOO∙000ocoo∙ooo0000∙000

图1

2.提高要求:

(1)设计LED风扇的其他工作模式。

(2)利用实验板上的温度传感器代替按键直接获取温度数据,实现对LED

风扇四档转速的自动控制。

(3)用数码管实时显示温度传感器的温度数据,精度为0.1C。

(4)

自拟其他功能。

1.设计思路

在LED点阵风扇的设计与实现中,首先进行了分频器的设计:

由于所使用电路板的时钟频率为50MHz而需要使用的点阵、数码管扫描频率为1kHz,扇叶切换频率分别为2Hz、1Hz和0.5Hz,故首先将时钟频率进行四次分频。

然后是按键控制温度调节部分的实现,由于题中要求温度在10-40之间的两位数,所以在Vhdl的程序设计中将这两位数拆成两个四位的BCD码,并用temerature_h和temperature」来分别表示,每当需要温度增减时,通过控制这两个信号来实现温度的变化。

接着是倒计时部分:

同样是使用两个四位BCD码来表示,并且创建了一个标准信号来记录倒计时是否结束,以此来完成倒计时结束后风扇的停止转动。

以温度的输入来实现档位的选择,首先判断记录倒计时的信号值,若倒计时结束,则选择4档;否则,判断高位的温度值,当其为1、3、4时均有分别对应的档位,当起为2时再用对应的CASE语句来判断档位。

点阵显示部分:

根据档位的判断来选择合适的时钟控制风扇扇叶的旋转速度,用IkHz的时钟来对点阵的行进行扫描,低频时钟用来切换风扇扇叶的四个图形。

数码管显示:

6个数码管稳定显示需要至少300Hz频率的时钟,故用IkHz时钟来扫描数码管,温度的高低位数字、时间的高低位数字以及档位,都通过一个译码器来输出对应数码管显示数字的7位向量,使得当时钟扫描到某一个数码管时,可以正确地显示要表达的数字。

音乐播放:

使用蜂鸣器播放音乐同样也需要两个时钟来完成对应功能,一个时钟来完成节拍的表达,另一个时钟来输出乐音的音调,如C、DE、F

等,使得当节拍的时钟到来时能够输出对应简谱中的音调。

2.总体框图

3.

系统顶层框图

(1)

系统对外接口图

 

(2)逻辑划分框图

蜂鸣器

P14、p15

BTN^

BTNo

温度

控制

P5

(4)流程图

节拍、音调

分频p12、

时钟Clk

p13

IkHz

频器*

p1,p2,p3,p4

HZ

0.5Hz

开关Clr

temperature」

LI档位

—►

da

ng

P6

IemPeratUre_l

p10

Ir1

!

Iimeh

d倒

数码

I~k

管p9

:

ime_l

p8

Seg

p7

StaH

ten

时钟COUr

选择器*

点阵

p11

 

4.分块设计

pl:

将50MHZ勺时钟Clk分500000次频变为为IkHz的时钟clk_1kHz,来完成对点阵行row以及6个数码管Cat的扫描。

若CIr=‘0'即关机状态,则输出时钟及计数变量均置零;否则当时钟上升沿到来时,计数变量开始计数,时钟也开始输出。

p2:

将IkHz的cIk_1kHz分500次频,输出频率为2Hz的cIk_2Hz,来完成风扇3档转速的输出。

同样为使关机状态点阵全灭,需先判断Clr的值。

p3:

将cIk_2Hz二分频,输出频率为1Hz的cIk_1Hz,来完成风扇2档转速的输出。

p4:

将cIk_1Hz二分频,输出频率为0.5Hz的clk_half1Hz来完成风扇1档转速的输出。

p5:

为防止由于按键抖动带来的按键一次增加或减少温度过多,使用2Hz

的时钟来判断按键是否正在使用以实现按键的防抖。

同样,首先使用IF语句

要判断Clr的值,如果为0,则温度变为20C;否则当2Hz的时钟上升沿到来时,若同时表达温度上升的输入信号temp_UP为1,则接着判断其高位是否为0100。

若高位为0100则,温度输出值保持40C不变,不再累加;否则温度的个位增加1,当个位满足1010时,置零且十位增加1。

同理,当表达温度下降的输入信号temp_down为1时也如此判断,区别在于判断其最小值是否为10,并且相减时判断低位为1111时,则十位减一,个位置为0101。

这样的判断语句的设置,能够实现关机时数码管全灭,由按键来控制温度的增减,并且温度范围为10~40C的实验要求。

p6:

档位判断模块,当表达倒计时结束的信号count_end为1时,档位输出为0,其他的档位输入由一个嵌套的CASE语句来完成。

温度的十位数字为0001、0011、0100即1、3、4时,档位输出分别为00、11、11即4、3、3档,十位为其他数字即2时,再判断个位数字以此来实现输出1档和2档。

此模块可以实现由温度到档位的判断选择。

p7:

倒计时模块,直接置入一个倒计时数字30,Start变化时开始倒计时,

未完成实验20~59s可调节要求。

当CIr为0时即关机状态下,COunt_end置零,time_h和time_l为1111,不显示;若clr为1即开机状态下,start为1,则开始倒计时,倒计时算法与降低温度类似,但需区分出1s->0s时,

使COunt_end为1,标志倒计时结束,到达0s时需保持时间不变。

如果start为0,为开启倒计时状态,则将时间置为30。

p8:

译码器,由于数码管现实的档位、倒计时时间的高低位以及温度的高低位,均为4位BCe码,故需要将它们转换为能够在数码管上显示的对应数字,使用5个CASE语句来进行选择输出。

p9:

数码管扫描,首先判断开关机状态,若为开机则判断Start是否为1,Start为0时只显示档位和温度;Start为1时,全部显示。

然后将1kHz时钟6分频,每个时钟上升沿代表了扫描到一个Cat,若显示,则将其置为0其余为1,输出对应从译码器得到的7位编码。

p10:

使用CASE语句根据档位来选择输出时钟,dang为00时,输出时钟为0,扇叶静止;dang为01时,表示1档,输出时钟为CIk_haIf1Hz;dang为10时,表示2档,输出时钟为CIk_1Hz;dang为11时,表示3档,输出时钟为CIk_2Hz。

p11:

点阵显示模块,在开机状态下,使用1kHz时钟循环扫描点阵行,每扫描到某一行,点亮对应列的Ied灯,以此来实现在点阵上稳定显示某一图案。

于此同时,用档位决定的低频时钟来扫描4幅图案,每一图案对应着自己的行列编码,以此来用低频时钟控制扇叶扫描的速率。

p12:

节拍分频器,为得到24Hz的节拍频率,对时钟进行分频系数为2083332的分频,使得得到的节拍每记24个数约为1S。

p13:

依据输入的tone分频系数来对clk进行分频,以实现beep对不同音调的输出。

p14:

以tape的时钟为输入时钟,输出对应节拍上音乐的分频系数。

p15:

对beep输出音调的时钟频率,以实现音乐的输出。

三、仿真波形及波形分析

p1:

由于分频系数为50000过高,无法进行仿真。

p2:

由于分频系数为500过高,无法进行仿真。

p3:

2Hz->1Hz,Clr置零时无时钟输出,其他时刻对时钟进行二分频。

3IWiLlitιc∣r∣ff∣Ci⅛⅛:

Γι∣*ι∏e

 

图3

p5:

温度调节模块,temp_up为1时,temperature」在时钟上升沿到来时增加;temp_down为1时,temperature」在时钟上升沿到来时减少;CIr为0时,温度重新置为20。

图4

p6:

档位选择模块,当CoUnt_end为1时,dang输出为0即4档;当温度输入为10~40C以外的数值时,由于总体程序中已有限制,故未考虑该情况,输出档位均为1,其余情况下dang输出为1、2、3分别代表1档、2档、3档,仿真情况符合实验要求。

图5

p7:

开机时若Start为1,则开始倒计时;若Start为O则时间重新置为30,Start为1,则继续开始倒计时,符合实验要求。

图6p8:

4位BCD码与7位显示码之间对应正确。

图7

p9:

由于Seg不存在真实数值,无法仿真,故仅仿真数码管Cat的显示。

当Start为1时扫描5个数码管,当start为0时扫描3个数码管,符合设计思路。

图8

p10:

档位选择器,输出时钟无确切数值,故无法仿真。

p11:

点阵扫描与图案切换时钟频率相差过大,故无法进行仿真。

p12:

节拍分频器,分频系数过大,故无法仿真。

p13:

音调分频,分频系数过大,故无法仿真。

p14:

输出信号为整形数值,故无法仿真。

p15:

tone_clk无有效时钟数值,故无法进行仿真。

四、源程序(包括注释)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYfanIS

PORT(

clk,clr:

INSTD_lOGIC;--clr==>SW0

temp_up,temp_down:

INSTD_LOGIC;--temp_up==>BTN1;temp_down==>BTN0;

start:

INSTD_LOGIC;--start==>SW7

seg:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);--控制数字显示

cat:

OUTSTD_LOGIC_VECTOR(5DOWNTO0);--共阴极数码管

row:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

colr:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

colg:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

beep:

OUTSTD_LOGIC);

ENDfan;

ARCHITECTUREdisplayOFfanIS分频1SIGNALclk_1kHz:

STD_LOGIC;

SIGNALclk_out1:

STD_LOGIC;

分频2

SIGNALclk_2Hz:

STD_LOGIC;

SIGNALclk_out2:

STD_LOGIC;

分频3

SIGNALclk_1Hz:

STD_LOGIC;

SIGNALclk_out3:

STD_LOGIC;

分频4

SIGNALclk_half1Hz:

STD_LOGIC;

SIGNALclk_out4:

STD_LOGIC;

温度输入调节

SIGNALtemperature_h:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALtemperature_l:

STD_LOGIC_VECTOR(3DOWNTO0);档位选择SIGNALcount_end:

STD_LOGIC;

SIGNALdang:

STD_LOGIC_VECTOR(1DOWNTO0);倒计时

SIGNALtime_h:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALtime_l:

STD_LOGIC_VECTOR(3DOWNTO0);数码管显示SIGNALdang_seg:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALtime_h_seg:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALtime_l_seg:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALtemperature_h_seg:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALtemperature_l_seg:

STD_LOGIC_VECTOR(6DOWNTO0);风扇转速时钟输出SIGNALclk_out:

STD_LOGIC;

点阵显示

SIGNALrow_temp,colr_temp,colg_temp:

STD_LOGIC_VECTOR(7DOWNTO0);

节拍分频SIGNALtape_clk:

STD_LOGIC;

音调分频

SIGNALtone_tmp:

INTEGERRANGE0TO64000;

SIGNALtone_clk:

STD_LOGIC;

BEGIN

分频1:

将50MHz时钟频率分为1KHz

p1:

PROCESS(clk,clr)

VARIABLEtmp1:

INTEGERRANGE0TO24999;

BEGIN

IFclr='0'THENtmp1:

=0;clk_1kHz<='0';

ELSIFclk'EVENTANDclk='1'THEN

IFtmp1=24999THENtmp1:

=0;clk_out1<=NOTclk_out1;

ELSEtmp1:

=tmp1+1;

ENDIF;clk_1kHz<=clk_out1;

ENDIF;

ENDPROCESSp1;

分频2:

利用1kHz时钟分得2Hz时钟

p2:

PROCESS(clk_1kHz,clr)

VARIABLEtmp2:

INTEGERRANGE0TO249;

BEGIN

IFclr='0'THENtmp2:

=0;clk_2Hz<='0';

ELSIFclk_1kHZ'EVENTANDclk_1kHz='1'THEN

IFtmp2=249THENtmp2:

=0;clk_out2<=NOTclk_out2;

ELSEtmp2:

=tmp2+1;

ENDIF;clk_2Hz<=clk_out2;

ENDIF;

ENDPROCESSp2;

分频3:

利用2Hz时钟分得1Hz时钟

p3:

PROCESS(clk_2Hz,clr)

BEGIN

IFclr='0'THENclk_out3<='0';

ELSIFclk_2Hz'EVENTANDclk_2Hz='1'THENclk_out3<=NOTclk_out3;

ENDIF;

clk_1Hz<=clk_out3;

ENDPROCESSp3;

分频4:

利用1Hz时钟分得0.5Hz时钟

p4:

PROCESS(clk_1Hz,clr)

BEGIN

IFclr='0'THENclk_out4<='0';

ELSIFclk_1Hz'EVENTANDclk_1Hz='1'THENclk_out4<=NOTclk_out4;

ENDIF;clk_half1Hz<=clk_out4;

ENDPROCESSp4;温度输入调节

p5:

PROCESS(clk_2Hz,clr)

VARIABLEtemperature_h_temp,temperature_l_temp:

STD_LOGIC_VECTOR(3

DOWNTO0);

BEGIN

IFclr='0'THENtemperature_h_temp:

="0010";temperature_l_temp:

="0000";

ELSIF(clk_2Hz'EVENTANDclk_2Hz='1')THEN

IFtemp_up='1'THEN

IFtemperature_h_temp="0100"THENtemperature_h_temp:

="0100";temperature_l_temp:

="0000";

ELSEtemperature_l_temp:

=temperature_l_temp+"0001";

IFtemperature_l_temp="1010"THEN

temperature_l_temp:

="0000";temperature_h_temp:

=temperature_h_temp+"0001";

ENDIF;

ENDIF;

ENDIF;

IFtemp_down='1'THEN

IF(temperature_h_temp="0001"ANDtemperature_l_temp="0000")THENtemperature_h_temp:

="0001";temperature_l_temp:

="0000";

ELSEtemperature_l_temp:

=temperature_l_temp-"0001";

IFtemperature_l_temp="1111"THEN

temperature_l_temp:

="1001";temperature_h_temp:

=temperature_h_temp-"0001";

ENDIF;

ENDIF;

ENDIF;

ENDIF;

temperature_h<=temperature_h_temp;

temperature_l<=temperature_l_temp;

ENDPROCESSp5;

档位选择p6:

PROCESS(clk_2Hz,count_end)

BEGIN

IFcount_end='1'THENdang<="00";

ELSE

CASEtemperature_hIS

WHEN"0001"=>dang<="00";--1-0

WHEN"0011"=>dang<="11";--3-3

WHEN"0100"=>dang<="11";--4-3

WHENOTHERS=>--2

CASEtemperature_lIS

WHEN"0000"=>dang<="01";--0-1

WHEN"0001"=>dang<="01";--1-1

WHEN"0010"=>dang<="01";--2-1

WHEN"0011"=>dang<="01";--3-1

WHEN"0100"=>dang<="01";--4-1

WHENOTHERS=>dang<="10";--5,6,7,8,9-2

ENDCASE;

ENDCASE;

ENDIF;

ENDPROCESSp6;

倒计时p7:

PROCESS(clk_1Hz,start,clr)

VARIABLEtime_h_temp,time_l_temp:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

IFclr='0'THENcount_end<='0';time_h_temp:

="1111";time_l_temp:

="1111";

ELSE

IFclk_1Hz'EVENTANDclk_1Hz='1'THEN

IFstart='1'THEN

IF(time_h_temp="0000"ANDtime_l_temp="0001")THENtime_h_temp:

="0000";time_l_temp:

="0000";count_end<='1';

ELSE

IF(time_h_temp="0000"ANDtime_l_temp="0000")THENtime_h_temp:

="0000";time_l_temp:

="0000";

ELSE

IFtime_l_temp="0000"THENtime_l_temp:

="1001";time_h_temp:

=time_h_temp-"0001";

ELSEtime_l_temp:

=time_l_temp-"0001";

ENDIF;

ENDIF;

ENDIF;

ELSEtime_h_temp:

="0011";time_l_temp:

="0000";count_end<='0';

ENDIF;

ENDIF;

ENDIF;

time_l<=time_l_temp;time_h<=time_h_temp;ENDPROCESSp7;

译码器p8:

PROCESS(dang,time_h,time_l,temperature_h,temperature_l)

BEGIN

CASEdangIS

WHEN"00"=>dang_seg<="0110011";--num4

WHEN"01"=>dang_seg<="0110000";--num1

WHEN"10"=>dang_seg<="1101101";--num2

WHEN"11"=>dang_seg<="1111001";--num3

WHENOTHERS=>dang_seg<="0000000";

ENDCASE;

CASEtime_hIS

WHEN"0000"=>time_h_seg<="1111110";--0

WHEN"0001"=>time_h_seg<="0110000";--1

WHEN"0010"=>time_h_seg<="1101101";--2

WHEN"0011"=>time_h_seg<="1111001";--3

WHEN"0100"=

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

当前位置:首页 > 求职职场 > 简历

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

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