SAM4E單片機(jī)之旅——5、LED呼吸和PWM
PWM在高頻情況下,一個(gè)很好的用處就是通過(guò)控制占空比來(lái)控制輸出的功率,比如控制風(fēng)扇轉(zhuǎn)速、LED燈的亮度等。這次就利用PWM的中斷功能,動(dòng)態(tài)改變脈沖的占空比,來(lái)實(shí)現(xiàn)呼吸燈的效果。
一、實(shí)現(xiàn)思路PWM可以選擇讓計(jì)數(shù)器在周期結(jié)束產(chǎn)生中斷(在周期中央對(duì)齊時(shí),可能選擇在周期中央也產(chǎn)生中斷),并且可以在運(yùn)行的時(shí)候動(dòng)態(tài)地調(diào)整占空比、周期、極性等屬性。所以可以在中斷處理函數(shù)中動(dòng)態(tài)地改變占空比以改變LED燈的亮度。
這次也將使用通道0和引腳PA0。
這里需要用到較高頻率的時(shí)鐘,所以選擇使用主時(shí)鐘經(jīng)32分頻后的時(shí)鐘(12.5 kHz)。計(jì)數(shù)器周期為400,即輸出脈沖頻率為125000/400 = 312.5 Hz。同時(shí)需要使能相應(yīng)的中斷。
PWM的主要配置代碼如下:
在每個(gè)周期結(jié)束后,會(huì)產(chǎn)生一個(gè)中斷。然后在中斷處理函數(shù)中,改變占空比。需要注意的是,在PWM使能時(shí),需要通過(guò)寫(xiě)入PWM占空比修改寄存器(PWM_CDTYUPD)來(lái)改變占空比。默認(rèn)情況下,該修改在下一個(gè)周期生效。
為得到更好的效果,可以在兩次呼吸之間設(shè)置一斷間隔。
注意,需要通過(guò)讀取PWM_ISR1來(lái)拉低產(chǎn)生的中斷。中斷處理函數(shù)在后面的完整代碼中貼出。