STM32笔记——定时器输入捕获功能(测量PWM的频率和占空比)

目录

一、概述

二、输入捕获功能

2.1 输入捕获简介

2.2 输入捕获通道 

三、输入捕获功能测量PWM波的频率和占空比

3.1 测量频率的方法

3.2 测量过程


一、概述

        主要介绍通用定时器的输入捕获功能,输入信号由GPIO口进入输入捕获通道,之后输入部分对相应的TIx输入信号采样,并产生一个滤波后的信号TIxF。然后,一个带极性选择的边缘检测器产生一个信号(TIxFPx),它可以作为从模式控制器的输入触发或者作为捕获控制。

二、输入捕获功能

2.1 输入捕获简介

  • IC(Input Capture)输入捕获
  • 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数
  • 每个高级定时器和通用定时器都拥有4个输入捕获通道
  • 可配置为PWMI模式,同时测量频率和占空比
  • 可配合主从触发模式,实现硬件全自动测量
  • 2.2 输入捕获通道 

    以输入捕获通道一为例:

  • TI1信号通过滤波器滤波得到TI1F信号,再经过带极性选择的边沿检测器,得到TI1F_Rising或者TI1F_Falling信号,经过选择器选择得到TI1FP1信号。
  • TI1FP1、来自通道2的TI2FP1信号和来自从模式的TRC信号,经过选择器得到输入比较1信号IC1,再选择分频器分频,得到输入捕获/比较寄存器的信号IC1PS。
  • 三、输入捕获功能测量PWM波的频率和占空比

    3.1 测量频率的方法

  • 测频法:根据频率的定义:物质在单位时间内完成周期性变化的次数叫做频率。也就是说1s内,有多少次高低电平变化。f=N/T。
  • 测周法:一个PWM周期的时间内,计算标准频率的变化次数,用标准频率除以计次次数N,得到PWM波的频率。
  • 3.2 测量过程

    1. 初始化GPIO: ①使能GPIO时钟;②初始化结构体参数。
    2. 输入捕获部分初始化:①使能TIM时钟;②初始化输入捕获结构体参数:输入捕获通道的选择、滤波、边沿检测极性选择、分频器和通道交叉选择。
    3. 配置为PWMI模式,同时测量频率和占空比,让TI1FP2进入通道二。
    4. 时基单元初始化。
    5. 从模式触发源选择。
    6. 从模式选择。
    7. 使能TIM。

    模块程序如下:

    #include "stm32f10x.h"  
    
    void IC_Init(void)
    {
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    	GPIO_InitTypeDef GPIO_InitStruct;
    	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
    	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6;
    	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA,&GPIO_InitStruct);
    	
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
    	TIM_ICInitTypeDef TIM_ICInitStruct;
    	TIM_ICInitStruct.TIM_Channel=TIM_Channel_1;
    	TIM_ICInitStruct.TIM_ICFilter=0xF;
    	TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Rising;
    	TIM_ICInitStruct.TIM_ICPrescaler=TIM_ICPSC_DIV1 ;
    	TIM_ICInitStruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
    	TIM_PWMIConfig(TIM3,&TIM_ICInitStruct);
    	
    	TIM_InternalClockConfig(TIM3);
    	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
    	TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
    	TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
    	TIM_TimeBaseInitStruct.TIM_Period=65536-1;
    	TIM_TimeBaseInitStruct.TIM_Prescaler=72-1;
    	TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
    	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
    	
    	TIM_SelectInputTrigger(TIM3,TIM_TS_TI1FP1);
    	TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset);
    	
    	TIM_Cmd(TIM3,ENABLE);
    }
    uint32_t IC_GetFreq(void)
    {
    	return 1000000/TIM_GetCapture1(TIM3);
    }
    uint32_t IC_GetDuty(void)
    {
    	return TIM_GetCapture2(TIM3)*100/TIM_GetCapture1(TIM3);
    }
    

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32笔记——定时器输入捕获功能(测量PWM的频率和占空比)

    发表评论