基本测量(测量带通滤波器)

E5071C

基本测量(测量带通滤波器)

有关应用程序的其他主题

概述

apl_bsc.vba展示(VBA程序)说明如何进行带通滤波器的基本测量的样本程序。这个VBA程序由以下标准模块组成

对象名

模块类型

内容

mdlBscMeas

标准模块

进行带通滤波器的基本测量

程序概述

样本程序利用85032F校准套件进行全二端口校准,测量带通滤波器(中心频率:947.5 MHz),然后计算并显示其带宽、插入损耗等。这种测量与快速入门中的带通滤波器测量实例相同。

程序说明

当运行这个VBA程序时要进行复位,测量条件进行自动设置,并显示“进行全二端口校准”消息。为了进行全二端口校准,点击Yes;否则点击No

为了进行校准,请按照屏幕上的消息将Agilent 85032F校准套件的每个标准连接到指定的端口,然后点击OK以测量校准数据。点击Cancel(删除)以返回校准开始。您不能跳过隔离校准。当完成所有标准的校准数据测量时,将显示“所有的校准数据已完成”的消息,并计算出校准系数。

  • 当您在完成必要的校准数据测量之前删除校准数据测量时,设置条件可能不能返回其以前的状态。

然后,消息“连接被测件,然后按下Macro Setup(宏程编排)> Continue(继续)”显示在LCD显示器底部的仪器状态栏中。连接被测件并执行Macro Setup(宏程编排)> Continue(继续)。测量完成之后,搜索结果显示在回送窗口,如下所示。如果没有找到带宽搜索目标,则窗口只显示用标记得到的插入损耗结果。

执行"apl_bsc.vba"中的程序之后的显示示例

下面详细说明基本的测量程序(对象名:mdlBscMeas)。添加行号只用于说明,并不在实际的程序源代码中出现。

120行到160行

将扫描中心值(947.5 MHz)、扫描间隔值(200 MHz)、测量点数(401)、中频带宽(10 kHz)和功率电平(-10 dBm)分别存储到Center, Span, Nop, IfBw和Pow变量中。

170行到210行

将迹线数量(1)、测量参数(S21)、数据格式(对数幅度)、校准套件号(4: 85032F)和保存文件名称(State08.sta)分布储存到NumTrac, Par, Fmt, CalKit和File变量中。

250行

将E5071C返回预置状态。

290行到300行

对于通道1使连续触发启动模式接通,并将触发源设置为总线触发。

320行到360行

对于通道1,将扫描中心值设置为Center(中心)变量,扫描间隔值设置为Span(间隔)变量,测量点数设置为Nop变量,中频带宽设置为IfBw变量,功率电平设置为Pow变量。

380行到410行

对于通道1,将迹线数设置为NumTrac变量,测量参数设置为Par变量,数据格式设置为Fmt变量。

450行

将通道1的校准套件号存储到CalKit(校准套件)变量中。

460行

将1和2存储到表示用于全二端口校准的端口的port(端口)变量中。

480行

调用Calib_Solt程序(1200至2130行)

520行到530行

将仪器设置和校准系数保存到文件中,文件名由File(文件)变量指定。

580行

显示一条提示连接上LCD显示器下部的仪器状态栏中的DUT(被测件)的消息,连接之后等待Macro Setup(宏程编排)> Continue(继续)的操作。

620行到630行

产生用来起动单次扫描的触发脉冲,然后等待测量完成(1由SCPI.IEEE4882.OPC对象读出)。

650行

通道1的迹线1执行自动定标,以设置最佳显示比例。

690行到710行

显示标记1,然后移动它,使激励值等于中心变量值。然后,这些行读出标记1的响应值,并将其存储到MkrVal变量中。

730行

启动始于Bw_Err(890至950行)的出错处理程序。如果发生运行时出错,程序便转到出错处理程序。

750行到770行

将带宽定义值设置为-3 dB,带宽搜索结果显示设置为接通,读出带宽搜索结果(带宽、中心频率、Q值和插入损耗),并将其存储到BwData变量中。

790行到840行

