EEVblog Electronics Community Forum

Electronics => Beginners => Topic started by: kim.dd on November 10, 2018, 11:45:07 am

Title: Measuring bandwidth/bode plot DS1074Z/SDG2042X
Post by: kim.dd on November 10, 2018, 11:45:07 am
Hi all I am playing arround with a Siglent SDG2042X and a DS1074Z.
I was trying to create a bode plot script in scilab, but was getting unexpected data.

So what I did was hookup the siggen on the Rigol and measure the response from 1..100MHz in 1Mhz steps:

(https://thumb.ibb.co/jFiRaA/frequency-sweep1.png) (https://ibb.co/jFiRaA)
(https://thumb.ibb.co/gc3ETV/frequency-sweep2.png) (https://ibb.co/gc3ETV)
(https://thumb.ibb.co/cwgq2q/frequency-sweep3.png) (https://ibb.co/cwgq2q)

Cable 1 is the one included with the SDG2042X.
Cable 2 is from Batronix CFL200.
Drop down at the end is about -10db/decade arround the -3db point.

Both devices are unlocked to maximum bandwidth.
Is this because I didn't terminate (50ohm) at the scope end? I didn't expect this below 100MHz.
Or did unlock backfire and is the DS1074Z defaulting to 50Mhz (system info shows DS1104Z and option for bandwidth 100mhz offcial).
The SDG2042X normally has a bandwidth for sines of 40MHz, but is unlocked and shows SDG2122X and allows upto 120MHz.

Scilab script:
Code: [Select]
clear;
format("v",20);

// Cable 1 => Siglent SDG 2042X included cable, markings 3D-FB
// Cable 2 => Batronix BNC-Cable CLF200, 50 Ω, 1m, markings CLF-200 LOW LOSS 50 OHM COAXIAL CABLE
// 0 => SDG2042X:CH1->DS1074Z:CH1 (Cable 1), SDG2042X:CH2->DS1074Z:CH2 (Cable 2)
// 1 => SDG2042X:CH1->DS1074Z:CH2 (Cable 1), SDG2042X:CH2->DS1074Z:CH1 (Cable 2)
// 2 => SDG2042X:CH2->DS1074Z:CH1 (Cable 1), SDG2042X:CH1->DS1074Z:CH2 (Cable 2)
swap = 2;

[status, deviceAddrs] = findAllInstruments();
[status, defaultRM] = viOpenDefaultRM();
[status, wavegen_id] = viOpen( defaultRM, deviceAddrs(1), viGetDefinition("VI_NULL"), viGetDefinition("VI_NULL"));
[status, scope_id] = viOpen( defaultRM, deviceAddrs(2), viGetDefinition("VI_NULL"), viGetDefinition("VI_NULL"));

[status, count] = viWrite(wavegen_id, "*IDN?");
[status, wavegen_idn, count] = viRead(wavegen_id, 255);

[status, count] = viWrite(scope_id, "*IDN?");
[status, scope_idn, count] = viRead(scope_id, 255);

[status, count] = viWrite(wavegen_id, "C1:OUTP LOAD,HZ,PLRT,NOR,WVTP,SINE");
[status, count] = viWrite(wavegen_id, "C1:BSWV AMP,1V,OFST,0V,PHSE,0");
[status, count] = viWrite(wavegen_id, "C1:BSWV FRQ,10000000HZ");
[status, count] = viWrite(wavegen_id, "C1:OUTP ON");
[status, count] = viWrite(wavegen_id, "C2:OUTP ON");

[status, count] = viWrite(scope_id, ":ACQ:TYPE HRES");

[status, count] = viWrite(scope_id, ":CHAN1:BWL OFF");
[status, count] = viWrite(scope_id, ":CHAN1:COUP DC");
[status, count] = viWrite(scope_id, ":CHAN1:DISP ON");
[status, count] = viWrite(scope_id, ":CHAN1:PROB 1");

[status, count] = viWrite(scope_id, ":CHAN2:BWL OFF");
[status, count] = viWrite(scope_id, ":CHAN2:COUP DC");
[status, count] = viWrite(scope_id, ":CHAN2:DISP ON");
[status, count] = viWrite(scope_id, ":CHAN2:PROB 1");

[status, count] = viWrite(scope_id, ":MEAS:STAT:ITEM VPP,CHAN1");
[status, count] = viWrite(scope_id, ":MEAS:STAT:ITEM VPP,CHAN2");
[status, count] = viWrite(scope_id, ":MEAS:STAT:ITEM RPH,CHAN12");

function set_freq(f)
    disp(string(f));
    [status, count] = viWrite(wavegen_id, strcat(["C1:BSWV FRQ,",string(f),"HZ"]));
    [status, count] = viWrite(scope_id, strcat([":TIM:MAIN:SCAL ",string(0.5/f)]));
    sleep(2500);
    [status, count] = viWrite(scope_id, ":MEAS:STAT:RES");
    sleep(250);
endfunction

function value = get_vpp1()
    [status, count] = viWrite(scope_id, ":MEAS:ITEM? VPP,CHAN1");
    [status, value, count] = viRead(scope_id, 255);
    value = strtod(value);
endfunction

function value = get_vpp2()
    [status, count] = viWrite(scope_id, ":MEAS:ITEM? VPP,CHAN2");
    [status, value, count] = viRead(scope_id, 255);
    value = strtod(value);
endfunction

function value = get_phase12()
    [status, count] = viWrite(scope_id, ":MEAS:ITEM? RPH,CHAN12");
    [status, value, count] = viRead(scope_id, 255);
    value = strtod(value);
endfunction

delta = 1000000;
n = 100;
freq_set = zeros(n,1);
amp1 = zeros(freq_set);
amp2 = zeros(freq_set);
amp1_db = zeros(freq_set);
amp2_db = zeros(freq_set);
phase = zeros(freq_set);

for k=1:n
    freq_set(k) = delta*k;
    set_freq(freq_set(k));
    amp1(k) = mean([get_vpp1(),get_vpp1(),get_vpp1()]);
    amp2(k) = mean([get_vpp2(),get_vpp2(),get_vpp2()]);
    phase(k) = mean([get_phase12(),get_phase12(),get_phase12()]);
    amp1_db(k) = 20.0*log10(amp1(k)/1);
    amp2_db(k) = 20.0*log10(amp2(k)/1);
end

[status, count] = viWrite(wavegen_id, "C1:OUTP OFF");
[status, count] = viWrite(wavegen_id, "C2:OUTP OFF");

viClose(wavegen_id);
viClose(scope_id);
viClose(defaultRM);

if ( swap == 0 ) then
    scf();
    plot2d("ln",freq_set/1000000,amp1_db,2);
    plot2d("ln",freq_set/1000000,amp2_db,5);
    xlabel("Frequency [MHz]");
    ylabel("Amplitude [db]");
    title("Frequency sweep");
    legend(["SDG2042X:CH1->DS1074Z:CH1 (Cable 1)";"SDG2042X:CH2->DS1074Z:CH2 (Cable 2)"],"in_lower_left");
    set(gca(),"grid",[1 1]);
elseif ( swap == 1 ) then
    scf();
    plot2d("ln",freq_set/1000000,amp2_db,2);
    plot2d("ln",freq_set/1000000,amp1_db,5);
    xlabel("Frequency [MHz]");
    ylabel("Amplitude [db]");
    title("Frequency sweep");
    legend(["SDG2042X:CH1->DS1074Z:CH2 (Cable 1)";"SDG2042X:CH2->DS1074Z:CH1 (Cable 2)"],"in_lower_left");
    set(gca(),"grid",[1 1]);
elseif ( swap == 2 ) then
    scf();
    plot2d("ln",freq_set/1000000,amp1_db,2);
    plot2d("ln",freq_set/1000000,amp2_db,5);
    xlabel("Frequency [MHz]");
    ylabel("Amplitude [db]");
    title("Frequency sweep");
    legend(["SDG2042X:CH2->DS1074Z:CH1 (Cable 1)";"SDG2042X:CH1->DS1074Z:CH2 (Cable 2)"],"in_lower_left");
    set(gca(),"grid",[1 1]);
end
Title: Re: Measuring bandwidth/bode plot DS1074Z/SDG2042X
Post by: kim.dd on November 13, 2018, 08:30:59 pm
Did the measurement again now with 50ohm termination at the scope terminals:

(https://thumb.ibb.co/d3sekL/frequency-sweep4.png) (https://ibb.co/d3sekL)

Both cables now perform the same... still similar bandwidth response.