在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

高級定時器PWM輸入模式的配置方法

中科芯MCU ? 來源:中科芯MCU ? 作者:中科芯MCU ? 2024-11-08 16:48 ? 次閱讀

MCU微課堂

CKS32F107xx TIM(三)

第四十八期 2024.11.08

PWM輸入捕獲

上節課我們介紹了高級定時器互補PWM輸出的配置方法,這節課我們將向大家介紹高級定時器的另一個常見應用——PWM輸入模式。在本節課中,我們將先圍繞輸入捕獲模式展開,并重點描述PWM輸入模式和涉及的寄存器,最后通過一個實驗例程去介紹PWM輸入模式的配置方法。

輸入捕獲模式簡介

1、普通輸入模式

除基本定時器外,其余定時器的部分通道都可以對輸入信號的上升沿、下降沿或者雙邊沿進行捕獲,并且計數器CNT的值會被鎖存到捕獲/比較寄存器CCR中。當我們需要同時捕獲PWM波的頻率和占空比時,僅需要測出一個周期中高電平和低電平持續的時間即可。我們可嘗試如下步驟:首先將定時器的某一通道初始設置為上升沿捕獲,當發生第一次捕獲到上升沿的中斷,以此中斷時刻作為一個起點,讀取CCR中值為Value1,此時將捕獲模式設置為下降沿捕獲,在發生第二次中斷的時候,捕獲到了下降沿,讀取CCR中值為Value2,那么Value2和Value1之間的差值,就是一個周期中高電平持續的時間,然后我們在中斷中又將捕獲的方式設置為上升沿捕獲,那么在第三次產生中斷的時候,讀取CCR中值為Value3,那么Value3和Value2之間的差值就是一個周期中低電平的時間。至此,PWM波的頻率可由Value3和Value1之間的差值計算出,正占空比則可通過高電平占整個周期的比值獲得。如下圖1所示:

309092ea-9dab-11ef-93f3-92fbcf53809c.png

圖1 普通輸入捕獲概覽圖

2、PWM輸入模式

PWM輸入模式是普通輸入模式的一種特例,以輸入通道TI1為例,PWM信號進入該通道后,信號被分成TI1FP1和TI1FP2兩路,最終分別映射到了IC1和IC2捕獲通道,其中一個捕獲上升沿,另一個捕獲下降沿。這樣用戶可以在中斷中去讀上升沿和下降沿對應寄存器中的計數,從而得出周期和占空比。并且用戶在設計之初,需要先選定哪一路為觸發信號以及觸發極性,一旦選定某一路為觸發信號則對應的即為周期,另一路則對應為占空比,兩路捕獲極性也是相反的,并且因為是PWM輸入捕獲的緣故,當其中一路配置完成,另一路由硬件自動配置,無需軟件來配置。圖2為PWM輸入模式時序圖。

30a7497c-9dab-11ef-93f3-92fbcf53809c.png

圖2 PWM輸入模式時序圖

其中,IC1捕獲通道計算兩次都是上升沿的時間,即周期T;而IC2通道則計算一次下降沿和之前上升沿之差,這樣得到高電平時長,從而可以求得周期T和占空比。需要注意的是,PWM輸入模式需要占用兩個捕獲寄存器,且只有TI1FP1和TI2FP2連接到了從模式控制器(使用PWM輸入捕獲時,需要配置從模式控制器為復位模式),所以只能使用定時器的通道1或通道2。

寄存器和輸入捕獲結構體概述

1、捕獲/比較寄存器CCMR

關于CCMR寄存器,上節課我們介紹了輸出比較模式,這節課我們來介紹下輸入捕獲模式,該寄存器的各位描述圖如下:

30eb9f96-9dab-11ef-93f3-92fbcf53809c.png

圖3 CCMR1寄存器各位描述圖

該16位寄存器CCMR的下層對應輸入捕獲(上層對應輸出比較),其中CCMR1用于捕獲通道1和2的控制,CCMR2用于捕獲通道3和4的控制。下圖為低8位詳細描述圖,用于捕獲通道1。

310703c6-9dab-11ef-93f3-92fbcf53809c.png

圖4 CCMR1寄存器低7位描述圖

參數CC1S,用于輸入捕獲/輸出比較通道的引腳選擇,若我們設置CCIS[1:0] = 01,表明CC1通道(對應定時器的通道1)被配置為輸入,IC1映射在TI1上。

參數IC1PSC,配置為00時,表明每1個邊沿觸發1次捕獲。

