Lab Demo 4

Download MATLAB files: demo4.zip

This MATLAB script controls the function generator and oscilloscope to measure the response of an RC circuit to an input sine wave as a function of frequency.

The circuit under test is shown below.

The routine get_data.m uses the oscilloscope to measure the amplitudes of the input and output signals and the phase difference between input and output.

The routine instr_open.m opens the function generator (fg) and oscilloscope (os) objects. The routine instr_close.m closes all open instrument control objects.

The autoscale function of the oscilloscope does not always work properly at low frequencies. The MATLAB code could be improved to detect and correct that situation.

Contents

Open function generator and scope

instr_open;

% Set fg output load
fprintf(fg,'Output:Load INF');
identification: AGILENT TECHNOLOGIES,MSO7012B,MY49520152,06.00.0004
identification: HEWLETT-PACKARD,33120A,0,8.0-5.0-1.0

take data

npts = 20;
freq = logspace(2,4,npts)';
y = zeros(npts,5);
for k=1:npts
    fprintf(fg,'FREQ %g',freq(k));
    y(k,:) = get_data(os);
end

show data

subplot(2,1,1);
yratio = y(:,4);
yphase = y(:,5);
plot(freq,yratio,'ko-','LineWidth',2);
ylabel('voltage ratio');
subplot(2,1,2);
plot(freq,yphase,'ko-','LineWidth',2);
xlabel('frequency (Hz)');
ylabel('phase (degrees)');

look for 45-degree phase shift

idx = find(yphase>30 & yphase<60);
fz = interp1(yphase(idx),freq(idx),45);
fprintf(fg,'FREQ %g',fz);
get_data(os);
freq 1786 Hz vratio 0.679426 phase 45 deg

compare time constant to RC

fprintf('time constant %g usec\n',1e6/(2*pi*fz));
R = 3.8e3;
C = 0.022e-6;
tau = R*C;
fprintf('R %g ohms C %g uF tau %g usec.\n',R,C*1e6,tau*1e6);
time constant 89.2292 usec
R 3800 ohms C 0.022 uF tau 83.6 usec.

Close all instruments

instr_close
clear
close all