国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32(7)-定時器輸出PWM的原理分析

這篇具有很好參考價值的文章主要介紹了STM32(7)-定時器輸出PWM的原理分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

概念+代碼


一、輸出比較

OC(Output Compare)輸出比較
輸出比較可以通過比較CNT與CCR寄存器值的關系,來對輸出電平進行置1、置0或翻轉的操作,用于輸出一定頻率和占空比的PWM波形
每個高級定時器和通用定時器都擁有4個輸出比較通道
高級定時器的前3個通道額外擁有死區(qū)生成和互補輸出的功能

二、PWM原理

PWM(Pulse Width Modulation)脈沖寬度調制
在具有慣性的系統中,可以通過對一系列脈沖的寬度進行調制,來等效地獲得所需要的模擬參量,常應用于電機控速等領域
PWM參數:
頻率 = 1 / TS
占空比 = TON / TS(高電平占總時間的比率),如占空比為50%,高電平=5V,低電平=0V,則模擬電壓為2.5V.
分辨率 = 占空比變化步距,即精度。
stm32 pwm,stm32,單片機,嵌入式硬件
PWM基本結構:
stm32 pwm,stm32,單片機,嵌入式硬件
stm32 pwm,stm32,單片機,嵌入式硬件
當CNT計數小于CCR時,置高電平,當CNT大于CCR時,置低電平,當CNT=ARR時觸發(fā)事件,計數值歸零,又開始新的一輪周期,這樣就可以不斷的輸出PWM信號。因此,可以看出,CCR值的設置與占空比密切相關。
PWM頻率: Freq = CK_PSC / (PSC + 1) / (ARR + 1)
CK_PSC是預分頻頻率,一般是系統頻率。PSC是分頻系數,ARR是自動重裝載寄存器最大計數值。
PWM占空比: Duty = CCR / (ARR + 1)
CCR是輸出比較輸出PWM的一個限定比較值。
PWM分辨率: Reso = 1 / (ARR + 1)

三、輸出PWM

以正點原子PWM實驗為例:使用TIM3的CH2通道,在PB5端口輸出PWM波。

1.PWM初始化

void TIM3_PWM_Init(u16 arr,u16 psc)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);    //使能定時器3時鐘
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外設和AFIO復用功能模塊時鐘
    GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH2->PB5

   //設置該引腳為復用輸出功能,輸出TIM3 CH2的PWM脈沖波形    GPIOB.5
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復用推挽輸出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
   //初始化TIM3
    //溢出時間time=(arr+1)*(psc+1)/144000000
    TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
    TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置用來作為TIMx時鐘頻率除數的預分頻值
    TIM_TimeBaseStructure.TIM_ClockDivision = 1; //設置時鐘分割:TDTS = Tck_tim
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計數模式
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位

    //初始化TIM3 Channel2 PWM模式
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈沖寬度調制模式2
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
    TIM_OCInitStructure.TIM_Pulse = 50;
    TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根據T指定的參數初始化外設TIM3 OC2

    TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的預裝載寄存器
    TIM_Cmd(TIM3, ENABLE);  //使能TIM3
}

這里最重要的是:
1.該函數的參數為 arr 和 psc,分別表示自動重載寄存器的值和預分頻系數。根據這兩個參數,可以計算出 PWM 的頻率和占空比。

2.在函數中,首先使能了定時器 TIM3 和 GPIOB 外設的時鐘,以及 GPIO 的復用功能模塊時鐘。然后,通過 GPIO_PinRemapConfig 函數將 TIM3_CH2 信號映射到 GPIOB.5 引腳上。
這里有一個問題:為什么要配置AFIO復用功能模塊時鐘?如下圖:
stm32 pwm,stm32,單片機,嵌入式硬件
可以看到:PB5的默認復用功能是I2C1_SMBA/ SPI3_MOSI,I2S3_SD,而其重定義功能才是TIM3_CH2,所以不能簡單直接的復用它,必須要配置重映射。

3.通過 TIM_OCInitTypeDef 結構體對 TIM3 的通道 2 進行初始化,選擇定時器模式為 PWM2,使能比較輸出,設置輸出極性為高電平,設置占空比為 50%。
最后,通過 TIM_OC2PreloadConfig 函數使能 TIM3 在 CCR2 上的預裝載寄存器,并通過TIM_Cmd 函數使能 TIM3。

2.輸出指定頻率PWM波

   TIM3_Int_Init(5999,0);
   //TIM3_PWM_Init(5999,0);//不分頻。PWM 頻率=96000/(5999+1)=16KHz

參考PWM頻率: Freq = CK_PSC / (PSC + 1) / (ARR + 1),這里我的芯片系統頻率是96MHz,對應CK_PSC,ARR是計數值,PSC是預分頻值,代入公式,得:頻率F=16000Hz=16KHz。
因此,這個代碼輸出了一個頻率固定為16KHz的PWM波。

3.輸出占空比可變的PWM波

TIM3_Int_Init(5999,0);
u16 pulse=400;
TIM_SetCompare2(TIM3,pulse);

對于定時器 TIM3,CCR2 寄存器的取值范圍是 0 到 ARR,即比較寄存器的值不能大于自動重載寄存器的值。因此,在設置占空比時,輸入的占空比值需要通過計算轉換為相應的比較寄存器的值。也就是說,pulse的值只能在0-5999之間設置,并且注意,這里調用的函數是TIM_SetCompare2()函數,是比較寄存器CCR2對應通道2,如果是ch3,則要調用TIM_SetCompare3()函數。如此,便實現了修改PWM波的占空比。文章來源地址http://www.zghlxwxcb.cn/news/detail-766633.html

