首页 > 其他分享 >PWM呼吸灯

PWM呼吸灯

时间:2024-05-16 14:54:07浏览次数:17  
标签:begin end 呼吸 else cnt2 cnt0 led PWM

PWM呼吸灯

设计一个周期是8ms的PWM,用来控制LED实现呼吸灯的效果。

1. 设计分析

PWM的周期为8ms,每0.1秒调整一次占空比,分10档,从95%、85%、....5%。这里需要设计三个计数器:8ms的计数器,0.1秒的计数器,1秒的计数器。经过测试可以发现档数越多,间隔越小,呼吸灯的效果就越细腻。

 

2. 代码说明

(1) PWM周期计数器

//8ms计数

always @(posedge clk or negedge rst_n)begin

    if(!rst_n)begin

        cnt0 <= 0;

    end

    else if(add_cnt0)begin

        if(end_cnt0)

            cnt0 <= 0;

        else

            cnt0 <= cnt0 + 1;

        end

    end

 

assign add_cnt0 = 1;

 

assign end_cnt0 = add_cnt0 && cnt0==400_000 -1 ;

这里用的clk是50MHz,经过换算,8ms计数器的最大值为400000-1,代码设计里没有用常规的直接判断最大值的方式,而是用了计数使能add_cnt0,计数结束标志end_cnt,看了后续两个计数器的代码,就会明白,一是为了计数器设计的风格统一,增强代码的复用性,而是通过计数结束标志,代替直接用最大值判断,可以嵌套复用计数器,节省设计资源。

 

(2)0.1秒计数器

//0.1s计数

always @(posedge clk or negedge rst_n)begin

    if(!rst_n)begin

        cnt1 <= 0;

    end

    else if(add_cnt1)begin

        if(end_cnt1)

            cnt1 <= 0;

        else

            cnt1 <= cnt1 + 1;

        end

 

end

 

assign add_cnt1 = end_cnt0;

 

assign end_cnt1 = add_cnt1 && cnt1==13-1 ;

这里用end_cnt0驱动add_cnt1,就复用了前面的8ms计数器。最大值本为12.5,这里取了近似值13-1,方便计数。

 

(3)10档计数器

//1s计数

always @(posedge clk or negedge rst_n)begin

    if(!rst_n)begin

        cnt2 <= 0;

    end

    else if(add_cnt2)begin

        if(end_cnt2)

            cnt2 <= 0;

        else

            cnt2 <= cnt2 + 1;

        end

 

end

 

assign add_cnt2 = end_cnt1;

 

assign end_cnt2 = add_cnt2 && cnt2==10-1 ;

模式都一样,为了使显示更细腻,这里分了10档,0.1秒一档,当然也可以分更细,更多档。

 

(4)LED的控制

