|
Keithley2000 Tischmultimeter |
Ein alter Begleiter im Bereich Messgeräte ist das Tischmultimeter von Keithley. In unseren Labors werden vorwiegend die Typen der 2000er Serie eingesetzt. Es gibt sie in unterschiedlichen Ausstattungsvarianten betreffend der Schnittstellen zur Aussenwelt. Hier ist GBIP-Bus natürlich ein Standard, ebenso wie RS232. Die neueren Geräte besitzen mittlerweile ein LAN Interface mit dem eine Kommunikation über das InternetProtokoll möglich ist. Über jede dieser Schnittstellen kann über "Standard Commands for Programmable Instruments" (SCPI) mit dem Gerät kommuniziert werden. In diesem Beispiel werde ich das Keithley 2000 über Matlab ansteuern und zyklisch über einen längeren Zeitraum Messwerte auslesen, diese in Matlab speichern und schlußendlich in einem Plot ausgeben - quasi einen simplen Datalogger konfigurieren. Der Zweck dieses Aufbaus ist es, den Spannungsverlauf (bzw. auch Strom) eines Akkus bzw. Batterie eines Low-Energie Device zu erfassen.
|
Rückseite des Keithley 2000 |
|
GPIB Interface (IEEE488) |
|
RS232 Schnittstelle | | |
In diesem Beispiel werde ich die serielle Datenübertragung per klassischer RS232 Schnittstelle verwenden, da diese für meine Anwendung vollkommen ausreicht. Zudem kann ich mir die Installation der Treiberpakete für das GPIP-USB Interface ersparen. :) Da viele der aktuellen Rechner und Laptops auch keine RS232 Ports mehr haben, muß ein USB-RS232 Adapter (beispielsweise FTDI232 etc.) her.
|
USB-RS232 Adaper am Keithley2000 |
Ist die Verbindung zwischen dem Multimeter und dem Rechner hergestellt, kann, wie in diesem Beispiel, über ein Matlabscript kommuniziert werden. Dem Keithley muß nur mehr mitgeteilt werden, dass es über die serielle Schnittstelle "sprechen" soll. Die folgenden Code-Schnipsel zeigen, wie man einfach über SCPI Daten auslesen kann:
1: %serialObject = instrfind('Type', 'serial', 'Port', 'COM26', 'Tag', '');
2: serialObject = serial('COM26','BaudRate',19200, 'DataBits',8);
3: % if isempty(serialObject)
4: % serialObject = serial('COM26','BaudRate',19200, 'DataBits',8);
5: % else
6: % fclose(serialObject);
7: % serialObject = serialObject(1)
8: % end
9:
10: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
11: %
12: % Sourcemeter 2000 setup
13: %
14: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
15: fopen(serialObject)
16: s.InputBufferSize = 5000;
17: fprintf(serialObject,'*RST');
18: fprintf(serialObject,'*CLS');
19:
20: time = now;
21: voltage = 0;
22: %%
23: figureinstanz = figure('NumberTitle','off',...
24: 'Name','Spannungslogg',...
25: 'Color',[0 0 0],'Visible','off');
26: plotinstanz = plot(voltage,time,'Color','red');
27:
28: %% Messzeit und evtl Messintervall
29: stoptime = 10; %60 seconds
30: timeInterval = 1; % nix brauch ma jetzt
31:
32: % Messgeraet einstellen
33: fprintf(serialObject,':INIT:CONT OFF;:ABOR');
34: %fprintf(serialObject,':FORM:DATA ASCII');
35: %fprintf(serialObject,':SENS:FUNC "VOLT:DC"');
36: %fprintf(serialObject,':SENS:VOLT:DC');
37: %fprintf(serialObject,':SENS:VOLT:PROT 4');
38: %fprintf(serialObject,':SENS:CURR:RANG:AUTO ON');
39: %fprintf(serialObject,':SENS:VOLT:DC:RANGE 10');
40: %fprintf(serialObject,':FORM:ELEM VOLT');
41:
42:
43:
44: % %fprintf(serialObject,':TRAC:COUN 1');
45: % %fprintf(serialObject,':TRAC:FEED:CONT NEV');
46: %
47: % fprintf(serialObject,':TRAC:CLE');
48: %
49: % fprintf(serialObject,':TRAC:POIN 10');
50: % fprintf(serialObject,'TRAC:FEED:SENS');
51: % fprintf(serialObject,'TRAC:FEED:CONT NECT');
52: % fprintf(serialObject,'TRIG:COUN 10');
53: % fprintf(serialObject,':OUTP ON');
54: %
55: % fprintf(serialObject,':INIT');
56: % fprintf(serialObject,':TRACE:DATA?');
57:
58:
59:
60:
61: %% Daten abholen
62: count = 1; voltage(1)=4
63: tic;
64: time=toc;
65: % while time<=stoptime
66: while voltage>=1.5
67: % fprintf(serialObject,':INIT');
68: % fprintf(serialObject,':TRAC:FEED SENS');
69: % fprintf(serialObject,':TRAC:DATA?');
70: %
71: fprintf(serialObject,':READ?');
72: voltage(count) = fscanf(serialObject,'%f');
73: time(count) = toc;
74: set(plotinstanz,'YData',voltage,'XData',time);
75: set(figureinstanz,'Visible','on');
76: pause(timeInterval);
77: count = count +1;
78: end
79:
80: figure(1);
81: plot(time,voltage);
82: grid on; hold on;
83: xlabel('Zeit [s]'); ylabel('Batteriespannung [V]')
84: title(Spannungsverlauf Batterie 3V Lithium (2032 mit Modul) im default mode');
85:
86: % fprintf(serialObject,':OUTP OFF');
87: %% Put the instrument in local mode
88: fprintf(serialObject,'SYSTEM:LOCAL');
89: fclose(serialObject);
Wie so ein Datalog dann aussieht ist in der folgenden Grafik dargestellt. Hier ist der Spannungsverlauf einer nahezu entladenen Batterie bis zum Abschalten des Verbrauchers über die Zeit aufgezeichnet worden.
Keine Kommentare:
Kommentar veröffentlichen