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

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

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

前言

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

結構略講

? 輸出比較可以通過比較CNT與CCR寄存器值的關系,來對輸出電平進行置1、置0或翻轉的操作,用于輸出一定頻率和占空比的PWM波形。就是上面的這句話。它可以用于實現(xiàn)電機控速、舵機控制、LED呼吸燈等應用。

STM32TIM定時器PWM輸出比較(適用于通用,高級定時器),stm32,嵌入式硬件,單片機

想了一下結構還是要配圖進行講解,PWM輸出有多種模式,這里我用的最常用的?PWM模式。我們需要配置我上面標的紅黃藍,這三個部分的結構,當然我會對PWM模式進行分類更好的讓我們理解,如以下,按照不同功能有一些變動。

(1) 定時器用到的 GPIO 初始化
(2) 定時器時基結構體 TIM_TimeBaseInitTypeDef 初始化
(3) 定時器輸出比較結構體 TIM_OCInitTypeDef 初始化
(4) 定時器剎車和死區(qū)結構體 TIM_BDTRInitTypeDef 初始化

1.單路輸出比較

顧名思義就是一個通道輸出PWM方波。按照下面的流程

(1) 定時器用到的 GPIO 初始化
  GPIO_InitTypeDef GPIO_InitStructure; 
  RCC_APBXPeriphClockCmd(RCC_APB2Periph_GPIOX, ENABLE);
//上面X的地方選擇自己要求的定時器端口和總線
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_X;
//上面X的地方選擇自己要求的端口
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOX, &GPIO_InitStructure);
//X同上
	
	
(2) 定時器時基結構體 TIM_TimeBaseInitTypeDef 初始化
    GENERAL_TIM_APBxClock_FUN(GENERAL_TIM_CLK,ENABLE);
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	// 自動重裝載寄存器的值,累計TIM_Period+1個頻率后產生一個更新或者中斷
	TIM_TimeBaseStructure.TIM_Period=a+1;	
	// 驅動CNT計數器的時鐘 = Fck_int/(psc+1)
	TIM_TimeBaseStructure.TIM_Prescaler= b+1;	
	// 時鐘分頻因子 ,配置死區(qū)時間時需要用到
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;		
	// 計數器計數模式,設置為向上計數
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;		
	// 重復計數器的值,沒用到不用管
	TIM_TimeBaseStructure.TIM_RepetitionCounter=0;	
	// 初始化定時器
	TIM_TimeBaseInit(GENERAL_TIM, &TIM_TimeBaseStructure);
(3) 定時器輸出比較結構體 TIM_OCInitTypeDef 初始化
前置知識? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
STM32TIM定時器PWM輸出比較(適用于通用,高級定時器),stm32,嵌入式硬件,單片機
TIM_OCInitTypeDef  TIM_OCInitStructure;
	// 配置為PWM模式1
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	// 輸出使能
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	//我上面是向上計數輸出所以CNT<CCR時有效配置此時輸出為高電平	
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

	TIM_OCInitStructure.TIM_Pulse = c ;
	TIM_OC1Init(TIMX, &TIM_OCInitStructure);//選擇通道1并且把上述參數傳遞進去。
	TIM_OC1PreloadConfig(TIMX, TIM_OCPreload_Enable);

? ? ? ? ? ? ? ? ? ? ? ? ??

注意我上面有a,b,c三個值選擇她們我們來配置PWM的周期和占空比
PWM頻率:?? ?Freq = CK_PSC(一般為72)?/ (b?+ 1) / (a?+ 1)
PWM占空比:?? ?Duty = c/ (a?+ 1)
PWM分辨率:?? ?Reso = 1 / (a+ 1)

2兩路互補輸出帶死區(qū)時間

這部分和單路有很多相同部分前期準備工作

STM32TIM定時器PWM輸出比較(適用于通用,高級定時器),stm32,嵌入式硬件,單片機

我們可以看到上面比如PA8和PB13互為互補所以它們可以用來做互補輸出。就是比上面多了一部分,和改了一點

STM32TIM定時器PWM輸出比較(適用于通用,高級定時器),stm32,嵌入式硬件,單片機

