類比輸出 + 呼吸燈

  • 前言 - 讓基板上LED有漸強漸弱的呼吸燈

上個例子中<輸位輸出+使LED燈閃爍>中,只能讓基板控制LED燈的ON開啟或OFF關閉在兩個狀態。 事實上,我們也能夠讓LED有些微的明暗Fader差異,藉由控制電流流過LED的大小可以達到這樣的功能。當然也可以試著在而給額定電壓之下去改變電阻值大小,但是通常不會選擇這樣作,因為每次要在電路上去調整固定式電阻很麻煩,而且我們如果要每次改變LED明暗狀態就需要切換成不同電阻值,這樣的作法很不SMART。

  • PWM - 用脈波寬度調變來控制電壓輸出的大小

這一個<類比輸出 + PWM>範例是希望能夠由核心程式去設定LaunchPad基板的PIN腳,來改變輸出不同的電壓值DAC。一般來說,我們只會在LED之前裝上一顆限流電阻(為固定值),套用電子學公式,電壓等於電流乘上電阻。(V=IR) 。也就是說,在固定電阻( R )的情況下,當我們去試圖改變供應LED的輸出電壓( V ),也就是等同於改變了LED的電流( I )大小。 這也說明了為什要學習使用脈波寬度調變 PWM ( Pulse Width Modulate) 來決定輸出電壓,能夠讓原本單純的ON/OFF數位輸出,模擬成不同電壓的類比輸出輸出電壓有0V ~ 3.6V不同狀態。

簡單的說,PWM可以讓Launchpad的輸出電壓有0V ~ 3.6V多種不同的輸出狀態

    • Duty Cycle - 開啟ON與關閉OFF的所占的時間比例 (空佔比)

在進入正題之前,還有一個東西可以玩。我們修改一下輸位輸出+使LED閃爍>中延遲函數的數值,例如讓等待秒數設定的長一些,或短一點,讓LED的亮暗間隔頻率可以變化的不一樣,在非常短的時間,這種改變數位輸出的ON與OFF稱做為脈衝寬度調變PWM模式,讓原本只有開與關的狀態,讓亮暗時間各占一半時間,人眼的視覺暫留會讓LED的燈光感覺只有原來的50%亮度。

也就是說,只要控制LED閃得間隔很短時,甚至讓人的眼睛分辨不出時間間隔, 但仍會感受到不同的LED亮度差異。

所以,我們得到一個PWM數學公式: 輸出電壓等於最大輸出電壓 乘上Duty Cycle空佔比:

V 輸出電壓 = Vcc 最大輸出電壓 X 空佔比 (%)

  • 上傳程式碼到基板

請參照<初次使用整合開發環境>步驟,再貼上程式碼,即可運作。

  • 原始程式碼 - 程式碼改變TACCR1輸出電壓(支援HW Rev1.5, MSP430G2553)

原始程式碼, PWM_TimerA_DCO SMCLK_msp430g2553
  • 原始程式碼 - 程式碼改變TACCR1輸出電壓(支援MSP430G2231)

原始程式碼, PWM_TimerA_DCO SMCLK

  • 程式碼1 逐行解說

舉例來說,如果試著更改TACCR1 的值,就可以改變PWM輸出電壓,就可以改變空佔比。

(此處的Vcc為3.6V)

輸出電壓V pwm_1 = Vcc = 當100% duty cycle 開啟ON ==> CCR1 = 512

輸出電壓V pwm_2 = 1/2 Vcc = 當50% duty cycle 開啟ON也就是說 50% duty cycle 關閉OFF ==> CCR1 = 256

輸出電壓V pwm_3 = 1/4 Vcc = 當25% duty cycle開啟ON也就是說 75% duty cycle關閉OFF ==> CCR1 = 128

輸出電壓V pwm_4 = 3/4 Vcc = 當75% duty cycle開啟ON也就是說 25% duty cycle關閉OFF ==> CCR1 = 384

    • 實例 - LED PWM漸強漸弱的明暗效果

  • 原始程式碼 - (支援MSP430G2553)

原始程式碼, LED PWM, Breathing...the LaunchPad_msp430g2553
  • 原始程式碼 - (支援MSP430G2231)

原始程式碼, LED PWM, Breathing...effect with the LaunchPad