STM32测量频率、占空比

本文介绍了STM32进行频率和占空比测量的方法,包括直接测频法、测周期法以及等精度测频法。重点讲解了等精度测频的工作原理,通过设置同步闸门,利用系统时钟与被测信号同时计数,确保测量精度。文中还提到了实际应用中如使用50MHz系统时钟测得25KHz频率的示例,并提及了信号整形和中断处理的相关内容。
摘要由CSDN通过智能技术生成

等精度测量频率
常用的频率测量方法有直接测频法,测周期法和等精度测频法。

直接测频法是由时基信号产生闸门,对被测信号进行计数,此法只适合测高频信号。测周期法是由被测信号产生闸门,对时基脉冲进行计数,此法只适合测低频信号(周期长)。等精度测频,设置一个与被测信号同步的闸门,同时对被测信号和时基脉冲进行计数。两个计数值之比即等于其频率比。此法可消除被测计数器的正负一个脉冲的误差,使其误差与被测频率无关,达到等精度测频。

等精度测频的示意图如下。sys_clk是系统时钟,也就是时基信号,sequence是被测信号,gate是闸门信号,使它与被测信号同步,得到gatebuf信号。在gatebuf信号为高(红线区域)时,对系统时钟和被测信号计数。假设系统时钟50MHz,计数结果是有10000个系统时钟周期,5个被测信号周期,则被测信号频率f0=50M*5/10000=25KHz。
在这里插入图片描述比较器整形
采用TLV3501将正弦波整形成方波
在这里插入图片描述74LS74触发
在这里插入图片描述

中断代码


void TIM2_Init(void)//定时器TIM2初始化配置
{
   
	GPIO_InitTypeDef  GPIO_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//使能GPIOA时钟
	
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);  //使能TIM2时钟
	
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);  //TIM2外部计数管脚接PA0
	
	TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //允许TIM2更新中断
	
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; 
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //从优先级0级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
	NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
	
	TIM_SetCounter(TIM2, 0);   // 清零TIM2计数器
	TIM_Cmd(TIM2,ENABLE);	 //使能定时器2

	
    
}

///****************************************************************************************/
void TIM3_Init(void)//定时器TIM2初始化配置
{
   
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);  //使能TIM3时钟
	
  TIM_TimeBaseInitStructure.TIM_Period = 0xffff; //自动重装载值
	TIM_TimeBaseInitStructure.TIM_Prescaler=0;  //定时器分频
	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up
STM32等精度频是一种用于测量信号频率的方法。在传统的频方式中,闸门时间是固定的,而等精度频的方法中,闸门时间不是固定的,而是被信号的整数倍。这样可以消除对被信号计数的±1误差,只与标准信号的计数个数有关。闸门时间越长,标准频率越大,标准信号的计数值越大,±1误差的影响就越小。在相同的闸门时间内,被信号的频率可以通过计算公式Fx=Nx*Fs/Ns来计算,其中Nx是被信号的计数个数,Fs是标准信号的频率,Ns是标准信号的计数个数。\[3\]在STM32中,可以使用TIM2的Counter Period来进行频,因为其位数足够大,而且时钟频率也足够高。如果位数不够用,可以考虑打开Global Interrupt,设置一个总计数器,在溢出中断里加上Period的值来扩展位数。\[2\]对于高频信号,可以忽略频时间的差别,但对于低频信号,可能需要延长频时间以确保准确性。\[1\] #### 引用[.reference_title] - *1* *2* [STM32 等精度频 TIM定时器 分高低频试](https://blog.csdn.net/Krism0912/article/details/125122491)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32实现等精度频](https://blog.csdn.net/zhang062061/article/details/114986976)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炼金怪z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值