PWM,中文釋義:脈沖寬度調制。它是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術。
PWM 是一種對模擬信號電平進行數字編碼的方法。通過高分辨率計數器的使用,方波的占空比被調制用來對一個具體模擬信號的電平進行編碼。
STM32的定時器除了TIM6和7。其他的定時器都可以用來產生PWM輸出。其中高級定時器TIM1和TIM8可以同時產生多達7路的PWM輸出。而通用定時器也能同時產生多達4路的PWM輸出,這樣,STM32最多可以同時產生30路PWM輸出!(在編程過程中的定時器重映像時涉及到)
STM32 的PWM是TIMx_ARR寄存器確定頻率(周期)、由TIMx_CCRx寄存器確定占空比的信號。
PWM 模式
脈沖寬度調制模式可以產生一個由 TIM1_ARR 寄存器確定頻率、由TIM1_CCRx寄存器確定占空比的信號。在 TIM1_CCMRx寄存器中的OCxM位寫入“110”(PWM 模式 1)或“111”(PWM 模式 2),能夠獨立地設置每個通道工作在 PWM模式,每個 OCx 輸出一路 PWM。必須通過設置 TIM1_CCMRx 寄存器 OCxPE 位使能相應的預裝載寄存器,最后還要設置 TIM1_CR1 寄存器的 ARPE 位使能自動重裝載的預裝載寄存器(在向上計數或中心對稱模式中)。
PWM 邊沿對齊模式
向上計數配置 當 TIM1_CR1 寄存器中的 DIR 位為低的時候執行向上計數。 在 PWM 模式 1,當 TIM1_CNT 向下計數的配置 當 TIM1_CR1 寄存器的 DIR 位為高時執行向下計數。 在 PWM 模式 1,當 TIM1_CNT>TIM1_CCRx 時參考信號 OCxREF 為低,否則為高。如果 TIM1_CCRx 中的比較值大于 TIM1_ARR 中的自動重裝載值,則 OCxREF保持為“1"。該模式下不能產生 0%的 PWM 波形。 PWM 中央對齊模式 當TIM1_CR1寄存器中的CMS位不為 00時為中央對齊模式(所有其他的配置對OCxREF/OCx信號都有相同的作用)。根據不同的CMS位的設置,比較標志可能 在計數器向上計數時被置 1、在計數器向下計數時被置 1、或在計數器向上和向下計數時被置 1。TIM1_CR1寄存器中的計數方向位(DIR)由硬件更新,不要用軟件修改它。 圖 3-2給出了一些中央對齊的PWM波形的例子 · TIM1_ARR=8 ; · PWM模式 1; · TIM1_CR1 寄存器中的 CMS=01,在中央對齊模式 1 時,當計數器向下計數時標志被設置。 測試用例:(PWM控制led亮度的漸變) 1 #include "pbdata.h" 2 #include "led.h" 3 #include "misc.h" 4 #include "stm32f10x_tim.h" 5 6 void RCC_Configration(void) 7 { 8 SystemInit(); 9 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 10 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //定時器時鐘使能 11 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //端口復用使能,因為要使用PWM 12 } 13 14 void GPIO_Configration(void) 15 { 16 GPIO_LED_Configration(); 17 } 18 19 void TIM_Configuration(void) 20 { 21 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 22 TIM_OCInitTypeDef TIM_OCInitStructure; 23 24 GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE); // 定時器管腳映射,部分重映像到PB5,PB5正好為接led的管腳(搜索“復用功能重映射”) 25 26 TIM_TimeBaseStructure.TIM_Period = 2000; //設置初始值,定時1s 27 TIM_TimeBaseStructure.TIM_Prescaler = 35999; //設置預分頻 28 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //時鐘分割 29 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計數 30 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 31 32 //pwm 初始化 33 TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //設置為PWM模式1 34 TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; // 輸出使能????? 35 TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low; //設置輸出極性 36 37 TIM_OC2Init(TIM3,&TIM_OCInitStructure); //選擇定時器通道2 38 TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable); //預裝載使能 39 TIM_Cmd(TIM3,ENABLE); //定時器外設打開 40 } 41 42 43 int main(void) 44 { 45 u8 led_fx = 1; 46 u16 led_dt = 0; 47 RCC_Configration(); 48 GPIO_Configration(); 49 TIM_Configuration(); 50 while(1) 51 { 52 // delay_ms(10); 53 if(led_fx==1) 54 { 55 led_dt++; 56 } 57 else 58 { 59 led_dt--; 60 } 61 if(led_dt>1000) led_fx=0; 62 if(led_dt==0) led_fx=1; 63 64 TIM_SetCompare2(TIM3,led_dt); 65 } 66 } --------------------------------------------------------------------------------------------------------------------------------------------------------------->補充... GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);有了這個管腳的映射后,PWM才和LED有了聯系,相應管腳才會以PWM方式輸出。
上一篇:STM32定時器中斷
下一篇:中斷之外部中斷
推薦閱讀
史海拾趣
質量是企業生存和發展的根本。福聲科技自成立之初就高度重視產品質量管理,通過引入ISO9001質量管理體系,建立了完善的質量管理體系。公司從原材料采購、生產過程控制到成品檢驗,每一個環節都嚴格按照標準執行,確保產品質量的穩定性和可靠性。這一舉措不僅贏得了客戶的信賴和好評,也為公司贏得了更多的市場份額。
另一家EPC公司認識到全球化市場的重要性,積極拓展海外市場。公司首先在歐洲和北美地區設立了分公司,通過深入了解當地市場需求和法規要求,成功開展了多個項目。隨后,公司進一步將業務拓展至亞洲和非洲等地區,形成了全球化的市場布局。在全球化的過程中,公司注重本土化經營,積極融入當地市場,為客戶提供定制化的解決方案,贏得了客戶的信任和支持。
隨著全球對環保和可持續發展的關注度不斷提高,Diamond SA公司也積極響應這一趨勢。他們致力于開發環保型電子產品和技術解決方案,減少對環境的影響。同時,公司還積極參與各種環保活動和公益事業,推動整個電子行業的綠色發展。這些努力不僅提升了公司的社會形象和聲譽,也為公司的長期發展奠定了堅實的基礎。
隨著技術實力的提升,Erocore開始積極拓展市場。公司憑借優質的產品和服務,逐漸在電子行業中樹立了良好的品牌形象。通過與國內外知名企業的合作,Erocore的產品逐漸進入更廣泛的市場領域。同時,公司也加大了市場營銷力度,通過參加展會、舉辦研討會等方式,提升品牌知名度和影響力。
本帖最后由 paulhyde 于 2014-9-15 09:10 編輯 以下為納米盤下載鏈接,沒安裝納米機器人的先安裝一個吧 第一天http://www.namipan.com/d/CPLD%e7 ... fe254e99029af6c3104 第二天http://www.namipan.com/d/cpld%e7 ... ae5d1df2f4590920504 第 ...… 查看全部問答∨ |
|
一個古老的嵌入式設計問題,就是在你的新設計中使用 8位還是32位內核?如果你問自己的同事,可能會發現他們的觀點截然不同。無論是否喜歡,32為內核存在于今。那么這意味著什么呢?它意味著,在某一天,無論你多么努力嘗試避免,都不得不從你喜愛的 ...… 查看全部問答∨ |
|
在windows xp系統下 裝了 Microsoft eMbedded Visual Tools 包括:eva3.0 evb3.0 Microsoft Windows SDK for Smartphone 2002 運行程序出現 &nb ...… 查看全部問答∨ |
RTX51 Tiny performs cooperative task switching (each tasks calls an operating system routine) and round-robin task switching (each task runs for a fixed amount of time before the operating system switches to the next task). Preemp ...… 查看全部問答∨ |
要求這個控制器能夠實現二次開發功能,在用戶輸入自己的程序后,下載到控制器中,控制器能夠按照用戶的指示運行,這個功能如何實現的呢? 如果用戶在上位機上輸入,編譯好后以數據包的形式傳給下位機倒是可以,但是通訊中斷后就沒辦法了。而且時時 ...… 查看全部問答∨ |