【自学嵌入式:stm32单片机】TIM捕获输入
TIM捕获输入
IC(Input Capture)输入捕获
- 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数
- 每个高级定时器和通用定时器都拥有4个输入捕获通道
- 可配置为PWMI模式(PWM的输入模式),同时测量频率和占空比
- 可配合主从触发模式,实现硬件全自动测量
对于同一个定时器输入捕获和输出比较只能用一个,不能都开启
主从触发+PWMI是硬件触发
频率测量

测频法是平均频率,结果平滑,测周法容易受到噪声影响
高频适合使用测频法,低频适合使用测周法
中界频率是,测频法与测周法误差相等的频率点
当待测信号小于中界频率时,测周法误差更小
当待测信号大于中界频率时,测频法误差更小
输入捕获的各部分电路

最左侧是四个通道的引脚,参考引脚定义就能知道它们复用在哪个位置,然后引脚进来有一个三输入的异或门,这个异或门的输入接在了通道1,2,3端口,异或门的执行逻辑是,当输入引脚的任何有电平翻转时,输出引脚就产生一次电平翻转,之后输出通过数据选择器,到达输入捕获通道1,数据选择器如果选择上面一个,如下图:

那输入捕获通道1的输入,就是3个引脚的异或值,如果选择下面一个,那异或门就没有用,4个通道各用各的引脚,设计这个异或门是为三相无刷电机服务的,无刷电机有3个霍尔传感器检测转子的位置,可以根据转子的位置进行换相,有了这个异或门,就可以在前三个通道接上无刷电机的霍尔传感器,然后这个定时器就作为无刷电机的接口定时器去驱动换相电路工作,
【注】
无刷电机相关基础概念
什么是无刷电机
电机转动的核心是利用磁场“推拉”力(比如磁铁和通电线圈之间的吸引/排斥)
传统“有刷电机”中:转动的“转子”是线圈,固定的“定子”是磁铁;线圈转动时靠“碳刷”滑动供电,碳刷易磨损、噪音大、寿命短
无刷电机则相反:固定的“定子”是线圈(不动,可直接接线通电),转动的“转子”是磁铁(动),无需碳刷,因此更耐用、噪音小、效率高(如电动车、无人机常用)
什么是无刷电机的霍尔传感器
无刷电机需要知道转子(磁铁)的位置,才能让定子线圈“适时”通电(否则可能卡住或反转)
霍尔传感器相当于“磁场探测器”,是对磁场敏感的小元件,装在定子上
转子(磁铁)转动时,磁场会变化,霍尔传感器能通过这种变化检测出转子的位置(比如“转到30度”“转到180度”),并把位置信息传给电机控制器
什么是无刷电机换相
换相指“切换不同线圈通电”的过程,是电机持续转动的关键
无刷电机定子通常有3组线圈(A、B、C相,类似三个“电磁铁”)
控制器根据霍尔传感器的位置信息,控制线圈通电:转子在位置1时给A相通电,位置2时关A相、开B相,位置3时关B相、开C相,循环切换
通过这样的换相,线圈产生的磁场能持续“推/拉”转子,让电机一直转动(若不换相,只给一个线圈通电,转子转半圈就会被吸住不动)

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

它这里设计了两套边沿检测电路,第一套电路,经过滤波和极性选择,得到TI1FP1(TI1 Filter Polarity 1),输入给通道1的后续电路,第二套电路,经过另一个滤波和极性选择,得到TI1FP2(TI1 Filter Polarity 2),输入给下面通道2的后续电路,同理下面TI2信号进来,也经过两套滤波和极性选择,交叉连接可以灵活切换后续捕获电路的输入,比如一会想以CH1作为输入,一会想以CH2作为输入,它的主要目的是把一个引脚的输入,同时映射到两个捕获单元,这也是PWMI模式的经典结构。
第一个捕获通道,使用上升沿触发,用来捕获周期
第二个通道,使用下降沿触发,用来捕获占空比
两个通道同时对一个引脚进行捕获,就可以同时测量频率和占空比
这就是PWMI模式
同样下面的通道3和通道4是一样的结构,可以选择各自独立连接,也可以选择进行交叉
图中的TRC信号也可以选择作为捕获部分的输入,这个TRC信号来源如下图:

