在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于FPGA的呼吸燈設計(附源工程)

FPGA技術江湖 ? 來源:FPGA技術江湖 ? 2025-01-16 10:09 ? 次閱讀

設計背景

呼吸燈廣泛應用于手機之上,并成為各大品牌新款手機的賣點之一。如果手機里面有未處理的通知,比如說未接來電,未查收的短信等等,呼吸燈就會在控制之下完成由亮到暗的逐漸變化,感覺好像是人在呼吸,起到一個通知提醒的作用。

設計原理

關于呼吸燈設計實現的理論主要是PWM有關知識。PWM(Pluse Width Modulation)脈沖寬度調制,是一種對模擬信號電平進行數字編碼的方法。通過高分辨率計數器的使用,方波的占空比被調制用來對一個具體模擬信號的電平進行編碼。并廣泛應用在從測量、通信、功率控制與變換及LED照明等許多領域中。顧名思義,就是占空比可調的信號,那么什么是占空比呢?

占空比(Duty Cycle or Duty Ratio),可以解釋為,在一脈沖序列中(方波),正脈沖序列的持續時間與脈沖總周期的比值。也可理解為,電路釋放能量的有效時間與總釋放時間的比值。

PWM是怎樣實現調光呢?想要調節LED的亮度變化,實則是調節控制流經LED的電流。電流增大則LED亮度增強,反之減弱。但由于電流為模擬信號,所以這時就用到了PWM。正如下圖所示:

e46d969a-d2db-11ef-9310-92fbcf53809c.png

使用一系列等幅不等寬的脈沖來代替一個正弦波,脈沖的寬度根據正弦波a的幅度變化,幅度高,則脈沖寬,反之。

多數負載需要的PWM調制頻率都高于10Hz,要想實現呼吸燈的效果,必須提高調制頻率,通常調制頻率為1Khz~200Khz之間。在LED控制中PWM作用于電源部分,脈寬調制的脈沖頻率通常大于100Hz,人眼就不會感到閃爍。這里我們取PWM調制頻率為1KHz,PWM周期為1ms。

脈沖頻率一定時,輸出脈沖的占空比越大,相當于輸出的有效電平越大,隨著占空比的不同,LED的亮度也將不同。如占空比為0時,則LED不亮,為100%時,則LED最亮,我們讓占空比從0~100%變化,再從100%~0不斷變化,則就可實現呼吸燈效果。

本設計呼吸燈的一個周期為2s,分為占空比增“吸”和占空比減“呼”兩種模式,每個為1s,一個PWM周期為2ms,所以每個模式包含1000個PWM周期,將每個PWM周期分為1000份,即每個時間段2us。

設計框架

設計框架圖: 50M時鐘

e48b8a6a-d2db-11ef-9310-92fbcf53809c.png

設計代碼

設計模塊huxi_led_state代碼:

module huxi_led_state(clk,led,rst_n);
  input clk;
  input rst_n;
  
  output reg led;
  
  parameter T = 100_000;
  
  localparam s0 = 1'b0;
  localparam s1 = 1'b1;
  
  reg [25:0] lw;
  reg [25:0] hw;
  
  reg [16:0] count;
  
  // 產生2MS的脈沖
  always @(posedge clk or negedge rst_n)
    if(!rst_n)
      begin
        count <= 1'b0;
      end
    else
      begin
        if(count == T - 1)
          begin
            count <= 1'b0;
          end
        else
          begin
            count <= count + 1'b1;
          end
      end
      
  wire flag;
  assign flag =(count == T - 1) ? 1'b1:1'b0;
  
  reg state;
  
  // 通過在一個周期中加減高低電平的時間來產生PWM波
  always @(posedge clk or negedge rst_n)
    if(!rst_n)
      begin
        lw <= T - 100;
        hw <= 100;
        state <= 1'b0;
      end
    else
      begin
        case (state)
          s0:begin
              if(flag && (lw > 100))   //判斷低電平的時間
                begin
                  lw <= lw - 100;
                  hw <= hw + 100;
                  state <= s0;
                end
              else if(flag && (lw == 100))
                begin
                  hw <= hw - 100;
                  lw <= lw + 100;
                  state <= s1;
                end
              else
                begin
                  hw <= hw;
                  lw <= lw;
                  state <= s0;
                end
            end
          s1:begin
              if(flag && (hw > 100))   //判斷高電平的時間
                begin
                  hw <= hw - 100;
                  lw <= lw + 100;
                  state <= s1;
                end
              else if(flag && (hw ==100))
                begin
                  hw <= hw + 100;
                  lw <= lw - 100;
                  state <= s0;
                end
              else
                begin
                  hw <= hw;
                  lw <= lw;
                  state <= s1;
                end
            end
        default : state <= s0;
        endcase
      end
      
  reg [25:0] cnt;
  reg sum;  
  always @(posedge clk or negedge rst_n)
    if(!rst_n)
      begin
        sum <= 1'b0;
        led <= 1'b1;
        cnt <= 1'b0; 
      end
    else
        case (sum)
          s0:begin
              if(cnt < hw -1 )
                begin
                  led <= 1'b0;
                  cnt <= cnt + 1'b1;
                end
              else
                begin
                  cnt <= 1'b0;
                  sum <= s1;
                end
            end
          s1:begin
              if(cnt < lw -1)
                begin
                  led <= 1'b1;
                  cnt <= cnt + 1'b1;
                end
              else
                begin
                  cnt <= 1'b0;
                  sum <= s0;
                end
            end
          default:sum <= s0;
        endcase
  
