刘 佶
(山西职业技术学院, 山西 太原 030006)
周期信号被广泛应用于雷达、声纳、无人驾驶等领域,对周期信号的波形类型识别以及参数测量也成为了许多电子产品在实现其需求时的基本功能[1]。本文基于全国大学生电子设计竞赛周期信号参数测量题目[2],使用STM32F4系列MCU完成了赛题,并达到了赛题要求的性能指标[3-4]。设备可以识别50 mV≤VPP≤10 V、1 Hz≤f≤50 kHz的正弦波、方波、三角波的类型、频率、峰峰值,误差不超过1%,并能测量方波信号的占空比,范围为 20%~80%,绝对误差的绝对值不大于 2%,测量过程在3 s内完成。
频率测量通常有时域和频域两种方法。频域法是将被测信号通过傅立叶变换得到其频谱,找到基波对应的频点即为周期信号的频率。在数字信号处理中,首先将被测信号通过模拟-数字转换变为数字信号,再通过离散傅立叶变换(DFT)得到其频谱[5]。离散傅立叶变换的公式如下:
(1)
其中:X(m)为频谱第m点值;x(n)为时域离散信号第n点的值;N为离散傅立叶变换的总点数。由于DFT的计算量大,频谱任何一点的值X(m)的计算都需要N-1次复数加法和N次复数乘法。在工程实现中,通常使用快速傅立叶变换(FFT)在处理器上编程实现离散信号从时域到频域的变换[6]。FFT的算法如下:
X(k)=X1(k)+e-j2πk/N·X2(k).
(2)
(3)
考虑精度要求的情况下,对于FFT而言,其频率分辨率等于采样率/FFT点数。对1 Hz的信号,误差要求为±0.01 Hz,假如使用1 024点的FFT,采样率需要小于10 Hz才能满足精度要求。在这样的采样率下,积累够1 024点的数据需要100 s。这么长的转换时间无法符合题目要求,也大大超过了人们对于电子设备性能的预期。
使用时域方法,则是将被测信号做为触发源,在程序内部使用计数器对一个频率高的时钟计数,两次上升沿(或下降沿)之间所计的时钟个数可以转换成被测信号的周期,进而求出频率。对于要求被测频率范围的信号,在满足±1%相对误差要求的前提下,需要计数时钟信号频率大于被测信号频率的100倍。这样计算,至少需要频率为5 MHz的时钟信号用来计数。
STM32F4系列的MCU,内部定时器提供了输入捕获的功能,可以完成对于上升沿(或下降沿)做为触发信号的计数。而且,内部用于计数的时钟也是由系统时钟得到,完全可以满足精度的要求。因此本文选取时域方式完成频率的测量,计数时钟频率为7.2 MHz,可以在满足精度要求的前提下测量70 kHz的信号。
由于输入的信号有不同类型、不同幅度,因此在使用MCU的输入捕获功能之前,需要将被测信号进行幅度处理、整形,使之全部变为低电平0 V、高电平3.3 V的方波信号[7]。输入信号调理电路框图如图1。
图1 信号调理电路
使用电阻网络将输入信号的峰峰值从50 mV~10 V变换为8.25 mV~1.65 V,再使用运放搭建的加法电路叠加1.65 V的直流电压,使双极型信号变换为单极型,转换后的信号通过电压比较器进行整形,可得到幅度符合要求的方波型号。
使用MCU定时器的输入捕获的功能,可在测量周期的同时记录高电平的持续时间,通过计算得到方波的占空比。
将被测信号进行模拟-数字转换后,可通过程序计算其最大和最小值,进而得出峰峰值。对于50 mV的信号,精度要求为0.5 mV。STM32F4系列MCU内部的ADC分辨率为12位,如果使用3.3 V做为参考电源,采样精度为3.3/4096≈0.8 mV,无法满足精度要求。因此对于幅度低的信号,需要进行放大后再进行采样。
STM32F4系列MCU内部的ADC,在使用3.3 V做为参考电源时,只可以测量峰峰值为1.65 V的被测信号,对于大于这个范围直到10 V的输入,需要进行信号的缩小处理。
本文中使用VCA810压控增益放大器进行被测信号的放大和缩小[8]。该模块具有-40 dB至+40 dB的可调增益范围,并可以使用MCU的DAC做为电压控制信号改变增益。MCU程序在初始化后,使用0 dB的增益设置,当采集完计算出峰峰值小于100 mV后,通过DAC输出电压将模块增益设置为8 dB以满足对于小信号精度的要求;当采集完计算出峰峰值大于1.65 V后,通过DAC输出电压将模块增益设置为-8 dB以满足对于大信号幅度的要求;当采集完计算出峰峰值介于100 mV~1.65 V之间时,保持模块增益为0 dB。此部分的程序执行流程如图2。
图2 峰峰值计算流程
波形识别的算法同样分为时域和频域。在频域中,正弦波只有基波信号,方波的基波分量为3次谐波的3倍,三角波的基波分量为3次谐波的9倍[9]。在时域中,可以通过一个周期最大值与其附近值的变化率来判别。在采样率足够大的前提下,对于正弦波,最大值与左右第一点、左右第一点与左右第二点之间的斜率是不一致的;对于方波,最大值与左右第一点、左右第一点与左右第二点之间的斜率不变且为0;对于三角波,最大值与左右第一点、左右第一点与左右第二点之间的斜率不变且等于1。由于频域方法在识别时可以弥补单个点由于噪声产生的误差,本文采用此方法实现波形的识别。
按照前述内容对系统原理的分析与功能设计,设计的整体系统架构如图3。
图3 系统架构
MCU的程序按照下图流程执行:
图4 程序执行流程
本文测量了不同频率、峰峰值、占空比的正弦波、三角波、方波。每种波形选取了3个频率,每个频率选取了3个峰峰值,在此基础上,方波还选取了3种占空比。所选取的部分被测信号参数和测量结果如表1。
表1 被测信号参数和测量结果
从结果分析,所设计系统对于频率、占空比测量都是准确的。但是,当被测的输入信号幅度较小的时候,测量的结果虽符合要求,但存在偏差。这是由于被测信号的幅度会受到系统噪声影响,这种噪声是mV级别的。当信号幅度小的时候,噪声的影响会表现在测量结果上。
信号的噪声是影响小信号幅度测量的主要因素,噪声的来源主要是电源的纹波和电路板在布局布线过程中产生的串扰。为了减小噪声,可以在电源的出口放置用于滤波的并联电容和串联磁珠。另外,模块与模块之间的连线应该尽量避免使用飞线的方式,在可能的情况下将所有模块放置在一块电路板上并分区域布置。在不得不使用飞线的情况下,也要将飞线控制在最短的长度。