圖解邊沿對(duì)齊,中心對(duì)齊PWM....
在說(shuō)邊沿對(duì)齊,中心對(duì)齊前,我們先來(lái)段鋪墊,PWM又稱(chēng)脈沖寬度調(diào)制,我們通過(guò)調(diào)節(jié)脈沖的占空比,我們可以控制電壓的大小(比如我們滿(mǎn)占空比時(shí)電壓為12V,我們可以通過(guò)調(diào)節(jié)占空比讓電壓變?yōu)?V、5V甚至變?yōu)?V,實(shí)現(xiàn)輸出電壓可控)。
調(diào)節(jié)占空比后,輸出電壓怎么就變化了呢?可以用等效面積法來(lái)解釋?zhuān)缭?ms周期里,滿(mǎn)占空比時(shí)輸出電壓為12V,50%占空比時(shí)(即高低電平各占時(shí)間為0.5ms)高電平在整個(gè)周期的面積只有原來(lái)的1/2了,此時(shí)輸出電壓就等效為12*1/2=6V,那么通過(guò)調(diào)節(jié)不同的占空比,也就實(shí)現(xiàn)了輸出電壓調(diào)節(jié)。如圖:
那STM32中是怎么生成PWM波的呢?時(shí)鐘是芯片的心臟,沒(méi)有時(shí)鐘,芯片就是一塊“廢物”,有了時(shí)鐘,芯片才能有條不紊的工作,那時(shí)鐘跟我們要講的PWM有什么關(guān)系呢?請(qǐng)看下圖,STM32內(nèi)部的定時(shí)器框圖,看看它是如何生成PWM的。
方框內(nèi)部的CNT Counter計(jì)數(shù)器會(huì)根據(jù)輸入的時(shí)鐘沿跳變來(lái)進(jìn)行遞加/減,時(shí)鐘的頻率決定了計(jì)數(shù)器遞加/減的頻率,這個(gè)計(jì)數(shù)器的值同時(shí)會(huì)和Auto-reload register(控制周期)、Capture/Compare x register(控制占空比)進(jìn)行比較,當(dāng)與控制占空比的寄存器值發(fā)生匹配時(shí)則控制輸出引腳TIMx_CHx發(fā)生電平反轉(zhuǎn),當(dāng)與控制周期寄存器值發(fā)生匹配時(shí),周期結(jié)束,引腳電平置位,再次重復(fù)如上動(dòng)作,就在引腳上輸出了變化不同的電平,這個(gè)就是我們需要的PWM。
這個(gè)定時(shí)器模塊可以根據(jù)軟件編程設(shè)置出不同的PWM模式,定時(shí)器內(nèi)部CNT Counter可被編程為向上、向下、向上向下運(yùn)行,我們說(shuō)的邊沿對(duì)齊,和中心對(duì)齊就要從這個(gè)計(jì)數(shù)方式上切入,下面我們先來(lái)看三種不同的計(jì)數(shù)方式。
1.當(dāng)CNT被設(shè)置為向上計(jì)數(shù)時(shí),計(jì)數(shù)器從0遞增向上計(jì)數(shù)到自動(dòng)重載值(Auto-reload register),然后計(jì)數(shù)器又回到0,重新開(kāi)始。
2.當(dāng)CNT被設(shè)置向下計(jì)數(shù)時(shí),計(jì)數(shù)器從自動(dòng)重載值遞減向下計(jì)數(shù),計(jì)數(shù)到0,計(jì)數(shù)器又回到重載值,重新開(kāi)始。
3.當(dāng)CNT被設(shè)置向上向下計(jì)數(shù)時(shí),計(jì)數(shù)器從0遞增向上計(jì)數(shù)到自動(dòng)重載值,然后計(jì)數(shù)器從自動(dòng)重載值遞減向下計(jì)數(shù),計(jì)數(shù)到0然后又開(kāi)始遞增向上計(jì)數(shù)。
那這三種模式和2種PWM又是什么關(guān)系呢?PWM是怎么從引腳上輸出的呢?請(qǐng)看下圖:
1.向上/下計(jì)數(shù)模式PWM生成(只展示出了向上計(jì)數(shù),向下計(jì)數(shù)同理):
2.向上向下計(jì)數(shù)模式PWM生成:
上文中提到的向上計(jì)數(shù)/向下計(jì)數(shù),這兩種生成PWM的方式,我們通常稱(chēng)為邊沿對(duì)齊PWM;既向上又向下這種生成PWM的方式,我們稱(chēng)為中心對(duì)齊PWM。當(dāng)然,發(fā)生匹配的時(shí)候引腳電平如何變化,是變高還是變低,這個(gè)可以通過(guò)軟件編程來(lái)設(shè)置。
通過(guò)PWM調(diào)節(jié)輸出電壓,比如可以控制做呼吸燈,也可以實(shí)現(xiàn)電機(jī)的調(diào)速,不同的調(diào)速算法,會(huì)用到不同的PWM等等。