endmodule 
仿真測試

測試模塊代碼:

`timescale 1ns/1ps 
  module huxi_led_state_tb();
  reg clk;
  reg rst_n;
  
  wire led;
  
  parameter T = 100_000;
  
  initial begin
      clk = 1'b1;
      rst_n = 1'b0;
      
      #200.1 rst_n = 1'b1;
      
      
    end
    
    always #10 clk = ~ clk; 
  
  
  
  huxi_led_state  huxi_led_state_date(
          .clk(clk),
          .led(led),
          .rst_n(rst_n)
          );
  endmodule 
仿真圖:

e4ce0f02-d2db-11ef-9310-92fbcf53809c.png

仿真中可以看到點亮led等高電平在不停的增高,然后會降低,通過驗證我們的設計是正確的。

END

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1630

    文章

    21776

    瀏覽量

    604678
  • 脈沖
    +關注

    關注

    20

    文章

    897

    瀏覽量

    95690
  • 呼吸燈
    +關注

    關注

    10

    文章

    111

    瀏覽量

    42772

原文標題:源碼系列:基于FPGA的呼吸燈設計(附源工程)

文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于FPGA的VGA驅動設計(工程)

    ? 設計背景 VGA (Video Graphics Array) 即視頻圖形陣列,是IBM于1987年隨PS/2機(PersonalSystem 2)一起推出的使用模擬信號的一種視頻傳輸標準。這個標準對于現今的個人電腦市場已經十分過時。但在當時具有分辨率高、顯示速率快、顏色豐富等優點,在彩色顯示器領域取得了廣泛的應用,是眾多制造商所共同支持的一個低標準。 ? 設計原理 VGA的實體圖與接口示意圖,如下圖所示,它有15個針孔: 在本次設計使用的開發板中,VGA的電路原理圖如下圖所示: 通過原理
    的頭像 發表于 01-14 11:31 ?70次閱讀
    基于<b class='flag-5'>FPGA</b>的VGA驅動設計(<b class='flag-5'>附</b><b class='flag-5'>源</b><b class='flag-5'>工程</b>)

    ADS1191如何測呼吸

    看手冊說可以應用體育和建身(心率,呼吸和ECG),我想問一下這款芯片如何測呼吸
    發表于 12-24 07:08

    ADS1292R采集呼吸波采樣率越高,采樣得到的呼吸波幅度越低,為什么?

    ADS1292R采樣呼吸波,使用250HZ采樣頻率得到的呼吸波幅度比使用1KHZ采樣頻率得到的呼吸波幅度大2-3倍左右。正常來說不是采用頻率越高,采樣的波形更準確嗎?有人知道是什么原因嗎?求解,我
    發表于 12-06 07:32

    多平臺FPGA工程快速移植與構建

    作為一名FPGA工程師,經常需要在多個FPGA設備之間移植項目,核心的問題是IP的管理和移植,今天通過安裝和使用 FuseSoC 在多個 AMD FPGA 之間移植一個簡單的項目。從
    的頭像 發表于 11-20 16:12 ?1011次閱讀
    多平臺<b class='flag-5'>FPGA</b><b class='flag-5'>工程</b>快速移植與構建

    4G模組PWM調光入門:打造個性化呼吸

    一直有朋友問我怎么打造個性化呼吸,本文我將以合宙低功耗4G模組經典型號——Air780E為例,展示PWM輸出呼吸的實現方法,幫助大家深入理解如何在項目中應用PWM技術。
    的頭像 發表于 11-17 09:56 ?262次閱讀
    4G模組PWM調光入門:打造個性化<b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>

    呼吸的概念和實現原理

    呼吸在日常生活中經常見到,如電子時鐘,小夜燈等等,本文我們介紹下通過PWM波來控制LED,實現呼吸功能。
    的頭像 發表于 10-24 14:50 ?1773次閱讀
    <b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>的概念和實現原理

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

    概述 本篇文章主要介紹如何使用STM32CubeMX輸出PWM,并制作呼吸效果。 硬件準備 首先需要準備一個開發板,這里我準備的是NUCLEO-F030R8的開發板: 選擇芯片型號 配置時鐘
    發表于 09-04 10:38

    艾為燈語呼吸系列產品的應用領域

    多色絢爛的光源交相輝映,構成了一幅流動著光影之美的畫卷,極富視覺沖擊力。艾為燈語呼吸系列產品,歷經發展,現已廣泛滲透至智能手機、物聯網(IoT)、智能家居以及汽車行業等諸多前沿領域,展現了其在多元化應用場景中的創新與適應能力。
    的頭像 發表于 08-27 14:12 ?1044次閱讀

    在stm8-discovery板上 如何實現呼吸的效果?

    在stm8-discovery板上如何實現呼吸的效果,pwm程序如下,請指教,謝謝! #include\"iostm8l152c6.h\" #include\"
    發表于 05-07 06:31

    源碼系列:基于FPGA的紅外線遙控系統設計(工程

    今天給大俠帶來基于FPGA的紅外線遙控系統設計,源碼,獲取源碼,請在“FPGA技術江湖”公眾號內回復“紅外線遙控系統設計源碼”,可獲取源碼文件。話不多說,上貨。 前言 紅外線
    發表于 05-01 19:59

    如何用pwm編程實現呼吸效果?

    我用的是stm8l152c6 下面是我的pwm 信號 求解答 如何實現呼吸 #include\"iostm8l152c6.h\" #include\"
    發表于 04-16 06:52

    fpga工程師前景如何

    FPGA工程師的前景看起來相當積極和廣闊。隨著5G通信、物聯網、邊緣計算和人工智能等技術的快速發展,FPGA工程師的需求將進一步增加。FPGA
    的頭像 發表于 03-14 16:32 ?3220次閱讀

    fpga工程師就業趨勢

    FPGA工程師的就業趨勢呈現出積極的態勢。隨著科技的發展,FPGA(現場可編程門陣列)在通信、汽車、醫療、航空航天等領域的應用越來越廣泛,對FPGA
    的頭像 發表于 03-14 15:47 ?1588次閱讀

    麥爵士madrix麥覺仕幻彩燈條帶智能像素工程安裝經驗詳解

    工程安裝經驗為基礎,為麥爵士幻彩燈條帶智能像素安裝提供合理的經驗,以便提高工程施工效率,麥爵士madrix幻彩燈條帶智能像素
    的頭像 發表于 02-27 19:55 ?1791次閱讀
    麥爵士madrix麥覺仕幻彩燈條<b class='flag-5'>燈</b>帶智能像素<b class='flag-5'>燈</b><b class='flag-5'>工程</b>安裝經驗詳解

    求購兩個LED呼吸控制器

    某寶某多買了幾個控制器發現LED的亮度變化在低占空比的時候,變化很明顯,而在高占空比的時候反而變化很小,導致呼吸表現呼吸不均勻的現象,我想要的是控制器能做到LED亮度的線性變化。有能做的大神聯系我: 壹捌捌柒柒捌捌陸叁貳叁
    發表于 01-31 21:54
    主站蜘蛛池模板: 亚洲精品亚洲人成人网| 99免费视频观看| 亚洲理论片| 欧美特黄一区二区三区| 怡红院色视频在线| 欧美私人网站| 免费视频在线视频观看1| 97在线精品| 亚洲高清在线视频| 天天操夜夜干| 天天狠狠干| 夜色爽| 丁香婷婷在线视频| 男人的天堂色偷偷| 色午夜视频| 伊人久久大香线蕉综合7| 亚洲色图综合| 在线天堂中文www官网| 午夜视频在线网站| 34看网片午夜理| 欧美极品在线| 日本在线不卡一区二区| 丝袜美腿视频一区二区三区| 国内一区二区| 国内视频一区二区三区| 性福利视频| 天天看片天天操| 伊人电影综合网| 色婷婷欧美| 日韩日韩| 欧洲freexxxx性| 日本动漫在线看| 欧美爽爽网| 国产精品www视频免费看| 国产乱码精品一区二区| 国产精品资源手机在线播放| 午夜香蕉视频| 欧美在线bdsm调教一区| 久热精品视频| 国产精品久久女同磨豆腐| 天堂在线www天堂中文在线|