输入捕获(IC)简介
·IC(Input Capture)输入捕获
·输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用 于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数
·每个高级定时器和通用定时器都拥有4个输入捕获通道
·可配置为PWMI模式,同时测量频率和占空比
·可配合主从触发模式,实现硬件全自动测量
注意事项:由于同一个通道的输入捕获和输出比较是共用的一个端口,所以不能同时进行输入捕获和输出比较
频率测量
图1
由图可知,测频法适合测量高频信号,测周法适合测量低频信号。(本节用的是测频法)
配置输入捕获的基本结构
图2
配置PWMI模式的基本结构
图3
主要搞懂CNT的变化,明白每一段的CCR代表的是什么,通过主从触发模式实现硬件的自动清零,外部每来一个上升沿,CNT的值锁存到CCR里;在PWMI模式下,检测到下降沿将CNT的值所存到通道二的CCR里,这样就能计算出占空比。
注意,要使用从模式自动清零CNT,只能选择通道1和通道2
输入捕获初始化配置模板
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//选择上拉输入
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//选择时基单元的时钟
TIM_InternalClockConfig(TIM3);//选择内部时钟来驱动 可不写 定时器上电默认使用内部时钟
//配置时基单元
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//指定时钟分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//计数器计数模式
TIM_TimeBaseInitStructure.TIM_Period=65536-1;//ARR 给最大值,防止满量程溢出
TIM_TimeBaseInitStructure.TIM_Prescaler=72-1;//PSC 这里设置的是标准频率 72M/72 fc=1MHz
TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;//重复计数器 高级计数器才有 置0
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
//初始化输入捕获单元
TIM_ICInitTypeDef TIM_ICInitStructure;
TIM_ICInitStructure.TIM_Channel=TIM_Channel_1;//选择通道1 对应PA6引脚
TIM_ICInitStructure.TIM_ICFilter=0xF;//配置输入捕获的滤波器 0x0~0xF 越大滤波效果越好
TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;//极性选择 选择上升沿触发还是下降沿触发
TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;//对输入信号分频 我们需要每次触发都有效 因此不分频
TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;//选择触发信号从哪个引脚输入 直连通道还是交叉通道等
TIM_ICInit(TIM3,&TIM_ICInitStructure);//配置PWMI模式用TIM_PWMIConfig();
//配置TRGI的触发源为TI1FP1
TIM_SelectInputTrigger(TIM3,TIM_TS_TI1FP1);
//配置从模式为Reset
TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset);
//启动定时器
TIM_Cmd(TIM3,ENABLE);
输入捕获用于测量外部输入的波形,所以照常初始化GPIO和定时器内部时钟,上节课的代码我们利用了TIM2在通道1(PA0)输出一个PWM波形,因此输入捕获我们用TIM3,通道1对应引脚PA6
接下来就是配置输入捕获单元,和之前一样使用函数TIM_ICInit();列出结构体参数一一配置即可
TIM_ICSelection配置的是通道连接选择,即直连还是交叉连接,交叉连接一般用于PWMI模式,即可以读出两个CCR的值,用于计算占空比
对于PWMI模式,只需要把TIM_ICInit();改成TIM_PWMIConfig();就能自动完成交叉通道的配置。
从模式和触发源选择配置
图4
TlM SelectlnputTrigger,选择输入触发源TRGI为TI1FP1,当TI1FP1检测到上升沿,执行从模式
TIM SelectslaveMode,选择从模式Reset,清零CNT
重要函数
TIM_GetCapture1/2/3/4;放到while循环里不断读取CCR的值,再通过数学运算就能测出PWM波形的频率和占空比。