【TIM/PWM】定时器输入捕获
输出比较功能:使用输出比较电路时,CNT和CCR(Capture/Compare Register)进行比较,CNT计数自增,CCR是我们设定的值,当CNT大于CCR、CNT小于CCR、CNT等于CCR时,输出就会相应的置1、置0,如此就可以输出电平不断跳变的PWM波形了。CCR1=CNT(CNT的值转运到CCR1中)(输入捕获自动执行)//然后CNT=0,清零计数器(从模式自动执行)CCR1=C
·
一、输入捕获简介
-
IC(Input Capture)输入捕获
-
输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中(将当前CNT值读出来写入CCR)
-
可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数
-
每个高级定时器和通用定时器都拥有4个输入捕获通道
-
可配置为PWMI模式,同时测量频率和占空比(PWMI:PWM的输入模式,是专门为测量PWM频率和占空比设计的)
-
可配合主从触发模式,实现硬件全自动测量
输出比较功能:使用输出比较电路时,CNT和CCR(Capture/Compare Register)进行比较,CNT计数自增,CCR是我们设定的值,当CNT大于CCR、CNT小于CCR、CNT等于CCR时,输出就会相应的置1、置0,如此就可以输出电平不断跳变的PWM波形了
补充:IC(Input Capture)输入捕获、CC(Capture/Compare)输入捕获和输出比较的单元
捕获/比较寄存器是输入捕获和输出比较共用的,当使用输入捕获时它就是捕获寄存器,当使用输出比较时它就是比较寄存器
对于同一个定时器,输入捕获和输出比较只能使用其中一个,不能同时使用
二、频率测量相关知识
如图为一个频率逐渐降低的方波波形,越往左,频率越高;越往右,频率越低
测量信号的方法
-
测频法:闸门时间通常设置为1s,每来一个上升沿其实就是来了一个周期的信号
所以在1s时间内,来了多少个周期,则它的频率就是多少Hz
//测频法适合测量高频信号
在闸门时间内最好多出现一些上升沿,计次数量N多一些,有利于减小误差
//测频法测量结果更新的慢一些,数据相对稳定
-
测周法:使用一个已知标准频率为fc的计次时钟驱动计数器,从一个上升沿开始计,一直计到下一个上升沿停止
计一个数的时间是1/fc,计N个数,时间就是N/fc,也就是周期,对其取个倒数可以得到频率fx=fc/N
//测周法适合测量低频信号
低频信号周期比较长,计次N就会比较多,有利于减小误差
//测周法更新的快,数据跳变也非常快
-
中界频率:上面两种方法计次的N相同(误差相同)时的频率
//当待测信号频率<中界频率时,测周法误差更小,应选用测周法
//当待测信号频率>中界频率时,测频法误差更小,应选用测频法
在上面两种方法中计次可能存在正负1误差:
1)测频法:在闸门时间内并不是每个周期信号都是完整的,可能在开始或结束时有个周期刚出现一半
2)测周法:在最后时刻,有可能一个数刚数到一半计时就结束了
三、原理结构
-
最左边时四个通道的引脚【引脚定义表】
-
引脚进来有一个三输入的【异或门】接到通道1、2、3端口(设计异或门主要为了三相无刷电机服务)
//异或门:当三个输入引脚的任何一个有电平翻转时,输出引脚就产生一次电平翻转(不同为1,相同为0)
-
之后输出通过【数据数据选择器】(梯形)到达输入捕获通道1(TI1)
1)数据选择器选择上面的通道,则输入捕获通道1的输入就是3个引脚的异或值
2)数据选择器选择下面的通道,则异或门没有用,4个通道各用各的引脚
-
输入信号到了【输入滤波器和边沿检测器(高/低电平触发)】
其实图中的【输入滤波器和边沿检测器】内部分别有两套独立的【输入滤波器和边沿检测器】,可以选择各自独立连接或交叉连接
一个通道可以分别得到TIxFPx输出给上/面(可以把一个引脚的输入同时映射到两个捕获单元【PWMI经典结构】)
-
信号经过预分频器,分频之后的触发信号就可以触发捕获电路进行工作了
-
每来一个触发信号,CNT的值就向CCR转运一次
//转运的同时发生一个捕获事件,这个事件会在状态寄存器置标志位,同时也可以产生中断,如果需要在捕获的瞬间处理一些事件的话,就可以开启这个捕获中断
四、输入捕获通道
-
引脚进来先经过滤波器(fDTS:滤波器的采样时钟来源)(CCMR1:ICF位控制滤波器参数)
-
滤波之后的信号通过边沿检测器捕获上升沿或者下降沿(CCER寄存器里的CC1P位选择极性),最终得到TI1FP1触发信号
-
通过数据选择器(梯形)进入通道1后续的捕获电路
//CC1S位可以对数据选择器进行选择,ICPS位可以配置分频器,CC1E位控制输出使能或失能
-
配置完成并使能输出后,输入端产生指定边沿信号,经过层层电路,就可以让CNT的值转运到CCR里面
- 【TI1FP1信号和TI1的边沿信号】可以通向从模式控制器
EX:TI1FP1信号的上升沿触发捕获,也可以通过上方的硬件电路同时触发从模式(自动完成CNT清零)
//每捕获一次CNT都要把CNT清零一下,以便于下一次捕获
五、主从触发模式
主从触发包括:主模式、从模式、触发源选择
-
主模式:可以将定时器内部的信号映射到TRGO引脚,用于触发别的外设
-
从模式:接收其他外设或者自身外设的一些信号,用于控制自身定时器的运行,也就是被别的信号控制
//从模式可以在图中列表里,选择一项操作来自动执行
-
触发源选择:选择从模式的触发信号源(选择指定的一个信号得到TRGI,由TRGI触发从模式)
EX:让TI1FP1信号自动触发CNT清零——【触发源选择】选择TI1FP1——【从模式执行操作】选择执行Reset操作
即:TI1FP1信号自动触发从模式,从模式自动清零CNT
//从图中【触发源选择】可以看到只有TI1FP1和TI2FP2,没有TI3和TI4的信号
//因此如果想使用从模式自动清零CNT就只能使用通道1和通道2
//当使用通道3和通道4时只能开启捕获中断,在中断里手动清零(程序频繁中断,浪费资源)
六、输入捕获基本结构
本结构只使用一个通道,仅能测量频率
-
配置好时基单元并启动定时器,CNT会在经过PSC预分频器处理后的时钟驱动下不断自增
//经过预分频之后的时钟频率就是驱动CNT的标准频率fc
//CNT就是测周法用来计数计时的东西
-
GPIO口输入图中左上的方波信号,经过【滤波器】和【边沿检测极性选择】
-
选择【TI1FP1】为上升沿触发,之后输入选择直连的通道,【分频器】选择不分频
-
当TI1FP1出现上升沿后,【CNT】的当前计数值转运到【CCR1】里
-
同时经过【触发源选择】选中TI1FP1为触发信号,从模式选择复位操作,这样TI1FP1上升沿也会通过上面一路触发CNT清零
//先转运CNT的值到CCR里去,再触发从模式给CNT清零(不能先清零再捕获,不然捕获值都是0)
-
最左:信号出现一个上升沿
CCR1=CNT(CNT的值转运到CCR1中)(输入捕获自动执行)//然后CNT=0,清零计数器(从模式自动执行)
-
在一个周期内,CNT在标准时钟的驱动下不断自增
-
由于之前清零过了,所以CNT从上升沿开始从0计数(CNT++),直到下一次上升沿来临再执行与第一步相同的操作
-
需要注意的是:每次捕获时CCR1的值都为之前上升沿到当前上升沿的间隔(周期),因此CCR1的值始终为最新周期计数值
//这个计数值就是N,再用标准频率fc/N就能得到信号的频率
七、PWMI基本结构
-
使用了两个通道同时捕获一个引脚,可以同时测量周期和占空比
-
与【输入捕获基本结构】不同,最下面多了一个通道
//再来一个TI1FP2,配置为下降沿触发,通过交叉通道去触发通道2的捕获单元
-
最左:信号出现一个上升沿
CCR1=CNT(CNT的值转运到CCR1中)(输入捕获自动执行)//然后CNT=0,清零计数器(从模式自动执行)
-
在一个周期内,CNT在标准时钟的驱动下不断自增
//在下降沿这个时刻触发CCR2捕获,此时CCR2的值就是CNT(CCR1)高电平的计数值
//CCR2捕获并不触发CNT清零
-
由于之前清零过了,所以CNT从上升沿开始从0计数(CNT++),直到下一次上升沿来临再执行与第一步相同的操作
-
需要注意的是:每次捕获时CCR1的值都为之前上升沿到当前上升沿的间隔(周期),因此CCR1的值始终为最新周期计数值
这样执行后,CCR1就是一整个周期的计数值,CCR2就是高电平时期的计数值,用CCR2/CCR1就可以得到占空比
更多推荐


所有评论(0)