到了這里,關于STM32(7)-定時器輸出PWM的原理分析的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • STM32高級定時器輸出指定數量PWM(STM32CubeMx配置)

    STM32高級定時器輸出指定數量PWM(STM32CubeMx配置)

    高級定時器中有一個重復計數器,本實驗輸出指定個數PWM就是利用了重復計數器的特性,先來看看重復計數器的特性是什么: 計數器每次上溢或下溢都能使重復計數器減1,減到0時,再發(fā)生一次溢出就會產生更新事件 這是什么意思呢,這里舉個例子比如說我設定重復計數器的

    2024年02月02日
    瀏覽(23)
  • STM32TIM定時器PWM輸出比較(適用于通用,高級定時器)

    STM32TIM定時器PWM輸出比較(適用于通用,高級定時器)

    在定時器中我們最常用的功能就是輸出PWM,大多是用在電機控制方面,目前網絡上相關資料也有很多,但是,很多不利于我們“現搜現用”我這里不是說我寫的有多好,而是你搜索到此類文章時大部分是急于解決目前的問題,一段相關代碼和講解就行,當然不是學習背后的原

    2024年01月25日
    瀏覽(22)
  • STM32使用CubeMx配置定時器輸出PWM

    STM32使用CubeMx配置定時器輸出PWM

    ????????項目中經常使用到STM32來輸出PWM,每次配置過后過不了多久就會忘記,稍微需要對配置做出修改時都要翻很久的手冊,所以決定結合實例把PWM配置的詳細步驟記錄下來,這樣在下次配置時可以很快的撿起來。 ????????本文檔的行文結構如下,首先,說明實際需

    2024年02月03日
    瀏覽(27)
  • STM32使用高級定時器輸出互補pwm波

    STM32使用高級定時器輸出互補pwm波

    最近做的一個項目用到stm32,網上查了很多資料,也踩了很多坑,這里記錄一下配置的步驟和說明 硬件使用的是stm32h750vbt6; 軟件用到了stm32cubemx和keil5; 打開Debug模式方便調試,可以忽略,不影響代碼運行 在用cube配置時鐘源時,有下面三個選項 Disable(禁用) BYPASS Clock Sou

    2024年02月16日
    瀏覽(20)
  • STM32筆記——定時器輸出比較功能(產生PWM波)

    STM32筆記——定時器輸出比較功能(產生PWM波)

    目錄 一、概述 二、PWM簡單介紹 ?三、通用定時器輸出比較 3.1 輸出比較簡介 3.2 輸出比較通道 3.3 產生PWM的過程 四、實驗硬件介紹及PWM模塊程序 4.1 舵機簡介 4.2 直流電機及驅動芯片TB6612 ?4.3 PWM模塊驅動程序 ????????主要介紹通用定時器輸出比較功能,在GPIO口輸出PWM來控

    2024年02月13日
    瀏覽(36)
  • stm32定時器輸出pwm&IO口模擬pwm——呼吸燈

    stm32定時器輸出pwm&IO口模擬pwm——呼吸燈

    什么是pwm波?pwm就是脈沖寬度調制,就是占空比可變的脈沖波形,通過改變占空比,輸出不同的pwm波,就能實現許多有趣的功能,比如說我們生活中常見的呼吸燈就是通過這樣實現的。接下來我們就以呼吸燈為例,學習stm32通過定時器輸出pwm波和io口模擬輸出pwm波。 控制方式就

    2024年01月18日
    瀏覽(21)
  • STM32實戰(zhàn)-高級定時器帶死區(qū)的互補PWM輸出

    STM32實戰(zhàn)-高級定時器帶死區(qū)的互補PWM輸出

    前言: 平時我們設計點擊驅動電路時,一般會采用npn和pnp三極管,來控制電機的導通和關閉,但是三級管內部自帶電容,斷電后不會立馬斷掉,會經過很小的一段時間才會放電完畢,這時候要留有死區(qū)給電容放電,這就有了互補pwm波。 ? 同時,當電機出現故障,如果利用軟

    2024年02月08日
    瀏覽(21)
  • HAL庫STM32常用外設教程(一)—— 定時器 輸出PWM

    HAL庫STM32常用外設教程(一)—— 定時器 輸出PWM

    本篇文章為個人參考總結所用,如果錯誤還望指出。 涉及的知識: 1、STM32CubeMx的部分使用 2、PWM原理及常用概念 3、用單片機生成一定頻率的PWM 用到的軟件及單片機: 1、STM32CubeMx 2、IDE: MDK-Keil軟件 3、芯片:STM32F407ZGT6 4、開發(fā)板:正點原子探索者 注:不同型號的單片機實現

    2024年02月02日
    瀏覽(16)
  • stm32f407單一定時器輸出四路PWM波

    stm32f407單一定時器輸出四路PWM波

    最近在玩遙控器多路pwm捕獲,順帶著寫了一下pwm波輸出的代碼,下面我來說一下407板子輸出pwm波的具體配置及函數說明。 輸出效果如下。PS:因為我的分析儀只能接一個,就只看一路的輸出 1、開啟時鐘及定時器引腳復用 在輸出PWM波時要開啟定時器時鐘及GPIO時鐘,本例以TI

    2024年02月12日
    瀏覽(22)
  • 定時器(PWM輸出)觸發(fā)ADC采樣(DMA)——STM32CubeMX

    定時器(PWM輸出)觸發(fā)ADC采樣(DMA)——STM32CubeMX

    我用的單片機是STM32F103CBTX 定時器:使用PWM輸出的模式 ADC:使用DMA的模式 (在不使用DMA的情況下,定時器控制ADC進行數據采集只能是單通道!如果開啟了多通道,讀取到的ADC采集值只會是最后一個通道的值!所以,要想使用定時器控制ADC采集 多通道 , 必須使用DMA !) ?看

    2024年04月10日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包