mirror of
https://github.com/njchorda/PicoVNA-106-MATLAB-Library.git
synced 2026-02-25 09:20:46 -05:00
Initial
This commit is contained in:
152
PicoVNA106.m
Normal file
152
PicoVNA106.m
Normal file
@@ -0,0 +1,152 @@
|
||||
classdef PicoVNA106
|
||||
properties
|
||||
v;
|
||||
end
|
||||
|
||||
methods
|
||||
function obj = PicoVNA106()
|
||||
obj.v = tcpclient('localhost', 5025);
|
||||
obj.v.Timeout = 10; %default
|
||||
end
|
||||
|
||||
function sweep(obj)
|
||||
obj.sendCommand('INIT');
|
||||
readline(obj.v);
|
||||
end
|
||||
|
||||
function p = getPowerLevel(obj)
|
||||
% Outputs power in dBm
|
||||
obj.clearBuffer();
|
||||
pstr = obj.sendCommand('SENS:LEV?');
|
||||
splt = strsplit(pstr, ' ');
|
||||
p = str2double(splt{1});
|
||||
end
|
||||
|
||||
function setPowerLevel(obj, p)
|
||||
% In dBm
|
||||
obj.sendCommand(['SENS:LEV ' num2str(p)]);
|
||||
obj.clearBuffer();
|
||||
end
|
||||
|
||||
function setContinuousSweep(obj)
|
||||
obj.sendCommand('INIT:CONT:ALL');
|
||||
end
|
||||
|
||||
function [S11, S12, S21, S22] = getSParams(obj)
|
||||
% Function does not initiate a sweep, it only gathers the data
|
||||
% in the buffer.
|
||||
obj.clearBuffer();
|
||||
obj.sendCommand('CALC:DATA S11,POLAR');
|
||||
S11temp = readbinblock(obj.v, 'double');
|
||||
S11 = S11temp(1:2:end) + 1i*S11temp(2:2:end);
|
||||
|
||||
obj.sendCommand('CALC:DATA S21,POLAR');
|
||||
S21temp = readbinblock(obj.v, 'double');
|
||||
S21 = S21temp(1:2:end) + 1i*S21temp(2:2:end);
|
||||
|
||||
obj.sendCommand('CALC:DATA S12,POLAR');
|
||||
S12temp = readbinblock(obj.v, 'double');
|
||||
S12 = S12temp(1:2:end) + 1i*S12temp(2:2:end);
|
||||
|
||||
obj.sendCommand('CALC:DATA S22,POLAR');
|
||||
S22temp = readbinblock(obj.v, 'double');
|
||||
S22 = S22temp(1:2:end) + 1i*S22temp(2:2:end);
|
||||
end
|
||||
|
||||
function f = getFreqAxis(obj)
|
||||
obj.clearBuffer()
|
||||
freqStart = obj.sendCommand('SENS:FREQ:STAR?');
|
||||
freqStart = obj.freqStrConvert(freqStart);
|
||||
freqStop = obj.sendCommand('SENS:FREQ:STOP?');
|
||||
freqStop = obj.freqStrConvert(freqStop);
|
||||
numPoints = obj.sendCommand('SENS:SWE:POIN?');
|
||||
f = linspace(freqStart, freqStop, numPoints);
|
||||
end
|
||||
|
||||
function S = readToSparamsObject(obj)
|
||||
w = warning('off', 'all');
|
||||
S = SPARAMS();
|
||||
w = warning('on', 'all');
|
||||
[S.S11, S.S12, S.S21, S.S22] = obj.getSParams();
|
||||
S.S11 = S.S11'; S.S12 = S.S12'; S.S21 = S.S21'; S.S22 = S.S22';
|
||||
S.f = obj.getFreqAxis();
|
||||
S.f = S.f';
|
||||
S.setZ0(50);
|
||||
S.setNumPorts(2);
|
||||
end
|
||||
|
||||
function clearBuffer(obj)
|
||||
w = warning('off', 'all');
|
||||
obj.v.Timeout = 0.2;
|
||||
resp = 1;
|
||||
while ~isempty(resp)
|
||||
try
|
||||
resp = readline(obj.v);
|
||||
catch
|
||||
disp('No response from VNA when clearing buffer');
|
||||
end
|
||||
end
|
||||
obj.v.Timeout = 10;
|
||||
w = warning('on', 'all');
|
||||
end
|
||||
|
||||
function freq = freqStrConvert(obj, freqStr)
|
||||
freqStr = lower(freqStr);
|
||||
strSplt = split(freqStr, ' ');
|
||||
switch lower(char(strSplt(2)))
|
||||
case 'khz'
|
||||
scale = 1e3;
|
||||
case 'mhz'
|
||||
scale = 1e6;
|
||||
case 'ghz'
|
||||
scale = 1e9;
|
||||
end
|
||||
freq = str2double(strSplt{1})*scale;
|
||||
end
|
||||
|
||||
function setLocal(obj)
|
||||
obj.sendCommand('SYST:LOC');
|
||||
end
|
||||
|
||||
function retVal = sendCommand(obj, command)
|
||||
if contains(command, '?') == 1
|
||||
writeline(obj.v, command);
|
||||
retVal = readline(obj.v);
|
||||
else
|
||||
writeline(obj.v, command);
|
||||
retVal = 0;
|
||||
end
|
||||
end
|
||||
|
||||
function reset(obj)
|
||||
obj.sendCommand('*RST');
|
||||
end
|
||||
|
||||
function selfTest(obj)
|
||||
retStr = obj.sendCommand('*TST?');
|
||||
try ret = str2double(retStr);
|
||||
catch
|
||||
error('Non-numerical response')
|
||||
end
|
||||
if(ret == 0)
|
||||
disp(['No errors found in self-test, code:' num2str(ret)]);
|
||||
else
|
||||
disp(['Error code: ' (ret)]);
|
||||
end
|
||||
end
|
||||
|
||||
function id = getID(obj)
|
||||
id = obj.sendCommand('*IDN?');
|
||||
end
|
||||
|
||||
function bool = deInit(obj)
|
||||
if(isvalid(obj.v) == 1)
|
||||
clear obj.v;
|
||||
bool = 1;
|
||||
else
|
||||
bool = 0;
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user