天天看點

用STM32F103輸出一路PWM波形

文章目錄

一、PWM簡介

PWM是 Pulse Width Modulation 的縮寫,中文意思就是脈沖寬度調 制,簡稱脈寬調制。它是利用微處理器的數字輸出來對模拟電路進行控 制的一種非常有效的技術,其控制簡單、靈活和動态響應好等優點而成 為電力電子技術最廣泛應用的控制方式,其應用領域包括測量,通信, 功率控制與變換,電動機控制、伺服控制、調光、開關電源,甚至某些 音頻放大器,是以學習PWM具有十分重要的現實意義。 其實我們也可以這樣了解,PWM是一種對模拟信号電平進行數字編碼 的方法。通過高分辨率計數器的使用,方波的占空比被調制用來對一個 具體模拟信号的電平進行編碼。PWM 信号仍然是數字的,因為在給定的 任何時刻,滿幅值的直流供電要麼完全有(ON),要麼完全無(OFF)。電壓 或電流源是以一種通(ON)或斷(OFF)的重複脈沖序列被加到模拟負載上去 的。通的時候即是直流供電被加到負載上的時候,斷的時候即是供電被 斷開的時候。隻要帶寬足夠,任何模拟值都可以使用 PWM 進行編碼

  

用STM32F103輸出一路PWM波形

二.STM32F1 PWM介紹

STM32F1除了基本定時器TIM6和TIM7,其他定時器都可以産生PWM輸出 。其中進階定時器 TIM1 和 TIM8 可以同時産生多達 7 路的 PWM 輸出 。而通用定時器也能同時産生多達 4路的 PWM 輸出,這些在定時器中斷 章節中已經介紹過。 PWM的輸出其實就是對外輸出脈寬可調(即占空比調節)的方波信号 ,信号頻率是由自動重裝寄存器 ARR 的值決定,占空比由比較寄存器 CCR 的值決定。

用STM32F103輸出一路PWM波形

  PWM輸出比較模式總共有8種,具體由寄存器 CCMRx 的位 OCxM[2:0] 配置。我們這裡隻講解最常用的兩種PWM輸出模式:PWM1和PWM2,其他幾 種模式可以參考《STM32F10x中文參考手冊》13、14、15定時器章節。

PWM1和PWM2這兩種模式用法差不多,差別之處就是輸出電平的極性不 同。

  

用STM32F103輸出一路PWM波形

PWM模式根據計數器CNT計數方式,可分為邊沿對齊模式和中心對齊模 式。

(1)PWM邊沿對齊模式

當 TIMx_CR1 寄存器中的 DIR 位為低時執行遞增計數,計數器CNT從 0 計數到自動重載值(TIMx_ARR 寄存器的内容),然後重新從 0 開始 計數并生成計數器上溢事件。 以 PWM 模式 1 為例。隻要TIMx_CNT < TIMx_CCRx, PWM 參考信号 OCxREF 便為有效的高電平,否則為無效的低電平。如果 TIMx_CCRx 中 的比較值小于自動重載值(TIMx_ARR 中),則 OCxREF 保持為“ 1”。 如果比較值為 0, 則 OCxREF 保持為“ 0”。

用STM32F103輸出一路PWM波形

  當 TIMx_CR1 寄存器中的 DIR 位為高時執行遞減計數,計數器CNT從 自動重載值(TIMx_ARR 寄存器的内容)遞減計數到0,然後重新從 TIMx_ARR值開始計數并生成計數器下溢事件。 以 PWM 模式 1 為例。隻要TIMx_CNT >TIMx_CCRx, PWM 參考信号 OCxREF 便為無效的低電平,否則為有效的高電平。如果 TIMx_CCRx 中 的比較值大于自動重載值(TIMx_ARR 中),則 OCxREF 保持為“ 1”。 此模式下不能産生0%的PWM波形。

(2)PWM中心對齊模式

在中心對齊模式下,計數器 CNT 是工作做遞增/遞減模式下。開始的 時候, 計數器CNT 從 0 開始計數到自動重載值減 1(ARR-1),生成計數 器上溢事件;然後從自動重載值開始向下計數到 1 并生成計數器下溢事 件。之後從 0 開始重新計數。

用STM32F103輸出一路PWM波形

  我們以ARR=8,CCRx=4為例進行介紹。第一階段計數器CNT工作在遞增 計數方式,從0開始計數,當TIMx_CNT < TIMx_CCRx時,PWM 參考信号 OCxREF為高電平,當TIMx_CNT >= TIMx_CCRx時,PWM 參考信号 OCxREF 為低電平。第二階段計數器CNT工作在遞減計數方式,從ARR開始遞減計 數,當TIMx_CNT > TIMx_CCRx時,PWM 參考信号 OCxREF為低電平,當 TIMx_CNT <= TIMx_CCRx時,PWM 參考信号 OCxREF為高電平。

代碼實作

在野火的官網中我們能夠找到關于TIM定時器的代碼,在裡面就有PWM的代碼,我們隻需要在Keil5中打開就可以了。

編譯之後就可以在Keil中進行調試 了。

用STM32F103輸出一路PWM波形

進入Keil中按照上面選擇線上調試,這樣就不需要硬體也能進行調試了。

設定之後按照下面的選擇,就可以進入調試階段了。

用STM32F103輸出一路PWM波形

然後再點選全速運作,之後點選×之後就會出現波形了。

用STM32F103輸出一路PWM波形

波形如下

用STM32F103輸出一路PWM波形

在主函數中,這段代碼可以改變輸出波形的頻率,我們改變頻率之後就會改變輸出的周期,這樣輸出的波形的占空比也會改變。

用STM32F103輸出一路PWM波形