TIM(输入捕获)(STM32学习笔记)

本文介绍了如何利用STM32的TIM3模块进行输入捕获,测量PWM波形的频率和占空比,包括配置PWMI模式、主从触发和从模式选择,以及重要函数TIM_GetCapture1/2/3/4的使用方法。
摘要由CSDN通过智能技术生成

输入捕获(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波形的频率和占空比。

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sakabu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值