STM32F4輸出PWM波形的配置總結

2020-12-07 小周視界

單片機輸出pwm的原理

涉及模塊:GPIO、TIM1

主要寄存器:TIMx_CCR、TIMx_ARR、TIMx_CNT

原理圖

通用定時器可以利用GPIO引腳進行脈衝輸出,在配置為比較輸出、PWM輸出功能時,捕獲/比較寄存器TIMx_CCR被用作比較功能,下面把它簡稱為比較寄存器。

若配置脈衝計數器TIMx_CNT為向上計數,而重載寄存器TIMx_ARR被配置為N,即TIMx_CNT的當前計數值數值X在TIMxCLK時鐘源的驅動下不斷累加,當TIMx_CNT的數值X大於N時,會重置TIMx_CNT數值為0重新計數。而在TIMxCNT計數的同時,TIMxCNT的計數值X會與比較寄存器TIMx_CCR預先存儲了的數值A進行比較,當脈衝計數器TIMx_CNT的數值X小於比較寄存器TIMx_CCR的值A時,輸出高電平(或低電平),相反地,當脈衝計數器的數值X大於或等於比較寄存器的值A時,輸出低電平(或高電平)。

如此循環,得到的輸出脈衝周期就為重載寄存器TIMx_ARR存儲的數值(N+1)乘以觸發脈衝的時鐘周期,其脈衝寬度則為比較寄存器TIMx_CCR的值A乘以觸發脈衝的時鐘周期,即輸出PWM的佔空比為 A/(N+1) 。

主要程序

根據要使用的外設以及模塊進性程序配置,主要分為三塊:GPIO配置、TIM配置、PWM輸出配置。

程序實例:單片機使用TIM1進行PWM的輸出。

//TIM1 PWM部分初始化

//PWM輸出初始化

//arr:自動重裝值

//psc:時鐘預分頻數

void TIM1_PWM_Init(u32 arr,u32 psc)

{

//此部分需手動修改IO口設置

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); //TIM1時鐘使能

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能PORTA時鐘

//復用不能寫成下面,會出問題

//GPIO_PinAFConfig(GPIOA,GPIO_PinSource8|GPIO_PinSource11,GPIO_AF_TIM1); //GPIO復用為定時器1

GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_TIM1); //復用GPIOA_Pin8為TIM1_Ch1,

GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_TIM1);//復用GPIOA_Pin11為TIM1_Ch4,注意沒有CH4N

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_11; //GPIO

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //復用功能

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽復用輸出

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉

GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化P

TIM_TimeBaseStructure.TIM_Prescaler=psc; //定時器分頻

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上計數模式

TIM_TimeBaseStructure.TIM_Period=arr; //自動重裝載值

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;

//TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;//默認就為0

TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);//初始化定時器1

//初始化TIM1 PWM模式

//PWM 模式 1–– 在遞增計數模式下,只要 TIMx_CNT<TIMx_CCR1,通道 1 便為有效狀態,否則為無效狀態。在遞減計數模式下,

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM1為正常佔空比模式,PWM2為反極性模式

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //輸出極性:TIM輸出比較極性低,有效電平為低電平

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;//在空閒時輸出 低,這裡的設置可以改變TIM_OCPolarity 如果沒這句,第1通道有問題

TIM_OCInitStructure.TIM_Pulse = 2000; //輸入通道1 CCR1(佔空比數值)

TIM_OC1Init(TIM1, &TIM_OCInitStructure); //Ch1初始化

TIM_OCInitStructure.TIM_Pulse = 5000;

TIM_OC4Init(TIM1, &TIM_OCInitStructure);//通道4

TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //使能TIM1在CCR1上的預裝載寄存器,CCR自動裝載默認也是打開的

TIM_ARRPreloadConfig(TIM1,ENABLE);//ARPE使能

TIM_Cmd(TIM1, ENABLE); //使能TIM1

TIM_CtrlPWMOutputs(TIM1, ENABLE);//使能TIM1的PWM輸出,TIM1與TIM8有效,如果沒有這行會問題

}