这个设计也是为了驱动无刷电机

输入信号进行滤波和极性选择后,就来到了预分频器,预分频器,每个通道各有一个,可以选择对前面的信号进行分频,分频之后的触发信号就可以触发捕获电路进行工作了,每来一个触发信号,CNT的值,就会向CCR转运一次,转运的同时会发生一个捕获事件,这个事件会在状态寄存器置标志位,同时也可以产生中断,如果需要在捕获的瞬间处理一些事情,就可以开启这个捕获中断,CNT是内部标准时钟驱动的,可以捕获两个上升沿的时间间隔,这个时间间隔就是周期
输入捕获通道

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

简单理解就是,这个滤波器工作原理是,以采样频率对输入信号进行采样,当连续N个值都为高电平,输出才为高电平,连续N个值都为低电平,输出才为低电平,如果信号出现高频抖动,导致连续采样N个值不全都一样,那输出就不会变化,这样就可以达到滤波的效果,采样频率越低,采样介数N越大,滤波效果就越好,图中那些描述(ICF位的值)是每个参数对应的采样频率和采样个数,在实际应用中,如果波形噪声比较大,就可以把这个参数设置大一些,这样就可以过滤噪声了

滤波之后的信号通过边沿检测器捕获上升沿或者下降沿,用CCER寄存器里的CC1P位,就可以选择极性了,最后得到TI1FP1触发信号,通过数据选择器,进入通道1后续的捕获电路,当然这里实际应该还有一套一样的电路,得到T1FP2触发信号,连通到通道2的后续电路,这里并没有画出来,同样,通道2有T2FP1,连通到通道1的后续,通道2也还有T2FP2,连通到通道2的后续


然后经过这里的数据选择器,进入后续捕获部分电路,CC1S位可以对数据选择器进行选择

之后ICPS位,可以配置这里的分频器,可以选择不分频、2分频、4分频、8分频
最后CC1E位,控制输出使能或失能,如果使能了输出,输入端产生指定边沿信号,经过层层电路,到达最后,就可以让CNT的值转运到CCR里面来,每捕获一次CNT的值,都要把CNT清零一下,以便于下一次的捕获,在这里硬件电路就可以在捕获之后自动完成CNT的清零工作

TI1PF1信号和TI1F_ED信号都可以通向从模式控制器,比如TI1FP1信号的上升沿触发捕获,那通过这里,TI1FP1还可以同时触发从模式,这个从模式里面,就有电路,可以自动完成CNT的清零
主从触发模式

主从触发模式,就是主模式、从模式和触发源选择这三个功能的简称,其中主模式可以将定时器内部的信号,映射到TRGO引脚,用于触发别的外设,所以这部分叫做主模式.
【注】STM32的定时器中的TRGO(触发输出)信号是一个非常有用的功能,它允许定时器在特定事件发生时发送一个信号,这个信号可以用来触发其他外设,如ADC(模数转换器)、DAC(数模转换器)或其他定时器。这种机制在需要精确同步多个操作时非常有用。
从模式就是接收其他外设或者自身外设的一些信号,用于控制自身定时器的运行,也就是被别的信号控制,所以这部分叫从模式,触发源选择,就是选择从模式的触发信号源的,触发源选择,选择指定的一个信号,得到TRGI,TRGI去触发从模式

从模式可以在这个列表里,选择一项操作来自动执行,如果想让T1FP1信号自动触发CNT清零,那触发源选择,就可以选中这里的TI1FP1从模式执行的操作,就可以选择执行Reset的操作,这样TI1FP1的信号就可以自动触发从模式,从模式自动清零CNT,实现硬件全自动测量

比如你想实现定时器的级联,就可以选择一个定时器主模式输出更新信号到TRGO,另一个定时器选择上一个定时器触发从模式,从模式选择执行外部时钟模式1的操作,这样就能实现级联了
然后主模式还可以选择复位、使能、比较脉冲

这里有从模式触发源的可选信号,可以选择这些信号去触发从模式,触发从模式后的操作如下:

