![]()
免费服务热线
:
400-098-0388 |
STM32定时器捕获PWM脉冲频率
专栏:行业新闻
发布日期:2018-07-02
阅读量:2377
收藏:
一、概念理解PWM输入捕获模式是输入捕获模式的特例,自己理解如下1. 每个定时器有四个输入捕获通道IC1、IC2、IC3、IC4。且IC1 IC2一组,IC3 IC4一组。并且可是设置管脚和寄存器的对应关系。2. 同一个TIx输入映射了两个ICx信号。3. 这两个ICx信号分别在相反的极性边沿有效。4. 两个边沿信号中的一个被选为触发信号,并且从模式控制器被设置成复位模式。5. 当触发信号来临时,...
一、概念理解 PWM输入捕获模式是输入捕获模式的特例,自己理解如下 1. 每个定时器有四个输入捕获通道IC1、IC2、IC3、IC4。且IC1 IC2一组,IC3 IC4一组。并且可是设置管脚和寄存器的对应关系。 2. 同一个TIx输入映射了两个ICx信号。 3. 这两个ICx信号分别在相反的极性边沿有效。 4. 两个边沿信号中的一个被选为触发信号,并且从模式控制器被设置成复位模式。 5. 当触发信号来临时,被设置成触发输入信号的捕获寄存器,捕获“一个PWM周期(即连续的两个上升沿或下降沿)”,它等于包含TIM时钟周期的个数(即捕获寄存器中捕获的为TIM的计数个数n)。 6. 同样另一个捕获通道捕获触发信号和下一个相反极性的边沿信号的计数个数m,即(即高电平的周期或低电平的周期) 7. 由此可以计算出PWM的时钟周期和占空比了 frequency=f(TIM时钟频率)/n。 duty cycle=(高电平计数个数/n), 若m为高电平计数个数,则duty cycle=m/n 若m为低电平计数个数,则duty cycle=(n-m)/n 注:因为计数器为16位,所以一个周期最多计数65535个,所以测得的 最小频率= TIM时钟频率/65535。
二、程序设计与分析 1. 程序概述:选择TIM3作为PWM输入捕获。IC2设置为上升沿,并设置为有效的触发输入信号。所以IC2的捕获寄存器捕获PWM周期, IC1的捕获寄存器捕获PWM的高电平周期。 2.程序代码如下:
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; //通道选择 //输入的信号频率没有变,测得的周期也不会变。比如选择4分频,则每四个输入周期才做一次捕获,这样在输入信号变化不频繁的情况下, //可以减少软件被不断中断的次数。 TIM_PWMIConfig(TIM3, &TIM_ICInitStructure); //根据参数配置TIM外设信息
中断处理函数
void TIM3_IRQHandler(void) if (IC2Value != 0)
注(一):若想改变测量的PWM频率范围,可将TIM时钟频率做分频处理 TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //周期0~FFFF 笔记:之前调试的时候,想检测低频,按照上面方法进行分频处理时,怎么都不行,后来才搞明白,由于检测时要进行计数,印记预装载值TIM_Period还是要设置成0xffff,而TIM_Prescaler是进行分频用的,也就是说,如果定时器时钟为72M,则将TIM_Prescaler设置成5后,TIM的时钟为14.4M,此时可以检测的最小频率=14.4M/0xffff,也就是说最小检测频率= 14.4M/TIM_Period; 之前关于这个TIM_Period自动重载值没有理解好,怎么都调试不同,终于搞定了,记录一下,以便后期查阅 上一页:电解电容的简介
|