[Date Prev][Date Next][Date Index]

Bug in Keithley 2000 scanner with AC volts





Here is a copy of a letter I sent to Keithley today regarding a bug in the
Keithley 2000 multimeter.
************************************************************

                                                                April 22, 1999

Technical Support
Keithley Instruments

Folks,

I am writing to report a serious problem with the Keithley 2000 multimeter with
the 10 channel scanner card.  The problem occurs when measuring multiple
input channels remotely in the AC Volts mode.

I have carefully documented the problem with a test setup, and my results are
described below.  I have reproduced these results on four different Keithley
2000 units, so it is a generic problem and not a defect in a particular unit.


                             Test Configuration

I used a Wavetek FG2A function generator to generate a sine wave signal.  I set
the frequency of the sine wave to be 60 Hz +- 1 Hz.  It was not synched to the
line frequency.  As part of the test described below the amplitude of the sine
wave was varied from 0.1V to 5.0V RMS.  The amplitude and frequency of the 
sine wave output was monitored with a Tektronix TDS 220 oscilloscope.

The sine wave output of the Wavetek was connected to Channel 1 of the 10
channel scanner card in the Keithley 2000.  The + and - inputs of Channel 2 in
this unit were jumpered together so that there should be 0 volts across them.

The Keithley 2000 was connected to an RS-232 port and commands were sent to it
and responses read back with a simple program.

The test consisted simply of the following:
    1) Reset the Keithley by sending '*rst'
    2) Select AC volts by sending the ':conf:volt:ac'

    3) Select channel 1 by sending 'rout:close (@1)'
    4) Read channel 1 by sending 'read?' and reading the response string
    5) Select channel 2 by sending 'rout:close (@2)'
    6) Read channel 2 by sending 'read?' and reading the response string
    7) Write the channel 1 and channel 2 response strings to a file

    8) Repeat steps 3-7 2 or 3 times at a given amplitude of the sine wave
       output of the Wavetek
    9) Increase the amplitude of the sine wave output of the Wavetek by 0.1 or
       0.2 volts and repeats steps 3-8.

Steps 3-7 were done in a single subroutine and so were done with no human
delays, e.g. as soon as the response from the 'read?' of channel 1 was complete
the commands to select and read channel 2 were sent.

Since the + and - inputs to channel 2 on the scanner were shorted together the
result should have been close to 0 volts RMS under all conditions.  Table 1
at the end of this message shows the actual response of the Keithley 2000 as 
the voltage on Channel 1 was increased.  Note that when the channel 1 volts
are in the range ~0.4 to 1.2 volts or ~3.8 to 5 volts then large voltages (0.1
to 1.3 volts) are reported for channel 2.  I have plotted these results on both
linear and log scales on the attached figures.

Note that these results are definitely not due to any bugs in my software,
since these spurious values for the channel 2 volts appear on the Keithley 2000
display as well.

This problem occurs whether the channel 2 inputs are shorted or are connected
to another voltage source.  I suspect that the problem is a bug in the firmware
in the Keithley 2000, perhaps related to the auto-ranging logic.

This problem is obviously very serious.  It has caused us several man-weeks of
lost effort, since we did not suspect a problem with your meter and were
trying to fix non-existent problems in our experimental equipment connected to
the meter.

I look forward to your help in resolving this matter.

                                            Sincerely,
                                            Mark Rivers

____________________________________________________________
Mark Rivers                             
CARS University of Chicago
Argonne National Laboratory             (630) 252-0422 (office)
Building 434A                           (630) 252-0405 (lab)
9700 South Cass Avenue                  (630) 252-1713 (beamline)
Argonne, IL 60439                       (630) 252-0443 (FAX)


Table 1.  The voltage values in this table are the exact strings returned from
the Keithley 2000.  Note that Channel 1 increases by 0.1 or 0.2 volts every 3
readings or so as the Wavetek amplitude was increased.  Channel 2 should always
be 0, but it is not.