依据带宽搜索结果,这些行将带宽存储到Bw变量中心频率存储到Cent变量中,Q值存储到Qfac变量中,插入损耗存储到Loss变量中。然后,程序转到始于Skip_Bw_Err的处理操作。

880行到960行

定义运行时出错处理程序。这些行读出并显示错误数量和所发生错误的出错消息,以后将0存储到Bw、Cent和Qfac变量中,并将标记1(MkrVal(0)变量)的响应值存储到Loss变量中。然后程序完成差错处理并转入下一个处理操作。

1000行到1010行

根据Bw和Cent变量的值,计算2个(较高和较低)截止频率,并将其存储到CutLow和CutHigh变量中。

1030行到1110行

在回送窗口中显示搜索结果(Bw, Cent, CutLow, CutHigh, Qfac和Loss变量的值)。

1130行到1160行

显示询问是否希望再次进行测量的消息。点击Yes(是)返回被测件连接部分,否则点击No(否)以终止程序。

步骤:Calib_Solt (1200行到2130行).

1260行到1300行

显示提示执行全n端口校准(由SoltType变量指定)的消息。点击cancel(删除)以取消校准。

1320行到1410行

将校准类型设置到针对由端口变量指定的端口的全n端口校准。

1450行到1520行

显示提示将开路标准连接到指定端口的消息。连接完成之后,这些行开始测量由点击OK引发的开路校准数据,并等待完成测量。点击Cancel(删除)以返回校准开始。

1540行到1610行

显示提示将短路标准连接到指定端口的消息。连接完成之后,这些行开始测量由点击OK引发的短路校准数据,并等待完成测量。点击Cancel(删除)以返回校准开始。

1630行到1700行

显示提示将负载标准连接到指定端口的消息。连接完成之后,这些行开始测量由点击OK引发的负载校准数据,并等待完成测量。点击Cancel(删除)以返回开始校准。

1750行到1840行

显示提示将直通标准连接到指定端口的消息。连接完成之后,这些行开始测量由点击OK引发的直通校准数据,并等待完成测量。点击Cancel(删除)以返回开始校准。

1880行到2060行

当校准类型不是1端口校准时(SoltType变量指定值不是1),显示询问是否希望测量隔离校准数据的消息。当点击Yes(是)时,显示提示将两负载标准连接到两个指定端口(由端口(I-1)和端口(J-1)变量指定)的消息。连接完成之后,这些行开始测量由点击OK引发的隔离校准数据,并等待完成测量。点击Cancel(删除)以返回校准开始。

2080行到2090行

根据测出的校准数据计算校准系数,并启动误差修正功能。然后,这些行显示校准完成消息。

测量带通滤波器(对象名称:mdlBscMeas)

10| Sub Main()

20|

30| Dim Par As String, Fmt As String, File As String

40| Dim Center As Double, Span As Double, IfBw As Double, Pow As Double

50| Dim Bw As Double, Cent As Double

60| Dim CutLow As Double, CutHigh As Double

70| Dim Qfac As Double, Loss As Double

80| Dim MkrVal As Variant, BwData As Variant

90| Dim Nop As Long, NumTrac As Long, CalKit As Long, Buff As Long

100| Dim Port As Variant, Error As Variant

110|

120| Center = 947500000# 'Center freq : 947.5 MHz

130| Span = 200000000# 'Span freq : 200 MHz

140| Nop = 401 'Number of points : 401

150| IfBw = 10000# 'IF bandwidth : 10 kHz

160| Pow = -10 'Power level : -10dBm

170| NumTrac = 1 'Number of traces : 1

180| Par = "S21" 'Meas. parameter : S21

190| Fmt = "MLOG" 'Data format : Log Mag

200| CalKit = 4 'Calibration kit : 85032F

210| File = "State08.sta" 'Saved file name : State08.sta

220|

230| '''Presetting the E5071C

240|

250| SCPI.SYSTem.PRESet

260|

270| '''Setting measurement conditions

280|

290| SCPI.INITiate(1).CONTinuous = True

300| SCPI.TRIGger.SEQuence.Source = "BUS"

310|

320| SCPI.SENSe(1).FREQuency.Center = Center

