十一、TIM输入捕获

两个程序:
1.输入捕获模式测频率。为了测量外部信号的频率,需要有信号源产生一个频率和占空比可调的波形,先用PWM模块在PA0端口输出一个频率和占空比可调的波形,测量波形的输入口是PA6,用一根线把PA0和PA6连在一起,这样就能测量自己PWM模块产生波形的频率了。第一个程序输入捕获模式测频率,还不能测量占空比。如果想同时测量频率和占空比,STM32的输入捕获设计了一个PWMI模式(PWM输入模式)。
2.PWMI模式测频率和占空比。

输入捕获IC(input capture)

在这里插入图片描述
输入捕获是左边一部分电路,右边是输出比较部分。4个输入捕获和输出比较通道共用4个CCR寄存器,CH1到CH4这4个通道的引脚也是共用的,所以同一个定时器只能使用输入捕获和输出比较其中一个,不能同时使用。CH1到CH4这4个边沿信号输入引脚,一旦有边沿(如上升沿),则输入滤波和边缘检测电路就会检测到这个上升沿,让输入捕获电路产生动作。(这里的作用和外部中断差不多,都是检测电平跳变,然后执行动作。但外部中断执行的动作是向CPU申请中断,而这里电路执行的动作是控制后续电路,让当前CNT的锁存到CCR寄存器中)。
输入捕获的执行流程和与输出比较的区别:输出比较引脚是输出端口,输入捕获引脚是输入端口,输出比较是根据CNT和CCR的大小关系来执行输出动作,输入捕获是接收到输入信号,执行CNT锁存到CCR的动作。
1.输入捕获模式下,当通道输入引脚出现指定电平跳变(上升沿或者下降沿)时,发生电平跳变的瞬间,输入捕获电路会让当前CNT的值锁存到CCR中(把当前CNT的值读出来写入到CCR中)。测量PWM波形的频率、占空比、脉冲间隔(频率)、电平持续时间(占空比)等参数。
2.每个高级定时器和通用定时器都拥有四个数捕获通道,基本定时器没有输入捕获的功能。
3.可配置为PWMI模式(PWM输入模式,专门测量PWM频率和占空比),同时测量频率和占空比。
4.可配合主从触发模式,实现硬件全自动测量。
后面这两项功能结合起来测量频率占空比,就是硬件全自动执行,不需要软件进行任何干预,也不需要进中断。需要测量的时候直接读取CCR寄存器就行了,使用非常方便,且极大的减轻了软件的压力。

频率测量

只有高低电平的数字信号(STM32也只能测量数字信号,若要测量一个正弦波,则需要搭建一个信号预处理电路,最简单的就是用运放搭一个比较器,把正弦波转换为数字信号,再输入给STM32就行了。若测量的信号电压非常高,还要考虑一下隔离的问题,用隔离放大器、电压互感器等软件隔离高压端和低压端,保证电路的安全)。在这里插入图片描述
测频法:在闸门时间T内,对上升沿计次,得到N,则频率𝑓_𝑥=𝑁 / 𝑇
测周法:两个上升沿内,以标准频率fc计次,得到N ,则频率𝑓_𝑥=𝑓_𝑐 / 𝑁
中界频率:测频法与测周法误差相等的频率点𝑓_𝑚=√(𝑓_𝑐 / 𝑇)
高频适合使用测评法,低频适合使用测周法,高频和低频分隔涉及到中介频率的概念。

用STM32实现两种频率测量方法

测频法

测频法用外设可以实现,对射式红外传感器计次、定时器外部时钟等代码稍加改进就是测评法。如对射式红外传感器计次,每来一个上升沿计次+1,再用定时器定一个1秒的定时中断,在中断里每隔1s取下计次值,同时清零计次,为下一次做准备。这样每次读取的计次值就直接是频率。对应定时器外部时钟的代码也是如此,每隔1s取一下计次,就能实现测评法测量频率的功能。

测周法在这里插入图片描述

从左到右来看,最左边是四个通道CH1到CH4这4个边沿信号输入引脚(参考引脚定义表查看引脚复用在哪个位置)。引脚进来有一个三输入的异或门,这个异或门的输入接在通道1、2、3端口。异或门执行逻辑:三个输入引脚任何一个有电平翻转,异或门的输出引脚就产生一次电平翻转,输出通过数据选择器到达输入捕获通道1,数据选择器如果选择异或门上面的输入,则输入捕获通道1的输入就是三个引脚的异或值;如果选择异或门下面的输入,则异或门没用,四个通道各用各的引脚。(异或门为三相无刷电机服务,无刷电机有三个霍尔传感器检测转子的位置,可以根据转子的位置进行换相,有了这个异或门,就可以在前三个通道接上无刷电机的霍尔传感器,这个定时器就作为无刷电机的接口定时器,驱动幻象电路工作)。输入信号来到输入滤波器和边缘检测器,输入滤波器可以对信号进行滤波,避免一些高频的毛刺信号误触发,边缘检测器和外部中断一样,可以选择高电平触发或者低电平触发,当出现指定的电平时,边缘检测电路就会触发后续电路执行动作。这里设计了两套滤波和边缘检测电路,第一套电路TI1信号,经过滤波和极性选择得到TI1FP1,输入给通道1的后续电路;第二套电路经过另一个滤波和极性选择得到TI1FP2输入给下面通道2的后续电路。同理下面TI2信号进来也经过两套滤波和极性选择,得到TI2FP1和TI2FP2,其中TI2FP1输给上面一路,TI2FP2输给下面一路。TI1和TI2两个信号进来可以选择各走各的,也可以选择进行一个交叉(让CH2引脚输入给通道1或者CH1引脚输入给通道2)。进行交叉连接可以通过这个数据选择器灵活切换后续捕获电路的输入,还可以把一个引脚的输入同时映射的两个输入捕获单元,这也是PWM模式的经典结构(PWM模式:第一个捕获通道使用上升沿触发用来捕获周期,第二个通道使用下降沿触发用来捕获占空比,两个通道同时对一个硬件进行捕获,就可以同时测量频率和占空比)。下面通道三和通道四也是一样的结构,也可以选择进行交叉。输入信号进行滤波和极性选择后来到预分频器,分频之后的触发信号触发捕获电路进行工作,每来一个触发信号,CNT的值就会向CCR转运一次,同时会发生一个捕获事件,这个事件会在状态寄存器至标志位,同时也可以产生中断。如果需要在捕获的瞬间处理一些事情,就可以开启这个捕获中断。
若配置上升沿触发捕获,每来一个上升沿CNT转运到CCR一次,又因为这个CNT计数器是由内部的标准时钟驱动的,故CNT的数值可以用来记录两个上升沿之间的时间间隔(周期,取倒数就是测周法测量的频率)。每次捕获之后,要把CNT清零,这样下次上升沿再捕获的时候,取出的CNT才是两个上升沿的时间间隔。用主从触发模式自动来完成这个在一次捕获后将CNT清零的步骤。

