Main Content

Set and Measure DAC (Data Acquisition) Channel Voltage on Keysight 34970A Switch Using the IVI-C Driver

This example shows how to initialize the driver, read a few properties of the driver, identify installed cards, set DAC channel output voltage and measure DC voltage using Agilent® Technologies 34970A data acquisition/switch unit and output the result in MATLAB®.

Requirements

This example requires the following to be installed on the computer:

  • Keysight™ IO libraries version 17.1 or newer

  • Keysight 34970A, 34972A Data Acquisition Switch Unit IVI driver version 1.0.3.0 or newer

Enumerate Available IVI-C Drivers On The Computer

This enumerates the IVI drivers that have been installed on the computer.

IviInfo = instrhwinfo('ivi');
IviInfo.Modules
ans = 

  Columns 1 through 6

    'Ag33220'    'Ag3352x'    'Ag34410'    'Ag34970'    'Ag532xx'    'AgAC6800'

  Columns 7 through 11

    'AgE36xx'    'AgInfiniiVision'    'AgMD1'    'AgRfSigGen'    'AgXSAn'

  Columns 12 through 13

    'KtRFPowerMeter'    'rsspecan'

Create MATLAB Instrument Driver And Connect To The Instrument

% Create the MATLAB instrument driver
makemid('Ag34970','Ag34970.mdd')

% Use icdevice with the MATLAB instrument driver name and instrument's
% resource name to create a device object. In this example the instrument
% is connected by GPIB at board index 0 and primary address 1.
myInstrument = icdevice('Ag34970.mdd', 'GPIB0::01::INSTR','optionstring','simulate=true');

% Connect driver instance
connect(myInstrument);

Get General Device Properties

Query information about the driver and instrument

Utility = get(myInstrument, 'Utility');
DriverIdentification = get(myInstrument,'Inherentiviattributesdriveridentification');
InstrumentIdentification = get(myInstrument,'Inherentiviattributesinstrumentidentification');
Revision = invoke(Utility, 'revisionquery');
Vendor = get(DriverIdentification, 'Specific_Driver_Vendor');
Description = get(DriverIdentification, 'Specific_Driver_Description');
InstrumentModel = get(InstrumentIdentification, 'Instrument_Model');
FirmwareRev = get(InstrumentIdentification, 'Instrument_Firmware_Revision');

% Print the queried driver properties
fprintf('Revision:        %s\n', Revision);
fprintf('Vendor:          %s\n', Vendor);
fprintf('Description:     %s\n', Description);
fprintf('InstrumentModel: %s\n', InstrumentModel);
fprintf('FirmwareRev:     %s\n', FirmwareRev);
fprintf(' \n');
Revision:        1.4.0.0 
Vendor:          Agilent Technologies
Description:     IVI driver for the Agilent 34970 data acquisition/switch unit. [Compiled for 64-bit.]
InstrumentModel: 34970A
FirmwareRev:     Sim1.4.0.0
 

Identify Installed Cards

System = get(myInstrument, 'System');
for iLoop = 100:100:300
    CardType = invoke(System, 'systemgetcardtype', iLoop, 127);
    fprintf('Slot: %d  CardType: %s\n', iLoop, CardType);
    if regexp(CardType, ',34907A,')
        DacSlot = iLoop;
    end
    if regexp(CardType, ',34908A,')     % Single ended -- 40 channels
        MuxSlot = iLoop;
    end
    if regexp(CardType, ',34902A,')     % 16 channel Mux
        MuxSlot = iLoop;
    end
    if regexp(CardType, ',34901A,')
        MuxSlot = iLoop;
    end
end
fprintf('\n');
Slot: 100  CardType: HEWLETT-PACKARD,34901A,0,1.1 
Slot: 200  CardType: HEWLETT-PACKARD,34901A,0,1.1 
Slot: 300  CardType: HEWLETT-PACKARD,34907A,0,1.1 

Set and Measure DAC Channel 5 Output Voltage

% set DAC voltage to 2.345 V and Select channel 5 on the DAC card
DacVoltage = 2.345;
DacChannel = DacSlot+5;
if DacSlot ~= 0
    % Sets the output voltage level on the DAC channel 5
    Dac = get(myInstrument, 'Dac');
    invoke(Dac, 'dacsetvoltage', DacChannel,DacVoltage);
    % Gets the output voltage level on the DAC channel 5
    DacVoltage = invoke(Dac, 'dacgetvoltage', DacChannel);
    fprintf('DAC channel %d set to %.3f volts\n\n', DacChannel, DacVoltage);
else
    fprintf('34907A Multifunction Module not found\n\n');
end
DAC channel 305 set to 2.345 volts

Display Errors

% If there are any errors, query the driver to retrieve and display them.
ErrorNum = 1;
while (ErrorNum ~= 0)
    [ErrorNum, ErrorMsg] = invoke(Utility, 'errorquery');
    fprintf('ErrorQuery: %d, %s\n', ErrorNum, ErrorMsg);
end
ErrorQuery: 0, No error. 

Disconnect Device Object And Clean Up

disconnect(myInstrument);
% Remove instrument objects from memory.
delete(myInstrument);

Additional Information:

This example shows the set and measure DAC channel voltage from an Switch using the IVI driver. Once the measured voltage data is retrieved from the instrument, MATLAB can be used to visualize and perform analyses on the data using the rich library of functions in the Signal Processing Toolbox™ and Communications Systems Toolbox™. Using Instrument Control Toolbox™, it is possible to automate control of instruments, and, build test systems that use MATLAB to perform analyses that may not be possible using the built-in capability of the hardware.