STM32F429第二十篇之高级定时器——PWM(OSSI,OSSR)
文章目錄
- 前言
- 高級定時器
- PWM模式
- 互補通道與剎車
- 重要寄存器
前言
從本文開始,介紹F429的高級時鐘特性。本文主要介紹高級時鐘的PWM功能的應用。關于PWM,本文重點介紹實現帶有斷路功能的雙通道互補無延時的PWM波的實現方式。
本文主要參考文獻為:
- ST.RM0090 參考手冊
- 劉火良.STM32庫開發實戰指南.機械工業出版社
更新列表:
- 2021.02.23——更新關于OSSI與OSSR分析。
- 2021.04.16——更新關于PWM時序
高級定時器
本文不打算詳細介紹高級定時器的每個特點,因為高級定時器的內容太多瑣碎與復雜。本文決定通過以實驗的方式,分別介紹高級定時器的三個應用場景:
- PWM波輸出
- 輸入捕獲
- 編碼器功能
通過三個比較常用的應用場景,比較全面的將高級定時器分解介紹。若以后遇到其他的應用場景,再詳細介紹。
首先,我們看一下官方提供的高級定時器框圖。該框圖相對于基本定時器十分復雜,先大致了解一下即可。在此處,本文重點介紹高級定時器與芯片外部的接口。在框圖中,輸入接口在框圖的左邊,輸出接口在框圖的右邊。通過觀察該框圖,可以了解到:F429的高級定時器與外部的物理接口可以大致分成以下三種類型:
其中,前兩種接口在圖上比較明確不再詳細展開,下面重點講解一下四通道接口:
在高級定時器中,每個定時器有4個通道。而每個通道與芯片外部都有對應的物理接口。需要注意的是,其中輸入接口是的對應關系可以通過寄存器配置,而輸出接口是直接對應無法改變的。輸入接口與通道是一一對應的,而每個通道提供輸出接口的同時還提供對應的互補接口。也就是說,每一個通道對應兩個輸出接口。另外需要注意的就是,雖然在框圖中將每個通道輸入接口和輸出接口分開畫在框圖的左右兩側,其實在物理上,名稱相同的接口為同一個接口。
高級定時器與通用定時器的對外接口與F429的管腳對應關系總結如下:
| CH1 | PA8/PE9/PC10 | PC6/PI15 | PA0/PA5/PA15 | PA0/PH10 | PA6/PC6/PB4 | PD12/PB6 | PE5/PA2 | PF6/PB8 | PF7/PB9 | PH6/PB14 | PF8/PA6 | PF9/PA7 |
| CH1N | PA7/PE8/PB13 | PA5/PA7/PH13 | ||||||||||
| CH2 | PE11/PA9 | PC7/PI6 | PA1/PB3 | PA1/PH11 | PA7/PC7/PB5 | PD13/PB7 | PE6/PA3 | PH9/PB15 | ||||
| CH2N | PB0/PE10/PB14 | PB0/PB14/PH14 | ||||||||||
| CH3 | PE13/PA10 | PC8/PI7 | PA2/PB10 | PA2/PH12 | PB0/PC8 | PD14/PB8 | ||||||
| CH3N | PB1/PE12/PB15 | PB1/PB15/PH15 | ||||||||||
| CH4 | PE14/PA11 | PC9/PI2 | PA3/PB11 | PA3/PI0 | PB1/PC9 | PD15/PB9 | ||||||
| ETR | PE7/PA12 | PA0/PI3 | PA0/PA5/PA15 | PD2 | PE0 | |||||||
| BKIN | PA6/PE15/PB12 | PA6/PI4 |
PWM模式
PWM即脈沖寬度調制模式,PWM的頻率由TIMx_ARR寄存器值確定,其占空比由比較寄存器TIMx_CCRx值確定。
在PWM模式中,信號流經的主要模塊已經通過紅色方框圈起來,大致分成以下三個部分:
關于基本定時器的更多知識,可以參考博客<STM32F429第十八篇之基本定時器> 。
其基本原理是,隨著內部時鐘的脈沖,CNT的計數值不斷變化。當CNT的值產生溢出或者等于Capture/Compare 1 寄存器時,其OCxREF的電平發生變化,從而輸出通道與互補輸出通道的電平跟著變化。所以,自動重載寄存器(AutoReload Register)的值決定了計數器(CNT)的計數周期,也就是PWM的頻率。而比較寄存器(Capture/Compare 1 Register)的值決定了PWM的占空比。
以邊緣對齊模式為例,只要 TIMx_CNT < TIMx_CCRx,PWM 參考信號 OCxREF 便為 高電平,否則為低電平。如果 TIMx_CCRx 中的比較值大于自動重載值(TIMx_ARR 中),則 OCxREF 保持為“1”。如果比較值為 0,則 OCxRef 保持為“0”。
注意:
互補通道與剎車
互補通道與剎車功能是高級寄存器特有的功能。
在使用互補通道時,往往還需要考慮死區等特殊功能。而本文為了簡單起見,不再考慮死區區間。通過配置TIMx_CCER寄存器,來使能互補通道,且將OCxREF 重定向到 OCx 輸出或 OCxN 輸出。
互補信號 OCx 和 OCxN 通過以下多個控制位的組合進行激活:TIMx_CCER 寄存器中的 CCxE 和 CCxNE 位以及 TIMx_BDTR 和 TIMx_CR2 寄存器中的 MOE、OISx、OISxN、OSSI 和 OSSR 位。
注意:
此處中文文檔過于陳舊,最新的英文參考手冊有不同的描述,如下所示:
關于OSSR和OSSI的作用,看文檔有點云里霧里,通過實驗,我個人認為其主要作用如下:
OSSR在MOE=1時起作用,即PWM處于運行狀態。下面分條陳述:
若OSSR=0,則禁用端口輸出高阻(存疑),與CCxP或者CCxNP無關。
若OSSR=1,則禁用端口輸出無效電平。假設OC1N為被禁用,即(CC1NE=0),則此時OC1N的輸出為無效電平,即CC1NP為0時,高電平有效,輸出電平為0,CC1NP為1是,低電平有效,輸出電平為1。
OSSI與OSSR的作用很類似,其只有在MOE=0時起作用,即PWM處于高阻狀態。我們假定互補的兩個通道都使能,下面分條陳述:
上面3種情況是OSSI=1的效果,若OSSI=0,此時輸出高阻(存疑)。
可以這樣理解:若是OISx=OSIxN且CCxP=CCxNP時,此時輸出的是無效電平。其余的時候,OCxN=OSIxN,OCx=OISx。
真值表如下:
| OSIx | x | 0 | 0 | 1 | 1 |
| OSIxN | x | 0 | 1 | 0 | 1 |
| CCxP | x | 1 | x | x | 0 |
| CCxNP | x | 1 | x | x | 0 |
| OCx | x | 1 | 0 | 1 | 0 |
| OCxN | x | 1 | 1 | 0 | 0 |
| CCxP | x | 使能 | 使能 | 0 | 1 |
| CCxNP | x | 0 | 1 | 使能 | 使能 |
| OCx | x | 使能 | 使能 | 0 | 1 |
| OCxN | x | 0 | 1 | 使能 | 使能 |
發生斷路(斷路輸入上出現所選電平)時:
重要寄存器
與PWM通道相關的重要寄存器如下所示:
CCMR1
在該寄存器中,需要配置以下幾位:
CR1
在該寄存器中,需要配置以下幾位:
EGR
CCER
BDTR
CR2
總結
以上是生活随笔為你收集整理的STM32F429第二十篇之高级定时器——PWM(OSSI,OSSR)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 22-0001 淘宝店铺搜索界面
- 下一篇: 二手交易商城开发,节约、高效的回收平台