下圖是一個STM32普通PWM形成的圖形原理說明
自動重裝載寄存器(ARR)用於確定波形的頻率(即周期)、捕獲比較寄存器(CCRx)(用於確定占空比的)
PWM的工作過程如下:首先ARR寄存器里面的值確定了一個PWM周期,就是我們上面舉的那兩個例子中的“1秒”(注意這個周期是在PWM系統初始化的時候寫入ARR寄存器的,寫入以后一般就不再改動了)。然后CCR寄存器里面的值是PWM工作過程中確定的,它可以為一個定值,也可以是一個變化的值。
當它是一個定值時(就像圖片里的那樣),占空比就是一個定值,如果放到上面那個LED燈的例子,那么實驗現象就不是燈會漸亮漸滅,而是始終維持一個比較暗的亮度,如果CCR里面的值設定得越靠近ARR寄存器里面的值(只是靠近,但不大於),那么按照圖上來看,就是每個周期內高電平持續的時間越短,至於燈到底是更亮了還是更暗了就得實際情況具體分析了。
當它是一個變化的值的時候,在程序里就可以設置一個變量,讓這個變量按照一定規律遞增(或遞減)。然后把這個值寫入到CCR寄存器中,這樣每個周期中PWM的占空比就是不同的。宏觀上,就能看到上面的LED燈的漸亮漸滅的過程。
--------------------- 以上來自 FelikZhang 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/FelikZhang/article/details/79237573?utm_source=copy
計數器值TIMx_CNT與捕獲比較寄存器值CCRx比較后,最終輸出高電平還是低電平,。
如圖為向上計數: 定時器重裝載值為ARR,比較值CCRx t時刻對計數器值和比較值進行比較 如果計數器值小於CCRx值,輸出低電平 如果計數器值大於CCRx值,輸出高電平 PWM的一個周期 定時器從0開始向上計數 當0-t1段,定時器計數器TIMx_CNT值小於CCRx值,輸出低電平 t1-t2段,定時器計數器TIMx_CNT值大於CCRx值,輸出高電平 當TIMx_CNT值達到ARR時,定時器溢出,重新向上計數...循環此過程 至此一個PWM周期完成 影響因素 ARR : 決定PWM周期(在時鍾頻率一定的情況下,當前為默認內部時鍾CK_INT) CCRx : 決定PWM占空比(高低電平所占整個周期比例)
下圖是一個spwm的圖形
一. STM32F103通用定時器簡介:
- 通用定時器是一個可編程預分頻器驅動的16位自動裝載計數器
- 適用於: 測量輸入信號的脈沖長度(輸入捕獲)、產生輸出波形(輸出比較和PWM)。
- 每個定時器都是完全獨立的,都可以同步操作。
-----------------------------------------------------以下為復制粘貼---------------------------------------------------------
STM32 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定時器功能特點包括:
①位於低速的APB1總線上(APB1)
②16 位向上、向下、向上/向下(中心對齊)計數模式,自動裝載計數器(TIMx_CNT)。
③16 位可編程(可以實時修改)預分頻器(TIMx_PSC),計數器時鍾頻率的分頻系數 為 1~65535 之間的任意數值。
④4 個獨立通道(TIMx_CH1~4),這些通道可以用來作為:
輸入捕獲
輸出比較
PWM 生成(邊緣或中間對齊模式)
單脈沖模式輸出
⑤可使用外部信號(TIMx_ETR)控制定時器和定時器互連(可以用 1 個定時器控制另外一個定時器)的同步電路。
如下事件發生時產生中斷/DMA(6個獨立的IRQ/DMA請求生成器):
①更新:計數器向上溢出/向下溢出,計數器初始化(通過軟件或者內部/外部觸發)
②觸發事件(計數器啟動、停止、初始化或者由內部/外部觸發計數)
③輸入捕獲
④輸出比較
⑤支持針對定位的增量(正交)編碼器和霍爾傳感器電路
⑥觸發輸入作為外部時鍾或者按周期的電流管理
STM32 的通用定時器可以被用於測量輸入信號的脈沖長度(輸入捕獲)或者產生輸出波形(輸出比較和 PWM)等。
使用定時器預分頻器和 RCC 時鍾控制器預分頻器,脈沖長度和波形周期可以在幾個微秒到幾個毫秒間調整。STM32 的每個通用定時器都是完全獨立的,沒有互相共享的任何資源。
二. PWM是什么
OK,首先PWM全稱為“Pulse Width Modulation”。中文翻譯為:脈沖寬度調制。
脈沖寬度指的是 脈沖持續的時間,既高電平或低電平保持(持續)的時間。
而PWM通俗的說就是人為的(通過微處理器)去控制電平高低保持的時間。
好的,這里引出一個新名詞,占空比:在一個脈沖的循環中,通電時間相對於總時間所占的比例。