1.简介1.ICInput Capture输入捕获2.在输入捕获模式下当通道输入引脚出现指定电平跳变时上升沿和下降沿当前CNT的值将被锁存把当前CNT的值进行读取并写入到CCR中用于测量PWM波形的频率、占空比、脉冲间隔、电平持续事件等参数3.每个高级定时器和通用定时器都拥有4个输入捕获通道4.可以配置为PWMI模式同时测量频率和占空比还可以配合主从触发模式实现硬件全自动测量2.工作原理边沿引脚展示1.一旦由边沿上升沿下降沿输入滤波和边沿检测电路就会检测到这个上升下降沿让输入捕获电路产生动作2.外部中断电路动作是向CPU申请中断输入捕获执行动作是控制后续电路当前CNT的值将被锁存到CCR中3.输入捕获和输出比较的对比1.输出捕获引脚是输入端口输出比较引脚是输出端口2.输出比较是根据CNT于CCR大小关系执行输出动作输出捕获是接收到输入信号执行CNT的锁存到CCR的动作4.频率测量方法中界频率1.测频法在闸门时间通常为1秒T内对上升(下降)沿计次得到N,则频率f~xN/T适合测量高频信号2.测周法两个上升沿内以标准频率f~c计次得到N则频率f~xf~c/N适合测量低频信号1.原理定时器计次使用一个已知的标准频率f~c的计次时钟来驱动计数器从一个上升沿开始计计数器从0开始一直计到下一个上升沿停止2.计一个数时间是1/f~c计N个数时间就是f~c/N得到周期周期取倒数得到频率3.中界频率测频法于测周法误差相等的频率点f~m(f~c/T)**0.5当待测信号频率从大于中界频率时测频法误差更小使用测频法更合适当待测信号频率大于中界频率时测周法误差更小使用测周法更合适4.测频法于测周法比较测频法更新慢数据较为稳定测周法更新快数据跳变快5.正负1误差在测频法和测周法测量频率是会出现计数计到一半时间就截止的情况只能舍弃或者把那个不完整的周期视为一个周期若计次N数值较大正负1对N的影响就会很小所以计次N越大正负1误差对我们的影响就越小5.代码设计1.以对射式红外传感器计次为原型每来一个上升下降沿计次1在使用一个定时器定一个定时中断在中断里每隔一秒去一下计次值同时清零计次为下一次做准备这样每次读取的计次值就是频率6.异或门1.执行逻辑当三个输入引脚的任何一个有电平反转时输出引脚就产生一次电平翻转之后通过数据选择器到达输入捕获通道1数据选择器如果选择上面一个那输入捕获通道1的输入就是3个引脚的异或值如果选择下面一个异或门就没有用4个通道各用各的引脚7.输入滤波器对信号进行滤波避免一些高频毛刺信号误触发8.边沿检测器可以选择高低电平触发出现指定的电平时边沿检测电路就会触发后续电路执行动作9.两套滤波和边沿检测电路1.第一套电路经过滤波和极性选择得到TI1FP1输入给上面通道1的后续电路2.第二套电路经过另一个滤波和极性选择得到TI1FP2输入给下面通道2的后续电路3.两个信号可以选择各走各的也可以选择进行一个交叉4.交叉连接的目的1.可以灵活切换后续捕获电路的输入2.可以把一个引脚的输入同时映射到两个捕获单元5.PWMI模式第一个捕获通道使用上升沿触发用来捕获周期第二个通道使用下降沿触发用来捕获占空比两个通道同时对一个引脚进行捕获就可以同时测量频率和占空比6.TRC信号可作为捕获部分的输入7.预分频器可以对捕获到的信号进行分频8.捕获电路触发信号分频之后每来一个触发信号CNT的值就会向CCR转运一次转运的同时会发生一个捕获事件这个事件会在状态寄存器置标志位同时也可以产生中断若需要在捕获瞬间处理一些事情就可以开启这个捕获中断9.因为CNT计数器由内部标准时钟驱动所以CNT的数值可以用于记录两个上升沿之间的时间间隔周期10.测周法设计原理1.上升沿用于触发输入捕获CNT用于计数计时2.每来一个上升沿取一下CNT的值自动存在CCR里CCR捕获到的值就是计数值N3.CNT的驱动时钟就是f~c4.每次捕获之后都到将CNT清零这样下次再捕获的时候取出的CNT才是两个上升沿的时间间隔5.再一次捕获后自动将CNT清零的步骤可以使用主从触发模式自动完成11.输入捕获通道11.原理图2.引脚介绍1.TI1CH1引脚2.TI1F滤波后的信号3.fDTS滤波器的采样时钟来源4.CCMR1寄存器ICF位可以控制滤波器的参数5.ICF位定义了TI1输入的采样频率及数字滤波器的长度数字滤波器由一个时间计数器组成它记录到N个时间后会产生一个输出的跳变即以采样频率对输入信号进行采样当连续N个值都为高电平输出才为高电平连续N个值都为低电平输出才为低电平当信号出现高频抖动导致连续采样N个值不全都一样那输出就不会变化这样就可以达到滤波的效果采样频率越低采样个数N越大滤波效果就越好6.边沿检测器捕获上升沿或下降沿7.CCER寄存器的CC1P位选择极性最终得到TI1FP1触发信号通过数据选择器进入后续电路8.CC1S位对数据选择器进行选择9.ICPS位配置这里的分频器不分频2分频4分频8分频10.CC1E位控制输出使能或失能如果失能了输出输入端产生指定边沿信号经过层层电路让CNT的值转运到CCR里面来11.自动清零CNTTI1FP1信号的上升沿触发捕获还可以同时触发从模式自动完成CNT的清零12.主从触发模式主模式从模式触发源选择的统称1.主模式将定时器内部信号映射到TRGO引脚用于触发别的外设2.从模式接收其他外设或自身外设的一些信号用于控制自身定时器的运行3.触发源选择选择从模式的触发信号源可视为从模式的一部分选择指定的一个信号得到TRGI去触发从模式可在下图列表中选择一项操作再自动执行13.输入捕获基本结构示意图1.局限因为只使用了一个通道所以只能测量频率2.代码编写流程配置好时基单元启动定时器CNT就会在预分频之后的时钟驱动下不断自增3.CNT再测周法中用来计数计时4.经过预分频的时钟频率驱动CNT的标准频率f~c5.GPIO口输出像左上角的方波信号6.触发方式经过滤波器边沿检测选择TI1FP1为上升沿触发之后输入选择直连的通道并选择分频器的分频方式当TI1FP1出现上升沿之后CNT的当前计数值转运到CCR1中7.触发源选择选中TI1FP1为触发信号并选择从模式操作此时TI1FP1的上升沿也会通过上面这一路去出发CNT清零先捕获再清零8.若想使用从模式自动清零CNT只能用通道1和通道214.PWMI基本结构1.使用两个通道同时捕获一个引脚可以同时测量周期和占空比2.TI1FP2配置为与TI1FP1相反的边沿通过交叉通道去触发通道2的捕获单元可通过CCR2/CCR1的方式求占空比15.初始化函数编写步骤1.RCC开启时钟开启GPIO和TIM的时钟2.GPIO初始化GPIO配置成输入模式3.配置时基单元让CNT计数器再内部时钟的驱动下自增运行4.配置输入捕获单元包括滤波器、极性、直连通道和交叉通道、分频器这些参数5.选择从模式触发源6.选择触发之后执行的操作7.开启定时器16.库函数介绍1.TIM_ICInit:初始化输入捕获单元四个通道共用一个函数使用哪个通道可在结构体配置,单一配置一个通道2.TIM_PWMIConfig初始化输入捕获单元快速配置两个通道3.TIM_ICStructInit给输入捕获结构体赋予一个初始值4.TIM_SelectInputTrigger选择输入触发源TRGI调用此函数可以选择从模式触发源5.TIM_SelectOutputTrigger选择输出触发源TRGO调用此函数可以选择主模式触发源6.TIM_SelectSlaveMode选择从模式7.TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);分别单独配置1234的分频器8.TIM_GetCapture1(TIM_TypeDef* TIMx);TIM_GetCapture2(TIM_TypeDef* TIMx);TIM_GetCapture3(TIM_TypeDef* TIMx);TIM_GetCapture4(TIM_TypeDef* TIMx);1.作用分别读取4个通道的CCR2.与TIM_SetCompare1的对比输出比较模式下,CCR是只写的要用SetCompare写入输入捕获模式下CCR只读要用GetCapture读出17.滤波器和分频器的区别滤波器计次并不会改变信号的原有频率一般滤波器的采样频率都会远高于信号频率所以滤波器智慧滤除高频噪声使信号更平滑信号频率不变分频器对信号本身进行计次会改变频率