0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA學(xué)習(xí)系列:15. 呼吸燈(pwm)設(shè)計(jì)

FPGA學(xué)習(xí)交流 ? 來(lái)源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2018-06-13 11:21 ? 次閱讀

設(shè)計(jì)背景:

呼吸燈廣泛應(yīng)用于手機(jī)之上,并成為各大品牌新款手機(jī)的賣點(diǎn)之一。如果手機(jī)里面有未處理的通知,比如說(shuō)未接來(lái)電,未查收的短信等等,呼吸燈就會(huì)在控制之下完成由亮到暗的逐漸變化,感覺(jué)好像是人在呼吸,起到一個(gè)通知提醒的作用。

設(shè)計(jì)原理:

關(guān)于呼吸燈設(shè)計(jì)實(shí)現(xiàn)的理論主要是PWM有關(guān)知識(shí)。PWMPluse Width Modulation)脈沖寬度調(diào)制,是一種對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼的方法。通過(guò)高分辨率計(jì)數(shù)器的使用,方波的占空比被調(diào)制用來(lái)對(duì)一個(gè)具體模擬信號(hào)的電平進(jìn)行編碼。并廣泛應(yīng)用在從測(cè)量、通信、功率控制與變換及LED照明等許多領(lǐng)域中。顧名思義,就是占空比可調(diào)的信號(hào),那么什么是占空比呢?

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

PWM是怎樣實(shí)現(xiàn)調(diào)光呢?想要調(diào)節(jié)LED的亮度變化,實(shí)則是調(diào)節(jié)控制流經(jīng)LED電流。電流增大則LED亮度增強(qiáng),反之減弱。但由于電流為模擬信號(hào),所以這時(shí)就用到了PWM。正如下圖所示:

image.png

使用一系列等幅不等寬的脈沖來(lái)代替一個(gè)正弦波,脈沖的寬度根據(jù)正弦波a的幅度變化,幅度高,則脈沖寬,反之。

多數(shù)負(fù)載需要的PWM調(diào)制頻率都高于10Hz,要想實(shí)現(xiàn)呼吸燈的效果,必須提高調(diào)制頻率,通常調(diào)制頻率為1Khz~200Khz之間。在LED控制中PWM作用于電源部分,脈寬調(diào)制的脈沖頻率通常大于100Hz,人眼就不會(huì)感到閃爍。這里我們?nèi)WM調(diào)制頻率為1KHz,PWM周期為1ms。

脈沖頻率一定時(shí),輸出脈沖的占空比越大,相當(dāng)于輸出的有效電平越大,隨著占空比的不同,LED的亮度也將不同。如占空比為0時(shí),則LED不亮,為100%時(shí),則LED最量,我們讓占空比從0~100%變化,再?gòu)?/span>100%~0不斷變化,則就可實(shí)現(xiàn)呼吸燈效果。

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

設(shè)計(jì)架構(gòu)圖:

時(shí)鐘50M

image.png

設(shè)計(jì)代碼:

設(shè)計(jì)模塊

0modulehuxi_led_state(clk,led,rst_n);

1 inputclk;

2 inputrst_n;

3

4 outputregled;

5

6 parameterT =100_000;

7

8 localparams0 =1'b0;

9 localparams1 =1'b1;

10

11 reg[25:0]lw;

12 reg[25:0]hw;

13

14 reg[16:0]count;

15

16 // 產(chǎn)生2MS的脈沖

17 always@(posedgeclk ornegedgerst_n)

18 if(!rst_n)

19 begin

20 count <=1'b0;

21 end

22 else

23 begin

24 if(count ==T -1)

25 begin

26 count <=1'b0;

27 end

28 else

29 begin

30 count <=count +1'b1;

31 end

32 end

33

34 wireflag;

35 assignflag =(count ==T -1)?1'b1:1'b0;

36

37 regstate;

38

39 // 通過(guò)在一個(gè)周期中加減高低電平的時(shí)間來(lái)產(chǎn)生PWM

40 always@(posedgeclk ornegedgerst_n)

41 if(!rst_n)

42 begin

43 lw <=T -100;

44 hw <=100;

45 state <=1'b0;

46 end

47 else

48 begin

49 case(state)

50 s0:begin

51 if(flag &&(lw >100))//判斷低電平的時(shí)間

