新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32 輸入捕獲

        STM32 輸入捕獲

        作者: 時間:2016-12-03 來源:網絡 收藏
        PWM輸入捕獲模式< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />

        一、概念理解

        本文引用地址:http://www.104case.com/article/201612/325170.htm

        PWM輸入捕獲模式時輸入捕獲模式的特例

        1、每個定時器有四個輸入通道IC1、IC2、IC3、IC4,且IC1IC2一組,IC3IC4一組,并可是設置管腳和寄存器的對應關系

        2、兩個TI輸出映射了兩個ICx信號

        3、這兩個ICx信號分別在相反的極性邊沿有效

        4、兩個邊沿信號中的一個被選為觸發信號,并且從模式控制器被設置成復位模式

        5、當觸發信號來臨時,被設置成觸發輸入信號的捕獲寄存器,捕獲“一個PWM周期(即連續的兩個上升沿或下降沿)”,他等于包含TIM時鐘周期的個數(即捕獲寄存器中捕獲的為TIM的計數個數n)

        6、同樣另一個捕獲通道捕獲觸發信號和下一個相反極性的邊沿信號的計數個數m,即(即高電平的周期或低電平的周期)

        7、由此可以計算出PWM的時鐘周期和占空比

        Frequency=f(TIM時鐘頻率)/n

        Dutycycle=(高電平計數個數)/n

        若m為高電平計數個數,則dutycycle=m/n;

        若m位低電平計數個數,則dutycycle=(n-m)/n

        注:因為計數器為16位,所以一個周期最多計數65535個,所以測得的最小頻率=TIM時鐘頻率/65535

        二、程序設計

        1、程序概述:選擇TIM3作為PWM輸入捕獲。IC2設置為上升沿,并設置為有效的觸發輸入信號,所以IC2的捕獲寄存器捕獲PWM周期01RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//時鐘配置
        02RCC_APP2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        03
        04GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//GPIO配置
        05GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        06GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        07GPIO_Init(GPIOA,&GPIO_InitStructure);
        08
        09NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;//NVIC配置
        10NVIC_InitStructure.NVIC_IRQChannePreemptionPriority=0;
        11NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        12NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        13NVIC_Init(&NVIC_InitStructure);
        14
        15TIM_ICInitStructure.TIM_Channel=TIM_Channel_2;//通道選擇
        16TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;//上升沿觸發
        17TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;//管腳與寄存器對應關系
        18TIM_ICInitStructure.TIM_ICPSC_DIV1;//輸入預分頻,意思是控制在多少個輸入周期做一個捕獲,如果輸入的信號頻率沒有變,測得的周期也不會變,比如選擇四分頻,則沒四個輸入周期做一次捕獲,這昂再輸入信號不頻繁的情況下,可以減少軟件被不斷中斷的次數
        19
        20TIM_ICInitStructure.TIM_ICFiter=0x0;//濾波設置,經歷幾個周期跳變認定波形穩定0x0-0xf;
        21TIM_PWMIConfig(TIM3,&TIM_ICInitStructure);//根據參數配置TIM外設信息
        22TIM_SelectInputTrigger(TIM3,TIM_TS_TI2FP2);
        23TIM_SelectMasterSalveMode(TIM3,TIM_MasterSlaveMode_Enable);
        24TIM_Cmd(TIM3,ENABLE);
        25TIM_ITConfig(TIM3,TIM_IT_CC2,ENABLE);
        26
        27voidTIM3_IRQHandler(void)
        28{
        29TIM_CLearITPendingBit(TIM3,TIM_IT_CC3);
        30IC2Value=TIM_GetCapture2(TIM3);
        31if(IC2Value!=0)
        32{
        33DutyCyle=(TIM_GetCapture1(TIM3)*100)/IC2Value;
        34Frequency=72000000/IC2Value;
        35}
        36else
        37{
        38DutyCycle=0;
        39Frequency=0;
        40}
        41
        42}
        43
        44注(一):若想改變測量的PWM頻率范圍,可將TIM時鐘頻率做分頻處理
        45
        46TIM_TimeBaseStructure.TIM_Period=0xFFFF;//周期0~FFFF
        47TIM_TimeBaseStructure.TIM_Prescaler=5;//時鐘分頻,分頻數為5+1即6分頻
        48TIM_TimeBaseStructure.TIM_ClockDivision=0;//時鐘分割
        49TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//模式
        50TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);//基本初始化
        51注注(二):定時器TIM的倍頻器X1或X2。在APB分頻為1時,倍頻值為1,否則為2

        ICInitStructre結構體的定義

        01typedefstruct
        02{
        03u16TIM_ICMode;
        04u16TIM_Channel;
        05u16TIM_ICPolarity;
        06u16TIM_ICSelection;
        07u16TIM_ICPrescaler;
        08u16TIM_ICFilter;
        09}TIM_ICInitTypeDef;
        10
        11
        12
        13TIM_ICMode定義
        14TIM_ICMode_ICAPTIM使用輸入捕獲模式
        15TIM_ICMode_PWM1TIM使用輸入PWM模式
        16
        17TIM_Channel
        18TIMChannel選擇通道
        19TIM_Channel_1使用TIM通道1
        20TIM_Channel_2使用TIM通道2
        21TIM_Channel_3使用TIM通道3
        22TIM_Channel_4使用TIM通道4
        23
        24TIM_ICPolarity
        25TIM_ICPolarity輸入活動沿
        26TIM_ICPolarity_RisingTIM輸入捕獲上升沿
        27TIM_ICPolarity_FallingTIM輸入捕獲下降沿
        28
        29TIM_ICSelection
        30TIM_ICSelection選擇輸入
        31TIM_ICSelection_DirectTITIM輸入2,3或4選擇對應的IC1或IC2或IC3或IC4相連
        32TIM_ICSelection_IndirectTITIM輸入2,3或4選的對應與IC2或IC1或IC4或IC3相連
        33TIM_ICSelection_TRCTIM輸入2,3或3選擇與TRC相連
        34
        35TIM_ICPrescaler
        36TIM_ICPSC_DIV1TIM捕獲在捕獲輸入行每探測到一個邊沿執行一次
        37TIM_ICPS_DIV2TIM捕獲每2個事件執行一次
        38TIM_ICPS_DIV3TIM捕獲每3個事件執行一次
        39TIM_ICPS_DIV4TIM捕獲每4個事件執行一次



        關鍵詞: STM32輸入捕

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 收藏| 北京市| 南陵县| 东丽区| 迭部县| 图们市| 浦江县| 合山市| 阿图什市| 禹城市| 乌兰县| 太保市| 喀喇沁旗| 襄樊市| 罗山县| 华安县| 西华县| 龙川县| 深州市| 渭南市| 台北县| 肥乡县| 金平| 东安县| 鲁山县| 万盛区| 丘北县| 封开县| 丽水市| 祥云县| 漳州市| 高阳县| 苍南县| 射洪县| 麦盖提县| 绍兴县| 即墨市| 陆河县| 珠海市| 凤翔县| 叶城县|