フィルターのクリア

Graphing a Voltage Plot in real time

5 ビュー (過去 30 日間)
Julian Bello
Julian Bello 2017 年 3 月 23 日
回答済み: Anoop Somashekar 2017 年 3 月 31 日
I am trying to obtain a real time plot of Voltage pulses acquired from a Keithley 6487 Voltage Source. I was able to get the graph to show and update in real time, showing points at "5V" when 5 volts were applied through SCPI commands and at "0V" when 0 volts were applied. However, after each pulse, the previous one gets deleted as shown below.
I want each subsequent measurement to be concatenated on the graph as if it were a square wave pulse as shown below.
I have included my code for the plot below. Does anyone have any suggestions?
%%Plot
figureHandle = figure('NumberTitle','off',... 'Name','Voltage Characteristics',... 'Color',[0 0 0],'Visible','off');
% Set axes axesHandle = axes('Parent',figureHandle,... 'YGrid','on',... 'YColor',[0.9725 0.9725 0.9725],... 'XGrid','on',... 'XColor',[0.9725 0.9725 0.9725],... 'Color',[0 0 0]); hold on;
voltage_sweep=plot(axesHandle,time,voltage,'Marker','.','LineWidth',1,'Color',[0 1 0]);
xlim(axesHandle,[min(time) max(time+0.001)]);
% Create xlabel xlabel('Time','FontWeight','bold','FontSize',14,'Color',[1 1 0]);
% Create ylabel ylabel('Voltage in V','FontWeight','bold','FontSize',14,'Color',[1 1 0]);
% Create title title('Voltage Characteristics','FontSize',15,'Color',[1 1 0]);
%% Set the time span and interval for data collection
stopTime= input('Input the date and endtime for the experiment.\n'); %Input has to be in 'MM/DD HH:MM:SS' format
timeInterval = 0.001;
%% Collect data count = 1;
while ~isequal(datestr(now,'mm/DD HH:MM:SS'),stopTime)
time(count) = datenum(clock);
a=query(obj1, 'MEASure:CURRent:DC?'); %Meausres current
I=a(2:13); %Output of a is a long string, only 2:13 are needed
if str2double(I)> 15E-14 %Checks if current is above threshold
fprintf(obj1,':SOURce:VOLTage:LEVel:IMMediate:AMPLitude 0'); %sets voltage amplitude of instrument to 0
break
else
fprintf(obj1,':SOURce:VOLTage:LEVel:IMMediate:AMPLitude 0'); %sets voltage amplitude of instrument to 0 for a half second pulse
pause(.5)
fprintf(obj1,':SOURce:VOLTage:LEVel:IMMediate:AMPLitude?'); % Measures Voltage at this timepoint
voltage(count) = fscanf(obj1,'%f',1); %#ok<SAGROW>
set(voltage_sweep,'YData',voltage,'XData',time);
set(figureHandle,'Visible','on');
datetick('x','mm/DD HH:MM:SS')
fprintf(obj1,':SOURce:VOLTage:LEVel:IMMediate:AMPLitude 5'); %sets voltage amplitude of instrument to 5 for a half second pulse
pause(.5)
fprintf(obj1,':SOURce:VOLTage:LEVel:IMMediate:AMPLitude?'); % Measures Voltage
voltage(count) = fscanf(obj1,'%f'); %#ok<SAGROW>
set(voltage_sweep,'YData',voltage,'XData',time);
set(figureHandle,'Visible','on');
datetick('x','mm/DD HH:MM:SS')
end
pause(timeInterval);
count = count +1;
end

回答 (1 件)

Anoop Somashekar
Anoop Somashekar 2017 年 3 月 31 日
I ran your script by replacing your hardware data with random number and I observed that measurements being concatenated to the graph. In the while loop, you are measuring voltage from the hardware twice without updating the count variable which could be the reason for first voltage reading being replaced by second voltage reading during each iteration.

カテゴリ

Help Center および File ExchangeMATLAB についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by