52 begin

53 lw <=lw -100;

54 hw <=hw +100;

55 state <=s0;

56 end

57 elseif(flag &&(lw ==100))

58 begin

59 hw <=hw -100;

60 lw <=lw +100;

61 state <=s1;

62 end

63 else

64 begin

65 hw <=hw;

66 lw <=lw;

67 state <=s0;

68 end

69 end

70 s1:begin

71 if(flag &&(hw >100))//判斷高電平的時(shí)間

72 begin

73 hw <=hw -100;

74 lw <=lw +100;

75 state <=s1;

76 end

77 elseif(flag &&(hw ==100))

78 begin

79 hw <=hw +100;

80 lw <=lw -100;

81 state <=s0;

82 end

83 else

84 begin

85 hw <=hw;

86 lw <=lw;

87 state <=s1;

88 end

89 end

90 default:state <=s0;

91 endcase

92 end

93

94 reg[25:0]cnt;

95 regsum;

96

97 //分頻模塊,產(chǎn)生不同占空比的LED亮的時(shí)間

98 always@(posedgeclk ornegedgerst_n)

99 if(!rst_n)

100 begin

101 sum <=1'b0;

102 led <=1'b1;

103 cnt <=1'b0;

104 end

105 else

106 case(sum)

107 s0:begin

108 if(cnt <hw -1)//高電平的時(shí)間

109 begin

110 led <=1'b0;

111 cnt <=cnt +1'b1;

112 end

113 else

114 begin

115 cnt <=1'b0;

116 sum <=s1;

117 end

118 end

119 s1:begin

120 if(cnt <lw -1)//低電平的時(shí)間

121 begin

122 led <=1'b1;

123 cnt <=cnt +1'b1;

124 end

125 else

126 begin

127 cnt <=1'b0;

128 sum <=s0;

129 end

130 end

131 default:sum <=s0;

132 endcase

133

134endmodule

測(cè)試模塊

