32单片机基础:TIM输入捕获

本文介绍了如何利用特定的电平跳变和PWMI模式测量PWM信号的频率和占空比,通过定时器的输入捕获功能实现硬件自动化,无需中断。文章还讨论了测频法和测周法的区别,以及主从触发模式在自动清零CNT中的应用。
摘要由CSDN通过智能技术生成

指定的电平跳变,就是上升沿或者下降沿,可以通过程序设置 

PWMI模式,就是PWM的输入模式,是专门为测量PWM频率和占空比设计的,

可配合主从触发模式

这两个功能结合起来,测量频率占空比就是硬件全自动运行的,如今不需要进行任何干预,也不需要进中断,需要测量的时候,直接读取CCR寄存器就行了。使用非常方便,极大地减轻了软件的压力。

对应定时器的电路部分如下图所示 

四个输入捕获和输出比较通道,共用4个CCR寄存器另外它们的CH1到CH4,4个通道1的引脚,也是共用的。所以对应同一个定时器,输入捕获与输出比较,只能使用其中一个,不能同时使用。

对比一下输入捕获和输出比较:

输出比较,引脚是输出端口,输入捕获,引脚是输入端口

输出比较,是根据CNT与CCR的大小关系来执行输出动作

输入捕获,是接收到输入信号,执行CNT锁存到CCR的动作 

OK,如何配置输入捕获电路来测量这些参数,这就是我们的任务。

我们先了解频率测量的相关知识:32单片机只能测量数字信号,所以其他的信号要通过电路转换为数字信号才行。

闸门时间T通常为1S,在1s时间内,对上升沿计次,每来一个上升沿,计次加1,每来一个上升沿,就是来了一个周期的信号,所以在1s时间内,来了多少个周期,那它的频率就是多少hz。与频率的定义一样。

测周法的基本原理就是,周期的倒数就是频率,如果我们能取出一个周期的时间,取个倒数,就是频率。但是,实际上,我们没有一个精度无穷大的秒表来测时间,测量时间的方法,实际也是定时器计次。我们使用一个已知标准频率fc的计次时钟,来驱动计数器。从一个上升沿开始计,计数器从0开始,一直计到下一个上升沿,停止。计一个数的时间是1/fc,计N个数,时间就是N/fc.N/fc就是周期,再取个倒数,就是频率的计算公式。

对比这两种方法的适用范围:

测频法适合测量高频信号,测周法适合测量低频信号。

测频法测量的是在闸门时间内多个周期,所以自带一个均值滤波。如果在闸门时间内波形频率有变化,那得到的其实是这一段的平均频率,所以测评法结果更新慢,测量结果是一段时间的平均值,值比较平滑

反观测周法,它只测量一个周期,就能测出一次结果,所以出结果的速度取决于待测信号的频率。所以测周法更新速度快。由于只测量一个周期,所以结果值会受噪声的影响,波动比较大。

高频适合使用测频法,低频适合测周法,那多高算高,多低算低呢?这就与中界频率有关了。如上图所示。计算公式也给出来。

测频法如何实现呢?这个用我们之前学过的外设就可以实现,我们之前写过,对射式红外传感器计次,定时器外部时钟。这些代码,稍加改进,就是测频法。比如对射式红外传感器计次,每来一个上升沿,计次加1.那我们再来用一个定时器,定一个1s的定时中断。在中断里,每隔1s取一下计次值。同时清零计次,为下一次做准备。这样每次读取的计次值就直接式频率。对应定时器外部时钟的代码。也是如此,每隔1s取一下计次。就能实现测频法测量频率的功能了,

我们本次使用测周法测量输入捕获频率。

我们再来详细看一下输入捕获的各部分电路。

上图是四个通道的引脚,参考引脚定义表,就能知道这个引脚是复用在哪个位置。引脚进来,就有一个三输入的异或门,这个三输入的异或门接在了通道1,2,3端口。异或门的执行逻辑是,当三个输入引脚有任何一个电平翻转时,输出引脚就产生一次电平翻转,之后通过数据选择器,到达输入捕获通道1.数据选择器选择上面一个,那输入捕获通道1的输入,就是三个引脚的异或值。选择下面一个,那异或门就没有用,4个通道各用各的引脚。设计这个异或门,其实还是为了三相无刷电机服务的。无刷电机有三个霍尔传感器检测转子的位置。可以根据转子的位置进行换相。有了这个异或门。就可以在前三个通道接上无刷电机的霍尔传感器,然后这个定时器就作为无刷电机的接口定时器去驱动换相电路工作。

