PWM(脈寬調製)——LED特效呼吸燈設計

2021-02-13 單片機

限時乾貨下載:回復「教程」獲取單片機電子書,回復「仿真」獲取Proteus仿真資料,百度盤群組分享連結更新時間:2016-03-06,失效請在文末留言,不要在後臺留言

  簡述PWM

  PWM——脈寬調製信號(Pulse Width Modulation),它利用微處理器的數字輸出來實現,是對模擬電路控制的一種非常有效的技術,廣泛應用於測量、通信、功率控制與變化等許多領域。

  LED特效呼吸燈原理

  採用pwm的方式,在固定的頻率下,採用佔空比的方式來實現LED亮度的變化。佔空比為0,LED燈不亮,佔空比為100%,則LED燈最亮。所以將佔空比從0到100%,再從100%到0不斷變化,就可以實現LED燈實現特效呼吸。

  設計思路、框圖  

  變亮:當cnt2 < cnt3時為高電平,反之為低電平。

  變暗:當cnt2 < cnt3時為低電平,反之為高電平。

  先分頻出延時為1us的延時電路,作為後面電路的驅動電路,然後是1ms延時和1s延時,會產生兩個計數器,剛好是1000倍的關係。

  (1)在第一秒時,隨著cnt3由0到999逐漸增大,每一個1ms的佔空比通過cnt2去調節。當cnt2 < cnt3時為高電平,反之為低電平。 因此,隨著cnt3的逐漸增大,高電平的時間逐漸增大,直到100%。

  (2)在第二秒時,隨著cnt3由0到999逐漸增大,每一個1ms的佔空比通過cnt2去調節。當cnt2 < cnt3時為低電平,反之為高電平。 因此,隨著cnt3的逐漸增大,高電平的時間逐漸減小,直到0。

  設計圖如上所示,完後就可以照圖施工了,附上部分代碼。

