|
LCR-Meter 4297A Agilent |
In diesem Post möchte ich mich einmal etwas anderem widmen. Es geht nicht um Retrotechnik, sondern um eine Kleinigkeit, die mir das Arbeiten im Büro erleichtert. Eines der vielen Messgeräte mit denen ich zu tun habe, ist ein Agilent LCR-Meter. Mit dem LCR-Meter 4297A kann man bekannterweise ja die Induktivität, die Kapazität, etc. von elektrischen Bauteilen und generell von Strukturen, die dem Bereich der Elektronik/Elektrotechnik zugeordnet sind, messen. Grob gesagt, der 4297A misst eigentlich nur Strom / Spannung, die Phasenlage zwischen den beiden und die Energierichtung. Und das bei einer bestimmten Frequenz. Mathematisch werden dann aus diesen Paramatern alle Größen wie L,C,R,X,Y,Q,PHI,... errechnet und ausgegeben. Die Frequenz hier hierbei vom 1MHz bis 3GHz (in 100kHz Schritten) einstellbar. Idealerweise kann das Messgerät nicht nur in einem Frequenzpunkt messen, sondern auch in vielen. Mit "vielen" ist hier gemeint, dass das Messgerät Frequenztabellen mit 32 Einträgen erzeugen kann. Von diesen Tabellen existieren acht Stück. So ist es möglich, den Verlauf einer gemessenen Größe in Form einer Kurve darzustellen. Allerdings ist das ziemlich umständlich. Die Inhalte der Tabellen müssen händisch (als "csv" Dateien) Tabelle für Tabelle exportiert und gespeichert werden. Das bedeutet, jede Tabelle muss einzeln angewählt werden. Danach ist der Dialog "Export List View" zu selektieren - dann ein Speicherpfad und Dateiname anzugeben. Erst jetzt werden die ersten 32 Datensätze exportiert. Dieser Vorgang ist insgesamt acht mal zu wiederholen. Gespeichert wird auf eine 3,5 Zoll Floppy Disc - das einzige verfügbare Medium. Man könnte den 4297A optiona auch in ein LAN hängen und eine Dateifreigabe einrichten. Der händische Export bleibt aber nicht erspart. Auf einem "normalen" Rechner können die .csv Files jetzt geöffnet werden. Die müssen dann im postprocessing händisch zusammengefügt werden. Erst jetzt kann aus den Daten ein Diagramm gebastelt werden. Hier bietet sich als Tool Matlab von Matworks an, das in unseren Laboren im Rahmen der Ausbildung häufig eingesetzt wird.
|
NI - GPIB-USB Controller |
Um diesen umständlichen Prozess wesentlich zu vereinfachen, habe ich ein kleines Skript erstellt, das über die SCPI - Befehle (Standard Commands for Progammable Instruments) mit dem Messgerät kommuniziert. Das soll heissen: Das Messgerät ist über einen GPIB-USB Controller mit einem PC verbunden. Auf dem PC befindet eine Matworks Matlab Installation samt den benötigten Toolboxen. Das Matlab-Script soll nun einfach die Tabellen der Reihe nach durchschalten und die Inhalte der einzelnen Parameter auslesen und einem Array speichern. Der Inhalt der Arrays wir dann direkt in einem Plot dargestellt. Diese Methode bedient sich aber nur der Inhalte der Tabellen. Es wäre natürlich auch möglich, über das Script in einer Schleife jede gewünschte Frequenz direkt einzustellen, die Messwerte auszulesen, die nächste Frequenz anzuwählen usw. Das würde max. 29990 Punkte über den gesamten Frequenzbereich ergeben. Die acht Tabellen á 32 Punkte erlauben hingegen nur 256 Punkte. Das ist fürs erste aber ausreichend und auch viel schneller.
|
Transmission Line 50 Ohm mit Abschlusswiderstand |
|
die Leitung ist terminiert |
In dem Beispiel ist der Impedanzverlauf (Z-Verlauf) einer 50 Ohm Transmissionline dargestellt. Das Ende der Leitung ist dabei mit einem 50Ohm Widerstand abgeschlossen. Der Frequenzbereich ist 1MHz bis 3 GHz. Anders sieht es aus, wenn die Leitung offen oder kurz geschlossen ist. Die elektromagnetische Welle wird dann nicht, wie bei dem "gematchten" System am Ende der Leitung in Wärmeenergie umgewandelt, sondern zurück in das System reflektiert.
|
die Leitung ist kurzgeschlossen |
Das folgende ganz einfache Matlabscript ermöglicht das Auslesen der Messgeräteparameter. Das Script dient als Beispiel, wie man schnell zu den Messdaten kommt. Im Programmingmanual des Herstellers vom LCR-Meter sind alle SCPI Commandos und reichlich Beispiele angeführt, mit denen man mit dem Messgerät kommunizieren kann.
1: %auslesen der agilent LCR Keule 4287A
2: %gekotet von ingmar bihlo Ende November 2017
3: %anschluss über gpib ni adapter
4: %LCR gpip adresse: 5
5: %%
6: %vorarbeiten an LCR Keule
7: %
8: % Es müssen 8 Tabellen mit je 32 Punkten definiert sein
9: % (power und average ist egal, wird nicht ausgelesen)
10: %
11: % unter "measurement parameters" muessen vier parameter definiert sein
12: % zb. Z, qhi, R, L, etc... diese sind dann in den variablen param1 bis 4
13: % enthalten
14: %%
15: % gpib interface oeffnen und identifier lesen
16: g = gpib('ni', 0, 5);
17: g.InputBufferSize = 100000; % Set the buffer size
18: fopen(g);
19: fprintf(g, '*IDN?')
20: idn = fscanf(g);
21: fclose(g);
22: num1all=0; % initialisieren der variablen für den summenvector
23: num2all=0;
24: num3all=0;
25: num4all=0;
26: freq=0;
27: fopen(g);
28: %read list parameters (frequency points)
29: fprintf(g, ':SOUR:LIST?');
30: fpoint=fscanf(g);
31: listchar=strsplit(fpoint,',');
32: list=[cellfun(@str2num, listchar(:,1:end))]
33: clear listchat; clear fpoint;
34: %analyze list content
35: points=freq(1);
36: for i=1:8
37: %Tables selecten
38: fprintf(g, strcat(':SOUR:LIST:TABL 0',num2str(i)));
39: pause(1); %pause 1s zum umschalten der tabelle
40: %parameter1 abholen
41: fprintf(g, ':DATA:FDAT1?'); %parameter 1 anfragen
42: par1=fscanf(g); %parameter 1 holen
43: string1=strsplit(par1,','); %parameter 1 string nach komma zerlegen
44: num1=[cellfun(@str2num, string1(:,1:end))] %parameter 1 strings in dec konvertieren
45: num1all=[num1all,num1]; %parameter1 aktuell mit parameter1 aus vorherigem durchlauf concentenaten
46: fprintf(g, ':DATA:FDAT2?');
47: par2=fscanf(g);
48: string2=strsplit(par2,',');
49: num2=[cellfun(@str2num, string2(:,1:end))]
50: num2all=[num2all,num2];
51: fprintf(g, ':DATA:FDAT3?');
52: par3=fscanf(g);
53: string3=strsplit(par3,',');
54: num3=[cellfun(@str2num, string3(:,1:end))]
55: num3all=[num3all,num3];
56: fprintf(g, ':DATA:FDAT4?');
57: par4=fscanf(g);
58: string4=strsplit(par4,',');
59: num4=[cellfun(@str2num, string4(:,1:end))]
60: num4all=[num4all,num4];
61: %read list parameters (frequency points)
62: fprintf(g, ':SOUR:LIST?');
63: fpoint=fscanf(g);
64: listchar=strsplit(fpoint,',');
65: listraw=[cellfun(@str2num, listchar(:,1:end))];
66: list=listraw(:,2:end); %von pos2 das feld schreiben (an pos ist die anzahl der zeilen)
67: for c=1:3:96
68: freq=[freq,list(c)]; %von jedem 3. wert aus list ein neues array bilden
69: end
70: clear listchat; clear fpoint;
71: pause (1);
72: end
73: %ausgabevariablen festlegen
74: frequency=freq(:,2:end);
75: param1=num1all(:,2:end);
76: param2=num2all(:,2:end);
77: param3=num3all(:,2:end);
78: param4=num4all(:,2:end);
79: %uerberflüssige variablen loeschen
80: clear c; clear i; clear list; %clear freq;
81: clear par1;clear par2;clear par3;clear par4;
82: clear string1;clear string2;clear string3;clear string4;
83: clear num1all;clear num2all;clear num3all;clear num4all;
84: fclose(g);
85: %plotten der ergebnisse
86: figure(1);
87: plot(frequency,param1);
88: grid on; hold on;
89: xlabel('Frequency [Hz]'); ylabel('Measurement Parameter1 |Z| [Ohm]');
90: title('Agilent LCR Keule');
91: % figure(2);
92: % plot(frequency,param2);
93: % grid on; hold on;
94: % xlabel('Frequency'); ylabel('Measurement Parameter2');
95: % title('Agilent LCR Keule');
96: %
97: % figure(3);
98: % plot(frequency,param3);
99: % grid on; hold on;
100: % xlabel('Frequency'); ylabel('Measurement Parameter3');
101: % title('Agilent LCR Keule');
102: %
103: % figure(4);
104: % plot(frequency,param4);
105: % grid on; hold on;
106: % xlabel('Frequency'); ylabel('Measurement Parameter4');
107: % title('Agilent LCR Keule');
Keine Kommentare:
Kommentar veröffentlichen