当前位置:文档之家› PWM调整LED亮度设计报告

PWM调整LED亮度设计报告

PWM调整LED亮度设计报告
PWM调整LED亮度设计报告

EDA 技术基础

PWM 调整LED 亮度

选做试验

电子信息科学与技术

物电学院 2011-06-24

PWM调整LED亮度设计

一.实验任务

学习PWM原理,用V erilog硬件描述语言设计PWM逻辑电路,实现PWM 信号占空比可调,通过按键调整PWM信号的占空比,将此PWM信号输出驱动发光二极管,观察不同占空比时发光二极管的亮度如何变化。

在实验箱上实现按键调整发光二极管亮度,数码管显示PWM信号的占空比。

具体要求:将输入数字信号转化为输出模拟信号,利用脉宽调制来实现

二极管的亮度调节。按下s1(不松手),二极管逐渐变暗,暗到一定程度,突然变亮,再循环,按下s2(不松手),二极管逐渐变亮,亮到一定程度,突然变暗,再循环。

二.方案论证

实验原理图为

三、实验思路

调节时钟脉冲的占空比,输出脉冲频率一定,输出脉冲的占空比越大相当于输出的有效电平越大,可将数字量转化为模拟量。

基于这种思路可先将输入的一定计数周期T(相当于一个常量)的标准时钟脉冲变为一个高低电平占空比不一致的非标准脉冲(包含一个高电平、一个低电平),可用另外一个计数器Q来控制高低电平的占空比,随着Q 的增大高电平的占空比随时间逐渐增大(或减小),而低电平随时间逐渐减小(或增大)。但这个脉冲周期T是一定的。随着T个数的增加便能得到一个高电平的占空比随时间逐渐增大(或减小),而低电平随时间逐渐减小(或增大)的非标准的时钟脉冲。由于时钟脉冲的高低电平的占空比随时间有规律、有方向的变化,这样可实现二极管的亮度缓慢变化。四、实验步骤及代码

99计数器的计数模块代码为

module counter(clk,clr,Q);

input clk,clr;

output [7:0]Q;

reg [7:0]Q;

always @(posedge clk or negedge clr)

begin if(!clr) begin Q=0;end

else begin

if(Q[3:0]==9) begin if(Q[7:4]<9)

begin Q[7:4]=Q[7:4]+1; Q[3:0]=0;end

else begin Q[7:0]=0;end

end

else begin Q[3:0]=Q[3:0]+1;end

end

end

endmodule

而通过按键可调的计数器模块的代码为:

module c9(clk,clr,kup,kdw,Q,clk);

input clr,clk;

input kup,kdw;

output [7:0]Q;

reg [7:0]Q;

wire clka,clkb,clkc,clkd,newclk;

assign clka = clk;

LCELL AA(clka,clkb);

LCELL BB(clkb,clkc);

LCELL CC(clkc,clkd);

LCELL DD(clkd,newclk);

always @(posedge newclk or negedge clr)

begin

if(!clr) begin Q[3:0]=4'H0;Q[7:4]=4'H5;end

else begin

if(kup)begin

if(Q[3:0]==4'H9)

if(Q[7:4]==9) begin

Q[7:4]=4'H0;Q[3:0]=4'H0;end

else begin Q[7:4]=Q[7:4]+4'H1;Q[3:0]=4'H0;end

else Q[3:0]=Q[3:0]+4'H1;

end

else begin Q[3:0]=Q[3:0];Q[7:4]=Q[7:4];end

if(kdw)begin

if(Q[3:0]==4'H0)

if(Q[7:4]==4'H0) begin

Q[7:4]=4'H9;Q[3:0]=4'H9;end

else begin Q[7:4]=Q[7:4]-1;Q[3:0]=4'H9;end

else Q[3:0]=Q[3:0]-4'H1;

end

else begin Q[3:0]=Q[3:0];Q[7:4]=Q[7:4];end

end

end

endmodule

同时要用实验箱上的50MHZ晶体震荡器作为计数器1的输入时钟

代码为

module fenpin2(clk,clr,clko);

input clk,clr;

output clko;

reg [25:0]c;

reg clko;

always @(posedge clk or negedge clr)begin

if(!clr) begin c=26'H0;clko=1'H0;end

else if(c==26'D50_000_000)begin c=26'H0;clko=1'H1;end

else begin c=c+26'D100;clko=1'H0;end

end

endmodule

由于数码关于二极管的频率不一样,因此对他们时钟信号的分频的大小也应不同,因此对二极管的输入时钟也应进行分频,其代码为:

module div_clk(clk,clr,ck0);

input clk,clr;

output ck0;

reg [19:0]c;

always @(posedge clk or negedge clr)begin

if(!clr)c=20'H0;

else c=c+20'H1;

end

assign ck0=c[5];

endmodule

为了使数码管上能显示出占空比,我们还应加一个比较模块,其代码:module compare(a,b,led);

input [7:0]a;

input [7:0]b;

output led;

reg led;

always @(a or b)begin

if(a

else led=0;

end

endmodule

数码管显示模块

module deled(num,a,b,c,d,e,f,g);

input [3:0]num;

output a,b,c,d,e,f,g;

reg a,b,c,d,e,f,g;

always @(num)begin

case(num)

4'H0 :{a,b,c,d,e,f,g} = 7'b1111110;

4'H1 :{a,b,c,d,e,f,g} = 7'b0110000;

4'H2 :{a,b,c,d,e,f,g} = 7'b1101101;

4'H3 :{a,b,c,d,e,f,g} = 7'b1111001;

4'H4 :{a,b,c,d,e,f,g} = 7'b0110011;

4'H5 :{a,b,c,d,e,f,g} = 7'b1011011;

4'H6 :{a,b,c,d,e,f,g} = 7'b1011111;

4'H7 :{a,b,c,d,e,f,g} = 7'b1110000;

4'H8 :{a,b,c,d,e,f,g} = 7'b1111111;

4'H9 :{a,b,c,d,e,f,g} = 7'b1111011;

default:{a,b,c,d,e,f,g}=7'b0000000;

endcase

end

endmodule

相应的数码管引脚、二极管引脚及按键的引脚排列图为:

五、实验分析及实验总结

1、由于时钟脉冲的高低电平的占空比随时间有规律、有方向的变化,这样

可实现二极管的亮度缓慢变化。

2、

为了在实验箱上对方波信号占空比进行控制,

我们采用以下方法来实现:

N 值由计数器2给出,计数器2的值增加时,占空比增大;计数器2的值减小时,占空比减小。

3、在分频这一模块上要注意一下,开始我只用一个分频,结果这可以实现对二极管是否闪烁的调整,但是这不能对数码管数字变化的快慢进行调整,在这问题上我困惑了好长时间,后来在请教别人的情况下,我加了一个分频模块,把其加在对数码管分频这一块,最终实现了对数码管快慢变化的可调。

4、实验心得:通过做pwm 实验,我对EDA 这门课有了更深一步了了解和认识,虽说有些代码是别人写的,但是只要我们真正搞懂了它的原理并掌握了它,我们一样可以学好它,并把它变成自己的东西。

在时钟频率一定时,计数器从由0开始到计满溢出的周期是一定脉冲宽度可由N 值来控制,当N 值减小时,波形占空比减小,当N

相关主题
文本预览
相关文档 最新文档