第一章 课程概述.
第二章 控制设备
第2.2节 串行SPI接口控制PE4312数控衰减器.
第三章 控制仪器
第3.2节 通过GPIB控制信号源.
第3.3节 通过GPIB控制矢量网络分析仪.
第3.4节 通过GPIB控制频谱仪.
第四章 控制软件
第五章 综合案例一
第5.2节 应用工具包得到幅相加权.
第5.3节 共用端口的SPI控制.
第六章 综合案例二
第七章 综合案例三
第八章 课程总结
在前节介绍了通过GPIB接口控制矢量网络分析仪的方法,在本节将简要介绍如何通过GPIB对频谱分析仪进行,首先是GPIB连接的代码如下。
%% GPIB频谱仪连接
delete(instrfindall);
instrObj = visa('AGILENT','GPIB0::16::INSTR'); % 创建仪器连接对象
fopen(instrObj); % 连接仪器
fprintf(instrObj, '*IDN?'); % 询问IDN
idn = fscanf(instrObj) % 读取IDN
% ‘控制代码’
fclose(instrObj);
delete(instrObj);
可以对比前节代码,GPIB连接的部分基本上完全相同,如果有多台仪器需要更改对象命名“instrObj”,同时“GPIB0::16::INSTR”中的连接数字会有不同。
在下面射频频谱仪的语句中,主要对中心频率 FREQUENCY 、带宽 SPAN 、分析带宽BW 、参考电平 LEVEL 进行设置,并开启标注点,并标注最大值。
%% 设置频谱仪
FREQUENCY = 1e9; % 中心频率1GHz
SPAN = 500e6; % 带宽500MHz
BW = 1e5; % 分析带宽100kHz
LEVEL = 0; % 参考电平为0dBm
fprintf(instrObj,':SENS:FREQ:CENT %f HZ\n', FREQUENCY); % 设置中心频率
fprintf(instrObj,':SENS:FREQ:SPAN %f HZ\n', SPAN); % 调整带宽
fprintf(instrObj,':SENS:BAND:RES %f HZ\n', BW); % 调整分析带宽
fprintf(instrObj,':DISP:WIND:TRAC:Y:RLEV %f DBM\n', LEVEL); % 设置参考电平
fprintf(instrObj,':CALC1:MARK1:STAT ON'); % 开启标注
fprintf(instrObj,':CALC1:MARK1:MAX:PEAK');% 标注最大点
最后,读取最大点的横轴X即频率(单位Hz)和纵轴Y即幅度(单位dBm)。同样由于读取的是字符串,需要转换成数字,这里用了 str2double 函数。
%% 读取峰值的测试结果
fprintf(instrObj,'CALC:MARK1:X?');
X = str2double(fscanf(instrObj));
fprintf(instrObj,'CALC:MARK1:Y?');
Y = str2double(fscanf(instrObj));
这里只是频谱仪最基本的操作,其实只要学会查阅相关的VISA语句,无论什么仪器,理论上所有的手动操作流程都能够转化为代码自动控制。需要注意的是,不同厂家不同型号的仪器相同操作可能对应的指令不同,如果更换测试平台,最好在仔细检查下代码的兼容性。
类似前面的信号源控制,实际使用时可能需要将频谱仪相关的代码写成一个函数,输入参数进行调用。这里将前面三部分代码进行组合,以仪器地址ADD,中心频率FREQUENCY(单位Hz),带宽SPAN(单位MHz),分析带宽BW(单位Hz),参考电平LEVEL(单位dBm)为函数的输入,读取到的最大电平Y(单位dBm)和最大值频率(单位Hz)为函数的输出。
%% GPIB频谱仪连接
function [X Y] = SAContr(ADD,FREQUENCY,SPAN,BW,LEVEL)
instrObj = visa('AGILENT',ADD); % 创建仪器连接对象
fopen(instrObj); % 连接仪器
fprintf(instrObj,':SENS:FREQ:CENT %f HZ\n', FREQUENCY); % 设置中心频率
fprintf(instrObj,':SENS:FREQ:SPAN %f HZ\n', SPAN); % 调整带宽
fprintf(instrObj,':SENS:BAND:RES %f HZ\n', BW); % 调整分析带宽
fprintf(instrObj,':DISP:WIND:TRAC:Y:RLEV %f DBM\n', LEVEL); % 设置参考电平
fprintf(instrObj,':CALC1:MARK1:STAT ON'); % 开启标注
fprintf(instrObj,':CALC1:MARK1:MAX:PEAK');% 标注最大点
%% 读取峰值的测试结果
fprintf(instrObj,'CALC:MARK1:X?');
X = str2double(fscanf(instrObj));
fprintf(instrObj,'CALC:MARK1:Y?');
Y = str2double(fscanf(instrObj));
fclose(instrObj);
delete(instrObj);
delete(instrfindall);
从稍专业的角度来看,这样的代码效率会比较低,因为每次运行这个函数都会从头到尾的运行一遍程序,而在某些应用场景,其实并不需要重新设置频谱仪,只是需要重新找个最大点读数即可。避免这种低效操作的方法之一是使用面向对象编程,但考虑到这里的目标只是帮助射频工程师快速的实现原型系统并解决手头的问题,而不是实现一个高效的工程化的自动测试系统,因此这种顺序的编码方式可能更好理解和使用。
本节介绍了采用GPIB控制频谱仪完成峰值幅度测试的方法,包括连接仪器,设置中心频率、带宽、分析带宽、参考电平、标注并读取最大点频率幅度等操作。