脈沖寬度調(diào)制(英語:Pulse-width modulation,縮寫:PWM),簡稱脈寬調(diào)制,是利用微處理器的數(shù)字輸出來對模擬電路進(jìn)行控制的技術(shù)嚼松。PWM技術(shù)是一種對模擬信號電平的數(shù)字編碼方法,通過使用高分辨率計數(shù)器(調(diào)制頻率)調(diào)制方波的占空比锰扶,從而實(shí)現(xiàn)對一個模擬信號的電平進(jìn)行編碼献酗。
占空比:在規(guī)定的時間間隔或“周期”中接通(ON)的比例,公式為D = PW/T *100%坷牛,其中 pw為脈沖寬度(調(diào)制周期中脈沖持續(xù)時間)罕偎。100%完全打開,當(dāng)數(shù)字信號的一半時間處于打開狀態(tài)京闰,而另一半時間處于關(guān)閉狀態(tài)時颜及,該數(shù)字信號的占空比為50%,類似于“方波”蹂楣。 低占空比對應(yīng)于低功耗俏站,因?yàn)榇蠖鄶?shù)時候電源都處于關(guān)閉狀態(tài)。
簡單來說痊土,假設(shè)PWM時間周期設(shè)定為計數(shù)80肄扎,我們再設(shè)定一個比較值是10,那么從0計數(shù)到10時(這時計數(shù)器還是一直往上計數(shù)赁酝,直到計數(shù)到設(shè)定值80)犯祠,單片機(jī)就會根據(jù)設(shè)定,控制某個IO口在這個時候是輸出1還是輸出0酌呆,因此我們只需要提供寬雷则、窄不同的數(shù)字式脈沖,即可簡單地實(shí)現(xiàn)改變輸出電流肪笋。這里,通過改變80大小可以改變PWM的輸出頻率度迂,改變10的大小就是改變占空比藤乙。PWM特別適用于運(yùn)行慣性負(fù)載,這些負(fù)載不易受這種離散開關(guān)的影響惭墓,我們常用PWM來驅(qū)動LED的暗亮程度坛梁,電機(jī)的轉(zhuǎn)速等。PWM也被用于某些通信系統(tǒng)腊凶,其占空比被用來通過通信信道傳輸信息划咐。
PWM的基本原理:
脈寬調(diào)制(PWM)基本原理:控制方式就是對逆變電路開關(guān)器件的通斷進(jìn)行控制拴念,使輸出端得到一系列幅值相等的脈沖,用這些脈沖來代替正弦波或所需要的波形褐缠。
逆變電路是與整流電路(Rectifier)相對應(yīng)政鼠,把直流電變成交流電稱為逆變。
在采樣控制理論中有一個重要結(jié)論:沖量(脈沖的面積)相等而形狀不同窄脈沖队魏,分別加在具有慣性環(huán)節(jié)的輸入端公般,其輸出響應(yīng)波形基本相同,也就是說胡桨,盡管脈沖形狀不同官帘,但只要脈沖面積相等,其作用的效果基本相同昧谊。
根據(jù)沖量相等效果相同的原理刽虹,PWM波形和正弦半波是等效的,下圖所示為正弦波PWM調(diào)制波形呢诬。
PWM的優(yōu)點(diǎn):
- 電源的輸出電壓在工作時保持恒定涌哲,是利用微處理器的數(shù)字信號對模擬電路進(jìn)行控制的。
- 在模擬電路中馅巷,電壓和電流可直接用來進(jìn)行控制對象膛虫。但模擬電路有諸多的問題:例如控制信號容易隨時間漂移(如溫度影響),難以調(diào)節(jié)钓猬;功耗大稍刀;易受噪聲和環(huán)境干擾等等。與模擬電路不同敞曹,數(shù)字電路是在預(yù)先確定的范圍內(nèi)取值账月,在任何時刻,其輸出只可能為ON和OFF兩種狀態(tài)澳迫。
- 從處理器到被控系統(tǒng)信號都是數(shù)字形式的局齿,無需進(jìn)行數(shù)模轉(zhuǎn)換。讓信號保持為數(shù)字形式可將噪聲影響降到最小橄登。
一抓歼、PWM 使用
參考STM32 參考手冊
STM32 的定時器除了 TIM6 和 7。其他的定時器都可以用來產(chǎn)生 PWM 輸出拢锹。其中高級定時器 TIM1 和 TIM8 可以同時產(chǎn)生多達(dá) 7 路的 PWM 輸出谣妻。而通用定時器也能同時產(chǎn)生多達(dá) 4路的 PWM 輸出,這樣卒稳, STM32 最多可以同時產(chǎn)生 30 路 PWM 輸出蹋半!
1.1高級控制定時器(TIM1和TIM8)
1.1.1 TIM1和TIM8 定時器介紹
高級控制定時器(TIM1和TIM8)由一個16位的自動裝載計數(shù)器組成,它由一個可編程的預(yù)分頻器驅(qū)動(計數(shù)器時鐘由預(yù)分頻器分頻得到)充坑。
它適合多種用途减江,包含測量輸入信號的脈沖寬度(輸入捕獲)染突,或者產(chǎn)生輸出波形(輸出比較、PWM辈灼、嵌入死區(qū)時間的互補(bǔ)PWM等)份企。
使用定時器預(yù)分頻器和RCC時鐘控制預(yù)分頻器,可以實(shí)現(xiàn)脈沖寬度和波形周期從幾個微秒到幾個毫秒的調(diào)節(jié)茵休。
TIM1和TIM8定時器功能:
- 16位向上薪棒、向下、向上/下自動裝載計數(shù)器
- 16位可編程(可以實(shí)時修改)預(yù)分頻器榕莺,計數(shù)器時鐘頻率的分頻系數(shù)為1~65535之間的任意
數(shù)值 - 多達(dá)4個獨(dú)立通道:
─ 輸入捕獲
─ 輸出比較
─ PWM生成(邊緣或中間對齊模式)
─ 單脈沖模式輸出 -
死區(qū)時間可編程的互補(bǔ)輸出
死區(qū)時間是指控制不到的時間域俐芯,在變頻器里一般是指功率器件輸出電壓、電流的“0”區(qū)钉鸯,在傳動控制里一般是指電機(jī)正反向轉(zhuǎn)換電壓吧史、電流的過零時間。死區(qū)時間當(dāng)然越小越好唠雕。但是所以設(shè)置死區(qū)時間贸营,是為了安全。因此又不可沒有岩睁。最佳的設(shè)置是:在保證安全的前提下钞脂,越小越好。以不炸功率管捕儒、輸出不短路為目的冰啃。
1.1.2 TIM1和TIM8 定時器概念介紹
● 計數(shù)器寄存器(TIMx_CNT):
● 預(yù)分頻器寄存器 (TIMx_PSC,prescaler):將計數(shù)器的時鐘頻率按1到65536之間的任意值分頻刘莹。新的預(yù)分頻寄存器的參數(shù)在下一次更新事件UEV(update event)時被使用阎毅。
● 自動裝載寄存器 (TIMx_ARR,anto reload):預(yù)先裝載,寫或讀自動重裝載寄存器將訪問預(yù)裝載寄存器
● 重復(fù)次數(shù)寄存器 (TIMx_RCR)
重復(fù)次數(shù)寄存器設(shè)置后点弯,達(dá)到重復(fù)次數(shù)產(chǎn)生更新時間扇调,否則計數(shù)器寄存器每次溢出時產(chǎn)生更新事件。
時鐘選擇:
計數(shù)器時鐘可由下列時鐘源提供:
● 內(nèi)部時鐘(CK_INT)
● 外部時鐘模式1:外部輸入引腳
● 外部時鐘模式2:外部觸發(fā)輸入ETR
● 內(nèi)部觸發(fā)輸入(ITRx):使用一個定時器作為另一個定時器的預(yù)分頻器抢肛。如可以配置一個定時器Timer1而作為另一個定時器Timer2的預(yù)分頻器狼钮。
1.1.3 TIM1和TIM8 定時器 捕獲/比較
每一個捕獲/比較通道(capture/compare channels,CCR)都是圍繞著一個捕獲/比較寄存器捡絮,包括捕獲的輸入部分(數(shù)字濾波燃领、多路復(fù)用和預(yù)分頻器),和輸出部分(比較器和輸出控制)锦援。
- 輸入捕獲:簡單的說就是通過檢測 TIMx_CHx (定時器X的通道X)上的 邊沿信號,在邊沿信號發(fā)生跳變(比如上升沿/下降沿)的時候剥悟,將當(dāng)前定時器的值(TIMx_CNT) 存放到對應(yīng)的通道的捕獲/比較寄存器(TIMx_CCRx)里面灵寺,完成一次捕獲曼库。同時還可以配置捕獲時是否觸發(fā)中斷/DMA 等。
- 輸出比較模式: 用來控制一個輸出波形略板,或者表示出一段給定的的時間已經(jīng)到時毁枯。(indicating when a period time has elapsed)。
1.1.4 TIM1和TIM8 定時器 寄存器
TIM1和TIM8定時器里面有很多的寄存器叮称,如控制寄存器CR种玛、狀態(tài)寄存器SR、捕獲比較寄存器CCR等瓤檐,一共21個寄存器赂韵,這里挑選與PWM密切相關(guān)的寄存器進(jìn)行說明。
-
捕獲/比較模式寄存器(TIMx_CCMR1/2)
位7 OC1CE:輸出比較1清’0’使能 (Output Compare 1 clear enable)
0: OC1REF 不受ETRF輸入的影響挠蛉;
1:一旦檢測到ETRF輸入高電平祭示,清除OC1REF=0。
位6:4: OC1M[2:0]:輸出比較1模式 (Output Compare 1 mode)
該3位定義了輸出參考信號OC1REF的動作谴古。
其中质涛,110: PWM模式1- 在向上計數(shù);111: PWM模式2- 在向上計數(shù)時
位3 OC1PE: 輸出比較1預(yù)裝載使能 (Output Compare 1 preload enable):是否使能預(yù)裝載
位2 OC1FE: 輸出比較1 快速使能 (Output Compare 1 fast enable):該位用于加快CC輸出對觸發(fā)輸入事件的響應(yīng)
位1:0 CC1S[1:0]:捕獲/比較1 選擇(Capture/Compare 1 selection):定義通道的方向(輸入/輸出)掰担,及輸入腳的選擇
00: CC1通道被配置為輸出汇陆;
01: CC1通道被配置為輸入, IC1映射在TI1上带饱;
10: CC1通道被配置為輸入毡代, IC1映射在TI2上;
11: CC1通道被配置為輸入纠炮, IC1映射在TRC上月趟。此模式僅工作在內(nèi)部觸發(fā)器輸入被選中時(由
TIMx_SMCR寄存器的TS位選擇)。
我們想要的是PWM模式恢口,所以CCxM位必須是110/111孝宗;CCxS位為0。
-
捕獲/比較使能寄存器(TIMx_CCER)
CCxE:CC1E: 輸入/捕獲1輸出使能 (Capture/Compare 1 output enable)
位為1: 開啟- OC1信號輸出到對應(yīng)的輸出引腳
CCxP: 輸入/捕獲1輸出極性 (Capture/Compare 1 output polarity):可以設(shè)置OCX高電平有效還是低電平有效耕肩。
輸出時:0: OC1高電平有效因妇;1: OC1低電平有效
CCxNE: CC1NE:輸入/捕獲1互補(bǔ)輸出使能 (Capture/Compare 1 complementary output enable)
CCxNP:CC1NP:輸入/捕獲1互補(bǔ)輸出極性 (Capture/Compare 1 complementary output polarity)
我們只要配置使能位CCxE和極性。
-
捕獲/比較寄存器(TIMx_CCR)
輸出模式下猿诸,該寄存器的值與CNT值進(jìn)行比較婚被,通過修改這個寄存器的值,就可以控制PWM的輸出脈寬梳虽。
脈沖寬度調(diào)制模式可以產(chǎn)生一個由TIMx_ARR寄存器確定頻率址芯、由TIMx_CCRx寄存器確定占空比的信號。
OCxREF:output compare signal
CCxIF: sets a flag in the interrupt status register(CCxIF bit in the TIMx_SR register)
CC1IF: 捕獲/比較1中斷標(biāo)記 (Capture/Compare 1 interrupt flag)
如果通道CC1配置為輸出模式:
當(dāng)計數(shù)器值與比較值匹配時該位由硬件置1,但在中心對稱模式下除外(參考TIMx_CR1寄存器的CMS位)谷炸。它由軟件清’0’北专。
0:無匹配發(fā)生;
1: TIMx_CNT的值與TIMx_CCR1的值匹配旬陡。
當(dāng)TIMx_CCR1的內(nèi)容大于TIMx_APR的內(nèi)容時拓颓,在向上或向上/下計數(shù)模式時計數(shù)器溢出,或向下計數(shù)模式時的計數(shù)器下溢條件下描孟, CC1IF位變高