当我们身边没有示波器就无法测量频率与占空比了?一招教你解决身边没有示波器时如何测量STM32定时器产生PWM的频率与占空比

    当我们身边没有示波器就无法测量频率与占空比了?这篇文件小编就教大家如何使用定时器输入捕获功能测量频率与占空比

原理解析

    定时器输入捕获一般应用在两个方面,一个方面是脉冲跳变沿时间测量,另一方面是 PWM输入测量。下面将要使用就是测量脉冲跳变沿时间。


脉宽/频率测量示意图

测量频率

    当捕获通道TIx上出现上升沿时,发生第一次捕获,计数器CNT的值会被锁存到捕获寄存器CCR中,而且还会进入捕获中断,在中断服务程序中记录一次捕获(可以用一个标志变量来记录),并把捕获寄存器中的值读取到 value1中。当出现第二次上升沿时,发生第二次捕获,计数器CNT的值会再次被锁存到捕获寄存器CCR 中,并再次进入捕获中断在捕获中断中,把捕获寄存器的值读取到value3中,并清除捕获记录标志。利用value3和value1的差值我们就可以算出信号的周期。也就是说:
     频率 = 总频 v a l u e 3 − v a l u e 1 频率= \frac {总频}{value3-value1} 频率=value3value1总频

占空比测量

    当捕获通道TIx上出现上升沿时,发生第一次捕获,计数器CNT的值会被锁存到捕获寄存器CCR中,而且还会进入捕获中断,在中断服务程序中记录一次捕获(可以用一个标志变量来记录),并把捕获寄存器中的值读取到 valuel中。然后把捕获边沿改变为下降沿捕获,目的是捕获后面的下降沿。当下降沿到来的时候,发生第二次捕获,计数器CNT的值会再次被锁存到捕获寄存器CCR中,并再次进入捕获中断,在捕获中断中,把捕获寄存器的值读取到value3中,并清除捕获记录标志。然后把捕获边沿设置为上升沿捕获。这时:
     占空比 = v a l u e 2 − v a l u e 1 v a l u e 3 − v a l u e 1 ∗ 100 % 占空比=\frac{value2-value1}{value3-value1} *100\% 占空比=value3value1value2value1100%
    在测量脉宽过程中需要来回的切换捕获边沿的极性,如果测量的脉宽时间比较长,定时器就会发生溢出,溢出的时候会产生更新中断,我们可以在中断里面对溢出进行记录处理。

代码实现

    由于近期在使用蓝桥杯嵌入式比赛的STM32G431开发板,此处就以其作为例子。
CubMX的配置
    此处使用的是定时器3的通道1.
在这里插入图片描述
定时器中断采集频率

    为了计算方便,可以从0开始计时直到第一次上升沿为止。

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM3)
	{
		//读取定时器的计数值
		crrl_t = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
		//将定时器的计数值设置成0
		__HAL_TIM_SetCounter(htim,0);
		//计算频率
		frd = (80000000/80)/crrl_t;
		//重新开启定时器
		HAL_TIM_IC_Start_IT(htim,TIM_CHANNEL_1);
	}
}

定时器中断采集占空比

//记录定时器上升沿 下降沿计数值
struct date
{
	//记录计数值  偶数为上升沿 计数的下降沿
	uint32_t count[3];
	//用于记录当前应该是上升沿触发还是下将沿触发
	char edge_flag;
	//记录数据采集数量
	int number;
};
struct date date;
//本次为上升沿触发
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM3)
	{
		//本次为上升沿触发
		if(date.edge_flag%2==0)
		{
			//获取本次上升沿计数值
			date.count[date.number++] = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
			//采集一次下降沿、两次上升沿数据完成
			if(date.number == 3)
			{
				dutyCicle = (((date.count[1]-date.count[0])*1.0)/(date.count[2]-date.count[0]))*100;
				//将定时器的计数值设置成0
				__HAL_TIM_SetCounter(htim,0);
				__HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING); 
				//重新开启定时器
				HAL_TIM_IC_Start_IT(htim,TIM_CHANNEL_1);
				date.edge_flag = 0;
				date.number = 0;
			}
			else
			{				
				__HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING); 
				//将下次触发方式设置为下降沿触发
				date.edge_flag += 1;
			}
		}
		//下降沿触发
		else
		{
			//读取本轮的计数值
			date.count[date.number++] = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
			//修改触发方式为上升沿触发
			__HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING); 
			date.edge_flag += 1;				
		}	
	}
}

