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

    文章

    111

    浏览量

    42797
收藏 人收藏

    评论

    相关推荐

    【瑞萨RA2L1入门学习】01、PWM呼吸

    低功耗的桌面摆件项目。 这次评测报告内容是PWM呼吸。 2 硬件部分 2.1 LED 这块RA2L1开发板载有2颗LED
    发表于 01-25 13:34

    基于FPGA的呼吸设计(附源工程)

    ,起到一个通知提醒的作用。 设计原理 关于呼吸设计实现的理论主要是PWM有关知识。PWM(Pluse Width Modulation)脉
    的头像 发表于 01-16 10:09 86次阅读
    基于FPGA的<b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>设计(附源工程)

    PWMLED调光中的应用

    脉冲宽度调制(PWM)是一种常用的调光技术,它通过改变脉冲的宽度来控制LED的亮度。这种技术因其高效、节能和易于控制的特点,在
    的头像 发表于 11-28 16:33 1243次阅读

    4G模组PWM调光入门:打造个性化呼吸

    一直有朋友问我怎么打造个性化呼吸,本文我将以合宙低功耗4G模组经典型号——Air780E为例,展示PWM输出呼吸
    的头像 发表于 11-17 09:56 289次阅读
    4G模组<b class='flag-5'>PWM</b>调光入门:打造个性化<b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>

    呼吸的概念和实现原理

    呼吸在日常生活中经常见到,如电子时钟,小夜灯等等,本文我们介绍下通过PWM波来控制LED
    的头像 发表于 10-24 14:50 2022次阅读
    <b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>的概念和<b class='flag-5'>实现</b>原理

    【RA-Eco-RA0E1-32PIN-V1.0开发板试用】pwm控制led呼吸

    我们继续熟悉e2studio的工具配置生成代码,本部分介绍,通过芯片的SAU单元部分,使能PWM功能,来输出可变的占空比,来控制LED的亮案。 首先我们查看原理图 我们使用的P112这个引脚
    发表于 09-17 21:29

    使用STM32CubeMX输出PWM,并制作呼吸效果

    概述 本篇文章主要介绍如何使用STM32CubeMX输出PWM,并制作呼吸效果。 硬件准备 首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板: 选择芯片型号
    发表于 09-04 10:38

    PWM控制芯片的特点和组成结构

    PWM(Pulse Width Modulation,脉宽调制)控制芯片在电子领域中扮演着至关重要的角色,尤其是在电源管理、LED照明、电机控制等领域。这类芯片通过调节脉冲信号的宽度(
    的头像 发表于 08-26 10:27 2109次阅读

    如何实现pwm控制功能

    PWM(Pulse Width Modulation,脉冲宽度调制)是一种常见的电子控制技术,广泛应用于各种电子设备中,如电机控制LED调光、电源管理等。 一、
    的头像 发表于 08-08 15:08 899次阅读

    如何使用带中断的pwm实现LED呼吸

    我想使用带中断的 pwm实现 LED 呼吸,即 LED 的强度应该增加或减少。
    发表于 06-04 07:21

    PWM控制电机转速的原理与实现

    PWM(脉宽调制)是一种广泛应用于电机控制领域的调制技术。它通过调节脉冲信号的占空比,实现对电机转速的精确控制PWM
    的头像 发表于 06-03 17:23 6630次阅读

    在stm8-discovery板上 如何实现呼吸效果

    在stm8-discovery板上如何实现呼吸效果pwm程序如下,请指教,谢谢! #include\"iostm8l152c6.h\
    发表于 05-07 06:31

    如何用pwm编程实现呼吸效果

    我用的是stm8l152c6 下面是我的pwm 信号 求解答 如何实现呼吸 #include\"iostm8l152c6.h\" #include\"
    发表于 04-16 06:52

    一文带你了解PWM原理、频率与占空比

    不同占空比改变LED的亮度。使其达到一个呼吸效果PWM对电机转速的
    发表于 03-27 14:12

    在通用定时器PWM输出实现呼吸的实验中,通道输出极性选择中选择高电平有效,LED0为啥会一直亮?

    大佬们,在通用定时器PWM输出实现呼吸的实验中,我在这个通道输出极性选择中选择高电平有效,LED0为啥会一直亮?按理说应该是输出低电平才
    发表于 03-07 06:47