STM32F1学习——PWMI模式(IC输入捕获)
一、输入捕获测频率
在STM32中输入捕获和输出比较共用一套电路,既然STM32能够使用OC来输出PWM波,他同样也能使用IC来测量PWM的频率和占空比。测量频率和占空比有两种方式,一种是测频法,一种是测周法,两种方法分别适用于高频信号和低频信号,且在输入捕获过程中可以硬件自动化的清零CNT的值,而不需要CPU的参与。
二、测量PWM信号频率方法
1、测频法
测频法的核心是通过定时器设定一个时间T,测量在这段时间内外部的PWM信号的上升沿次数N,通过 N / T 则为频率。
2、测周法
测周法的核心思想是测量在一个周期中,STM内部的的主频Fc 可以有多少个上升沿N , 则测量的频率为Fc / N 。
三、输入捕获的硬件设计
虽然输入捕获的硬件电路和OC是类似的,但是仍然有一些特殊设计是为了IC输入捕获而设计的。
1、PWMI模式
同时测量频率和占空比而设计的。当PWM信号从CH1引脚进入时,经过滤波器和边沿检测器选择TI1FP1到IC1,同时可以让他也进入TI1FP2进入IC2,上面这一路可以用来测量频率,下面用来测量占空比。
2、主从触发模式
在捕获的CH1通道如下图所示,信号通过滤波器和边沿检测电路选择上升或下降沿至TI1FP1,这里有至从模式控制器 他可以用来自动清零CCR的值。接着继续到预分频器,最后到IC1PS,这里会触发更新事件,同时ARR计数器的值自动转运到CCR自动重装器。
主模式就是这里的IC1将它映射到TRGO端口,选择触发源TI1FP1,通过TRGI选择从模式Reset实现复位。
四、输入捕获结构
在输入捕获中,我们从CH1引脚输入外部PWM波,经过滤波器和边沿检测至TI1FP1,同时为了实现硬件自动清零CNT的值,我们将TI1FP1当做从模式触发源。在TI1FP1中,我们读取上升沿,当读取到上升沿的时候我们硬件自动转运CNT的值到CCR中,用fc / CCR 就是外部PWM频率,同时从模式将CNT清零。在TI1FP2中我们读取下降沿,当下降沿到达,CCR2 = CNT,用CCR2 / CCR1 = 占空比。
五、代码
在本次实验过程中,我们准备一边用单片机输出PWM波(OC输出比较),一边用IC输入捕获PWM的频率和占空比。那么本次实验中我们配置的顺序应该为,①打开两个定时器的时钟和GPIO的时钟 ②配置时基单元 ③配置OC和IC。
为了节省文章篇幅,代码已经放在github仓库里了。hal库的暂未更新,请耐心等待。
STM32F103c8t6_learning/GPIO_std/STM32f1_PWMI at main · Jiang-kun02/STM32F103c8t6_learning · GitHub
参考
[6-5] TIM输入捕获_哔哩哔哩_bilibili
[6-3] TIM输出比较_哔哩哔哩_bilibili