參數IC1F,用來設置TI1輸入采樣頻率和數字濾波器長度,本課中我們不做濾波處理。

2、捕獲/比較使能寄存器CCER

在本課中我們僅用到低2位CC1E和CC1P,由于我們需要在中斷中處理捕獲的數據,所以配置CC1E為1,CC1P配置為不反相,故設置為0。CCER低2位圖如下描述。

311d6026-9dab-11ef-93f3-92fbcf53809c.png

圖5 CCMR1寄存器低7位描述圖

3、輸入捕獲結構體TIM_ICInitTypeDef

可配合TIM_PWMIConfig函數完成定時器輸入通道各參數的初始化配置。輸入捕獲結構體的各參數定義如下:

typedef struct

{

uint16_t TIM_Channel;
uint16_t TIM_ICPolarity;
uint16_t TIM_ICSelection;
uint16_t TIM_ICPrescaler;
uint16_t TIM_ICFilter;

} TIM_ICInitTypeDef;

1)參數TIM_Channel:設定CCMRx寄存器CCxS位,用于捕獲通道ICx選擇。

2)參數TIM_ICPolarity:設定CCER寄存器CCxP位和CCxNP位,用于輸入捕獲邊沿觸發選擇。

3)參數TIM_ICSelection:設定CCRMx寄存器的CCxS[1:0]位,用于輸入通道選擇,輸入通道共有三個來源,分別為:TIM_ICSelection_DirectTI、TIM_ICSelection_IndirectTI或TIM_ICSelection_TRC。若為普通輸入模式,4個通道均能使用;若為PWM輸入模式,只能使用通道1和2。輸入通道和捕獲通道的映射關系詳見下圖。

312ec316-9dab-11ef-93f3-92fbcf53809c.png

圖6 輸入通道和捕獲通道的映射關系

4)參數TIM_ ICPrescaler:設定CCMRx寄存器的ICxPSC[1:0]位的值,用來設置輸入捕獲分頻系數,有1、2、4、8分頻可選。這里我們需要捕獲輸入信號的每個有效邊沿,故設置為1分頻即可。

5)參數TIM_ ICFilter:設定CCMRx寄存器ICxF[3:0]位,用于設置輸入捕獲濾波器。

本課中我們配置的示例代碼如下:

TIM_ICInitTypeDef TIM_ICInitStructure;

TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;

TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;

TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;

TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;

TIM_ICInitStructure.TIM_ICFilter = 0x0;

TIM_PWMIConfig(TIM1, &TIM_ICInitStructure);

上述代碼中,我們設置定時器的通道1為上升沿捕獲,且輸入通道1(TI1)與捕獲通道1(IC1)為直接映射,不分頻,不使用濾波器。

PWM模式輸入配置實驗

本實驗配置高級定時器的通道1,即PA8,用于捕獲信號發生器輸出PWM信號,最后通過串口調試助手打印捕獲到的PWM的頻率和占空比。主要的編程要點如下。

1、高級定時器引腳初始化

由于TIM1_CH1是連接在PA8上,這里需要開啟GPIOA時鐘,并配置引腳為浮空輸入,我們配置的代碼如下:

void TIM1_GPIO_Configuration(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

2、高級定時器中斷優先級設置

之前的課程中讓我們對中斷優先級已經有了深入了解,這里因為我們只有一個捕獲/比較中斷源,所以優先級隨便設置,我們配置的代碼如下:

void TIM1_NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

3、高級定時器PWM輸入模式配置

我們主要對時基和輸入捕獲結構體初始化,配置代碼如下:

void TIM1_Input_Capture_Mode_Configuration(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_ICInitTypeDef TIM_ICInitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

/* Time Base Configuration */

TIM_TimeBaseStructure.TIM_Period = 65535-1;

TIM_TimeBaseStructure.TIM_Prescaler = 72-1;

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

TIM_TimeBaseStructure.TIM_RepetitionCounter=0;

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

/* PWM Input Capture Configuration */

TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;

TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;

TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;

TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;

TIM_ICInitStructure.TIM_ICFilter = 0x0;

TIM_PWMIConfig(TIM1, &TIM_ICInitStructure);

TIM_SelectInputTrigger(TIM1, TIM_TS_TI1FP1);

TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Reset);

TIM_SelectMasterSlaveMode(TIM1,TIM_MasterSlaveMode_Enable);

TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE);

TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);

TIM_Cmd(TIM1, ENABLE);

}