相關焦點

  • pwm輸出波形的特點
    打開APP pwm輸出波形的特點 發表於 2018-01-25 15:38:40 PWM模式是決定逆變器輸出電壓特性的根本。性能優越的PWM模式可以使逆變器具有良好的輸出特性。由傅立葉分析可知,不對稱波形會帶來大量低次諧波、偶次諧波以及餘弦項。因此PWM脈衝波形的對稱性對輸出特性有很大影響。   PWM的實現方法一般有兩種:比較法和計算法。   隨著數位技術的迅速發展和計算機功能的提高,計算法以其方便靈活的特點成為PWM實現方法的主流。
  • 產生精確PWM波形的DDS電路
    一個50%佔空比的波形會具有50%的高電平時間和50%的低電平時間,而一個10%佔空比的波形則具有10%的高電平時間和90%的低電平時間。PWM有許多應用,其中包括電動機控制、伺服控制、調光、開關電源,甚至某些音頻放大器。在諸如MEMS(微機電系統)鏡面傳動器控制等應用系統中,有一個反饋系統必須對PWM進行調節。有個電路監測並控制PWM輸出信號,然後根據應用系統要求改變佔空比。
  • stm32單片機中使用GPIO口模擬PWM輸出解析
    分類:硬體/嵌入開發驅動開發/核心開發   每個GPIO埠可通過軟體分別配置成輸入或輸出。Maxim的GPIO產品線包括8埠至28埠的GPIO,提供推挽式輸出或漏極開路輸出。提供微型3mm x 3mm QFN封裝。
  • MSP430 定時器輸出PWM波形
    硬體介紹:MSP430系列單片機的TimerA結構複雜,功能強大,適合應用於工業控制,如數位化電機控制,電錶和手持式儀表的理想配置。它給開發人員提供了較多靈活的選擇餘地。當PWM 不需要修改佔空比和時間時,TimerA 能自動輸出PWM,而不需利用中斷維持PWM輸出。
  • PWM是什麼
    也就是在輸出波形的半個周期中產生多個脈衝,使各脈衝的等值電壓為正弦波形,所獲得的輸出平滑且低次諧波少。按一定的規則對各脈衝的寬度進行調製,即可改變逆變電路輸出電壓的大小,也可改變輸出頻率。  在PWM波形中,各脈衝的幅值是相等的,要改變等效輸出正弦波的幅值時,只要按同一比例係數改變各脈衝的寬度即可,因此在交-直-交變頻器中,PWM逆變電路輸出的脈衝電壓就是直流側電壓的幅值。  根據上述原理,在給出了正弦波頻率,幅值和半個周期內的脈衝數後,PWM波形各脈衝的寬度和間隔就可以準確計算出來。按照計算結果控制電路中各開關器件的通斷,就可以得到所需要的PWM波形。
  • 濾波器對PWM變頻調速電動機端子上電壓波形的影響分析
    但是,變頻器輸出的具有陡上升沿或下降沿的脈衝電壓卻在電動機接線端子及繞組上產生了過電壓,造成電動機繞組絕緣的過早破壞。試驗研究表明,很高的電壓上升率(dv/dt)在電動機繞組上產生極不均勻的電壓分布,且隨著變頻器與電動機之間電纜(線)長度的增加,在電動機接線端子上產生高頻振蕩的過電壓,當電纜長度超過某一臨界值後,電動機端子上過電壓的幅值達到變頻器輸出電壓的2倍,長時間重複性的電壓應力的作用將導致電動機繞組匝間絕緣的過早破壞。
  • 脈衝寬度調製(PWM)器件的測試(圖)
    關鍵詞:脈衝寬度調製;pwm;開關電源 pwm器件概述  pwm器件是隨著開關電源的發展和半導體集成技術的發展而出現的。開關電源是一種高頻電源轉換電路,採用開關器件來控制未經穩壓的直流輸入電源,配合相應的濾波線路,產生穩定的直流輸出,輸出電壓的高低取決於開關器件的佔空比。
  • 用Arduino剖析PWM脈寬調製
    一般pwm頻率都是因硬體設計而固定的,是由pwm發生器決定的。PWM頻率越高,調製出來的輸出曲線就更加的smooth,效果越好,完成一個調製周期的時間越短。這個和手機的ppi越高,顯示越清晰是一個道理。當然我想PWM的頻率越高,對硬體的要求就也越高。下圖中,右邊的頻率是左邊的2倍,調製出的曲線更加圓滑,貼近理想波形。
  • PWM基本原理介紹
    效果基本相同,是指環節的輸出響應波形基本相同。低頻段非常接近,僅在高頻段略有差異。其輸出電流i(t)對不同窄脈衝時的響應波形如圖2b所示。從波形可以看出,在i(t)的上升段,i(t)的形狀也略有不同,但其下降段則幾乎完全相同。脈衝越窄,各i(t)響應波形的差異也越小。如果周期性地施加上述脈衝,則響應i(t)也是周期性的。用傅立葉級數分解後將可看出,各i(t)在低頻段的特性將非常接近,僅在高頻段有所不同。
  • PWM原理
    PWM就是脈衝寬度調製,也就是佔空比可變的脈衝波形。該技術以該結論為理論基礎,對半導體開關器件的導通和關斷進行控制,使輸出端得到一系列幅值相等而寬度不相等的脈衝,用這些脈衝來代替正弦波或其他所需要的波形。按一定的規則對各脈衝的寬度進行調製,既可改變逆變電路輸出電壓的大小,也可改變輸出頻率。
  • stm32f407之高級定時器 死區互補PWM(操作寄存器)
    高級定時器的功能有很多,這裡只介紹死區互補PWM輸出功能。其實死區互補PWM跟通用定時器的PWM配置差異不大,只是需要設置多CCER寄存器中的幾個位以及剎車與死區寄存器BDTR。對寄存器的具體描述請參考數據手冊。配置步驟:1.     使能相關時鐘。2.
  • 推輓輸出、開漏輸出、復用開漏輸出的區別
    因此,在這裡做一個總結:推輓輸出:可以輸出高,低電平,連接數字器件; 推挽結構一般是指兩個三極體分別受兩互補信號的控制,總是在一個三極體導通的時候另一個截止。高低電平由IC的電源低定。推挽電路是兩個參數相同的三極體或MOSFET,以推挽方式存在於電路中,各負責正負半周的波形放大任務,電路工作時,兩隻對稱的功率開關管每次只有一個導通,所以導通損耗小、效率高。
  • stm32編碼器的接口模式
    編碼器是什麼玩意呢,它可是一個好玩的東西,做小車測速必不可少的玩意,下面,我將從編碼器的原理講起,一直到用stm32的編碼器接口模式,測出電機轉速與方向。這樣保證了A,B波形相位相差90度。旋轉的反向不同,鋸齒波A,B先到達高電平的順序就會不同,如上圖左側所示,順序的不同,就可以得到旋轉的方向。2.stm32編碼器接口模式(寄存器)        stm32的編碼器接口模式在STM32中文參考手冊中有詳細的說明,在手冊273頁,14.3.12節。程序是完全按照 下圖方式,設置寄存器的。
  • 一文解析stm32產生spwm原理及程序
    打開APP 一文解析stm32產生spwm原理及程序 發表於 2018-05-18 09:11:49 SPWM法就是以該結論為理論基礎,用脈衝寬度按正弦規律變化而和正弦波等效的PWM波形即SPWM波形控制逆變電路中開關器件的通斷,使其輸出的脈衝電壓的面積與所希望輸出的正弦波在相應區間內的面積相等,通過改變調製波的頻率和幅值則可調節逆變電路輸出電壓的頻率和幅值。本文主要詳解stm32產生spwm原理及程序,首先來了解一下生成SPWM波的基理是什麼,具體得跟隨小編一起來了解一下。
  • 有關PWM「死區」時間
    簡介:pwm是脈寬調製,在電力電子中,最常用的就是整流和逆變。這就需要用到整流橋和逆變橋。對三相電來說,就需要三個橋臂。以兩電平為例,每個橋臂上有兩個電力電子器件,比如igbt。這兩個igbt不能同時導通,否則就會出現短路的情況。
  • 基於MOSFET控制的PWM型直流可調電源的研製
    兩個等值濾波電容上的電壓分別為99V 以上,經DC/AC 變換器逆變之後輸出20kHz、脈寬可調的交流電壓,又經高頻變壓器的兩個副邊分正負半周送入整流濾波電路,輸出直流電壓。該電源直流輸出電壓的大小靠 PWM發生器的輸出脈衝寬度來控制。  主電路如圖2 所示。
  • GPIO相關寄存器配置詳解
    >一個埠輸入數據寄存器(GPIOx_IDR)一個埠輸出數據寄存器(GPIOx_ODR)一個埠置位/復位寄存器(GPIOx_BSRR)一個埠配置鎖存寄存器(GPIOx_LCKR)兩個復用功能寄存器(低位GPIOx_AFRL&
  • PWM型功率放大器長線傳輸波形整型
    摘要:為解決PWM功率放大器輸出長線傳輸引發的波形畸變,可能傷及力矩電動機的問題,對實際系統結構進行了理論分析,找出了可能引發波形畸變的原因,並給出了3種解決方法。
  • 關於PWM「死區」時間知識解析
    死區時間是PWM輸出時,為了使H橋或半H橋的上下管不會因為開關速度問題發生同時導通而設置的一個保護時段,所以在這個時間,上下管都不會有輸出,當然會使波形輸出中斷,死區時間一般只佔百分之幾的周期。但是PWM波本身佔空比小時,空出的部分要比死區還大,所以死區會影響輸出的紋波,但應該不是起到決定性作用的。
  • PWM控制MOSFET搭建的H橋電路驅動直流電機仿真與單片機源碼
    該模式下不能產生 0%的 PWM 波形。PWM 中央對齊模式當TIM1_CR1寄存器中的CMS位不為 00時為中央對齊模式(所有其他的配置對OCxREF/OCx信號都有相同的作用)。根據不同的CMS位的設置,比較標誌可能 在計數器向上計數時被置 1、在計數器向下計數時被置 1、或在計數器向上和向下計數時被置 1。TIM1_CR1寄存器中的計數方向位(DIR)由硬體更新,不要用軟體修改它。