我是靠谱客的博主 复杂大船,最近开发中收集的这篇文章主要介绍配置cubemx并利用输入捕获,使用一个比较寄存器CCR1实现对脉冲的频率和占空比测量,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

上一篇使用两个比较寄存器来测量信号频率和占空比,这次使用一个比较寄存器来实现该功能。目前只能测量一次,并不能循环测量。这里推荐使用一个按键来复位定时器,就可以实现多次测量。这里使用TIM2_CH1作为信号输入端。到这个文章为止都是属于数字频率计的范围,等之后会出文章关于利用adc和快速傅里叶变换(FFT)来实现测频。

原理部分:与上一篇类似,只是在一个通道内触发多次中断,并改变中断触发方式,就可以测量高(低)电平时钟脉冲总数。

cubemx配置如下:

 

 

代码部分分析:

各种初始化:

HAL_TIM_PWM_Init(&htim3);																						//PWM生成初始化
	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
	
	HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);												 //开启TIM2通道1中断

while(1)循环中,flag为进入中断的次数,每进一次中断即有一种边沿被触发进入中断,并在每次进入中断时读取脉冲数,默认第一次触发为上升沿触发,在cubemx中TIM2配置中设置。

while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
		__HAL_TIM_SET_AUTORELOAD(&htim3, duty-1);				//设置频率
		__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, duty/2);  //设置占空比
		
		
		if(flag==1)
		{
			first=HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_1);
			__HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING);
		}else if(flag==2)
		{
			
			second=HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_1);
			__HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);
			pul_high=second-first;										//信号高电平时钟脉冲数量
		}else if(flag==3)
		{
			
			third=HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_1);
			pul_num=third-first;											//1个周期信号时钟脉冲数量
		}
		
		
		d=100*(float)pul_high/pul_num;                              //计算占空比
		pul_frq = 80000000 /pul_num;						 //计算频率
		
		if(KEY_Scan(0)==1)
		{
			//HAL_TIM_Base_Start_IT(&htim2);//tim2开始中断
			duty+=100;
			if(duty>2000)
				duty=100;
			
		}
		
  }

中断回调函数中,当触发三次后便停止通道1的输入捕获中断。

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
			if(htim==&htim2)     //查询更新事件中断是否产生
			{
				flag++ ;//溢出次数加一
				if(flag==4)
				{
					
					flag=0;
					HAL_TIM_IC_Stop_IT(&htim2,TIM_CHANNEL_1);
				}
			}
			
			
}

结果测试:

最后

以上就是复杂大船为你收集整理的配置cubemx并利用输入捕获,使用一个比较寄存器CCR1实现对脉冲的频率和占空比测量的全部内容,希望文章能够帮你解决配置cubemx并利用输入捕获,使用一个比较寄存器CCR1实现对脉冲的频率和占空比测量所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部