频谱分析仪是研究电信号频谱结构的仪器,用于信号失真度、调制度、谱纯度、频率稳定度和交调失真等信号参数的测量,可以测量放大器和滤波器等电路系统的某些参数,例如放大器的倍数、滤波器的类型、中心频率、截止频率等参数。是一种多用途的电子测量仪器。
本设计主控单片机使用stm32F103RTC6,时钟可以配置为72MHZ。AD模块是采用MAX公司的12位8通道的MAX197,串口模块使用PL2303进行上下位机通信,波特率可以自己配置。系统通过单片机控制AD的采样频率,根据FFT(快速傅里叶)采样定理可以知道,采样频率大于被测频率的2倍,进行信号的采样,采样后数据通过FFT变换就可以还原原理的信号,可以知道原来的信号频率,幅度,相位等信息。所以通过单片机控制AD的采样,通过USB转串口线将数据上传到上位机LabVIEW进行FFT变换处理。在上位机上显示被测信号的幅度谱和相位谱等信息。
本设计可以实现的频率测量范围是0HZ-12KHZ,最小步进频率是12HZ,可以测量正弦波、三角波、方波等波形。所以达到任务书要求的指标。
关键词:stm32F103RCT6;MAX197;FFT;LabVIEW频谱分析
本系统以stm32f103RCT6为主控单片机,外围有晶振电路,单片机复位电路和下载方式配置电路组成。单片机控制AD的采样速度,MAX197进行数据的采集。数据采集完后,通过串口上传上位机LabVIEW。上位机LabVIEW对数据进行FFT变换处理,显示被测信号的幅度谱和相位谱。
3 上下位机模块
3.1 下位机系统框图
图3.1 下位机框图
从图可以看出,下位机主控单片机为stm32,单片机通过定时器控制MAX197的采样速度,MAX197读取回来的数据,通过串口向串口传输数据。
3.2 下位机主控模块电路
3.2.1 晶振电路
图 3.2 晶振电路
Stm32有2个晶振电路,一个是HSE,常用外部高频和PLL倍频时使用,一般使用8MHz。另一个为外部低频晶振,系统待机或低功耗时有用到,一般使用32.768KHz。单片机内部有高低频RC振荡器。
3.2.2 单片机复位电路
图3.3 按键复位电路
单片机复位电路,没有按键按下时,输出高电压,按键按下时,输出低电平,单片机进行复位。单片机复位电路是必不可少的,为了防止程序跑飞,可以通过复位按键进行程序的复位。
3.2.3 stm32下载方式
图3.4 stm32下载方式配置
表3.1 单片机下载配置方式说明
BOOT0
BOOT1
程序存储位置
0
X
A
1
0
B
1
1
RAM
其中A代表程序从FLASH上启动, B则为进入芯片下载状态RAM,代表程序从RAM中运行,这个功能一般用的比较少,多数被用于RAM中的程序调试。本设计是使用方式A,把程序下载到flash上。
3.2.4 MAX197电路
图3.5 MAX197电路
MAX197电路,使用内部的基准源和内部时钟。内部基准源为4.096V,内部时钟通过在时钟脚加一个100pF的电容到地就可以产生1.5MHZ这样的时钟信号。使用5V电源供电,MAX197为12为AD,8通道。通过写指令,可以选择4种测量方式和测量的通道,电压的读取和处理。
3.3 下位机加法器模块
3.3.1 电源模块
图3.6 正负5V电源模块
电源模块是通过220V的交流输入,通过变压器将电压变为正负12V的交流,通过整流器将交流变成直流电压,但是纹波还是很大。通过大小不同的电容进行3级滤波。然后经过稳压芯片7805和7905将电压稳定在5V和-5V。在稳压后的输出再加2级不同的电容进行滤波。这样输出的正负5V的直流电压就比较稳定,纹波也比较小,一般为30mV这样。使用正负5V的电源的原因是给加法器OP07进行供电,因为交流信号的叠加需要使用正负电源。
3.3.2 加法器模块
图3.7 加法器电路
加法器使用OP07运算放大器,电源使用正负5V供电,加法器的目的是将2路信号进行叠加,将叠加后的信号通过主控电路板进行AD的采集,采集完的数据点,通过串口上传上位机进行FFT变换,分析出来叠加的2个信号的频率和幅度。为了更加强化FFT的作用,所以加入了这个加法器模块。
3.4 原理图和PCB
3.4.1 原理图
图3.8 原理图
上位机原理图使用STM32为主控单片机,外围电路有晶振、复位、指示灯、电源供应接口、MAX197、串口接口和下载器接口等。
3.5 USB转串口模块
3.5.1 原理图
图3.10 USB转串口原理图
使用PL2303作为串口通信的模块芯片,通过USB来连接电脑,数据进过PL2303进行电平变换后,通过PL2303的接收或者发送脚把数据传到单片机的串口。同理,单片机上传数据到电脑也是一样。其中PL2303使用一个12MHZ的晶振作为时钟电路,外加一下电源指示灯和一下滤波电容等电路组成。PL2303的电源是使用5V进行供电,经过PL2303后,可以输出一个3.3V的电压,因为主控单片机模块使用5V转3.3V的稳压芯片,所以可以不使用3.3V的电压给主控板子供电,考虑到MAX197是使用5V进行供电的,所以通过串口给主控电路板的电压是5V。3.6 上位机
3.6.1 上位机后面板
图3.12 上位机后面板
本设计串口是波特率是使用38400bit/s,串口号为自己电脑的串口号。使用USB转串口的时候,必须要安装串口驱动,这个可以在网上找到驱动。程序刚刚开始时,先进入一个大的while循环,循环里有个条件语句,条件成立的时候(按键按下的时候),才可以往下执行。否则一直在循环里等待按键按下。
程序使用顺序结果,上位机先向下位机发送命令(字符1),发完命令后,上位机延时等待,等待下位机进行数据采集、数据处理和数据上传。
然后上位机通过串口进行数据的读取,串口每次传输的数据是8位的二进制。串口默认读取出来的是字符串,所以上位机先要对数据进行转换,转换成无符号数,因为信号是交流或者直流,所以要将数据再转换成有符号数。因为下位机上传的数据是8位的2进制数,还没有转换成相应的电压,所以上位机先要对数据进行转换,转换成电压。这样才能够进行FFT变换处理。
当上位机判断接收到下位机上传的2048个数据点的时候。对数据进行FFT变换,FFT变换完的数据是双边带的,为了显示更加好看,我们只看前面的一半,因为后面的一半其实是和前面的一半是一样的。进过FFT变换后,数据出来是2048个复数点,所以需要对这些复数进行处理,需要对复数进行极坐标的变换。数据变换后有两个通道。一个是幅度谱,一个是相位谱。所以直接对数据进行显示处理。上位机处理完2048个数据后,再向下位机发送命令,这样下位机就可以采集数据和上传数据。这样做的目的是,为了上下位机的同步通信,保证数据的有效传输。
如果采集的是单一的信号,或者两个信号的幅度不一样,就可以显示最大的信号的频率和幅度。FFT变换后,会在相应频率点处出现比较大的幅度,所以可以通过一个求最大值的数据就可以比较出那个数据点上出现最大幅度值。通过计算就可以计算出相应的频率和幅度。通过显示控件进行显示出来。
本设计还加入一个数据保存功能,用户可以自己设定数据是否保存,通过保存按键进行选择处理。数据保存默认在桌面的数据文件夹里。保存数据是为了方便用户调用和数据处理分析。
3.6.2 上位机前面板
图3.13 上位机前面板
这个是LabVIEW的前面板,看到有三个示波器,一个是显示信号原来的波形,一个是显示信号的幅度谱,一个是显示信号的相位谱。通过测量线可以方便的测量信号的幅度和数值的读取。另外还加有信号幅度倍数调节按钮、系统总开关和数据是否保存等按钮,方便用户使用。其中还添加有2个显示控制,分别可以显示测量信号的最大幅度和对于频率值。
4 数据分析
说明:输入的幅度统一是1.00Vpp。
表5.1 数据处理
输入频率(HZ)
测量值(V)
电压差(V)
百分比(%)
输入频率(HZ)
测量值(V)
电压差(V)
百分比(%)
0
1.02
0.02
2
3200
0.95
0.05
5
100
0.79
0.21
21
3400
0.84
0.16
16
200
1.00
0.00
0
3600
0.75
0.25
25
300
0.75
0.25
25
3800
0.90
0.10
10
400
0.91
0.09
9
4000
1.00
0.00
0
500
1.00
0.00
0
4200
1.01
0.01
1
600
0.78
0.22
22
4400
1.01
0.01
1
700
1.02
0.02
2
4600
0.94
0.06
6
800
0.75
0.25
25
4800
0.82
0.18
18
900
1.00
0.00
0
5000
0.75
0.25
25
1000
0.91
0.09
9
5200
0.83
0.17
17
1100
0.91
0.09
9
5400
0.96
0.04
4
1200
1.00
0.00
0
5600
1.01
0.01
1
1300
0.80
0.20
20
5800
1.01
0.01
1
1400
1.04
0.04
4
6000
0.97
0.03
3
1500
0.75
0.25
25
6200
0.90
0.10
10
1600
1.00
0.00
0
6400
0.75
0.25
25
1700
0.91
0.09
9
6600
0.81
0.19
19
1800
0.93
0.07
7
6800
0.92
0.08
8
1900
1.00
0.00
0
7000
1.00
0.00
0
2000
0.80
0.20
20
7500
0.92
0.08
8
2200
0.75
0.25
25
8000
0.81
0.19
19
2400
0.90
0.10
10
8500
0.75
0.25
25
2600
1.00
0.00
0
9000
0.90
0.10
10
2800
1.01
0.01
1
9500
1.00
0.00
0
3000
1.01
0.01
1
10000
1.01
0.01
1
误差分析:因为采样频率是24KHZ,采样点数是2048。所以采样间隔是25000/2048 = 12.2HZ。AD是1位的,但是考虑到数据合并问题和串口通信问题,所以使用高8位。这样,数据的精度是8位。误差的来源主要有以下:
采样间隔=采样频率Fs/采样点数N。所以采样间隔为24KHZ/2048=12HZ,所以画FFT变换后的幅度谱时,有些点偏差比较大,例如被测频率是2KHZ,采样的附近点刚刚好在1.995KHZ,另外一个点是2.007KHZ,所以刚刚好没有采到最大值,因此会有误差。解决的方法是,提高测量频率Fs的频率或者增加测量的点数N。
AD是12位,但是考虑到上位机数据怎么合并为12位的问题,不知道怎么解决那么多数据,所以考虑上传高8位的数据,这样上位机就可以不用考虑数据合并的问题,所以电压分辨率=5/256=20mV,这个也是误差的主要来源之一。解决的方法是提高AD的位数来提高测量的精度。考虑到上位机数据合并和怎么传输12位数据的问题,所以本设计只传输8位有效电压位,这样就会有精度的误差,这个是产生误差的主要原因。
系统的稳定性也会带来很大的影响,例如供电的干扰、信号的不稳定、数据传输的不稳定等因素,AD读取的电压不稳定等等。解决的方法是,合理的布线,提高数据的稳定性。我现在在电源端加了很多的滤波电容,但是效果不是很好。
相位谱比较乱,只有在测量频率点附近的相位才比较明了。其他的频率相位是不确定的,所以在其他频率点的相位是未知的,测量出来的相位是未知的,所以很乱。
加法器是使用正负5V的电压进行供电,但是220V的交流电压经过变压,整流,滤波,稳压再滤波后,还是有纹波的。所以因为供电的不稳定会带来相应的影响。还有就是加法器(OP07)本身也会有一些温漂带来的影响等,所以在两个信号进行叠加和通过FFT变换后也会有一点的误差。
信号源的信号进入主控电路板的时候,因为阻抗的问题,可能信号的幅度也会受到影响,会导致信号的幅度可能会变小,但是这个影响是很小的。信号源的输出阻抗大概是50欧姆这样。所以只要我们的电路板的输入阻抗接近无穷大,这样信号输入的幅度就不会有变化,这个误差我们可以不用考虑,因为主控电路板的输入阻抗比较大。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/runweipa/article/details/138756212