比如我们本节会使用到复位模式,执行的操作就是,选中触发输入的上升沿重新初始化计数器,也就是清零CNT,
输入捕获基本结构

这个结构,我们只使用了一个通道,所以它目前只能测量频率,在右上角这里,是时基单元,我们把时基单元配置好,启动定时器,那这个CNT,就会在预分频之后的这个时钟驱动下,不断自增,这个CNTT,就是我们测周法用来计数计时的东西,经过预分频之后这个位置的时钟频率,就是驱动CNT的标准频率fc,标准频率=72M/预分频系数,然后下面输入捕获通道1的GPIO口,输入一个这样的方波信号:

经过滤波器和边沿检测,选择TI11FP1为上升沿触发,之后输入选择直连的通道,分频器选择不分频

当TI1FP1出现上升沿之后,CNT的当前计数值转运到CCR1里,同时触发源选择,选中TI1FP1为触发信号,从模式选择复位操作,这样TI1FP1的上升沿,也会通过上面这一路去触发CNT清零,这里有先后顺序,先转运CNT的值到CCR里去,再触发从模式给CNT清零或者是非阻塞的同时转移,GNT的值转移到CCR,同时0转移到CNT里面去,总之,肯定不会是先清零,再捕获,要不然捕获值肯定都是0了

在这里,信号出现一个上升沿,CCR1=CNT,就是把CNT的值转运到CCRQ里面去,这是输入捕获自动执行的,然后CNT=0,清零计数器,这是从模式自动执行的

然后在一个周期之内,CNT在标准时钟的驱动下,不断自增,并且由于之前清零过了,所以CNT就是从上升沿开始,从0开始计数,一直++,直到,下一次上升沿来临,然后执行相同的操作,CCR1=CNT,CNT=0,第二次捕获的时候。CNT就是两个上升沿之间间隔的计数值,这个计数值就自动放在CCR1里面,然后下一个周期继续同样的过程
所以当这个电路工作值,CCR1时钟保持最新的这个计数值,这个计数值就是频率测量的计次N,所以当我们想要读取信号的频率时,只需要读取CCR1得到N,再计算fc/N就行了,当我们不需要读取的时候,整个电路全自动的测量,不需要占用任何软件资源,CNT的值是有上限的,ARR一般设置为最大65535,那CNT最大也只能记65535个数,如果信号频率太低,CNT计数值可能会溢出,另外还有就是,这个从模式的触发源选择,如下图

在这里看到,只有TI1FP1和TI2FP2,没有TI3和I14的信号,所以这里如果想使用从模式自动清零CNT,就只能用通道1和通道2,对于通道3和通道4,就只能开启捕获中断,在中断里手动清零了,不过这样,程序就会处于频繁中断的状态,比较消耗软件资源。
PWMI基本结构

PWMI使用两个通道同时捕获一个引脚,可以同时测量周期和占空比
上面结构和刚才的输入捕获基本结构一样,下面这里多了一个通道:

首先,TI1FP1配置上升沿触发,触发捕获和清零CNT,正常地捕获周期,这时我们再来一个TI1FP2,配置为下降沿触发,通过交叉通道,去触发通道2的捕获单元

最开始上升沿,CCR1捕获,同时清零CNT,之后CNT一直++
然后,在下降沿这个时刻,触发CCR2捕获,所以这时CCR2的值,就是CNT从一个上升沿到一个下降沿的计数值,就是高电平期间的计数值,如下:

CCR2捕获,并不触发CNT清零,所以CNT继续++,直到下一次上升沿,CCR1捕获周期,CNT清零,这样执行之后,CCR1就是一整个周期的计数值,CCR2就是高电平期间的计数值,则占空比为CCR2/CCR1,这就是PWMI模式,使用两个通道来捕获频率和占空比的思路

另外,也可以两个通道同时捕第一个引脚的输入,这样通道2的前面这一部分就没有用到,当然也可以配置两个通道同时捕获第二个引脚的输入,这样我们就是使用TI2FP1和TI2FP2这两个引脚了,这两个输入可以灵活切换
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号