Channel 1 = +1.02578796E-01  Channel 2 = +7.12601905E-05
Channel 1 = +1.00448146E-01  Channel 2 = +2.66117826E-02
Channel 1 = +1.00572176E-01  Channel 2 = +2.71629374E-02
Channel 1 = +1.99776918E-01  Channel 2 = +2.19354348E-04
Channel 1 = +1.99745879E-01  Channel 2 = +2.75752565E-04
Channel 1 = +1.99760467E-01  Channel 2 = +2.09064514E-04
Channel 1 = +3.09310615E-01  Channel 2 = +4.26738639E-04
Channel 1 = +3.09284419E-01  Channel 2 = +3.72039940E-04
Channel 1 = +3.09324652E-01  Channel 2 = +4.43893980E-04
Channel 1 = +4.03545350E-01  Channel 2 = +1.09701544E-01
Channel 1 = +4.03597981E-01  Channel 2 = +1.10494889E-01
Channel 1 = +3.85333925E-01  Channel 2 = +6.21750660E-04
Channel 1 = +4.03582811E-01  Channel 2 = +1.08643994E-01
Channel 1 = +4.67317075E-01  Channel 2 = +3.29541799E-04
Channel 1 = +4.86888677E-01  Channel 2 = +1.30009174E-01
Channel 1 = +4.67700422E-01  Channel 2 = +1.33001819E-01
Channel 1 = +5.65929472E-01  Channel 2 = +1.61917835E-01
Channel 1 = +5.64032674E-01  Channel 2 = +1.59008384E-01
Channel 1 = +5.66865683E-01  Channel 2 = +1.64322764E-01
Channel 1 = +6.72808468E-01  Channel 2 = +1.78466424E-01
Channel 1 = +6.68531716E-01  Channel 2 = +1.92874774E-01
Channel 1 = +6.69306636E-01  Channel 2 = +1.80733800E-01
Channel 1 = +7.81622410E-01  Channel 2 = +1.54410064E-01
Channel 1 = +7.63647616E-01  Channel 2 = +2.10633382E-01
Channel 1 = +7.66721010E-01  Channel 2 = +2.16007456E-01
Channel 1 = +8.74406636E-01  Channel 2 = +2.51850605E-01
Channel 1 = +8.78617525E-01  Channel 2 = +2.42128626E-01
Channel 1 = +8.75507951E-01  Channel 2 = +1.71948105E-01
Channel 1 = +9.74797249E-01  Channel 2 = +2.69501954E-01
Channel 1 = +9.76258278E-01  Channel 2 = +2.64448047E-01
Channel 1 = +1.14317226E+00  Channel 2 = +3.25796366E-01
Channel 1 = +1.14305604E+00  Channel 2 = +3.26755196E-01
Channel 1 = +1.17108071E+00  Channel 2 = +3.05222064E-01
Channel 1 = +1.39075470E+00  Channel 2 = +2.46554810E-05
Channel 1 = +1.39089787E+00  Channel 2 = +2.52768932E-05
Channel 1 = +1.39111018E+00  Channel 2 = +2.80465883E-05
Channel 1 = +1.57940161E+00  Channel 2 = +2.48707402E-05
Channel 1 = +1.57936931E+00  Channel 2 = +2.55658688E-05
Channel 1 = +1.57879663E+00  Channel 2 = +2.47565349E-05
Channel 1 = +1.78275478E+00  Channel 2 = +2.66307361E-05
Channel 1 = +2.66307361E-05  Channel 2 = +2.62568701E-05
Channel 1 = +1.78171074E+00  Channel 2 = +2.63691654E-05
Channel 1 = +1.99246013E+00  Channel 2 = +2.67107971E-05
Channel 1 = +1.99176753E+00  Channel 2 = +2.42901024E-05
Channel 1 = +1.99225903E+00  Channel 2 = +2.67415326E-05
Channel 1 = +2.18841696E+00  Channel 2 = +3.01852888E-05
Channel 1 = +2.18813992E+00  Channel 2 = +3.13560377E-05
Channel 1 = +2.18821597E+00  Channel 2 = +2.93229514E-05
Channel 1 = +2.18831253E+00  Channel 2 = +2.50854901E-05
Channel 1 = +2.39478064E+00  Channel 2 = +2.70521305E-05
Channel 1 = +2.39505982E+00  Channel 2 = +2.59680255E-05
Channel 1 = +2.58299351E+00  Channel 2 = +3.39458529E-05
Channel 1 = +2.58243179E+00  Channel 2 = +2.73622281E-05
Channel 1 = +2.80408978E+00  Channel 2 = +2.87203493E-05
Channel 1 = +2.80443215E+00  Channel 2 = +3.14224126E-05
Channel 1 = +2.80412030E+00  Channel 2 = +3.16134501E-05
Channel 1 = +2.98252344E+00  Channel 2 = +3.82540857E-05
Channel 1 = +2.98267817E+00  Channel 2 = +3.39593607E-05
Channel 1 = +2.98270512E+00  Channel 2 = +3.05429894E-05
Channel 1 = +3.19662738E+00  Channel 2 = +3.98601369E-05
Channel 1 = +3.19670057E+00  Channel 2 = +3.45969784E-05
Channel 1 = +3.19646811E+00  Channel 2 = +3.44571308E-05
Channel 1 = +3.37253261E+00  Channel 2 = +4.60368719E-05
Channel 1 = +3.37238622E+00  Channel 2 = +3.71359747E-05
Channel 1 = +3.37269926E+00  Channel 2 = +3.83698207E-05
Channel 1 = +3.56902695E+00  Channel 2 = +4.68589205E-05
Channel 1 = +3.56907892E+00  Channel 2 = +3.44445143E-05
Channel 1 = +3.56884980E+00  Channel 2 = +6.52526680E-04
Channel 1 = +3.75969672E+00  Channel 2 = +4.90606362E-05
Channel 1 = +3.75971818E+00  Channel 2 = +4.58937320E-05
Channel 1 = +3.75995898E+00  Channel 2 = +1.05484450E+00
Channel 1 = +3.83214927E+00  Channel 2 = +1.04149270E+00
Channel 1 = +3.91423869E+00  Channel 2 = +1.06967676E+00
Channel 1 = +3.82625365E+00  Channel 2 = +3.93549890E-05
Channel 1 = +4.16007519E+00  Channel 2 = +1.13897681E+00
Channel 1 = +4.00893784E+00  Channel 2 = +1.14123666E+00
Channel 1 = +4.08386660E+00  Channel 2 = +1.15438092E+00
Channel 1 = +4.17609167E+00  Channel 2 = +3.03528359E-05
Channel 1 = +4.36455822E+00  Channel 2 = +1.16623366E+00
Channel 1 = +4.18742275E+00  Channel 2 = +1.10479474E+00
Channel 1 = +4.38773012E+00  Channel 2 = +1.19510949E+00
Channel 1 = +4.39857435E+00  Channel 2 = +1.28554475E+00
Channel 1 = +4.40501404E+00  Channel 2 = +1.30638635E+00
Channel 1 = +4.56448984E+00  Channel 2 = +3.54973163E-05
Channel 1 = +4.75629044E+00  Channel 2 = +1.29021657E+00
Channel 1 = +4.56903076E+00  Channel 2 = +1.27666032E+00
Channel 1 = +4.78886080E+00  Channel 2 = +1.37308431E+00
Channel 1 = +4.79534769E+00  Channel 2 = +1.41183412E+00
Channel 1 = +4.80949163E+00  Channel 2 = +1.31903601E+00
Channel 1 = +4.95020962E+00  Channel 2 = +1.34195435E+00
Channel 1 = +4.94282293E+00  Channel 2 = +1.38218153E+00
Channel 1 = +4.95000076E+00  Channel 2 = +1.35399270E+00


Here are the programs which were used for the test.  Note that these are
written in a language called IDL, but they could easily be converted to Visual
Basic, etc.

pro test_keithley
    ; This is the procedure which is called manually to take a reading
    ; Typically 3 readings were taken at one amplitude setting of the Wavetek
    ; and then the amplitude was increase by 0.1 or 0.2 volts.
    send_string, 'rout:close (@1)'
    v1 = read_value()
    send_string, 'rout:close (@2)'
    v2 = read_value()
    print, 'Channel 1 = ', v1, '  Channel 2 = ', v2
    printf, 1, 'Channel 1 = ', v1, '  Channel 2 = ', v2
end
    
pro send_string, string
    rec = '13LAB:ser1'
    t = caput(rec + '.TMOD', 'Write', /wait)
    t = caput(rec + '.AOUT', string, /wait)
end

function read_value
    rec = '13LAB:ser1'
    t = caput(rec + '.TMOD', 'Write/Read')
    t = caput(rec + '.AOUT', 'read?', /wait)
    t = caget(rec + '.AINP', response)
    return, response
end

pro init_keithley
    send_string, '*rst'
    send_string, ':conf:volt:ac'
    close, 1
    openw, 1, 'keithley_output.dat'
end