结果

在这里插入图片描述

    很不幸的是,按照上述原理,使用上述代码,小编测量出的占空比更是相差10倍呐。(原本应该是60,测量出结果为6)😢😢😢后续小编还将改进代码争取更加接近真实值。

小结

    总的来说,当自己身边没有示波器时,采用这个方案得到一个大概的频率以及占空比还是挺不错的,毕竟也仅仅只是多了几行代码而已。😄😄😄

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CAN总线的采样频率通常是1MHz,但实际上可以根据实际情况进行调整。示波器在进行频率测量,误差来源主要有两方面:示波器自身的误差和被测信号的特性。 为了减少示波器自身的误差,应该选择高质量的示波器,并且在使用前进行校准。此外,示波器的触发设置也会对测量结果产生影响,应该选择合适的触发模式和阈值。 对于被测信号的特性,应该选择合适的探头和信号输入方式。例如,对于高频信号,可以选择带宽更高的探头;对于低频信号,可以选择带宽较小但灵敏度更高的探头。此外,还应该注意信号的幅度和波形,尽可能使其稳定和清晰,以减少测量误差。 总之,在进行频率测量,需要选择合适的示波器和探头,并注意触发设置和信号特性,以减少误差。 ### 回答2: CAN总线通常采用固定的采样频率,根据CAN总线协议,常见的采样频率为1MHz、500kHz、250kHz、125kHz和100kHz等。这些频率都是经过严格测试和验证的,确保了数据传输的可靠性和稳定性。CAN总线采样频率的选择取决于系统的需求和通信速度的要求。 示波器在进行频率测量可以通过以下几种方式来减少误差: 1.选择合适的采样率:示波器可以选择更高的采样率来捕捉更多的信号细节,从而提高测量的准确性。采样率越高,所获取的样本点越多,误差也就越小。 2.使用合适的触发模式:示波器触发模式的选择对于频率测量也非常重要。正确选择触发模式可以确保测量结果的稳定性和准确性。例如,可以使用边沿触发模式,根据信号变化的上升沿或下降沿来触发示波器的采样。 3.选择合适的测量参数:示波器通常提供多种测量参数,例如周期、频率占空比等。根据实际需要选择合适的参数可以提高测量的准确性。对于频率测量,可以选择频率计来对信号进行测量,这样可以避免其他参数的误差对频率测量结果的影响。 4.校准示波器:定期对示波器进行校准可以确保测量结果的准确性。示波器的校准通常由专业的维修人员进行,校准后示波器能够给出更加准确的测量结果。 综上所述,通过选择合适的采样率、触发模式和测量参数以及定期校准示波器,可以有效减少示波器频率测量中的误差,提高测量的准确性。 ### 回答3: CAN通道采样频率是指CAN总线上的数据传输速率,常见的频率有1Mbit/s、500kbit/s和250kbit/s等。CAN通道采样频率越高,传输速率越快,但也会增加误差的可能性。 示波器在进行频率测量,为了减少误差,可以采取以下措施: 1.选择合适的采样频率示波器应该选择与被测信号频率相近的采样频率,避免采样过高或过低导致失真和误差。 2.提高采样精度:增加采样点数或采用更精确的ADC器件,可以提高测量结果的精度,减小误差。 3.使用合适的触发方式:示波器的触发功能可以让测量信号以确定的条件进行采样,避免随机误差的影响。 4.校准示波器:定期对示波器进行校准,确保其测量结果准确可靠。 5.降低噪声干扰:通过合理的布线、屏蔽和滤波等措施,降低来自外部干扰源的影响,避免误差的产生。 6.消除信号漂移:示波器应该具有自动或手动调节垂直位置和水平位置的功能,以便及消除信号的漂移,提高测量的准确性。 总之,示波器在进行频率测量,通过选择合适的采样频率、提高采样精度、使用合适的触发方式、校准示波器、降低噪声干扰和消除信号漂移等方法,可以减少误差,提高测量的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值