Skip to content

实时显示方波的频率和占空比

发布于: at 08:00

可以解决电赛练习里面的第四题

输入捕获模式

当相应的引脚检测到跳变沿之后,TIMx_CCR储存CNT的值

PWM输入模式

从TIx检测输入波的跳变沿,遇到上升沿的时候,IC1捕获、IC2捕获、CNT写入CCR1,复位计数器重新开始数,下降沿时候IC2捕获脉冲宽度CNT写入CCR2(即high),下一次的上升沿IC1捕获测量周期T

所以此时,我们已经得到周期T,那么通过 f=1/T=84M/CCR1 就可以得到频率,通过 duty=high/T*100%=CCR2/CCR1*100% 就可以得到占空比了。

基于CUBEMX操作

操作一、

新建工程并做好基本配置(调整时钟频率等)

在这里笔者使用TIM2,并配置

还有重要的一点是要打开中断,因为捕获到了之后要中断一下计算频率的频率和占空比,然后再回去

然后生成代码,打开工程。

在USER CODE BEGIN 2 的位置写

 HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1); HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);

作为IC1和IC2开始捕获得到的PWM波,那么按照上面说的,我们开始计算波的频率和占空比

在USER CODE BEGIN PFP 的位置写

 void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){     static float freq=0,duty=0;     freq=84000000.0/TIM2->CCR1;     duty=TIM2->CCR2/TIM2->CCR1; }

得到的freq和duty即为PWM的频率和占空比

操作二、

生成代码后的步骤同一