0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用PWM控制LED实现呼吸灯的效果

电子设计 来源:电子设计 作者:电子设计 2022-02-08 17:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者:ALINX

适用于板卡型号:

AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG

实验Vivado工程为“pwm_led”。

本文主要讲解使用PWM控制LED,实现呼吸灯的效果。

1.实验原理

如下图所示,用一个N比特的计数器,最大值可以表示为2的N次方,最小值0,计数器以“period”为步进值累加,加到最大值后会溢出,进入下一个累加周期。当计数器值大于“duty”时,脉冲输出高,否则输出低,这样就可以完成图中红色线所示的脉冲占空比可调的脉冲输出,同时“period”可以调节脉冲频率,可以理解为计数器的步进值。

PWM脉宽调制示意图

不同的脉冲占空比的方波输出后加在LED上,LED灯就会显示不同的亮度,通过不断地调节方波的占空比,从而实现LED灯亮度的调节。

2. 实验设计

PWM模块设计非常简单,在上面的原理中已经讲到,这里不再说原理。

pIYBAGAJhDmAAbuBAAAymKPNjcc992.png

PWM模块(ax_pwm)端口

`timescale1ns/1ps

module ax_pwm

#(

parameter N =16//pwm bit width

input clk,

input rst,

input[N -1:0]period, //pwm step value

input[N -1:0]duty, //duty value

output pwm_out //pwm output

);

reg[N -1:0] period_r; //period register

reg[N -1:0] duty_r; //duty register

reg[N -1:0] period_cnt; //period counter

reg pwm_r;

assign pwm_out = pwm_r;

always@(posedge clk orposedge rst)

begin

if(rst==1)

begin

period_r duty_r end

else

begin

period_r duty_r end

end

//period counter, step is period value

always@(posedge clk orposedge rst)

begin

if(rst==1)

period_cnt else

period_cnt end

always@(posedge clk orposedge rst)

begin

if(rst==1)

begin

pwm_r end

else

begin

if(period_cnt 》= duty_r) //if period counter is bigger or equals to duty value, then set pwm value to high

pwm_r else

pwm_r end

end

那么如何实现呼吸灯的效果呢?我们知道呼吸灯效果是由暗不断的变亮,再由亮不断的变暗的过程,而亮暗效果是由占空比来调节的,因此我们主要来控制占空比,也就是控制duty的值。

在下面的测试代码中,通过设置period的值,设定PWM的频率为200Hz,PWM_PLUS状态即是增加duty值,如果增加到最大值,将pwm_flag置1,并开始将duty值减少,待减少到最小的值,则开始增加duty值,不断循环。其中PWM_GAP状态为调整间隔,时间为100us。

`timescale1ns/1ps

module pwm_test(

input clk, //25MHz

input rst_n, //low active

output led //high-off, low-on

);

localparam CLK_FREQ =25; //25MHz

localparam US_COUNT = CLK_FREQ ; //1 us counter

localparam MS_COUNT = CLK_FREQ*1000; //1 ms counter

localparam DUTY_STEP =32‘d100000; //duty step

localparam DUTY_MIN_VALUE =32’h6fffffff; //duty minimum value

localparam DUTY_MAX_VALUE =32‘hffffffff; //duty maximum value

localparam IDLE =0; //IDLE state

localparam PWM_PLUS =1;//PWM duty plus state

localparam PWM_MINUS =2;//PWM duty minus state

localparam PWM_GAP =3;//PWM duty adjustment gap

wire pwm_out; //pwm output

reg[31:0] period; //pwm step value

reg[31:0] duty; //duty value

reg pwm_flag ; //duty value plus and minus flag, 0: plus; 1: minus

reg[3:0] state;

reg[31:0] timer; //duty adjustment counter

assign led =~pwm_out ;//led low active

always@(posedge clk ornegedge rst_n)

begin

if(rst_n ==1’b0)

begin

period timer duty pwm_flag state end

else

case(state)

IDLE:

begin

period state duty end

PWM_PLUS :

begin

if(duty 》 DUTY_MAX_VALUE - DUTY_STEP) //if duty is bigger than DUTY MAX VALUE minus DUTY_STEP , begin to minus duty value

begin

pwm_flag duty end

else

begin

pwm_flag duty end

state end

PWM_MINUS :

begin

