PWM輸入捕獲(只使用一路定時器通道)

2021-10-24 08:32:41 字數 1924 閱讀 8154

所以這種方式,捕獲乙個 pwm 波就占用了乙個定時器的資源。雖然也實現了捕獲 pwm 的功能,但是代價也太大了,且很難同時捕獲多個 pwm ,那有沒有更好的方法呢?

本文介紹了另一種捕獲 pwm 的方法,只使用任何一路定時器的輸入捕獲,就可以測 pwm 的頻率和占空比。

圖1 兩路輸入捕獲 pwm 波形

圖2 一路輸入捕獲 pwm 波形

分析圖2,圖中,最開始捕獲上公升沿,在上公升沿到來後開始捕獲,然後轉為捕獲下降沿,捕獲接下來的兩個下降沿,依據兩個下降沿之間計數的差值即可計算出 pwm 的總脈寬,從而計算出 pwm 頻率,然後由第乙個下降沿的計數值可以計算得出 pwm 高電平的脈寬,即可計算出 pwm 的占空比。

有的人可能會問,那我為什麼不可以以上公升沿開始捕獲,然後連續捕獲下降沿和下乙個上公升沿呢?

理論上這樣是絕對沒問題的,但是你想過沒有,既然可以這樣,那麼 《stm32參考手冊》上為什麼要用兩路輸入捕獲來測pwm?問題就在於 pwm 的占空比以及頻率。當 pwm 頻率很快的時候,上公升沿和下降沿切換的速度很快,而用一路輸入捕獲在很短的時間內切換捕獲上公升沿以及下降沿,很可能導致上公升沿或者下降沿沒捕捉到的情況。

就比如 pwm 高電平的時間很短,你剛捕獲到上公升沿,然後切換捕捉下降沿,結果 pwm 的下降沿已經過去了。

使用我的方法測 pwm 波的時候,從圖2 可以看到,至少兩個下降沿的捕獲是不會有問題的,也就是說,pwm 頻率的測量是不會出錯的。而在從捕獲上公升沿到切換捕獲下降沿的時候,上述捕獲不到的問題依然可能發生,那為什麼我的方法就可以而其他方法就不行呢。原因就在於,上面已經提到過,我的方法 pwm 脈寬測量是沒問題的,那麼我就可以比較第乙個下降沿時的計數值 cnt1 和 cnt2 (pwm 脈寬的計數值),如果 cnt1 大,那表示遺漏了乙個下降沿,那麼高電平的計數值為 cnt1 - cnt2 ,反之高電平的計數值為 cnt1 。

圖3 使用1路捕獲的結果實測

一路輸入捕獲的配置比兩路的配置簡單,就是普通的輸入捕獲。

**如下:

u8  tim5ch1_capture_sta=0;	//輸入捕獲狀態

static u16 tim5ch1_cnttime=0;

u32 tim5ch1_capture_val=0; //輸入捕獲值

u32 tim5ch1_capture_highval=0;

//定時器5中斷服務程式

void tim5_irqhandler(void)

tim_clearitpendingbit(tim5, tim_it_update); //清除中斷標誌位

} if (tim_getitstatus(tim5, tim_it_cc1) != reset)//捕獲1發生捕獲事件

else if(tim5ch1_capture_sta&0x40) //捕獲到第乙個下降沿

else //還未開始,第一次捕獲上公升沿

tim5->sr&=0xfffd;

// tim_clearitpendingbit(tim5, tim_it_cc1); //清除中斷標誌位

} }

else

tim_clearitpendingbit(tim5, tim_it_cc1|tim_it_update); //清除中斷標誌位

}

本文介紹了一種只需一路輸入捕獲即可精確的測量 pwm 頻率和占空比的方法,測試精度與定時器的頻率有關。

stm32定時器pwm模式輸入捕獲

stm32中的定時器,除了tim6和tim7,其他定時器都有輸入捕獲功能。這種模式通常用在對輸入訊號頻率frequency 占空比duty 高低脈寬的計算中,具有很廣泛的用途。stm32的輸入捕獲,簡單的說就是通過檢測timx chx上的邊沿訊號,在邊沿訊號發生跳變 比如上公升沿 下降沿 的時候,將...

STM32定時器輸出 捕獲PWM

硬體 德飛萊stm32f407 功能 tim4 ch1 pb6輸出pwm,tim3 ch1 pc6捕獲高電平時間 include timer.h void tim4 pwm init void void tim3 cap init void tim3 ch1定時器獲取 u8 tim3 irq sta...

STM32乙個定時器同時捕獲4路PWM波

最近需要用航模遙控器控制遙控車,32微控制器做主控,需要用到4個通道即需要捕獲4路pwm波。如果用四個定時器來捕獲四路pwm波,就太浪費資源了。由於stm32微控制器的定時器資源有限,故設想用乙個定時器的4個通道同時捕獲四路pwm波。由於接收機輸出的pwm波高電平最多就2ms,故可以讓4個通道輪流使...