從上述示例代碼來看,我們首先將TIM1_CH1的捕獲計數器設置為1us計數一次,重裝載值為65535,所以可以捕獲的時間精度為1us,最低可捕獲的頻率為15.3Hz。其次,我們選擇TIM1的通道1(TI1)作為PWM信號輸入,并選擇TI1FP1為觸發信號(輸入的信號被分為TI1FP1和TI1FP2),因此IC1捕獲PWM信號周期,IC2捕獲PWM信號占空比。而且由于PWM輸入模式下,當捕獲開始時,需要將CNT復位,所以我們需要配置定時器以從模式工作在復位模式下,最后使能捕獲中斷和高級定時器。

4、高級定時器中斷服務函數配置

在函數TIM1_CC_IRQHandler中,如果是第一個上升沿中斷,計數器CNT會被復位,鎖存到CCR1寄存器的值是0,CCR2寄存器的值也是0,無法計算頻率和占空比。當第二次上升沿到來的時候,CCR1和CCR2捕獲到的才是有效的值。其中CCR1對應的是周期,CCR2對應的是占空比。我們配置的代碼如下:

void TIM1_CC_IRQHandler(void)

{

TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);

IC1Value = TIM_GetCapture1(TIM1);

IC2Value = TIM_GetCapture2(TIM1);

if (IC1Value != 0)

{

DutyCycle = (float)((IC2Value+1) * 100) / (IC1Value+1);

Frequency = (72000000/((72-1)+1))/(float)(IC1Value+1);

printf("占空比:%0.2f%% 頻率:%0.2fHz ", DutyCycle, Frequency);

}

else

{

DutyCycle = 0;

Frequency = 0;

}

}

5、主函數配置

main函數就是對上述函數的調用,配置示例如下:

int main(void)

{

CKS_USART_Init();

printf("CKS Timer Input Capture Demo start running... ");

TIM1_GPIO_Configuration();

TIM1_NVIC_Configuration();

TIM1_Input_Capture_Mode_Configuration();

while(1){}

}

至此,我們配置已完成。

6、下載驗證

我們將編譯好的程序下載至CKS32F107xx開發板,信號發生器和PWM輸入引腳PA8通過杜邦線連接,USB轉TTL模塊分別與UART1—PA9和電腦相連,然后打開串口調試助手,查看打印信息。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17148

    瀏覽量

    351186
  • 寄存器
    +關注

    關注

    31

    文章

    5343

    瀏覽量

    120348
  • PWM
    PWM
    +關注

    關注

    114

    文章

    5186

    瀏覽量

    213919
  • 定時器
    +關注

    關注

    23

    文章

    3248

    瀏覽量

    114792
  • 捕獲模式
    +關注

    關注

    0

    文章

    2

    瀏覽量

    805

原文標題:MCU微課堂|CKS32F107xx TIM(三)