//延時1us

    always @(posedge mclk or negedge rst_n)

    begin

        if(!rst_n)

            cnt1 <= 6'b0;

        else if(cnt1 < STOP_50 - 1'b1)

            cnt1 <= cnt1 + 1'b1;

        else 

            cnt1 <= 6'b0;

    end

    assign delay_1us = (cnt1 == STOP_50 - 1'b1)?1'b1:1'b0;

    

    //延時1ms

    always @(posedge mclk or negedge rst_n)

    begin

        if(!rst_n)

            cnt2 <= 10'b0;

        else if(delay_1us)

        begin

            if(cnt2 < STOP_1000 - 1'b1)    

                cnt2 <= cnt2 + 1'b1;

            else 

                cnt2 <= 10'b0;

        end

       end

       assign delay_1ms = ((delay_1us == 1'b1) && (cnt2 == STOP_1000 - 1'b1))?1'b1:1'b0;

       

       //延時1s

       always @(posedge mclk or negedge rst_n)

    begin

        if(!rst_n)

            cnt3 <= 10'b0;

        else if(delay_1ms)

        begin

             if(cnt3 < STOP_1000 - 1'b1)

                cnt3 <= cnt3 + 1'b1;

            else 

                cnt3 <= 10'b0;

         end

        

    end

    assign delay_1s = ((delay_1ms == 1'b1) && (cnt3 == STOP_1000 - 1'b1))?1'b1:1'b0;

    

    //state change

    always @(posedge mclk or negedge rst_n)

    begin

        if(!rst_n)

            display_state <= 1'b0;

        else if(delay_1s)//每一秒切換一次led燈顯示狀態

            display_state <= ~display_state;

        else 

            display_state <= display_state;

    end

    

    //pwm信號的產生

    always @(posedge mclk or negedge rst_n)

    begin

        if(!rst_n)

                pwm <= 1'b0;

        else 

            case(display_state)

                1'b0: pwm <= (cnt2 < cnt3)?1'b1:1'b0;

                1'b1: pwm <= (cnt2 < cnt3)?1'b0:1'b1;

                default: pwm <= pwm;

            endcase

    end

    

    //位拼接使得輸出八位led呼吸燈

    assign led_out = {8{pwm}};

產生的pwm信號原來是一位的,所以最後要是需要控制多個LED的亮滅,使用一個位拼接運算即可,如最後一行代碼所示。

來源:http://www.cnblogs.com/ninghechuan/p/6291499.html  

限時乾貨下載:回復「教程」獲取單片機電子書,回復「仿真」獲取Proteus仿真資料。

> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >

如何分享到朋友圈點擊右上角「...」 三個點,在彈出菜單選擇「分享到朋友圈」單片機訂閱號微信名:單片機
每天更新單片機各種知識,電子製作DIY,及電子行業最新資訊,關注我們,棒棒噠!熱門文章推薦

回復下面數字或直接點擊,獲取相關文章:

001:《單片機初學者必看》

002:《周立功寫給學單片機的年輕人的話》

003:《牛人談:軟體與硬體的入門難度與精通時間跨度》

004:《學習51單片機有感;學習用書推薦;必寫的幾個程序》

005:《幾種使用過的單片機比較》

006:《ARM+LINUX學習路線(學習順序,知識點及書籍推薦)》

007:《ARM/DSP/FPGA/CPLD/SOPC/SOC區別和聯繫》

008:《趣味電子製作:藝術家手中的食品發電-電子diy》

009:《我的經歷: 從一名產線工人到單片機工程師》

010:《哥們花20萬從德國帶回來一工具箱》

點擊左下角「閱讀原文」,進入論壇交流!!!

相關焦點

  • 脈寬調製原理- -PWM原理
    趕緊跟隨小編來了解一下脈寬調製原理吧~本文引用地址:http://www.eepw.com.cn/article/278262.htm一、脈寬調製原理- -簡介  脈寬調製技術,全稱為脈衝寬度調製,英文名稱為Pulse Width Modulation,簡寫為PWM,是一種利用微處理器來完成對模擬電路控制的一種技術,其具有操作簡單、靈活性好、反應速度快等諸多特點,現已在通信、測量、功率變換
  • 脈寬調製原理
    2.脈寬調製原理--優點  脈寬調製的一個優點是從處理器到被控系統信號都是數字形式的,無需進行數模轉換,讓信號保持為數字形式可將噪聲影響降到最小。總之,PWM既經濟、節約空間、抗噪性能強,是一種值得廣大工程師在許多設計應用中使用的有效技術。
  • 利用PWM原理,實現呼吸燈功能
    PWM信號是一種脈寬調製信號,廣範用於LED和電機控制等場合。PWM信號其實類似於方波,只有0和1兩種狀態。PWM信號可以調節佔空比。while(1) {      //呼吸燈    if(dir)        led0pwmval++;       else         led0pwmval--;          if(led0pwmval>900)        dir=0;
  • Arduino入門9: PWM和呼吸燈
    關於PWM    PWM, 全稱叫Pulse Width Modulation,搜了一下都叫「脈寬調製 /脈衝寬度調製」。簡單來說,Arduino只能產生5V和0V電壓,如果想要2.5V或者其他值的電壓就要靠PWM,PWM通過單片機的數字輸出的不同脈衝寬度,來得到「模擬輸出」需要的值。
  • PWM脈寬調製:基礎和一些高級概念
    脈寬調製(PWM)是電子學許多領域廣為採用的一個基本概念。所需要的只是:將給定頻率的三角波或鋸齒波饋送到比較器的負端,將調製信號饋送到比較器的正端。為實現完全100%的佔空比脈寬,波形的峰峰值必須超過調製信號範圍。
  • PWM是什麼
    本文引用地址:http://www.eepw.com.cn/article/272990.htm  脈寬調製(PWM)基本原理:控制方式就是對逆變電路開關器件的通斷進行控制按一定的規則對各脈衝的寬度進行調製,即可改變逆變電路輸出電壓的大小,也可改變輸出頻率。
  • arduino從零開始(4)PWM與呼吸燈
    你將了解脈衝寬度調試(PWM)的原理你將使用PWM製作一個呼吸燈的效果脈衝寬度調試PWM,也就是脈衝寬度調製,用於將一段信號編碼為脈衝信號(方波信號)。是在數字電路中 達到 模擬輸出效果的一種手段。即:使用數字控制產生佔空比不同的方波(一個不停在開與關之間切換的信號)來控制模擬輸出。我們要在數字電路中輸出模擬信號,就可以使用PWM技術實現。
  • 你足夠了解pwm嗎?搞清楚pwm控制技術
    pwm是現代重要技術之一,在各種電子設備中,均存在pwm的身影。在往期文章中,小編對pwm原理、pwm佔空比、pwm頻率均有所介紹。為增進大家對pwm的認識,本文將對pwm控制技術予以闡述。如果你對pwm抑或本文即將介紹的內容具有興趣,不妨繼續往下閱讀哦。
  • 「初識Arduino - 3」PWM控制LED燈
    麵包板跳線LED燈:1個220Ω電阻:1個電位器:1個(可選)PWM脈衝寬度調製(Pulse Width Modulation,PWM),簡稱脈寬調製。PWM的效果,這樣就不需要一定接入帶波浪號的PWM接口了,但是這種方法一旦有其他進程幹擾CPU會導致輸出的信號頻率不準)接線跟之前一樣,常規的LED接線圖在Arduino中,我們只需要不斷改變analogWrite的value(0-255),就能改變佔空比進而改變LED燈的亮度,實現呼吸燈的效果
  • PWM原理
    本文引用地址:http://www.eepw.com.cn/article/275890.htm  脈寬調製(PWM,Pulse Width Modulation)是一種模擬控制方脈衝寬度調製,利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量、通信到功率控制與變換的許多領域中。  PWM就是脈衝寬度調製,也就是佔空比可變的脈衝波形。
  • 基於PWM控制器和IPM模塊的變頻電源設計
    各種分立型功率器件需要設計專門的驅動電路才能實現使器件工作在開關狀態並獲得較低的動靜態損耗的效果。而隨著功率器件工作頻率不斷提高,分立元件固有的引線電感、寄生電容等對器件造成了更大的電應力,主要表現為過電壓、過電流尖峰。
  • 基於SHE-PWM控制的DC-AC電源
    摘要: 本文採用高性能的SHE-PWM控制晶片及帶自舉電路的驅動晶片,結合IGBT構成的逆變橋,組成了性價比極高的一種逆變電源的設計方案
  • 大佬帶你深入pwm殿堂,搞明白pwm頻率是咋回事
    對於pwm,想必很多朋友都有所耳聞。但是,大家對於pwm真的了解嗎?譬如,pwm頻率是如何被確定下來的?pwm頻率和pwm值是同一個東西嗎?如果不是,pwm頻率和pwm值有什麼區別呢?如果你對這些問題存在疑惑,或者是對本文涉及的pwm相關知識具有興趣,不妨繼續往下閱讀哦。
  • 基於ATmega8的直流電機PWM調速控制系統設計與實現
    目前絕大多數直流電機採用開關驅動方式,它是使半導體功率器件工作在開關狀態,通過脈寬調製PWM來控制電機電樞電壓,實現調速。PWM(PulseWidthModulation)—脈衝寬度調製技術通過對一系列數字脈衝的寬度進行調製,在脈衝作用下,當電機通電時速度加快,斷電時速度逐漸變慢,只要按一定規律改變通斷電時間,即可對電機的轉速控制,實現直流電機調速數位化[4],如圖1。
  • 基於降壓型PWM的DC-DC轉換器的控制方案
    一般由脈衝寬度調製(PWM)控制IC和MOSFET構成。開關電源電路主要由整流濾波電路、DC-DC控制器(內含變壓器)、開關佔空比控制器以及取樣比較電路等模塊組成。本文引用地址:http://www.eepw.com.cn/article/226606.htmPWM技術簡介[1]脈衝寬度調製(PWM),是英文「Pulse Width Modulation」的縮寫,簡稱脈寬調製,脈衝寬度調製是一種模擬控制方式,其根據相應載荷的變化來調製電晶體柵極或基極的偏置
  • 樹莓派python編程 做一個LED呼吸燈
    玩轉樹莓派 2017-07-09 22:52呼吸燈概述上一篇 我們通過控制GPIO口輸出高低電平來控制一隻
  • 用51單片機實現pwm專題及常見問題 - CSDN
    基於51單片機脈衝寬度調製(即PWM)直流電機轉速快慢以及霍爾測速的項目一、前言1、基於51單片機脈衝寬度調製(即PWM)直流電機轉速快慢以及霍爾測速的項目包括用Keil軟體編寫單片機C語言程序和用
  • 三菱PLC的脈衝輸出指令和脈寬調製指令詳解
    2.脈寬調製指令脈寬調製指令PWM的編號為FNC58。它的功能是用來產生指定脈衝寬度和周期的脈衝串。如下圖所示,[S1] 用來指定脈衝的寬度,[S2]用來指定脈衝的周期,[D]用來指定輸出脈衝的元件號(Y0或Y1),輸出的ON/OFF狀態由中斷方式控制。
  • NE555與LM393實現脈寬調製的D類功放
    調製;   (3)三角波的頻率要遠遠高於正弦波的頻率,三角波的幅度要大於正弦波的幅度;   (4)要有一個驅動電路和一個合適的功率開關輸出電路。   一、脈寬調製電路   正弦脈寬調製(SPWM)的原理如圖1所示。
  • 正點原子-戰艦V3第十四章 PWM 輸出實驗
    脈衝寬度調製(PWM),是英文「Pulse Width Modulation」的縮寫,簡稱脈寬調製,是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術。利用這點,我們通過修改這個寄存器的值,就可以控制 PWM 的輸出脈寬了。本章,我們使用的是 TIM3的通道 2,所以我們需要修改 TIM3_CCR2 以實現脈寬控制 DS0 的亮度。