PWM占空比如何控制從寄存器
針對PWM,官方的解釋是這樣:PWM,也稱脈沖寬度調(diào)制,它是一種模擬控制方式,根據(jù)相應(yīng)載荷的變化來調(diào)制晶體管基極或MOS管柵極的偏置,來實(shí)現(xiàn)晶體管或MOS管導(dǎo)通時(shí)間的改變,從而實(shí)現(xiàn)開關(guān)穩(wěn)壓電源輸出的改變。這種方式能使電源的輸出電壓在工作條件變化時(shí)保持恒定,是利用微處理器的數(shù)字信號對模擬電路進(jìn)行控制的一種非常有效的技術(shù)。
當(dāng)然可以這樣理解。有5V電源,要控制一臺燈的亮度,有一個(gè)傳統(tǒng)辦法,就是串聯(lián)一個(gè)可調(diào)電阻,改變電阻,燈的亮度就會(huì)改變。還有一個(gè)辦法,就是PWM調(diào)節(jié)。不用串聯(lián)電阻,而是串聯(lián)一個(gè)開關(guān)。假設(shè)在1秒內(nèi),有0.5秒的時(shí)間開關(guān)是打開的,0.5秒關(guān)閉,那么燈就亮0.5秒,滅0.5秒。這樣持續(xù)下去,燈就會(huì)閃爍。
如果把頻率調(diào)高一點(diǎn),比如是1毫秒,0.5毫秒開,0.5毫秒滅,那么燈的閃爍頻率就很高。我們知道,閃爍頻率超過一定值,人眼就會(huì)感覺不到。所以,這時(shí)你看不到燈的閃爍,只看到燈的亮度只有原來的一半。同理,如果1毫秒內(nèi),0.1毫秒開,0.9毫秒滅,那么,燈的亮度就只有原來的10分之一。
這就是PWM的基本原理??偟膩碚f,都是保持一定的電壓或電流不變,但改變一定周期內(nèi)的導(dǎo)通和關(guān)斷時(shí)間。這樣等效于保持導(dǎo)通,但改變電壓或電流大小。
第一次用的PWM是電機(jī)。理論上可以在-UU之間線性調(diào)節(jié)電壓及方向,使電機(jī)正反轉(zhuǎn),對于風(fēng)扇一般是不改變風(fēng)向,也就是0u之間調(diào)節(jié),直流電機(jī)基本采用調(diào)電壓調(diào)速。也就是采用PWM調(diào)電壓,進(jìn)而調(diào)節(jié)速度。
說到PWM,就要說到占空比。那么什么是占空比:pwm占空比就是一個(gè)脈沖周期內(nèi)高電平的所整個(gè)周期占的比例。
要想了解PWM首先就要從寄存器
計(jì)數(shù)器寄存器(TIM_CR1):計(jì)數(shù)器寄存器是一個(gè)16位的寄存器,其中:
1.ARPE位是自動(dòng)重裝載允許位。
2.DIR位是控制計(jì)數(shù)方式位。
3.URS位是控制事件更新請求源。
4.UDIS位禁止事件更新。
5.CEN使能計(jì)數(shù)器。
其次是預(yù)分頻器(TIMx_PSC):預(yù)分頻器可以將計(jì)數(shù)器的時(shí)鐘頻率按1到65536之間的任意值分頻。在預(yù)分頻寄存器對主頻率分頻后,提供給計(jì)數(shù)器,作為計(jì)數(shù)器的時(shí)鐘。它是基于一個(gè)在TIMx_PSC寄存器中的16位寄存器控制的16位計(jì)數(shù)器。
因?yàn)檫@個(gè)控制寄存器帶有緩沖器,它能夠在工作時(shí)被改變。但是預(yù)分頻器的新參數(shù)會(huì)在下一次更新事件到來時(shí)被調(diào)用。例如,預(yù)分頻器的參數(shù)從1變到2時(shí),計(jì)數(shù)器的時(shí)序圖應(yīng)該是:
圖片
再次是自動(dòng)重裝載寄存器(TIMx_ARR):自動(dòng)重裝載寄存器也是一個(gè)16位的寄存器。實(shí)際上自動(dòng)重裝載寄存器實(shí)際上對應(yīng)著2個(gè)寄存器。一個(gè)是程序員可以直接操作的寄存器,一個(gè)是程序員看不到的影子寄存器。實(shí)際上真正起作用的開始影子寄存器。而這兩個(gè)寄存器是如何配合工作的,則需要TIMx_CR1寄存器的APRE位設(shè)置:
當(dāng)APRE=0時(shí),預(yù)裝載寄存器的參數(shù)實(shí)時(shí)的傳送給到影子寄存器,并沒有實(shí)現(xiàn)預(yù)裝載的功能;
當(dāng)APRE=1時(shí),在每一次事件更新時(shí),預(yù)裝載寄存器的參數(shù)才會(huì)被傳送到影子寄存器。
而PWM的頻率是通過預(yù)分頻參數(shù)和自動(dòng)重裝載寄存器的參數(shù)確定的。預(yù)分頻的參數(shù)確定了計(jì)數(shù)器的時(shí)鐘,自動(dòng)重裝載寄存器的參數(shù)確定了在這個(gè)時(shí)鐘頻率下的計(jì)數(shù)次數(shù),即周期。舉個(gè)例子:如果系統(tǒng)主頻率是72M,psc=8,那么,計(jì)數(shù)器的時(shí)鐘就是72M/(8+1)=8M;arr=2000,那么PWM會(huì)在8M的頻率下每次計(jì)數(shù)2000次之后會(huì)進(jìn)入到下一個(gè)計(jì)數(shù)循環(huán)。而PWM的占空比精度于預(yù)分頻參數(shù)有關(guān),預(yù)分頻參數(shù)越小,精度越高;反之就越低
從下面的定時(shí)器時(shí)鐘框圖可以看出,事件U更新是在預(yù)分頻后,捕獲比較之前,而CC4I是中斷和DMA輸出。所以PWM在每一個(gè)周期之后會(huì)有一個(gè)中斷,在來了中斷之后,才會(huì)更新事件,這樣就保證了PWM的每個(gè)周期都能夠正常完成,而不會(huì)導(dǎo)致波形失真。