输入捕获通道

在这里插入图片描述
引脚进来先经过一个滤波器,滤波器的输入是TI1(CH1引脚),滤波器输出的TI1F是滤波后的信号。fDTS是滤波器的采样时钟来源,下面CCMR1寄存器里的ICF位可以控制滤波器的参数。滤波之后的信号通过边缘检测器捕获上升沿或者下降沿,用CCER寄存器里的CC1P位就选择极性了,最终得到TI1FP1触发信号,通过数据选择器进入通道1后续的捕获电路。(实际上这里应该还有一套一样的电路得到TI1FP2触发信号,连通到通道2的后续电路,未画出)。CC1S位对数据选择器进行选择,ICPS位可以配置分频器(选择不分频、2分频、4分频、8分频),CCIE位控制输出使能或失能。若使能了输出,输入端产生指定边沿信号,经过层层电路啊,到达这里就可以让这CNT的值转运到CCR里。在这里,硬件电路可以在捕获之后自动完成CNT的清零工作: TI1FP1信号和TI1F_ED边缘信号都可以通向重模式控制器,比如TI1FP1信号的上升沿触发捕获,TI1FP1还可以同时触发重模式,这个从模式里面有电路可以自动完成CNT的清零。

主从触发模式

(主从触发模式有什么用,如何来完成硬件自动化的操作) 在这里插入图片描述
主从触发模式就是主模式、从模式和触发源选择三个功能的简称。主模式可以将定时器内部的信号映射到TRGO引脚,用于触发别的外设;从模式是接收其他外设或自身外设的信号,用于控制自身定时器的运行,也就是被别的信号控制;触发源选择是选择从模式的触发信号源的,可以认为它是从模式的一部分。
触发源选择选择指定的一个信号得到TRGI去触发从模式,从模式可以在列表里选择一项操作来自动执行。
若想要TI1FP1信号自动触发CNT的清零,那触发源选择就可以选TI1FP1,从模式执行的操作选择执行reset操作,这样TI1FP1信号就可以自动触发从模式,从模式自动CNT的清零,实现硬件全自动测量。

输入捕获基本结构在这里插入图片描述

这个结构只使用了一个通道,所以它目前只能测量频率。时基单元配置好,启动定时器,CNT就会在预分频之后的时钟驱动下不断自增,经过预分频之后的时钟频率就是驱动CNT的标准频率fc,标准频率=72M/预分频系数。然后,在下面输入捕获通道1的GPIO口输入一个的方波信号,经过滤波器和边缘检测,选择TI1FP1为上升沿触发,之后输入选择直连的通道,分频器选择不分频,当TI1FP1出现上上升沿之后,CNT的当前记录值转运到CCR1里,同时触发源选择选中TI1FP1为触发信号,从模式选择复位操作,这样TI1FP1的上升沿也会通过上面这一路去触发CNT清零。(先转运CNT的值到CCR里,再触发从模式清零CNT。
然后看一下左上角的图,信号出现一个上升沿CCR1=CNT(把cCNT的值转运到CCR1里,这是输入捕获自动执行的)。然后CNT=0(清零计数器,这是从模式自动执行的)。然后在一个周期之内,CNT在标准时钟的驱动下不断自增,且由于之前清零过了,故CNT就是从上升沿开始从0开始计数,一直加加到下一次上升沿来临,然后执行相同的操作。当这个电路工作时,CCR的值始终保持为最新一个周期的计数值。

PWMI基本结构

(PWMI模式使用两个通道同时捕获一个硬件,可以同时测量周期和占空比)在这里插入图片描述
上部分结构和刚才演示的一样,下面多了一个通道。首先TI1FP1配置上升沿触发,触发捕获和清零CNT正常的捕获周。这时TI1FP2配置为下降沿触发,通过交叉通道去触发通道2的捕获单元。最开始上升沿CCR1捕获,同时清零CNT,之后CNT++。然后在下降沿这个时刻触发CCR2捕获,这时CCR2的值就是CNT高电平期间的计数值,CCR2捕获不触发CNT清零,所以CNT继续加加,直到下一次上升沿CCR1捕获周期、CNT清零 。这样CCR1就是一整个周期的计数值,CCR2就是高电平期间的计数值,占空比= CCR2/ CCR1。另外,可以选择两个通道同时捕获第一个引脚的输入,也可以配置两个通道同时捕获第二个引脚的输入(使用TI2FP1和TI2FP2这两个引脚),这两个输入可以灵活切换。

  • 33
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值