天天看點

PWM呼吸燈之三角波、鋸齒波、正弦函數波

脈沖寬度調制(PWM),是英文“Pulse Width Modulation” 的縮寫,簡稱脈寬調制,是利用

微處理器(MCU)的數字輸出來對模拟電路進行控制的一種非常有效的技術。簡單一點,就是對脈沖寬

度的控制。

STM32的定時器分為進階控制定時器(TIM1和TIM8)、通用定時器(TIM2-TIM5)、基本定時器(TIM6和TIM7)。STM32 的定時器除了 TIM6 和 7。其他的定時器都可以用來産生 PWM 輸出。其中進階定時器 TIM1 和 TIM8 可以同時産生多達 7 路的 PWM 輸出。而通用定時器也能同時産生多達 4路的 PWM 輸出,這樣, STM32 最多可以同時産生 30 路 PWM 輸出!

話不多說,來看程式流程。

首先,對定時器進行初始化,這些參考庫函數版本。初始化過程中有幾個問題需要注意:1.有的輸出引腳需要用到定時器重映射或者完全映射,這個對應自己用的引腳,查表配置即可;2.設定輸出PWM脈沖波形引腳為複用推挽輸出;3.初始化定時器的時候,注意到ARR是自動重載值,PSC為時鐘預分頻系數;4.初始化PWM模式的時候,先确定是PWM1模式還是PWM2模式,因為這裡有個關鍵配置(這個很容易疏忽),即TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //輸出極性比較。這裡設定為Low,在PWM2模式下,意味着當計數器的值<自己設定的占空比的值時,引腳輸出高電平,反之亦然。

然後,我們看一個關鍵公式:PWM的頻率=72MHz/(psc+1)(arr+1)。其中72MHz為二倍時鐘周期,psc和arr前面提到了。這樣得到了PWM脈沖波形的頻率之後,就可以進一步算出周期。CNT為定時器的值,CCRX是由自己設定的占空比的值,ARR為占空比的最大值。

最後,我們看一下如何讓PWM輸出脈沖波形以三角波,鋸齒波,正弦函數形式變化。

PWM呼吸燈之三角波、鋸齒波、正弦函數波

這是我用示波器截取的PWM脈沖波形的變化圖,我的arr值為899,psc值為0(不分頻),是以一個周期為12.5μs。STM32庫函數曆程上給的是以三角波形式變化:即由亮變暗再由暗變亮。而根據三角波的配置可以很輕松地改成鋸齒波的形式:即由亮變暗再接着由亮變暗。

下面重點說一下正弦函數形式。需要引進一個函數:result = 450.0sin(param3.14/180);其中result為占空比的值,占空比不斷變化導緻燈泡亮度按照占空比的變化規律而變化,param為弧度值,我們讓它從0到90變化,450.0為CCRX的值,即占空比的最大值為450.0。這樣PWM脈沖波形就可以以正弦函數形式變化。

繼續閱讀