0`timescale1ns/1ps

1 modulehuxi_led_state_tb();

2 regclk;

3 regrst_n;

4

5 wireled;

6

7 parameterT =100_000;

8

9 initialbegin

10 clk =1'b1;

11 rst_n =1'b0;

12

13 #200.1rst_n =1'b1;

14

15

16 end

17

18 always#10clk =~clk;

19

20

21

22 huxi_led_state huxi_led_state_date(//例化設(shè)計(jì)

23 .clk(clk),

24 .led(led),

25 .rst_n(rst_n)

26 );

27 endmodule

仿真:

image.png


仿真中可以看到點(diǎn)亮led等高電平在不停的增高,然后會(huì)降低,通過(guò)驗(yàn)證我們的設(shè)計(jì)是正確的。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1625

    文章

    21636

    瀏覽量

    601315
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    PWM驅(qū)動(dòng)LED實(shí)現(xiàn)呼吸效果

    C51 利用pwm 驅(qū)動(dòng)LED 實(shí)現(xiàn)呼吸效果
    的頭像 發(fā)表于 04-24 15:29 ?3660次閱讀
    <b class='flag-5'>PWM</b>驅(qū)動(dòng)LED實(shí)現(xiàn)<b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>效果

    FPGA呼吸

    基于FPGA呼吸一、目標(biāo)1、占空比(pwm)的理解。2、計(jì)數(shù)器的應(yīng)用。3、分頻的應(yīng)用。二、要求四個(gè)LED從暗逐漸變亮,然后從亮逐漸變暗
    發(fā)表于 10-26 21:01

    dsp pwm 呼吸

    請(qǐng)問(wèn)有沒(méi)有DSP PWM呼吸的原理講解及例程,新手,謝謝!
    發(fā)表于 10-17 19:32

    怎么通過(guò)PWM來(lái)實(shí)現(xiàn)呼吸

    個(gè)人理解:如果能實(shí)現(xiàn)電壓的變化就能實(shí)現(xiàn)呼吸了,如果能得到一個(gè)類似正弦電壓的電壓,那么就能實(shí)現(xiàn)這個(gè)呼吸。那么問(wèn)題就來(lái)了,該怎么得到這個(gè)類似正弦電壓的電壓?STM32中的
    發(fā)表于 08-11 06:17

    PWM實(shí)現(xiàn)呼吸流程

    Conceit is the quicksand of success.  自負(fù)是成功的流沙。PWM實(shí)現(xiàn)呼吸PWM概述相關(guān)概念PWM設(shè)置流
    發(fā)表于 01-13 06:41

    PWM實(shí)現(xiàn)呼吸的應(yīng)用

    stm32實(shí)現(xiàn)PWM最簡(jiǎn)單方法前言一、PWM概念二、PWM應(yīng)用輸出比較功能框圖三、PWM呼吸實(shí)
    發(fā)表于 01-21 13:18

    STC15單片機(jī)呼吸程序介紹

    STC15單片機(jī)呼吸程序主控STC15W4K61S4頻率24Mhz該程序用了PCA/PWM作為L(zhǎng)ED的驅(qū)動(dòng),因?yàn)槟繕?biāo)板(
    發(fā)表于 02-18 07:44

    使用PWM控制LED實(shí)現(xiàn)呼吸的效果

    本文主要講解使用PWM控制LED,實(shí)現(xiàn)呼吸的效果。
    的頭像 發(fā)表于 02-08 17:50 ?1.3w次閱讀
    使用<b class='flag-5'>PWM</b>控制LED實(shí)現(xiàn)<b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>的效果

    【ZYNQ Ultrascale+ MPSOC FPGA教程】第十章 PWM呼吸實(shí)驗(yàn)

    本文主要講解使用PWM控制LED,實(shí)現(xiàn)呼吸的效果。
    發(fā)表于 01-26 08:27 ?1次下載
    【ZYNQ Ultrascale+ MPSOC <b class='flag-5'>FPGA</b>教程】第十章 <b class='flag-5'>PWM</b><b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>實(shí)驗(yàn)

    STM32_PWM呼吸

    全面屏發(fā)展,因此很多手機(jī)取消了呼吸這一功能,取而代之的是息屏顯示)2、什么是PWM?PWM:Pulse Width Modulation,脈沖寬度調(diào)制,是利用微處理器的數(shù)字輸出來(lái)對(duì)模
    發(fā)表于 11-26 12:21 ?20次下載
    STM32_<b class='flag-5'>PWM</b><b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>

    STC15呼吸

    STC15單片機(jī)呼吸程序主控STC15W4K61S4頻率24Mhz該程序用了PCA/PWM作為L(zhǎng)ED的驅(qū)動(dòng),因?yàn)槟繕?biāo)板(
    發(fā)表于 12-23 19:26 ?32次下載
    STC<b class='flag-5'>15</b><b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>

    STM32 使用PWM實(shí)現(xiàn)呼吸

    STM32 PWM實(shí)現(xiàn)呼吸使用STM32F103ZET6 定時(shí)器4 CH2通道產(chǎn)生PWM波,在GPIOD,GPIO_PIN13引腳LED1產(chǎn)生呼吸
    發(fā)表于 12-24 19:41 ?55次下載
    STM32 使用<b class='flag-5'>PWM</b>實(shí)現(xiàn)<b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>

    通過(guò)STM32實(shí)現(xiàn)PWM呼吸的教程

    顧名思義,就是一個(gè)。的亮度的變化,由亮變暗,從暗變亮,有一個(gè)漸變,規(guī)律的變化,像是人的呼吸,是呼吸,所以叫
    的頭像 發(fā)表于 07-26 15:20 ?1.2w次閱讀
    通過(guò)STM32實(shí)現(xiàn)<b class='flag-5'>PWM</b><b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>的教程

    基于FPGA呼吸設(shè)計(jì)

    呼吸主要是利用PWM的方式,在固定的頻率下,通過(guò)調(diào)整占空比的方式來(lái)控制LED的亮度的變化,從而實(shí)現(xiàn)由暗漸亮再由亮漸暗的過(guò)程。
    的頭像 發(fā)表于 09-27 11:43 ?2017次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>設(shè)計(jì)

    仿真測(cè)試:呼吸PWM

    呼吸的效果是逐漸由暗變亮再逐漸由亮變暗,FPGA的引腳電壓只有“0”和“1”兩個(gè)等級(jí)。
    的頭像 發(fā)表于 10-10 14:52 ?1049次閱讀
    仿真測(cè)試:<b class='flag-5'>呼吸</b><b class='flag-5'>燈</b><b class='flag-5'>PWM</b>