信号来到输入滤波器和边沿检测器,输入滤波器可以对信号进行滤波。避免一些高频的毛刺信号误触发,然后是边沿检测器,这就和外部中断那里是一样的,可以选择高电平触发,或者低电平触发,当出现指定的电平时,边沿检测电路就会触发后续电路执行动作。 

 这个电路图是设计了两套滤波和边沿检测电路。第一套电路得到TI1FP1(TI1 Filter Polarity 1),输入给通道1的后续电路,。第一套电路得到TI1FP2(TI1 Filter Polarity 2)输入给下面通道2的后续电路。

同理,下面TI2信号进来,也经过两套滤波和极性选择,在这里,两个信号可以选择各走各的,也可以选择进行一个交叉,让CH2引脚输入给通道1,或者CH1引脚输入给通道2,为啥要进行一个交叉选择呢?这样做的目的,主要有两个:第一个目的,可以灵活切换后续捕获电路的输入,比如你一会想以CH1作为输入,一会儿想以CH2作为输入,这样就可以灵活的选择。第二个目的,就是可以把一个引脚的输入,同时映射到两个捕获单元,这也是PWMI模式的经典结构,比如让第一个捕获通道,使用上升沿触发,用来捕获周期,第二个通道,使用下降沿触发,用来捕获占空比。两个通道对同一个频率进行捕获,就可以用来测量频率和占空比,这就是PWMI模式。

TRC信号也可以作为捕获部分的输入,来源是下图,这样设计,也是为了无刷电机的驱动。

进入分频,分频后的触发信号就可以触发捕获电路进行工作了,每来一个信号,CNT的值,就会向CCR转运一次,转运的同时,会发生一个捕获事件,这个事件会在状态寄存器置标志位,同时也可以产生中断,如果需要在捕获的瞬间,处理一些事情的话,就可以开启这个捕获中断 

 

这就是整个电路的工作流程,比如我们可以配置上升沿触发捕获,每来一个上升沿CNT转运到CCR一次,又因为CNT计数器是有内部的标准时钟驱动的,所以CNT的数值,就可以用来记录两个上升沿之间的时间间隔,这个时间间隔,就是周期, 

这样与测周法的操作步骤是一样的,上升沿用于触发输入捕获,CNT用于计数计时,每来一个上升沿,取一下CNT的值,自动存在CCR里,CCR捕获得到的值,就是计数值N,CNT的驱动时钟,就是fc,fc/N就得到了待测信号的频率,另外还有个细节问题,就是每次捕获之后,我们都要把CNT清零一下,这样下次上升沿再捕获时,取出的CNT才是两个上升沿的时间间隔。这个在一次捕获后自动将CNT清零的步骤,我们可以使用主从触发模式,自动来完成。 

 

下图是输入捕获通道1的一个更详细的框图

 

引脚进来,先经过一个滤波器,滤波器的输入是TI1,就是CH1的引脚,输出的TI1F,就是滤波后的信号。fDTS是滤波器的采用时钟来源,下面CCMR1里的ICF位可以控制滤波器的参数,

滤波之后的信号,经过边沿检测器,捕获上升沿和下降沿,可以用这个CCER寄存器的CC1P位就可以选择极性了,最终得到TI1FP1触发信号,通过数据选择器,进入通道1后续的捕获电路 ,CC1S位可以选择数据选择器,ICPS位可以选择分频,CCIE位,控制输出使能或失能。如果使能了输出,输出端产生指定边沿信号,经过层层电路,就可以让CNT的值,转运到CCR里面去。

我们之前说过,每捕获一样CNT的值,都要把CNT清零一下,以便下一次的捕获,在这里硬件电路就可以在捕获之后自动完成CNT清零工作,如何自动清零CNT呢?我们看一下TI1FP1和TI1F_ED信号,都可以通向从模式控制器,从模式里,就有自动完成CNT的清零,

这个滤波器具体是如何工作的呢?我们看一下手册。

 

简单来理解的话,以采样频率对输入信号进行采样,当连续N个值都为高电平,输出才为高电平 

 连续N个值都为低电平,输出才为低电平。如果你信号出现高频抖动,导致连续采用N个值不全都一样,那输出就不会变化,这样达到了滤波的效果,采样频率越低,采样个数N越大,滤波效果越好,下图的这些描述,就是每个参数对应的采用频率和采用个数,实际应用中,如果波形噪声比较大,就可以把这些参数设置大一些,这样就可以滤除过滤噪声了。

我们研究一下主从触发模式:

主从触发模式有什么用,如何完成硬件自动化的操作。

 

 主模式可以将定时器内部的信号,映射到TRGO引脚,用于触发别的外设,

从模式就是接收其他外设或者自身外设的一些信号,用于控制自身定时器的运行,也就是被别的信号控制。

触发源,就是选择从模式的触发信号源的,触发源选择,选择指定的一个信号,得到TRGI,TRGI去触发从模式,从模式可以选择一项操作来自动执行。

我们要CNT自动清零,就可以选择TI1FP1.从模式执行的操作,就可以选择执行Reset的操作。

 

敲代码的思路图:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值