(1) 定時器用到的 GPIO 初始化

 GPIO_InitTypeDef GPIO_InitStructure;

  // 輸出比較通道 GPIO 初始化
	RCC_APB2PeriphClockCmd(, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(ADVANCE_TIM_CH1_PORT, &GPIO_InitStructure);

  // 輸出比較通道互補通道 GPIO 初始化
	RCC_APB2PeriphClockCmd(, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(ADVANCE_TIM_CH1N_PORT, &GPIO_InitStructure);

  // 輸出比較通道剎車通道 GPIO 初始化
	RCC_APB2PeriphClockCmd(, ENABLE);
  GPIO_InitStructure.GPIO_Pin = ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(ADVANCE_TIM_BKIN_PORT, &GPIO_InitStructure);
	// BKIN引腳默認先輸出低電平
	GPIO_ResetBits(,);	
}

(2) 定時器時基結構體 TIM_TimeBaseInitTypeDef 初始化

這里同上不重復寫

(3) 定時器輸出比較結構體TIM_OCInitTypeDef 初始化

TIM_OCInitTypeDef  TIM_OCInitStructure;
	// 配置為PWM模式1
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	// 輸出使能
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	// 互補輸出使能
	TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; 
	// 設置占空比大小
	TIM_OCInitStructure.TIM_Pulse =;
	// 輸出通道電平極性配置
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	// 互補輸出通道電平極性配置
	TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
	// 輸出通道空閑電平極性配置
	TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
	// 互補輸出通道空閑電平極性配置
	TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
	TIM_OC1Init(, &TIM_OCInitStructure);
	TIM_OC1PreloadConfig, TIM_OCPreload_Enable);

(4) 定時器剎車和死區(qū)結構體 TIM_BDTRInitTypeDef 初始化

// 有關剎車和死區(qū)結構體的成員具體可參考BDTR寄存器的描述
	TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
  TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
  TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
  TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;
	// 輸出比較信號死區(qū)時間配置,具體如何計算可參考 BDTR:UTG[7:0]的描述
	// 這里配置的死區(qū)時間為152ns
  TIM_BDTRInitStructure.TIM_DeadTime = 11;
  TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable;
	// 當BKIN引腳檢測到高電平的時候,輸出比較信號被禁止,就好像是剎車一樣
  TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
  TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
  TIM_BDTRConfig(, &TIM_BDTRInitStructure);
	
	// 使能計數器
	TIM_Cmd(, ENABLE);	
	// 主輸出使能,當使用的是通用定時器時,這句不需要
	TIM_CtrlPWMOutputs(, ENABLE);

TIM_OSSRState:輸出空閑狀態(tài)選擇,用于設置當定時器處于空閑狀態(tài)時,是否保持輸出的最后狀態(tài),還是強制輸出為預設的空閑狀態(tài)。它設定BDTR寄存器的OSSR位的值。
TIM_OSSIState:輸出空閑狀態(tài)使能,用于設置當定時器處于空閑狀態(tài)時,是否關閉輸出的空閑狀態(tài)選擇功能,以節(jié)省功耗。它設定BDTR寄存器的OSSI位的值。
TIM_LOCKLevel:鎖定配置,用于設置定時器的鎖定級別,防止意外修改定時器的配置。它設定BDTR寄存器的LOCK [1:0]位的值。
TIM_DeadTime:死區(qū)時間,用于設置定時器的死區(qū)發(fā)生器的延時時間,防止輸出通道和互補輸出通道同時有效,造成短路。它設定BDTR寄存器的DTG [7:0]位的值。
TIM_Break:剎車功能使能,用于設置是否啟用定時器的剎車功能,當剎車輸入信號有效時,關閉定時器的輸出。它設定BDTR寄存器的BKE位的值。
TIM_BreakPolarity:剎車輸入極性,用于設置定時器的剎車輸入信號的有效電平是高還是低。它設定BDTR寄存器的BKP位的值。
TIM_AutomaticOutput:自動輸出使能,用于設置是否啟用定時器的自動輸出功能,當定時器處于空閑狀態(tài)時,自動恢復輸出。它設定BDTR寄存器的AOE位的值。
這部分確實比較難,可以以后慢慢理解

?結語:

??在本文中,我們介紹了STM32TIM定時器輸出比較功能的原理和應用,包括輸出比較的電路結構、輸出模式的選擇、PWM波形的產生和計算。文章來源地址http://www.zghlxwxcb.cn/news/detail-824346.html

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

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

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

