diff --git a/OOequipment/Bodeplot.mlx b/OOequipment/Bodeplot.mlx new file mode 100644 index 0000000..2e1b6e9 Binary files /dev/null and b/OOequipment/Bodeplot.mlx differ diff --git a/OOequipment/RC_TransferFunction.mlx b/OOequipment/RC_TransferFunction.mlx index b692161..264f1f4 100644 Binary files a/OOequipment/RC_TransferFunction.mlx and b/OOequipment/RC_TransferFunction.mlx differ diff --git a/OOequipment/RLC_TransferFunction.mlx b/OOequipment/RLC_TransferFunction.mlx index 4cb94a6..ccb58a6 100644 Binary files a/OOequipment/RLC_TransferFunction.mlx and b/OOequipment/RLC_TransferFunction.mlx differ diff --git a/OOequipment/Waveform.mlx b/OOequipment/Waveform.mlx new file mode 100644 index 0000000..23c62c4 Binary files /dev/null and b/OOequipment/Waveform.mlx differ diff --git a/OOequipment/subfiles/Bodeplot_script.m b/OOequipment/subfiles/Bodeplot_script.m new file mode 100644 index 0000000..b754f55 --- /dev/null +++ b/OOequipment/subfiles/Bodeplot_script.m @@ -0,0 +1,24 @@ +tic +data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,amplitude,n_steps); +toc +figure +ax(1)=subplot(2,1,1); +semilogx(data.frequency,20*log10(data.magnitude)); +legend('Magnitude') +ylabel('Magnitude [dB]') +xlabel('Frequency [Hz]') +ax(2)=subplot(2,1,2); +semilogx(data.frequency,data.phase); +legend('Phase') +ylabel('Phase [rad]') +xlabel('Frequency [Hz]') +linkaxes(ax,'x') +arrayfun(@(x) set(x,{'TickLabelInterpreter','XGrid','YGrid','fontsize'},{'latex','on','on',12}),ax) +%%limit in quarter pi +yscale = 4; +ymax = 4; +ymin = -4; +ystep = 1; +numberticks = (ymin:ystep:ymax)*(pi/yscale); +latexticks = {'$-\pi$','$-\frac{3}{4}\pi$','$-\frac{1}{2}\pi$','$-\frac{1}{4}\pi$','$0$','$\frac{1}{4}\pi$','$\frac{1}{2}\pi$','$\frac{3}{4}\pi$','$\pi$'}; +set(ax(2), {'YLim','YTick','YTickLabel'},{[-pi,pi],numberticks,latexticks}); \ No newline at end of file diff --git a/OOequipment/subfiles/Oscilloscope.m b/OOequipment/subfiles/Oscilloscope.m index e599c82..656e694 100644 --- a/OOequipment/subfiles/Oscilloscope.m +++ b/OOequipment/subfiles/Oscilloscope.m @@ -26,6 +26,12 @@ classdef Oscilloscope < Equipment end end + function clear(sc) + sc.messageclose; + sc.write_unsafe('*cls'); + flushinput(sc.tcp); + end + function s = get.acquisition(sc) s = sc.query('ACQ:STAT?'); end @@ -120,6 +126,15 @@ classdef Oscilloscope < Equipment data.length = wave.length; end + function message(sc,msg) + sc.messageclose; + sc.write(['DISP:DIAL:MESS ''',msg,'''']) + end + + function messageclose(sc) + sc.write('DISP:DIAL:CLOS'); + end + % function data = waveform(ch,cha) % ch.scope.clear; diff --git a/OOequipment/subfiles/RC_TransferFunction_script.m b/OOequipment/subfiles/RC_TransferFunction_script.m index 34e1d1b..f22fee5 100644 --- a/OOequipment/subfiles/RC_TransferFunction_script.m +++ b/OOequipment/subfiles/RC_TransferFunction_script.m @@ -22,7 +22,7 @@ linkaxes([ax1,ax2],'x') %% Run the measurements if theory_only == false - data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,amplitude,n_steps,n_measurements); + data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,amplitude,n_steps,n_measurements,'samp'); %% Plotting %% Process the data A_mean = mean(data.magnitude,1); diff --git a/OOequipment/subfiles/RLC_TransferFunction_script.m b/OOequipment/subfiles/RLC_TransferFunction_script.m index 6f74c60..856b545 100644 --- a/OOequipment/subfiles/RLC_TransferFunction_script.m +++ b/OOequipment/subfiles/RLC_TransferFunction_script.m @@ -22,7 +22,7 @@ linkaxes([ax1,ax2],'x') %% Run the measurements if theory_only == false - data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,amplitude,n_steps,n_measurements); + data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,amplitude,n_steps,n_measurements,'samp'); %% Plotting %% Process the data A_mean = mean(data.magnitude,1); diff --git a/OOequipment/subfiles/Waveform_script.m b/OOequipment/subfiles/Waveform_script.m new file mode 100644 index 0000000..ec94191 --- /dev/null +++ b/OOequipment/subfiles/Waveform_script.m @@ -0,0 +1,6 @@ +oscilloscope.run; +functiongenerator.frequency = frequency; +functiongenerator.voltage = amplitude; +oscilloscope.auto; +wave = oscilloscope.waveform; + diff --git a/OOequipment/subfiles/phamag.m b/OOequipment/subfiles/phamag.m index 27fcd6e..6759e8d 100644 --- a/OOequipment/subfiles/phamag.m +++ b/OOequipment/subfiles/phamag.m @@ -7,7 +7,7 @@ Fs = 1/T; n = 2^nextpow2(length); X = fft(wave,n,2)/n; idx = ceil(frequency*n/Fs); -phase = mod(angle(mean(X(2,idx)))-angle(mean(X(1,idx))),pi); +phase = mod(angle(mean(X(2,idx)))-angle(mean(X(1,idx)))+pi,2*pi)-pi; magnitude = abs(X(2,idx))/abs(X(1,idx)); end diff --git a/OOequipment/subfiles/transferFunction.m b/OOequipment/subfiles/transferFunction.m index 078c9ef..e93d6ba 100644 --- a/OOequipment/subfiles/transferFunction.m +++ b/OOequipment/subfiles/transferFunction.m @@ -1,6 +1,12 @@ -function data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,amplitude,n_steps,n_measurements) +function data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,amplitude,n_steps,n_measurements,type) %TRANSFERFUNCTION Summary of this function goes here % Detailed explanation goes here + if nargin < 8 + type = 'HRES'; + if nargin < 7 + n_measurements = 1; + end + end f_array = 10.^linspace(log10(f_start),log10(f_stop),n_steps); functiongenerator.voltage = amplitude; @@ -13,12 +19,14 @@ function data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,a for i = 1:n_steps % fprintf('Measurement %i of %i - Frequency: %.2f Hertz\n',i,n_steps,f_array(i)); functiongenerator.frequency = f_array(i); + oscilloscope.message(['Run: ' num2str(j) '/' num2str(n_measurements) ' - Step: ' num2str(i) '/' num2str(n_steps)]) oscilloscope.run; oscilloscope.auto; - wavedata = oscilloscope.waveform(1:2,'DEF','SAMP'); + wavedata = oscilloscope.waveform(1:2,'DEF',type); [data.phase(j,i),data.magnitude(j,i)] = phamag(wavedata.ch1,wavedata.ch2,wavedata.length,f_array(i),wavedata.sampletime); end end + oscilloscope.message('Measurement Finished!'); %bodePlot(data.magnitude,data.phase,data.frequency) end