always @(posedge clk or negedge rst_n)begin

    if(rst_n==1'b0)begin

        led <= 9'b1_1111_1111;

    end

    else if(add_cnt0 && cnt0==led_1to0-1)begin

        led <= 9'b0;

    end

    else if(end_cnt0)begin

        led <= 9'b1_1111_1111;

    end

 

end

//每0.1秒不同的占空比

always @(*)begin

    if(cnt2==0)begin

        led_1to0 = 380_000;

    end 

    else if(cnt2==1)begin

        led_1to0 = 340_000;

    end

    else if(cnt2==2)begin

        led_1to0 = 300_000;

    end

    else if(cnt2==3)begin

        led_1to0 = 260_000;

    end

    else if(cnt2==4)begin

        led_1to0 = 220_000;

    end

    else if(cnt2==5)begin

        led_1to0 = 180_000;

    end

    else if(cnt2==6)begin

        led_1to0 = 140_000;

    end

    else if(cnt2==7)begin

        led_1to0 = 120_000;

    end

    else if(cnt2==8)begin

        led_1to0 = 80_000;

    end

    else begin

        led_1to0 = 40_000;

    end

end

对不同的占空比脉冲信号,高亮低灭,改变占空比,就改变了平均电流的大小,也就改变了亮度。

 

3. 演示视频

(1) 6档1秒间隔

【PWM呼吸灯6档1spwm】 https://www.bilibili.com/video/BV15i421D7oC/?share_source=copy_web&vd_source=68c33dfb807678d785a70ba1e19f297a

 

(2)10档0.1秒间隔

【PWM呼吸灯10档0.1spwm】 https://www.bilibili.com/video/BV17w4m1X7e6/?share_source=copy_web&vd_source=68c33dfb807678d785a70ba1e19f297a

 

4. 参考文献

https://mp.weixin.qq.com/s/v38VvtFUM00RS5_LXonPwA

 

标签:begin,end,呼吸,else,cnt2,cnt0,led,PWM
From: https://www.cnblogs.com/halflife/p/18195929

相关文章

  • 树莓派4b openwrt 安装RPI.GPIO控制PWM风扇
    1、安装python3#opkgupdate#opkginstallpython3-base#opkginstallpython3#opkginstallpython3-pip#opkginstallpython3-dev2、安装RPI.GPIO#pipinstallrpi.gpio3、GPIO控制PWM风扇###交互模式演示代码#pythonimportRPi.GPIOasGPIO#GPIO设置GPIO.s......
  • AP5127 是一款 PWM 工作模式,高效率、外围简单、内置功率管
    AP5121是一款外围电路简单的多功能平均电流型LED恒流驱动器,适用于宽电压范围的非隔离式大功率恒流LED驱动领域。芯片PWM端口支持超小占空比的PWM调光,可响应最小60ns脉宽。芯片采用我司专利算法,为客户提供最佳解决方案,最大限度地发挥灯具优势,以实现景观舞台灯高辉的调......
  • 回忆录——ST定时器PWM输出
    老规矩,看图说写驱动RCC开GPIO及TIM时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //开启TIM2的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //开启GPIOA的时钟选择时基源,配置时基单元,PSC、ARR、CNT点击查看代码 /*配置时钟源*/ TI......
  • stm32F07 HAL 库 通过定时器方式实现呼吸灯 自定义呼吸灯函数 (以参数方式设置io
    效果: 1、通过Stm32CubMX开启定时器、设置对应的io口,然后生成工程STM32CubeMX|STM32HAL库方式的微秒延时函数  2、自定义呼吸灯函数代码://呼吸灯函数//GPIO_TypeDef*GPIOx:GPIO组(A-G)//uint16_tGPIO_Pin:IO口(GPIO_Pin_0--GPIO_Pin_16)//......
  • AP5127 是一款 PWM 工作模式,高效率、外围简单、内置功率管,适用于 12-100V 输入的高精
    AP5127是一款PWM工作模式,高效率、外围简单、内置功率管,适用于12-100V输入的高精度降压LED恒流驱动芯片。输出最大功率可达25W,最大电流2.5A。AP5127可实现全亮/半亮功能切换,通过MODE切换:全亮/半亮/循环模式。AP5127工作频率固定在140KHZ,同时内置抖频电路,可以降低对......
  • AP5216 是一款 PWM工作模式, 高效率、外围简单、内置功率管,适用于5V~100V输入的高精度
    AP5216是一款PWM工作模式,高效率、外围简单、内置功率管,适用于5V~100V输入的高精度降压LED恒流驱动芯片。输出最大功率可达9W,最大电流1.0A。AP5216可实现全亮/半亮功能切换,通过MODE切换:全亮/半亮模式。AP5216工作频率固定在130KHZ,同时内置抖频电路,可以降低对其他设备......
  • PWM、通信、串口通信、UART、TTL、51单片机串口通信、定时器初值的计算公式
    我要成为嵌入式高手之4月8日51单片机第三天!!————————————————————————————PWM        脉冲宽度调制(PWM),是英文“PulseWidthModulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应......
  • 6.9物联网RK3399项目开发实录-驱动开发之PWM的使用(wulianjishu666)
    嵌入式实战开发例程,珍贵资料,开发必备:链接:https://pan.baidu.com/s/1149x7q_Yg6Zb3HN6gBBAVA?pwd=hs8b======================================================================PWM使用前言AIO-3399J开发板上有4路PWM输出,分别为PWM0~PWM3,4路PWM分别使用在EDP......
  • 鸟类和鸡鸭鸽的胚胎在蛋里怎么呼吸
    鸟类和鸡鸭鸽的胚胎在蛋里通过蛋壳和蛋内的膜进行呼吸。蛋壳表面有无数细微的气孔,这些气孔是胚胎与外界环境交换气体的通道。当鸟类(例如鸡、鸭、鸽)孵化时,母鸟提供温暖的环境和养分来促进胚胎发育。在蛋壳的气孔中,高温和氧气浓度的差异会使空气从外部进入蛋内。然后,氧气会通......
  • 如何使用单片机 pwm 控制 mos 管?
    目录选择适合的硬件连接电路编写代码参考示例程序一程序二测试与调试注意事项        使用单片机(如常见的Arduino、STM32等)通过PWM(脉冲宽度调制)控制MOS管(金属氧化物半导体场效应管)是一种常见的电路控制方法。以下是一个基本的设计步骤指南:选择适合的硬......