MCU是怎樣輸出PWM波形的

2021-07-16 21:36:37 字數 682 閱讀 3024

在所有的mcu裡,都會有timer定時器,pwm就是通過這個外設生成的,基本的原理可以通過下圖(以stm32f407的暫存器為例)來解釋。

計數器tim_cnt對輸入時鐘進行計數,比如輸入時鐘是1mhz(50%占空比方波),對時鐘的每乙個上公升沿(或者下降沿)從數字0開始計數,計數到tim_arr=999,一共計數1000個,經歷的時間是1000*1/1000000 = 1ms,也就是1khz,計數到999之後計數器tim_cnt歸零,重新從0開始計數到999,往復迴圈,這樣就形成了1khz pwm了。

那怎樣做到一定的占空比呢?這很簡單,設定乙個值tim_ccr,比如199,計數器tim_cnt從0計數到199,一共200次計數,在tim_cnt計數值在0-199,pwm輸出引腳輸出高電平(可以人為設定),計數器達到199,電平翻轉到低電平,之後im_cnt計數999後歸零又恢復到高電平,這樣也就形成了200/1000 = 20%的pwm了。對這個比較值進行設定就可以形成不同占空比的pwm了,這也是最基本的pwm波形生成方法了,從上面介紹的,可以看出,tim_arr的值決定了pwm的頻率,tim_ccr的值決定了pwm的占空比,有了這兩個值就可以很容易地生成pwm了,stm32的timer配置很靈活,功能很多,本文只是介紹最基本的原理,其他的在自行探索就是了。

PWM波形輸出

在學習嵌入式開發板例程時,剛開始的時候不懂pwm波形是怎樣輸出的,後來漸漸的消化了,mark下 stm32 clock init 9 系統時鐘設定 delay init 72 延時初始化 uart init 72,9600 串列埠初始化 led init 初始化與led連線的硬體介面 tim1 pw...

stm32 PWM波形輸出多週期的波形設計

一 stm32如何實現乙個pwm波形內具有2個週期 答 在不需要波形輸出時關閉gpiof使能 或者開個定時器定時觸發pwm使能 實現波形設計為 1 pwm.c和pwm.h include pwm.h include led.h include usart.h tim14 pwm部分初始化 pwm輸出...

電容充放電 PWM輸出波形不是方波的解釋

前些天用stm32微控制器輸出pwm,意外的發現了pwm輸出之後不是那種正經的方波,而是一種稍微有些圓潤的波形,但是結果還是可以用來驅動電機。這裡是吐槽 看到了方波出不來,第一反應是io口壞掉了,因為stm32微控制器只能輸出3.3v和0v。於是嘗試了無數個io口來配置乙個pwm。然後絕望到開始懷疑...