跳到主要内容

3.5.3 计算频率

频率计算采用过零检测法,即通过测量信号波形相邻过零点之间的时间间隔来确定信号的频率。该方法假设信号是周期性的,因此两个相邻过零点之间的间隔即为信号的周期T,而频率f则等于1/T。

1.过零检测的基本原理

过零检测通过定时器中断计数来测量周期T。具体而言,周期T等于两个过零点间的采样点间隔除以定时器中断频率(本例中为20kHz)。因此,频率f可以通过以下公式计算得出:

f=中断频率intervalf = \frac {中断频率}{interval}

2.计算频率的步骤

1)遍历ADC数据:查找过零点,记录第一个过零点的位置,并计算后续过零点之间的间隔。

 for (uint32_t i = 2; i < 239; i++) {
if ((adc_data_raw[i+1] > 2048 && adc_data_raw[i - 1] <= 2048) &&
(adc_data_raw[i+2] > 2048 && adc_data_raw[i - 2] <= 2048)) {
if (rise_flag == 0) {
zero_crossing_count = i; // 记录第一个过零点的位置
rise_flag = 1; // 设置标志位
i += 5; // 跳过几个点,避免重复检测
} else {
interval = i - zero_crossing_count; // 计算两个过零点之间的间隔
break; // 找到第二个过零点后退出循环
}
}
}

2)过零点判断条件

  • adc_data_raw[i+1] > 2048 && adc_data_raw[i - 1] <= 2048:判断当前点是否从负半轴过渡到正半轴。
  • adc_data_raw[i+2] > 2048 && adc_data_raw[i - 2] <= 2048:进一步确认过零点的稳定性,避免误判。
  • 2048:这是ADC的中点值,表示0V。在12位ADC中,2048对应于3.3V的一半。

3)计算频率

找到两个过零点之间的间隔后,代码通过上述公式计算频率:

f=20000interval f = \frac {20000}{interval}

3.计算频率流程

  • 采集ADC数据:通过定时器中断采集信号的ADC值。
  • 过零检测:通过查找信号从负半轴过渡到正半轴的点,确定过零点。
  • 计算周期:通过测量两个过零点之间的采样点间隔,计算信号的周期。
  • 计算频率:根据周期和定时器中断频率,计算信号的频率。
  • 显示结果:将计算得到的频率值显示在LCD屏幕上。

通过以上步骤,我们可以准确地测量并显示输入信号的波形、峰峰值和频率等参数。