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

2022-04-05 19:34:49 字數 3244 閱讀 1538

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

採用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。

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

1

//延時1us

2always @(posedge mclk or

negedge

rst_n)

3begin

4if(!rst_n)

5 cnt1 <= 6

'b0;

6else

if(cnt1 < stop_50 - 1

'b1)

7 cnt1 <= cnt1 + 1

'b1;

8else

9 cnt1 <= 6

'b0;

10end

11assign delay_1us = (cnt1 == stop_50 - 1

'b1)?1

'b1:1

'b0;

1213

//延時1ms

14always @(posedge mclk or

negedge

rst_n)

15begin

16if(!rst_n)

17 cnt2 <= 10

'b0;

18else

if(delay_1us)

19begin

20if(cnt2 < stop_1000 - 1

'b1)

21 cnt2 <= cnt2 + 1

'b1;

22else

23 cnt2 <= 10

'b0;

24end

25end

26assign delay_1ms = ((delay_1us == 1

'b1) && (cnt2 == stop_1000 - 1

'b1))?1

'b1:1

'b0;

2728

//延時1s

29always @(posedge mclk or

negedge

rst_n)

30begin

31if(!rst_n)

32 cnt3 <= 10

'b0;

33else

if(delay_1ms)

34begin

35if(cnt3 < stop_1000 - 1

'b1)

36 cnt3 <= cnt3 + 1

'b1;

37else

38 cnt3 <= 10

'b0;

39end

4041

end42

assign delay_1s = ((delay_1ms == 1

'b1) && (cnt3 == stop_1000 - 1

'b1))?1

'b1:1

'b0;

4344

//state change

45always @(posedge mclk or

negedge

rst_n)

46begin

47if(!rst_n)

48 display_state <= 1

'b0;

49else

if(delay_1s)//

每一秒切換一次led燈顯示狀態

50 display_state <= ~display_state;

51else

52 display_state <=display_state;

53end

5455

//pwm訊號的產生

56always @(posedge mclk or

negedge

rst_n)

57begin

58if(!rst_n)

59 pwm <= 1

'b0;

60else

61case

(display_state)621

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

'b1:1

'b0;631

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

'b0:1

'b1;

64default: pwm <=pwm;

65endcase

66end

6768

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

69assign led_out = };

70

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

知乎id:ninghechuan

微博id:ninghechuan

什麼是脈寬調變 PWM

脈寬調變 pwm 是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量 通訊到功率控制與變換的許多領域中。模擬訊號的值可以連續變化,其時間和幅度的解析度都沒有限制。9v電池就是一種模擬器件,因為它的輸出電壓並不精確地等於9v,而是隨時間發生變化,並可取任何實數值。與此類...

pwm 正弦波 PWM簡介 脈寬調變是如何工作的

變頻空調中的 變頻 指的是什麼?為什麼變頻會更省電?本文注意介紹soc設計中常見的ip pwm pwm是脈衝寬度調製 pulse width modulation 的縮寫。是一種利用數字輸出來對模擬電路進行控制對一種非常有效的技術。它能夠以節能 通常更安靜 的方式來控制電機的速度 加熱器的熱輸出等等...

脈寬調變 PWM 的基本原理及其應用例項

脈寬調變 pwm 是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量 通訊到功率控制與變換的許多領域中。模擬電路 模擬訊號的值可以連續變化,其時間和幅度的解析度都沒有限制。9v電池就是一種模擬器件,因為它的輸出電壓並不精確地等於9v,而是隨時間發生變化,並可取任何實數...