PWM有兩大屬性:
頻率:用PWM信號(hào)快速開關(guān)LED,由于開關(guān)頻率會(huì)產(chǎn)生LED閃爍,因此PWM頻率應(yīng)大于100 Hz,確保人眼不會(huì)感覺到閃爍。
占空比:PWM通過改變占空比、保持負(fù)載電流恒 定以控制LED的亮度。LED的平均電流取決于占空比。平均電流會(huì)隨占空比的提升而升高,進(jìn)而提高亮度。占空比在0%和100%之間的步長數(shù)量應(yīng)滿足應(yīng)用 中需要調(diào)節(jié)的不同亮度級(jí)數(shù)量要求。舉例來說,如果應(yīng)用在完全關(guān)閉(0%)到完全開啟(100%)之間需要20個(gè)亮度級(jí),那么就應(yīng)支持5%的步長(除完全關(guān) 閉之外包含20個(gè)步長)。
用微控制器實(shí)現(xiàn)PWM有兩種方法。我們可用簡單的定時(shí)器/計(jì)數(shù)器在固件中實(shí)現(xiàn)整個(gè)PWM邏輯,也可以選擇集成硬件PWM功能的高級(jí)控制器來實(shí)現(xiàn)。
基于固件的PWM實(shí)現(xiàn)方案
簡單的固件實(shí)現(xiàn)方案需要定時(shí)器和中斷服務(wù)子程序(ISR)。定時(shí)器在與占空比每個(gè)步長大小的相同時(shí)間內(nèi)創(chuàng)造中斷。舉例來說,如果PWM周期為 10ms(100Hz)而步長大小為1ms(10%的占空比),那么定時(shí)器就要每1ms對(duì)CPU發(fā)出中斷,即:定時(shí)器周期 = 脈沖寬度/步長大小。
圖1給出了ISR中的邏輯。PULSE_WIDTH和ON_TIME 代表PWM步長數(shù)量的脈沖寬度和開啟時(shí)間。舉例來說,PULSE_WIDTH = 5即滿足5個(gè)亮度級(jí)的要求,而ON_TIME = 2則滿足40%的占空比要求。ISR變量isrVar控制輸出何時(shí)切換開/關(guān)。該邏輯可方便地進(jìn)行擴(kuò)展,從而支持多個(gè)LED引腳,而每個(gè)LED都有不同的 占空比。
基于硬件的PWM實(shí)現(xiàn)方案
高級(jí)控制器有驅(qū)動(dòng)PWM的專用硬件塊。舉例來說,賽普拉斯的PSoC4 有一個(gè)TCPWM硬件塊,能實(shí)現(xiàn)基于硬件的PWM驅(qū)動(dòng)。通常說來,我們用帶有比較功能的定時(shí)器來實(shí)現(xiàn)它,邏輯類似于上面討論的固件邏輯。定時(shí)器將采用比較 寄存器和周期寄存器。周期寄存器載入的值等于脈沖寬度,而比較寄存器載入的值等于開啟時(shí)間。只要比較值大于tick值,定時(shí)器輸出就會(huì)走高,反之就會(huì)走 低。此外,tick值達(dá)到最大(16位定時(shí)器為65535)時(shí),會(huì)自動(dòng)回滾為零。當(dāng)輸出布線到端口引腳,從而能用硬件塊直接驅(qū)動(dòng)LED。
表1總結(jié)了基于固件和基于硬件的PWM實(shí)現(xiàn)方案之間的差別。