330| SCPI.SENSe(1).FREQuency.Span = Span

340| SCPI.SENSe(1).SWEep.POINts = Nop

350| SCPI.SENSe(1).BANDwidth.RESolution = IfBw

360| SCPI.Source(1).POWer.LEVel.IMMediate.AMPLitude = Pow

370|

380| SCPI.CALCulate(1).PARameter.Count = NumTrac

390| SCPI.CALCulate(1).PARameter(1).DEFine = Par

400| SCPI.CALCulate(1).PARameter(1).Select

410| SCPI.CALCulate(1).SELected.Format = Fmt

420|

430| '''Performing full 2-port calibration

440|

450| SCPI.SENSe(1).CORRection.COLLect.CKIT.Select = CalKit

460| Port = Array(1, 2)

470|

480| Calib_Solt 1, 2, Port

490|

500| '''Saving state & cal data

510|

520| SCPI.MMEMory.STORe.STYPe = "CST"

530| SCPI.MMEMory.STORe.STATe = File

540|

550| '''Connecting DUT

560|

570| Meas_Start:

580| Prompt ("Connect DUT, and then press [Macro Setup]-Continue button.")

590|

600| '''Performing single sweep

610|

620| SCPI.TRIGger.SEQuence.SINGle

630| Dmy = SCPI.IEEE4882.OPC

640|

650| SCPI.DISPlay.WINDow(1).TRACe(1).Y.SCALe.AUTO

660|