if(duty begin

pwm_flag duty end

else

begin

pwm_flag duty end

state end

PWM_GAP:

begin

if(timer 》= US_COUNT*100)//adjustment gap is 100us

begin

if(pwm_flag)

state else

state

timer end

else

begin

timer end

end

default:

begin

state end

endcase

end

//Instantiate pwm module

ax_pwm

#(

.N(32)

ax_pwm_m0(

.clk (clk),

.rst (~rst_n),

.period (period),

.duty (duty),

.pwm_out (pwm_out)

);

endmodule

3. 下载验证

生成bitstream,并下载bit文件,可以看到PL LED1灯产生呼吸灯效果。PWM是比较常用的模块,比如风扇转速控制,电机转速控制等等。

审核编辑:何安

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 呼吸灯
    +关注

    关注

    10

    文章

    117

    浏览量

    44237
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【RA-Eco-RA4M2开发板评测】+三个LED呼吸实现

    电平占空比,实现LED呼吸效果。编译后生成hex文件。具体代码如图中所示。 4.烧录 烧录前将跳线帽插在下面两个boot模式端;在烧录工具
    发表于 03-28 10:35

    瑞萨FPB-RA6E2试用】【瑞萨RA × Zephyr开发板评测】呼吸效果实现

    ); } 实现呼吸效果的主程序为: void hal_entry(void) { uint8_t duty = 0; uint8_t direction = 0; R_GPT_Op
    发表于 01-18 11:40

    【瑞萨FPB-RA6E2试用】【瑞萨FPB-RA6E2】基于 PWM(脉宽调制)的 LED 呼吸-闪烁效果及设备树理解

    呼吸效果 :虽然本例是变频而非调光,但类似逻辑可扩展为占空比渐变,实现柔和的“呼吸”氛围
    发表于 01-13 15:05

    PWM经典应用:LED亮度控制呼吸实战

    信号生成: 加热控制: 本文特别分享PWM相关基础知识,并以Air8000核心板为例,演示LuatOS开发中如何使用PWM功能实现LED亮度
    的头像 发表于 01-05 20:50 441次阅读
    <b class='flag-5'>PWM</b>经典应用:<b class='flag-5'>LED</b>亮度<b class='flag-5'>控制</b>及<b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>实战

    PWM 控制 LED、蜂鸣器、电机:你真的用对了吗?

    在做嵌入式开发的时候,PWM(脉宽调制)几乎是必学技能。LED想要呼吸效果PWM。蜂鸣器要发“滴滴”的提示音?
    的头像 发表于 01-04 09:14 886次阅读
    <b class='flag-5'>PWM</b> <b class='flag-5'>控制</b> <b class='flag-5'>LED</b>、蜂鸣器、电机:你真的用对了吗?

    基于PWMLED调光技术与呼吸实现方法!

    分享PWM相关基础知识,并以Air8000核心板为例,演示LuatOS开发中如何使用PWM功能实现LED亮度控制
    的头像 发表于 12-15 13:03 675次阅读
    基于<b class='flag-5'>PWM</b>的<b class='flag-5'>LED</b>调光技术与<b class='flag-5'>呼吸</b><b class='flag-5'>灯</b><b class='flag-5'>实现</b>方法!

    LED触摸控制PCBA方案开发 | 控触摸方案开发

    的技术选择,适用于多种照明场景。简洁操作,丰富效果这款单键LED触摸控制板,通过一个按键即可实现多种交互方式(单击、双击、长按),轻松控制
    的头像 发表于 12-10 17:43 538次阅读
    <b class='flag-5'>LED</b>触摸<b class='flag-5'>控制</b>PCBA方案开发 | <b class='flag-5'>灯</b>控触摸方案开发

    FZH367 具有独立自动呼吸功能的LED(12×16)点阵驱动芯片 原厂技术支持

    概述 型号:FZH367FZH367是一种具有独立自动呼吸功能的LED(12×16)点阵驱动芯片。芯片通过I2C协议控制每个LED实现 3
    发表于 11-18 09:18

    原厂 FZH365 具有独立自动呼吸功能的LED(12×12)点阵驱动芯片

    是一种具有独立自动呼吸功能的LED(12×12)点阵驱动芯片。芯片通过I2C协议控制每个 LED实现 3 种自动
    发表于 11-17 09:38

    FZH16 固定花样 6 通道LED流星雨显示效果驱动IC

    是固定花样 6 通道LED流星雨显示效果驱动IC。本产品内部自带振荡器,PWM输出进行灰度 渐变。上电复位后,输出PWM波形,进行 6 通道的LE
    发表于 11-14 09:34

    LuatOS中PWM实现LED亮度调节与呼吸的实战教程

    PWMLED亮度调节和呼吸效果实现方面有着广泛应用。在LuatOS环境中,如何高效运用PWM
    的头像 发表于 11-11 19:05 8618次阅读
    LuatOS中<b class='flag-5'>PWM</b><b class='flag-5'>实现</b><b class='flag-5'>LED</b>亮度调节与<b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>的实战教程

    【沁恒CH585开发板免费试用体验】+PWM呼吸

    /下降沿/双边沿 4路26位PWM输出 8路8位PWM输出或前6路16位PWM输出 今天在上期的点灯例程上,修改出两路PWM输出,让开发板上的LED
    发表于 07-03 19:02

    【BPI-CanMV-K230D-Zero开发板体验】+控制与Python编程

    程序 在执行程序后,可得到图9至图11的显示效果。 图9 显示青色 图10 显示绿色 图11 显示紫色 当然我们还可以通过PWM来调节彩灯的亮度,以实现色彩的渐变效果
    发表于 06-27 17:33

    【RA-Eco-RA4M2开发板评测】点灯实现6种LED花式流水灯操作

    很高兴收到瑞萨电子提供的RA4M2开发板,这次帖子就专门用来说说专业点灯操作,实现各种花式的流水灯,可以十分方便地控制LED的各种状态,甚至多个LED组合
    发表于 04-28 21:28