文章出處:【微信號:中科芯MCU,微信公眾號:中科芯MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    stm32定時器pwm模式輸入捕獲功能

    stm32定時器pwm模式輸入捕獲##stm32中的定時器,除了TIM6和TIM7,其他定時器
    發表于 08-18 07:41

    利用定時器配置PWM輸出

    實驗過程中的筆記 在持續更新中 只是一個簡化版本利用定時器1 2 3 4 配置PWM輸出高級定時器
    發表于 08-19 07:17

    STM32高級定時器模式該如何去配置

    STM32高級定時器的功能有哪些呢?STM32高級定時器模式該如何去配置呢?
    發表于 11-23 07:23

    定時器PWM輸入模式實現

    定時器PWM輸入模式:一路輸入信號被兩個IC捕獲,有TIM1和TIM2可以實現。此時定時器
    發表于 01-06 07:26

    通用定時器高級定時器PWM配置的區別

    高級定時器(TIM1和TIM8)相較于通用定時器,它的函數配置更多,一個都不能少,否則輸出不了PWM波,所以在此寫下通用
    發表于 01-06 08:28

    如何使用資源定時器高級定時器

    (SYSTICK)高級定時器11.實現功能控制PA8(TIM1CH1)PWM 輸出對應頻率至蜂鳴器引腳BUZ。2.初始化配置//////////////////////////////
    發表于 01-14 08:11

    STM32高級定時器-PWM簡單學習案例

    高級定時器與通用定時器比較類似,下面是一個TIM1 的PWM 程序,TIM1是STM32唯一的高級定時器
    發表于 04-21 14:47 ?4784次閱讀
    STM32<b class='flag-5'>高級</b><b class='flag-5'>定時器</b>-<b class='flag-5'>PWM</b>簡單學習案例

    stm32定時器輸入捕獲

    不同頻率、不同占空比的方波信號、PWM信號,同時做為輸入捕獲功能時,可以測量脈沖寬度、實現電容按鍵檢測等等。 一、輸入捕獲概念 輸入捕獲模式
    發表于 10-13 09:13 ?2.4w次閱讀
    stm32<b class='flag-5'>定時器</b><b class='flag-5'>輸入</b>捕獲

    如何利用stm32的高級定時器產生PWM

    用stm32的高級定時器TIM1和TIM8產生PWM,需要注意: 1.都有TIM1,但只有flash容量大于256K的大容量單片機才有TIM8 2.高級
    發表于 10-24 15:48 ?6635次閱讀
    如何利用stm32的<b class='flag-5'>高級</b><b class='flag-5'>定時器</b>產生<b class='flag-5'>PWM</b>

    通用定時器PWM輸入捕獲實驗

    通用定時器PWM輸入捕獲實驗(寄存版本)PWM輸入捕獲
    發表于 11-24 09:21 ?21次下載
    通用<b class='flag-5'>定時器</b>的<b class='flag-5'>PWM</b><b class='flag-5'>輸入</b>捕獲實驗

    STM32——高級定時器、通用定時器、基本定時器的區別

    STM32——高級定時器、通用定時器、基本定時器的區別
    發表于 11-26 15:21 ?110次下載
    STM32——<b class='flag-5'>高級</b><b class='flag-5'>定時器</b>、通用<b class='flag-5'>定時器</b>、基本<b class='flag-5'>定時器</b>的區別

    STM32-通用定時器-PWM輸出

    捕獲、輸出比較、PWM輸出、單脈沖模式輸出等。STM32的定時器除了TIM6和TIM7(基本定時器)之外,其他的定時器都可以產生
    發表于 11-26 15:36 ?23次下載
    STM32-通用<b class='flag-5'>定時器</b>-<b class='flag-5'>PWM</b>輸出

    STM32 TIM高級定時器死區時間的計算

    STM32 TIM高級定時器的互補PWM支持插入死區時間,本文將介紹如何計算以及配置正確的死區時間。
    發表于 12-31 19:27 ?27次下載
    STM32 TIM<b class='flag-5'>高級</b><b class='flag-5'>定時器</b>死區時間的計算

    STM32F103-定時器編碼模式高級定時器輸出互補的PWM信號

    STM32F103-定時器編碼模式高級定時器輸出互補的PWM信號剛使用STM32時使用
    發表于 01-14 12:53 ?11次下載
    STM32F103-<b class='flag-5'>定時器</b>編碼<b class='flag-5'>器</b><b class='flag-5'>模式</b>和<b class='flag-5'>高級</b><b class='flag-5'>定時器</b>輸出互補的<b class='flag-5'>PWM</b>信號

    高精度定時器高級控制定時器 PWM 封波后再恢復的區別

    高精度定時器高級控制定時器 PWM 封波后再恢復的區別
    的頭像 發表于 10-17 16:52 ?788次閱讀
    高精度<b class='flag-5'>定時器</b>與<b class='flag-5'>高級</b>控制<b class='flag-5'>定時器</b> <b class='flag-5'>PWM</b> 封波后再恢復的區別
    主站蜘蛛池模板: 好爽的视频黄| 99 久久99久久精品免观看| 亚洲日本色图| 免费在线观看你懂的| 婷婷操| 欧美中出| 久久天天躁狠狠躁夜夜2020一| zsvdy午夜片| 丁香婷婷啪啪| 四虎最新永久在线精品免费| 国产日本在线观看| 边摸边吃奶边做视频叫床韩剧| 在线 色| 国产一二三区精品| seetube18日本第一次| 亚洲色图88| 成人xxxxx| 丁香在线| 欧美高清milf在线播放| 爽天天天天天天天| 中国一级黄色毛片| 国产农村妇女毛片精品久久| 1024手机看片你懂得的 日韩欧美| 性a爱片免费视频性| bt天堂网在线资源www| 美国三级网| 亚洲 欧美 日韩 综合| 国产黄色大片又色又爽| 啪啪在线视频| 欧美日韩国产另类一区二区三区| 人人干人人干| 亚洲电影在线| 午夜免费啪在线观看视频网站| 亚洲免费视频网址| 精品综合久久久久久98| 婷婷六月丁香午夜爱爱| 日本理论片www视频| 久久精品免视看国产成人2021| 偷偷要色偷偷| 天天摸天天澡天天碰天天弄| 一级伦奸视频|