天天看點

基于STM32F103生成PWM波形一、PWM簡介二、用STM32F103輸出一路PWM波形參考資料

文章目錄

  • 一、PWM簡介
  • 二、用STM32F103輸出一路PWM波形
  • 參考資料

一、PWM簡介

脈沖寬度調制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調制,是利用微處理器的數字輸出來對模拟電路進行控制的一種非常有效的技術。簡單一點,就是對脈沖寬度的控制。STM32 的定時器除了 TIM6 和 7。其他的定時器都可以用來産生 PWM 輸出。其中進階定時器 TIM1 和 TIM8 可以同時産生多達 7 路的 PWM 輸出。而通用定時器也能同時産生多達 4路的 PWM 輸出,這樣,STM32 最多可以同時産生 30 路 PWM 輸出!
  • PWM相關概念
  • 占空比:就是輸出的PWM中,高電平保持的時間 與 該PWM的時鐘周期的時間 之比

    如,一個PWM的頻率是2000Hz,那麼它的時鐘周期就是0.5ms,就是500us,如果高電平出現的時間是200us,那麼低電平的時間就是300us,那麼占空比就是2:5。

  • 分辨率也就是占空比最小能達到多少,如8位的PWM,理論的分辨率就是1:255(單斜率), 16位的的PWM理論就是1:65535(單斜率)。
  • 雙斜率 / 單斜率

    假設一個PWM從0計數到80,之後又從0計數到80… 這個就是單斜率。

    假設一個PWM從0計數到80,之後是從80計數到0… 這個就是雙斜率。

    可見,雙斜率的計數時間多了一倍,是以輸出的PWM頻率就慢了一半,但是分辨率卻是1:(80+80) =1:160,就是提高了一倍。

二、用STM32F103輸出一路PWM波形

  • 部落客直接使用的是正點原子的PWM輸出實驗的例程,采用定時器方法輸出PWM波形,完整工程下載下傳位址。
    基于STM32F103生成PWM波形一、PWM簡介二、用STM32F103輸出一路PWM波形參考資料
  • 定時器 TIM3 的 PWM原理

    要使 STM32 的通用定時器 TIMx 産生 PWM 輸出,我們會用到 3 個寄存器來控制 PWM 。

  • 首先是捕獲/比較模式寄存器(TIMx_CCMR1/2),該寄存器總共有 2 個,TIMx _CCMR1和 TIMx _CCMR2。TIMx_CCMR1 控制 CH1 和 2,而 TIMx_CCMR2 控制 CH3 和 4
    基于STM32F103生成PWM波形一、PWM簡介二、用STM32F103輸出一路PWM波形參考資料
    該寄存器的有些位在不同模式下,功能不一樣,是以在圖 14.1.1 中,我們把寄存器分了 2層,上面一層對應輸出而下面的則對應輸入。
  • 捕獲/比較使能寄存器(TIMx_CCER),該寄存器控制着各個輸入輸出通道的開關
    基于STM32F103生成PWM波形一、PWM簡介二、用STM32F103輸出一路PWM波形參考資料
    該寄存器比較簡單,我們這裡隻用到了 CC2E 位,該位是輸入/捕獲 2 輸出使能位,要想PWM 從 IO 口輸出,這個位必須設定為 1,是以我們需要設定該位為 1
  • 最後,我們介紹一下捕獲/比較寄存器(TIMx_CCR1~4),該寄存器總共有 4 個,對應 4 個輸通道 CH1~4。因為這 4 個寄存器都差不多,我們僅以 TIMx_CCR1 為例介紹。
    基于STM32F103生成PWM波形一、PWM簡介二、用STM32F103輸出一路PWM波形參考資料
    在輸出模式下,該寄存器的值與 CNT 的值比較,根據比較結果産生相應動作。利用這點,我們通過修改這個寄存器的值,就可以控制 PWM 的輸出脈寬了。
  • 正點原子的PWM輸出經過重映射後在PB5輸出,我們使用示波器觀察PB5輸出波形
    基于STM32F103生成PWM波形一、PWM簡介二、用STM32F103輸出一路PWM波形參考資料
  • 也可以使用KEIL 5自帶的仿真觀察輸出波形

    https://blog.csdn.net/nsnsnbabsb/article/details/111868732

參考資料

1、PWM波的介紹