670| '''Analyzing the results

680|

690| SCPI.CALCulate(1).SELected.MARKer(1).STATe = True

700| SCPI.CALCulate(1).SELected.MARKer(1).X = Center

710| MkrVal = SCPI.CALCulate(1).SELected.MARKer(1).Y

720|

730| On Error GoTo Bw_Err

740|

750| SCPI.CALCulate(1).SELected.MARKer(1).BWIDth.THReshold = -3

760| SCPI.CALCulate(1).SELected.MARKer(1).BWIDth.STATe = True

770| BwData = SCPI.CALCulate(1).SELected.MARKer(1).BWIDth.DATA

780|

790| Bw = BwData(0)

800| Cent = BwData(1)

810| Qfac = BwData(2)

820| Loss = BwData(3)

830|

840| GoTo Skip_Bw_Err

850|

860| Bw_Err:

870|

880| Error = SCPI.SYSTem.Error

890| MsgBox "Error No:" & Error(0) & " , Description:" & Error( 1)

900|

910| Bw = 0

920| Cent = 0

930| Qfac = 0

940| Loss = MkrVal(0)

950|

960| Resume Skip_Bw_Err

970|

980| Skip_Bw_Err:

990|

1000| CutLow = Cent - Bw / 2

1010| CutHigh = Cent + Bw / 2

1020|

1030| ECHO "##Measurement Result##"

1040| ECHO " BW:" & Bw

1050| ECHO "cent:" & Cent

1060| ECHO " low:" & CutLow

1070| ECHO "high:" & CutHigh

1080| ECHO " Q:" & Qfac

1090| ECHO "loss:" & Loss

1100| SCPI.DISPlay.TABLe.TYPE = "ECHO"

1110| SCPI.DISPlay.TABLe.STATe = True

1120|

1130| Buff = MsgBox("Do you make another measurement?", vbYesNo, "Bandpass fileter measurement")

1140| If Buff = vbYes Then

1150| GoTo Meas_Start

1160| End If

1170|

1180| End Sub

1190|

1200| Private Sub Calib_Solt(Chan As Long, SoltType As Long, Port As Variant)

1210|

1220| Dim Dmy As Long, I As Long, J As Long, Buff As Long

1230|

1240| Cal_Start:

1250|

1260| Buff = MsgBox("Perform the full " & SoltType & "-port cali bration.", vbOKCancel, "Full" & SoltType & "-port calibration")

1270|

1280| If Buff = vbCancel Then

1290| GoTo Cal_Skip

1300| End If

1310|

1320| Select Case SoltType

1330| Case 1

1340| SCPI.SENSe(Chan).CORRection.COLLect.METHod.SOLT1 = Port(0)

1350| Case 2

1360| SCPI.SENSe(Chan).CORRection.COLLect.METHod.SOLT2 = Port

1370| Case 3

1380| SCPI.SENSe(Chan).CORRection.COLLect.METHod.SOLT3 = Port

1390| Case 4

1400| SCPI.SENSe(Chan).CORRection.COLLect.METHod.SOLT4 = Port

1410| End Select

1420|

1430| For I = 1 To SoltType

1440|

1450| Buff = MsgBox("Connect the Open standard to Port " & CS tr(Port(I - 1)) & ".", _

1460| vbOKCancel, "Full" & SoltType & "-port calibration")

1470| If Buff = vbOK Then

1480| SCPI.SENSe(Chan).CORRection.COLLect.ACQuire.OPEN = Port(I - 1)

1490| Dmy = SCPI.IEEE4882.OPC

1500| Else

1510| GoTo Cal_Start

1520| End If

1530|

1540| Buff = MsgBox("Connect the Short standard to Port " & CStr(Port(I - 1)) & ".", _

1550| vbOKCancel, "Full" & SoltType & "-port calibration")

1560| If Buff = vbOK Then

1570| SCPI.SENSe(Chan).CORRection.COLLect.ACQuire.Short = Port(I - 1)

1580| Dmy = SCPI.IEEE4882.OPC

1590| Else

1600| GoTo Cal_Start

1610| End If

1620|

1630| Buff = MsgBox("Connect the Load standard to Port " & CStr(Port(I - 1)) & ".", _

1640| vbOKCancel, "Full" & SoltType & "-port calibration")

1650| If Buff = vbOK Then

1660| SCPI.SENSe(Chan).CORRection.COLLect.ACQuire.Load = Port(I - 1)

1670| Dmy = SCPI.IEEE4882.OPC

1680| Else

1690| GoTo Cal_Start

1700| End If

1710| Next I

1720|

1730| For I = 1 To SoltType - 1

1740| For J = I + 1 To SoltType

1750| Buff = MsgBox("Connect the Thru standard between Por t " & CStr(Port(I - 1)) & _

1760| " and Port " & CStr(Port(J - 1)) & ".", vbOKCancel, "Full" & SoltType & "-port calibration")

1770| If Buff = vbOK Then

1780| SCPI.SENSe(Chan).CORRection.COLLect.ACQuire.THRU = Array(Port(I - 1 ), Port(J - 1))

1790| Dmy = SCPI.IEEE4882.OPC

1800| SCPI.SENSe(Chan).CORRection.COLLect.ACQuire.THRU = Array(Port(J - 1 ), Port(I - 1))

1810| Dmy = SCPI.IEEE4882.OPC

1820| Else

1830| GoTo Cal_Start

1840| End If

1850| Next J

1860| Next I

1870|

1880| If SoltType <> 1 Then

1890| Buff = MsgBox("Do you measure the Isolation (Optional) ?", vbYesNo, "Full" & SoltType & "-port calibration")

1900| If Buff = vbYes Then

1910| For I = 1 To SoltType - 1

1920| For J = I + 1 To SoltType

1930| Buff = MsgBox("Connect the Load standard to Port " & Port(I - 1) & " and Port " & Port(J - 1) & ".", _

1940| vbOKCancel, "Full" & Solt Type & "-port calibration")

1950| If Buff = vbOK Then

1960| SCPI.SENSe(Chan).CORRection.COLLect.ACQuire.ISOLation = Array(Port( I - 1), Port(J - 1))

1970| Dmy = SCPI.IEEE4882.OPC

1980| SCPI.SENSe(Chan).CORRection.COLLect.ACQuire.ISOLation = Array(Port( J - 1), Port(I - 1))

1990| Dmy = SCPI.IEEE4882.OPC

2000| Else

2010| GoTo Cal_Start

2020| End If

2030| Next J

2040| Next I

2050| End If

2060| End If

2070|

2080| SCPI.SENSe(1).CORRection.COLLect.SAVE

2090| MsgBox "All calibration data completion."

2100|

2110| Cal_Skip:

2120|

2130| End Sub