STM32F4輸出PWM波形的配置總結

2021-01-11 小周視界

單片機輸出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有效,如果沒有這行會問題

}

相關焦點

  • STM32——PWM輸出總結
    學習後發現stm32的定時器功能確實很強大,小總結一下方便以後使用的時候做參考。今天我主要是用定時器做pwm輸出,所以總結也主要是針對pwm方面的。 先大致說下通用和高級定時器的區別。通用的可以輸出四路pwm信號互不影響。高級定時器可以輸出三對互補pwm信號外加ch4通道,也就是一共七路。所以這樣算下來stm32一共可以生成4*5+7*2=30路pwm信號。
  • stm32 學習 (設置TIM4輸出4路 pwm J-LINK仿真驗證)
    X >= A 時輸出低電平(高電平) ; PWM佔空比:A/(N+1)stm32的pwm輸出只要設置好在主循環前調用一次即可, 對用的IO就可以持續的輸出PWMTIM4配置PWM過程程序:配置pwm輸出引腳7.
  • 能否使用普通IO口模擬PWM波?該怎麼做?
    普通IO埠模擬PWM,其實是有局限的,尤其是要輸出高頻率的PWM波形時,更不適合,建議不要選用普通埠模擬PWM,而建議選用定時器復用硬體PWM輸出。普通埠如何模擬PWM有些單片機內部擁有帶PWM輸出功能的定時器,只需要簡單的配置參數和使能,就能夠在特定的復用IO引腳,輸出想要的PWM波形。但當設計電路當中,單片機引腳沒有PWM功能時,如果想要實現模擬PWM信號的功能,則可以與內部普通定時器去實現。
  • PWM是什麼
    也就是在輸出波形的半個周期中產生多個脈衝,使各脈衝的等值電壓為正弦波形,所獲得的輸出平滑且低次諧波少。按一定的規則對各脈衝的寬度進行調製,即可改變逆變電路輸出電壓的大小,也可改變輸出頻率。如果把上述脈衝序列用同樣數量的等幅而不等寬的矩形脈衝序列代替,使矩形脈衝的中點和相應正弦等分的中點重合,且使矩形脈衝和相應正弦部分面積(即衝量)相等,就得到一組脈衝序列,這就是PWM波形。可以看出,各脈衝寬度是按正弦規律變化的。根據衝量相等效果相同的原理,PWM波形和正弦半波是等效的。對於正弦的負半周,也可以用同樣的方法得到PWM波形。
  • 你足夠了解pwm嗎?搞清楚pwm控制技術
    pwm是現代重要技術之一,在各種電子設備中,均存在pwm的身影。在往期文章中,小編對pwm原理、pwm佔空比、pwm頻率均有所介紹。為增進大家對pwm的認識,本文將對pwm控制技術予以闡述。如果你對pwm抑或本文即將介紹的內容具有興趣,不妨繼續往下閱讀哦。
  • stm32單片機中使用GPIO口模擬PWM輸出解析
    分類:硬體/嵌入開發驅動開發/核心開發   每個GPIO埠可通過軟體分別配置成輸入或輸出。Maxim的GPIO產品線包括8埠至28埠的GPIO,提供推挽式輸出或漏極開路輸出。提供微型3mm x 3mm QFN封裝。
  • 濾波器對PWM變頻調速電動機端子上電壓波形的影響分析
    但是,變頻器輸出的具有陡上升沿或下降沿的脈衝電壓卻在電動機接線端子及繞組上產生了過電壓,造成電動機繞組絕緣的過早破壞。試驗研究表明,很高的電壓上升率(dv/dt)在電動機繞組上產生極不均勻的電壓分布,且隨著變頻器與電動機之間電纜(線)長度的增加,在電動機接線端子上產生高頻振蕩的過電壓,當電纜長度超過某一臨界值後,電動機端子上過電壓的幅值達到變頻器輸出電壓的2倍,長時間重複性的電壓應力的作用將導致電動機繞組匝間絕緣的過早破壞。
  • 基於Cortex-A9的pwm詳解——PWM信號輸出輸出和作用
    一、什麼是PWMPWM,英文名Pulse Width Modulation,是脈衝寬度調製縮寫,它是通過對一系列脈衝的寬度進行調製,等效出所需要的波形(包含形狀以及幅值),對模擬信號電平進行數字編碼,也就是說通過調節佔空比的變化來調節信號、能量等的變化,佔空比就是指在一個周期內,信號處於高電平的時間佔據整個信號周期的百分比
  • 脈寬調製原理- -PWM原理
    脈寬調製技術的輸出波形是一系列大小相等的脈衝,用於替代所需要的波形,以正弦波為例,也就是使這一系列脈衝的等值電壓為正弦波,並且輸出脈衝儘量平滑且具有較少的低次諧波。根據不同的需求,可以對各脈衝的寬度進行相應的調整,以改變輸出電壓或輸出頻率等值,進而達到對模擬電路的控制。
  • 新手向,STM32輸入輸出總結
    因此,在這裡做一個總結:推輓輸出:可以輸出高,低電平,連接數字器件; 推挽結構一般是指兩個三極體分別受兩互補信號的控制,總是在一個三極體導通的時候另一個截止。高低電平由IC的電源低定。推挽電路是兩個參數相同的三極體或MOSFET,以推挽方式存在於電路中,各負責正負半周的波形放大任務,電路工作時,兩隻對稱的功率開關管每次只有一個導通,所以導通損耗小、效率高。
  • PWM原理
    PWM就是脈衝寬度調製,也就是佔空比可變的脈衝波形。該技術以該結論為理論基礎,對半導體開關器件的導通和關斷進行控制,使輸出端得到一系列幅值相等而寬度不相等的脈衝,用這些脈衝來代替正弦波或其他所需要的波形。按一定的規則對各脈衝的寬度進行調製,既可改變逆變電路輸出電壓的大小,也可改變輸出頻率。
  • STM32F4——定時器原理及應用中斷、輸入捕獲、PWM輸出
    七、輸出比較 對輸出比較功能的描述:在CCRx寄存器中設定相應的值,計數器中的值與該值做比較,根據比較結果和相應的極性和有效性設定,確定輸出電壓的高低電平狀態。和輸入捕獲相同,拿出其中一個通道進行分析,其中一個通道的框圖如下: 通道信號經過輸出模式控制器,做出模式、極性以及開關等設置後獲得需要的輸出信號。CCRx:捕獲比較寄存器,用於設定比較值。CCMRx:設置PWM的模式。CCER:CC1P位設置極性有效性。CCER:CC1E位輸出使能設定。
  • MSP430F149 TimerA 輸出pwm信號 C程序代碼
    MSP430F149 TimerA 輸出pwm信號 注意其中寄存器設置與pwm信號輸出引腳的對應關係 P1.2-TA1,TACCR1
  • STM32F4DiscoveryRTC
    STM32F4DiscoveryRTC調試手記實現功能:配置RTC實現計時功能,並通過喚醒中斷輸出當前時間。,stm32f4xx_rcc.c, stm32f4xx_rtc.c中的函數,下面對部分函數進行簡單的介紹:stm32f4xx_pwr.c:PWR_BackupAccessCmd:通過位帶實現設置PWR_CR[8] DBP,該位用於使能/失能RTC、RTC備份寄存器及備份SRAM的訪問。
  • 基於SHE-PWM控制的DC-AC電源
    輸出波形好,性能穩定可靠。並通過試驗得到驗證。輸出波形好,性能穩定可靠。並通過試驗得到驗證。2 逆變器電路的構成及工作原理2.1 系統的結構及框圖整個系統由以下幾個部分構成:主電路、PWM產生電路、驅動電路和反饋電路幾部分組成。
  • 小用stm32f4-CAN控制器(使用庫函數)
    nr");  while(1);}下面是CAN_Config函數首先需要配置使用的GPIO的復用功能,然後配置CAN控制器的收發模式以及過濾器,並打開接收中斷。配置過程可以參照STM32F4的函數庫文件stm32f4xx_can.c中前面注釋中的介紹「How to use this 。。。」
  • STM32的GPIO配置不同輸出速度會有什麼影響?
    置頂/星標公眾號,不錯過每一條消息今天有人問:GPIO配置不同輸出速度會有什麼影響不管標準外設庫,還是STM32CubeMX配置GPIO輸出引腳,都會有速度GPIO_InitStruct.Speed這個選項。
  • 正點原子-戰艦V3第十四章 PWM 輸出實驗
    總共可以配置成 7 種模式,我們使用的是 PWM 模式,所以這 3 位必須設置為 110/111。這兩種 PWM 模式的區別就是輸出電平的極性相反。另外 CCxS 用於設置通道的方向(輸入/輸出)默認設置為 0,就是設置通道作為輸出使用。
  • STM32的GPIO輸入輸出模式配置
    最近在看數據手冊的時候,發現STM32的GPIO輸入輸出模式的配置種類有8種之多(輸入和輸入各4種):(1)GPIO_Mode_AIN模擬輸入(2)GPIO_Mode_IN_FLOATING浮空輸入(3)GPIO_Mode_IPD下拉輸入(4)GPIO_Mode_IPU
  • 基於雙PWM控制永磁直驅風電變流器的研究
    永磁直驅風電機組併網變流器在國內的研究還時間不長,本文對永磁直驅風電機組雙pwm控制併網變流器的原理、拓撲結構、控制策略進行了研究,並進行搭建試驗平臺進行了相應的試驗,達到了預定的效果。2 雙pwm變流器系統拓撲原理  本文採用的永磁直驅雙pwm風電變流器的拓撲結構如下:  如圖1所示,電機側變流器採用三相igbt橋,通過pwm控制實現整流,電網側變流器也採用三相igbt橋,通過pwm控制實現逆變,兩個變流器中間直流母線加電容器作為直流支撐,這一拓撲結構解決了採用二極體整流橋具有的非線性特性、導致整流器輸入側電流波形畸變的缺點