相關文章

  • STM32F4使用高級定時器(TIM1和TIM8)輸出PWM問題

    STM32F4使用高級定時器(TIM1和TIM8)輸出PWM時要使用TIM_CtrlPWMOutputs使能PWM輸出,否則不會輸出PWM波形,這一點是和通用定時器輸出PWM不一樣的地方,通用定時器是不用配置TIM_CtrlPWMOutputs函數的。、

    2024年02月15日
    瀏覽(30)
  • 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)
  • STM32F105RBT6 使用定時器TIM3輸出PWM波

    STM32F105RBT6 使用定時器TIM3輸出PWM波

    2.1 相關函數 RCC_APB1PeriphClockCmd、GPIO_Init、TIM_TimeBaseInit、TIM_OC4Init、TIM_OC4PreloadConfig、NVIC_Init、TIM_ITConfig、TIM_Cmd、 3.1 在啟動文件里面找到TIM3 對應的中斷入口函數,也就是中斷服務函數 TIM3_IRQHandler 4.1 中斷服務函數需要快速地執(zhí)行完畢。中斷服務函數應該避免執(zhí)行太多的計算復

    2024年02月08日
    瀏覽(32)
  • 【STM32學習】——定時器輸出比較功能&PWM脈寬調制&通用/高級定時器輸出比較通道&舵機/直流電機簡介&PWM驅動呼吸燈/舵機/直流電機代碼實操

    聲明:學習筆記根據b站江科大自化協(xié)stm32入門教程編輯,僅供學習交流使用!

    2024年02月03日
    瀏覽(32)
  • STM32中TIM定時器定時功能詳解(適用基本,通用,高級定時器)

    STM32中TIM定時器定時功能詳解(適用基本,通用,高級定時器)

    定時器有高級定時器、通用定時器、基本定時器三種類型。具體功能如下。 上面是每種定時器所具有的功能。 我們可以看到每種定時器都有一個定時功能,(可能是名字的由來吧)。當然,每個定時器都可以來使用定時功能,但是我們往往在基本定時器和通用定時器上面使用

    2024年01月19日
    瀏覽(31)
  • STM32CubeMX教程6 TIM 通用定時器 - 生成PWM波

    開發(fā)板(STM32F407G-DISC1) STM32CubeMX軟件(Version 6.10.0) keil μVision5 IDE(MDK-Arm) ST-LINK/V2驅動 邏輯分析儀nanoDLA 使用STM32CubeMX軟件配置STM32F407 通用定時器生成可變占空比PWM波形,并將其輸出到LED燈引腳實現(xiàn)呼吸燈效果 STM32F407有10個通用定時器,其中TIM2、TIM3、TIM4和TIM5有4個捕獲

    2024年02月03日
    瀏覽(23)
  • 定時器詳解 -- 定時器中斷、PWM輸出 --stm32

    定時器詳解 -- 定時器中斷、PWM輸出 --stm32

    STM32F103系列芯片擁有多種定時器,包括基本定時器、通用定時器和高級定時器,每種定時器都具有一些特定的功能。 向上計數:計數器從0計數到自動重裝載值(ARR),然后重新從0開始計數并且產生一個計數器溢出事件。 向下計數:計數器從自動重裝載值(ARR)開始向下計數

    2024年02月11日
    瀏覽(24)
  • STM32定時器輸出PWM脈沖

    STM32定時器輸出PWM脈沖

    一、什么是PWM脈沖? PWM (Pulse Width Modulation) 脈沖寬度調制,通常應用于慣性系統(tǒng)中,( 不是不能即停的設備,因為如果設備不具有關心,那么運動是斷斷續(xù)續(xù)的,不具有連續(xù)性 ),通過脈寬調節(jié)輸出不同的波形作用域受控對象。 二、 PWM中三個重要的參數 1.頻率=1/Ts ;這個很

    2024年02月15日
    瀏覽(24)
  • 【單片機】STM32單片機,定時器,多路PWM,TIM1、TIM2、TIM3、TIM4,STM32F103

    【單片機】STM32單片機,定時器,多路PWM,TIM1、TIM2、TIM3、TIM4,STM32F103

    下圖是定時器相關引腳: 在《STM32中文參考手冊V10.pdf》有寫: TIM1 的PWM是帶互補輸出的,較為高級和復雜,有興趣可以參考其他介紹文章,這里的代碼讓7個引腳輸出PWM。 調用: 這里沒有重映射,注意不能把PA9 PA10 初始化成串口去了。 timer.c timer.h 調用: 這里沒有重映射。

    2024年02月11日
    瀏覽(26)
  • STM32F1定時器-PWM輸出

    STM32F1定時器-PWM輸出

    STM32 PWM工作過程 ARR寄存器決定PWM周期,CCR寄存器決定占空比 通道1為例 的PWM輸出電路圖 CCR1:捕獲比較(值)寄存器(x =1,2,3,4):設置比較值。 CCMR1:OC1M[2:0]位:對于PWM方式下,用于設置PWM模式1【110】 或者PWM模式2【111】 CCER:CC1P位:輸入/捕獲1輸出極性。0:高電平有效,1:低電平

    2024年02月09日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包