基本测量(测量带通滤波器)
概述
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