1. 程式人生 > >STM32 PWM佔空比和訊號週期的控制因素分析

STM32 PWM佔空比和訊號週期的控制因素分析

前言

  1. 博文基於STM32F103ZET6晶片,標準韌體庫3.5.0和MDK5編寫;
  2. 博文並不討論PWM的基礎知識,而是直接去談對PWM靈活的控制問題;想全面瞭解的可以看看我寫的專門針對PWM的部落格: https://blog.csdn.net/wuyuzun/article/details/72851940
  3. 如有不足之處還行多多指教;

PWM的兩個重要引數

  1. 佔空比:0~100%;
  2. 訊號週期:PWM訊號裡一個高電平和一個低電平的時間和;
    對這兩個引數的設定是配置PWM輸出的核心也是今天要討論的主要任務;

是什麼決定上面這兩個重要引數

首先要明白一個知識:STM32的定時器輸出的PWM的佔空比由定時器的三個暫存器決定,分別是

  1. 定時器計數器TIMx_CNT;
  2. 定時器自動重灌載暫存器TIMx_ARR;
  3. 定時器捕獲/比較暫存器TIMx_CCRx;
  4. 定時器預分頻器TIMx_PSC;

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

CNT和CCRx的對佔空比的影響:
對於本實驗要滿足的前提如下:
6. CNT是向上計數的方式;需設定TIMx_CRx暫存器中的DIR[1:0]=0;
7. CRx輸出極性為高;需要設定TIMx_CCER暫存器中的CCxP=1;
8. CHx的模式為輸出PWM1模式;需設定TIMx_CCMRx暫存器中的OCxM[2:0]=110;
(上面這三個因素對於PWM的輸出至關重要,而且是定時器很難理解的地方)
佔空比的形成過程


計算公式:
在這裡插入圖片描述
當CNT<CCRx時,OCxREF=1,Polarity=1,則CHx輸出低電平0;
當CNT>=CCRx時,OCxREF=0,Polarity=1,則CHx輸出高電平1;
當CNT的值更新後,CHx從高電平再次轉為低電平,自此下一個週期就開始了;
滿足以上前提的時序圖:(令ARR=8,下圖中的CCxIF為捕獲/比較中斷標誌位)
在這裡插入圖片描述
還可以從圖中得到另一個結論:PWM的訊號週期就等於CNT的更新週期;

佔空比的計算:佔空比 = CCRx/ARR; (前提不同,公式可能會變成1-(CCRx/ARR));
訊號週期的計算:訊號週期= (ARR+1)(PSC+1)/PCLKx; (這其實就是CNT的更新週期的計算)

總結

  1. 欲改變燈的亮度,只需改變佔空比,欲改變佔空比,只需改變CCRx的值或者ARR的值,一般都是改變CCRx的值;
  2. PWM的訊號週期如果長,整個燈就看不出來漸變的效果了,而是閃爍的效果,根據人的視覺暫留效應,對於訊號週期的配置很重要;大於這個值的時候,用肉眼就可以看出閃爍感覺了;