|
|
你遇到的問題與PWM定時(shí)器的計(jì)數(shù)方式和寄存器配置有關(guān),具體原因如下:
### 核心原因:定時(shí)器的計(jì)數(shù)范圍是「0到ARR值」 大部分定時(shí)器(包括你使用的這款)的計(jì)數(shù)邏輯是: - 計(jì)數(shù)器從0開始遞增 - 當(dāng)計(jì)數(shù)達(dá)到`ARR`值時(shí),觸發(fā)一次更新事件(周期結(jié)束) - 因此,**實(shí)際周期 = (ARR + 1) × 時(shí)鐘周期**
### 你的參數(shù)計(jì)算分析
1. 時(shí)鐘配置: - 分頻系數(shù)`PSC = 24-1 = 23`,因此定時(shí)器時(shí)鐘頻率 = 系統(tǒng)時(shí)鐘 / 24 - 假設(shè)系統(tǒng)時(shí)鐘為24MHz,那么定時(shí)器時(shí)鐘 = 1MHz,即每個(gè)計(jì)數(shù)單位為1μs
2. 當(dāng)`PWM_PERIOD = 100`時(shí): - 實(shí)際周期 = (100 + 1) × 1μs = 101μs(與你的測(cè)量結(jié)果一致)
3. 當(dāng)`PWM_PERIOD = 99`時(shí): - 實(shí)際周期 = (99 + 1) × 1μs = 100μs(符合預(yù)期) ### 為什么占空比是正確的? 占空比配置`PWM_DUTY = 1`時(shí): - 比較寄存器`CCR`的值是1,代表計(jì)數(shù)器計(jì)數(shù)到1時(shí)翻轉(zhuǎn)電平 - 正脈寬 = 1 × 1μs = 1μs(無需+1,因?yàn)閺?到1剛好是1個(gè)單位)
### 修正建議 將周期定義修改為: ```c #define PWM_PERIOD 99 // 實(shí)際周期 = (99+1)×1μs = 100μs ``` 這樣就能得到你預(yù)期的100μs周期,這是定時(shí)器設(shè)計(jì)的通用邏輯(計(jì)數(shù)從0開始),并非代碼或硬件問題。 |
|