什么是PWM
- 脈沖寬度調制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調制,是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量、通信到功率控制與變換的許多領域中。
PWM工作原理
SMT32F1系列共有8個定時器:
-
高級定時器(TIM1、TIM8);通用定時器(TIM2、TIM3、TIM4、TIM5);基本定時器(TIM6、TIM7)。
-
SMT32F4系列共有15個定時器:
-
高級定時器(TIM1、TIM8);通用定時器(TIM2、TIM3、TIM4、TIM5、TIM9~TIM14);基本定時器(TIM6、TIM7)。
STM32的每個通用定時器都有獨立的4個通道可以用來作為:輸入捕獲、輸出比較、PWM輸出、單脈沖模式輸出等。
STM32的定時器除了TIM6和TIM7(基本定時器)之外,其他的定時器都可以產生PWM輸出。其中,高級定時器TIM1、TIM8可以同時產生7路PWM輸出
原理講解:
下圖為向上計數模式:

- 在PWM輸出模式下,除了CNT(計數器當前值)、ARR(自動重裝載值)之外,還多了一個值CCRx(捕獲/比較寄存器值)。
- 當CNT小於CCRx時,TIMx_CHx通道輸出低電平;
- 當CNT等於或大於CCRx時,TIMx_CHx通道輸出高電平。
PWM的一個周期
- 定時器從0開始向上計數
- 當0-t1段,定時器計數器TIMx_CNT值小於CCRx值,輸出低電平
- t1-t2段,定時器計數器TIMx_CNT值大於CCRx值,輸出高電平
當TIMx_CNT值達到ARR時,定時器溢出,重新向上計數...循環此過程
至此一個PWM周期完成
總結:
每個定時器有四個通道,每一個通道都有一個捕獲比較寄存器,
將寄存器值和計數器值比較,通過比較結果輸出高低電平,便可以實現脈沖寬度調制模式(PWM信號)
TIMx_ARR寄存器確定PWM頻率,
TIMx_CCRx寄存器確定占空比
詳解:
若配置脈沖計數器TIMx_CNT為向上計數,而重載寄存器TIMx_ARR配置為N,即TIMx_CNT的當前計數值數值X在TIMxCLK時鍾源的驅動下不斷累加,當TIMx_CNT的數值X大於N時,會重置TIMx_CNT數值為0重新計數。
而在TIMxCNT計數的同時,TIMxCNT的計數值X會與比較寄存器TIMx_CCR預先存儲了的數值A進行比較,當脈沖計數器TIMx_CNT的數值X小於比較寄存器TIMx_CCR的值A時,輸出高電平(或低電平),相反地,當脈沖計數器的數值X大於或等於比較寄存器的值A時,輸出低電平(或高電平)。
如此循環,得到的輸出脈沖周期就為重載寄存器TIMx_ARR存儲的數值(N+1)乘以觸發脈沖的時鍾周期,其脈沖寬度則為比較寄存器TIMx_CCR的值A乘以觸發脈沖的時鍾周期,即輸出PWM的占空比為A/(N+1)。
PWM的工作模式:
- PWM模式1(向上計數) :計數器從0計數加到自動重裝載值(TIMx_ARR),然后重新從0開始計數,並且產生一個計數器溢出事件
- PWM模式2(向下計數) :計數器從自動重裝載值(TIMx_ARR)減到0,然后重新從重裝載值(TIMx_ARR)開始遞減,並且產生一個計數器溢出事件
設置寄存器TIMx_CCMR1的OC1M[2:0]位來確定PWM的輸出模式:
-
PWM模式1:在向上計數時,一旦TIMx_CNT<TIMx_CCR1時通道1為有效電平,否則為無效電平;在向下計數時,一旦TIMx_CNT>TIMx_CCR1時通道1為無效電平(OC1REF=0),否則為有效電平(OC1REF=1)。
-
PWM模式2:在向上計數時,一旦TIMx_CNT<TIMx_CCR1時通道1為無效電平,否則為有效電平;在向下計數時,一旦TIMx_CNT>TIMx_CCR1時通道1為有效電平,否則為無效電平。
在兩種模式下TIMx_CNT(計數器當前值)與TIMx_CCR1(捕獲/比較值) 只是決定是有效電平還是無效電平
有效電平可以是高電平也可以是低電平,這需要結合CCER寄存器的CC1P位的值來確定。
工程創建
1設置RCC
設置高速外部時鍾HSE 選擇外部時鍾源

2設置定時器

-
1.選擇TIM3
-
2.設置定時器時鍾源為內部時鍾源
-
設置定時器CH1為PWM模式
-
3.對應管腳自動設置為復用模式
-
4.可自行選擇是否開啟定時器中斷
Channel1~4 就是設置定時器通道的功能 (輸入捕獲、輸出比較、PWM輸出、單脈沖模式)

-
Mode 選擇PWM模式1
-
Pulse(占空比值) 先給0
-
Fast Mode PWM脈沖快速模式 : 和我們配置無關,不使能
-
PWM 極性: 設置為低電平 PS: 由於LED是低電平點亮,所以我們把極性設置為low

在 Parameter Settings 頁配置預分頻系數為 71,計數周期(自動加載值)為 499,定時器溢出頻率,即PWM的周期,就是 72MHz/(71+1)/(499+1) = 2kHz
PWM頻率:
Fpwm =Tclk / ((arr+1)*(psc+1))(單位:Hz)
- arr 是計數器值
- psc 是預分頻值
占空比:
duty circle = TIM3->CCR1 / arr(單位:%)
TIM3->CCR1 用戶設定值
比如 定時器頻率Tclk = 72Mhz arr=499 psc=71 那么PWM頻率就是720000/500/72= 2000Hz,即2KHz
arr=499,TIM3->CCR1=250 則pwm的占空比為50%
改CCR1可以修改占空比,修改arr可以修改頻率
3時鍾源設置

- 1選擇外部時鍾HSE 8MHz
- 2PLL鎖相環倍頻72倍
- 3系統時鍾來源選擇為PLL
- 4設置APB1分頻器為 /2
版權聲明:本文為CSDN博主「Z小旋」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/as480133937/article/details/99231677
