Products > Test Equipment

Doing it RAW: Tapping Keithley 2001 ADC

(1/7) > >>

openloop:
If you ever wondered how a multimeter's microcontroller sees outside world, wonder no more.
I've tapped into "ADC -> Micro" communication line of K2001 and got about 4 hours worth of readings in 20V range, 10NPLC, 60Hz land measuring a 10V reference.

Behold:
[ Attachment Invalid Or Does Not Exist ] [ Attachment Invalid Or Does Not Exist ]

Simplified workflow: knowing exact value of LM399 reference and knowing where "zero" is, one can derive slope and offset of the ADC. Knowing value of 10.5V trace one can derive input divider's ratio, thus knowing payload reading and the ratio one can calculate voltage on the input terminals.

Additional comments:
- Warmup lasts much longer than 1 hour. I'm not sure if I ever reached that mythical, blissful state.
- Data comes in form of two 16bit signed integers (big-endian). One is for final slope count, another is for dual slope difference;
- Dual slope difference goes through integer overflow (at 10 NPLC). No doubt a design screw-up;  :palm:
- Voltages have inverted sign, for some reason.
- At least in A08 firmware, auto-cal is incomplete: apparently final slope to dual slope ratio is hardcoded in (8000, I think). That's just ugly.  :-- One needs a chopper like setup to catch the error (if using data coming out of the micro) >:(   Raw data can be processed around this nonsense.
- My setup was: old Arduino Uno connected to opto-isolators on the digital board, Arduino feeds real-time data to my (floating) laptop.

openloop:
 |O

Kleinstein:

--- Quote from: openloop on August 02, 2020, 06:35:10 am ---....
- Data comes in form of two 16bit signed integers (big-endian). One is for final slope count, another is for dual slope difference;
- Dual slope difference goes through integer overflow (at 10 NPLC). No doubt a design screw-up;  :palm:
- Voltages have inverted sign, for some reason.
- At least in A08 firmware, auto-cal is incomplete: apparently final slope to dual slope ratio is hardcoded in (8000, I think). That's just ugly.  :-- One needs a chopper like setup to catch the error (if using data coming out of the micro) >:(   Raw data can be processed around this nonsense.

--- End quote ---

If there is an overflow in the signed integer representation, this indicates that the number may be unsigned, possibly with an offset. That is the natural way to get the result during the integration /  run-up ("dual slope") phase.

The coarse part of the final counts and the run-up part are naturally in a fixed integer ratio as they use the same clock and reference switches. Only the fine part of the final rundown has 2 separate reference sources and thus a separate scale factors for the fine slopes. This may be either a fixed value define by precision resistors or it could be a measured value, only close to a nominal number. Not sure how this is handled with the K2001. They give 0.1 % grade resistors, so it may be a hardware defined ratio. Even than there may be still some numerical correction - though possibly small.

Judging from the graph the K2001, a little like the old 19x series meters does measure the ADC gain frequently (for every reading ?). So there is more than just zero and the input signal, but also a reference for the scale factor. It is odd to have both a 6.9 V and 10.5 V values. Are there really so many reference readings, or are some readings more frequent than others ?
The sequence could give a hint on why the newer Keithley meters (K2000 ... DMM6500, DMM7510) have the ugly extra noise over the 1-30 seconds range.

openloop:

--- Quote ---If there is an overflow in the signed integer representation, this indicates that the number may be unsigned, possibly with an offset. That is the natural way to get the result during the integration /  run-up ("dual slope") phase.
--- End quote ---

Does not matter signed or not - if there are two voltages mapping to the same value (e.g. 8v and -6V) then there's overflow. They use a software hack to distinguish the two. It is possible to fool it. [edit: no, it is not. Read below.]


--- Quote ---They give 0.1 % grade resistors, so it may be a hardware defined ratio.
--- End quote ---
It is. The ratio of (R835 + R846) to R844  i.e. 20K to 4M.   It drifts.  So from time to time there's a step in output when final slope counter (blue) jumps (if the ratio is not exact, and it never is).


--- Quote ---Judging from the graph the K2001, a little like the old 19x series meters does measure the ADC gain frequently (for every reading ?). So there is more than just zero and the input signal, but also a reference for the scale factor. It is odd to have both a 6.9 V and 10.5 V values. Are there really so many reference readings, or are some readings more frequent than others ?
--- End quote ---

The sequence is this:
7 auto-zero(auto-cal) measurements, interrupted after every two to do another "payload" measurement.
The 7 are : 10.5v, 8.6v, 6.9v, 0v, 0v, 0v. In endless loop.
Zeros measured in different configurations : one is simple analog ground, one effectively is voltage offset of the ADC buffer op-amp. Not sure where they use it, but respect.
10.5V is needed to determine exact ratio of the input. Range is +-20V, but ADC is (about) +-11V. So users input is divided by two. Exact ratio is determined by the 10.5V measurement.

openloop:

--- Quote ---The sequence could give a hint on why the newer Keithley meters (K2000 ... DMM6500, DMM7510) have the ugly extra noise over the 1-30 seconds range.
--- End quote ---

In K2001 I was able to trace that kind of noise to the way they process the data: They average the auto-cal readings for a minute (or half?) then recalculate all the coefficients. Thus creating characteristic saw pattern.

No fancy Kalman filters...

Navigation

[0] Message Index

[#] Next page

There was an error while thanking
Thanking...
Go to full version
Powered by SMFPacks Advanced Attachments Uploader Mod