LabJack U6 Pro (and others) self-test script (#P53)
On the eternal quest of de-cluttering the living room, I picked up a bunch of stored “defective” LabJack units the other day. These are USB DAQ modules with generally very decent specs, in the case of the U6 Pro a 24bit (22bit effective) DAC with 14-port multiplexing (so 14 analogue ports, or 7 differential analogue ports), fixed 10µA and 200µA sources, two 12bit DACs, internal temperature compensation for temperature probes, 20 GPIOs and a bunch of miscellaneous stuff over the DA15 and DC37 Sub-D ports. All of them were discarded with AIN failure…and that didn’t add up.
The Windows tools provided by the Labjack corporation do feature a basic interface to read the inputs, toggle the digital I/O and make the DACs do their stuff, but it lacks some automatic self-test features. Routing the DACs to the ADC ports looked fine – but is that enough to declare them as magically healed and fine to pass on? Well, I’d rather do a couple more extensive tests before hearing back complaints about defective hardware…so, with the help of our new AI overlords, I made a small test script. It probably works with other Labjack units as well, YMMV (U6 is basically certain, U3 likely, U12 not-so-much since that is a much older platform). A bit of external wiring is needed, the external voltage reference is optional. I’ve used my four-way AD584 unit that I have still not reviewed to this day, despite mentioning this fact back in late 2017 in WHL #26 (ADS1115 ADC module). Probably time to finally do so in the next couple of blog posts… ![]()
Anyway, the script is written in Python and does require the LabJackPython library, which in return provides the u3, u6, ue9, u12 and Modbus sublibraries. In order to access the physical device, a system driver module is needed as well. For Linux (and apparently MacOS) users, this “ExoDriver” can be found at https://support.labjack.com/docs/exodriver-downloads-for-ud-series-linux-and-macos-. It also requires libusb-1.0 to be installed (not sure on the apple-y side, though). For Windows, the required libraries might be installed with the standard package, but I’m not sure and too lazy to find out. It’s running perfectly under Linux, why bother with this horse crap made in Redmond…
Talking of shit software: Python PEP 686 still exists, still sucks, and since there is no python3-labjackpython package on my Ubuntu 26.04, I had to install this via pip in a venv. Do whatever your system requires you to do in order to install the pip package – again, YMMV, when in question, ask your friendly AI assistant.
And here’s the script – download, put in the correct environment and run, no root permissions required.
LabJackTest
It has three modes in the beginning – DAC0, DAC1 (those are the hardware ports) and E for external source. In DAC0/1 mode, connect the AINs to the chosen port and run the thing. It’ll ramp from 0V to 5V in half-volt increments and shows the readings. Ideally you’d want to run the test for every AIN individually, but I know you’re lazy, it’s also going to work if all of them are shorted together. Note that this will not identify a failed mux that e.g. shorts certain channels or has large crosstalk between the channels. Ideally, one would also test all AINs on the SubD’s, and the script had that feature at one point in time, but ChatGPT is forgetful and rewrites stuff every now and then. It’s however likely good to go with just adding them back to the AIN_CHANNELS = [0, 1, 2, 3] line at the very beginning.
The E option asks for four different voltages; this is pre-set to the four voltages of my AD584 unit. The exact values aren’t of interest (it’ll calculate diff voltages at the end, but it’ll still work when everything is off by a bit), however a stable source is required. Use this mode as an additional test when you got such a source at hand, since the standard DAC with 12bit resolution is no adequate counterpart for the 22+bit ADC. In this mode, long 60s tests are run with about 2500 readings in total, and min/max/peak2peak/stdev values are given afterwards. The test will start once a suitably close voltage is present and stable, and it’ll tell you to advance to the next value once the test is done (no other user inputs required).
This is an example test protocol of one of my units, the current source reading at the very beginning is not part of the tool, since that was taken with my Greenlee 860A (rebranded Brymen 869s) 50000/500000 count multimeter.
Scroll waaayyy down for more details on the hardware.
10µA: 9,99µA gemessen (10,02 forward, 9,97 back) 200µA: 199,43µA gemessen (199,46 forward, 199,41 back) LabJack U6 HIGH-RES DIAGNOSTIC v2 | SN: 360005869 mode 0/1/E: 0 === DAC0 MODE === Set V | AIN0 AIN1 AIN2 AIN3 | Spread ------|--------------------------------------|-------- 0.0 | 0.00371 0.00363 0.00363 0.00363 | 0.00008 0.5 | 0.50197 0.50205 0.50205 0.50205 | 0.00008 1.0 | 1.00308 1.00308 1.00308 1.00316 | 0.00008 1.5 | 1.50245 1.50245 1.50245 1.50245 | 0.00000 2.0 | 2.00213 2.00213 2.00205 2.00221 | 0.00016 2.5 | 2.50308 2.50308 2.50308 2.50308 | 0.00000 3.0 | 3.00276 3.00268 3.00276 3.00276 | 0.00008 3.5 | 3.50260 3.50268 3.50260 3.50260 | 0.00008 4.0 | 4.00347 4.00339 4.00347 4.00347 | 0.00008 4.5 | 4.50347 4.50355 4.50355 4.50355 | 0.00008 5.0 | 4.98278 4.98278 4.98270 4.98270 | 0.00008 LabJack U6 HIGH-RES DIAGNOSTIC v2 | SN: 360005869 mode 0/1/E: 1 === DAC1 MODE === Set V | AIN0 AIN1 AIN2 AIN3 | Spread ------|--------------------------------------|-------- 0.0 | 0.01216 0.01208 0.01208 0.01216 | 0.00008 0.5 | 0.50221 0.50221 0.50229 0.50221 | 0.00008 1.0 | 1.00229 1.00221 1.00229 1.00229 | 0.00008 1.5 | 1.50205 1.50197 1.50205 1.50197 | 0.00008 2.0 | 2.00213 2.00205 2.00213 2.00205 | 0.00008 2.5 | 2.50245 2.50237 2.50237 2.50237 | 0.00008 3.0 | 3.00244 3.00244 3.00244 3.00244 | 0.00000 3.5 | 3.50252 3.50244 3.50252 3.50252 | 0.00008 4.0 | 4.00221 4.00221 4.00221 4.00221 | 0.00000 4.5 | 4.50213 4.50221 4.50213 4.50213 | 0.00008 LabJack U6 HIGH-RES DIAGNOSTIC v2 | SN: 360005869 mode 0/1/E: E AD584 reference steps: 2.49887 V 5.00152 V 7.49990 V 10.00217 V ENTER = defaults, or comma list: AIN 0 [ENTER / S skip / SA stop]: === AD584 MODE (AIN 0) === High-resolution verification mode → Set 2.5V Signal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 2.501727 V stdev: 0.000045 V min : 2.501655 V max : 2.501892 V p2p : 0.000237 V ~bits: 18.77 samples: 200 SLOW WINDOW (~60s) SLOW mean : 2.501709 V stdev: 0.000044 V min : 2.501577 V max : 2.501813 V p2p : 0.000237 V ~bits: 18.78 samples: 2668 --- RESULT SUMMARY --- Reference : 2.498870 V Measured : 2.501727 V Error : +0.002857 V ---------------------- → Set 5.0V Signal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 5.003766 V stdev: 0.000047 V min : 5.003627 V max : 5.003864 V p2p : 0.000237 V ~bits: 18.69 samples: 200 SLOW WINDOW (~60s) SLOW mean : 5.003763 V stdev: 0.000047 V min : 5.003627 V max : 5.003864 V p2p : 0.000237 V ~bits: 18.70 samples: 2691 --- RESULT SUMMARY --- Reference : 5.001520 V Measured : 5.003766 V Error : +0.002246 V ---------------------- → Set 7.5V Signal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 7.501141 V stdev: 0.000049 V min : 7.501019 V max : 7.501256 V p2p : 0.000237 V ~bits: 18.65 samples: 200 SLOW WINDOW (~60s) SLOW mean : 7.501166 V stdev: 0.000048 V min : 7.501019 V max : 7.501335 V p2p : 0.000316 V ~bits: 18.66 samples: 2678 --- RESULT SUMMARY --- Reference : 7.499900 V Measured : 7.501141 V Error : +0.001241 V ---------------------- → Set 10.0V ^[[CSignal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 10.002851 V stdev: 0.000051 V min : 10.002753 V max : 10.002990 V p2p : 0.000237 V ~bits: 18.59 samples: 200 SLOW WINDOW (~60s) SLOW mean : 10.002903 V stdev: 0.000053 V min : 10.002753 V max : 10.003148 V p2p : 0.000395 V ~bits: 18.54 samples: 2654 --- RESULT SUMMARY --- Reference : 10.002170 V Measured : 10.002851 V Error : +0.000681 V ---------------------- === FINAL SUMMARY === Vset | Measured | Error 2.5 | 2.501727 | +0.002857 5.0 | 5.003766 | +0.002246 7.5 | 7.501141 | +0.001241 10.0 | 10.002851 | +0.000681 AIN 1 [ENTER / S skip / SA stop]: === AD584 MODE (AIN 1) === High-resolution verification mode → Set 2.5V Signal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 2.501647 V stdev: 0.000038 V min : 2.501577 V max : 2.501734 V p2p : 0.000158 V ~bits: 19.00 samples: 200 SLOW WINDOW (~60s) SLOW mean : 2.501656 V stdev: 0.000041 V min : 2.501498 V max : 2.501813 V p2p : 0.000316 V ~bits: 18.88 samples: 2660 --- RESULT SUMMARY --- Reference : 2.498870 V Measured : 2.501647 V Error : +0.002777 V ---------------------- → Set 5.0V Signal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 5.003690 V stdev: 0.000047 V min : 5.003627 V max : 5.003785 V p2p : 0.000158 V ~bits: 18.70 samples: 200 SLOW WINDOW (~60s) SLOW mean : 5.003716 V stdev: 0.000045 V min : 5.003548 V max : 5.003864 V p2p : 0.000316 V ~bits: 18.77 samples: 2668 --- RESULT SUMMARY --- Reference : 5.001520 V Measured : 5.003690 V Error : +0.002170 V ---------------------- → Set 7.5V Signal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 7.501090 V stdev: 0.000049 V min : 7.500940 V max : 7.501177 V p2p : 0.000237 V ~bits: 18.64 samples: 200 SLOW WINDOW (~60s) SLOW mean : 7.501110 V stdev: 0.000046 V min : 7.501019 V max : 7.501256 V p2p : 0.000237 V ~bits: 18.73 samples: 2661 --- RESULT SUMMARY --- Reference : 7.499900 V Measured : 7.501090 V Error : +0.001190 V ---------------------- → Set 10.0V Signal stable → acquiring data Progress: ############################## FAST WINDOW FAST mean : 10.002805 V stdev: 0.000045 V min : 10.002674 V max : 10.002911 V p2p : 0.000237 V ~bits: 18.76 samples: 200 SLOW WINDOW (~60s) SLOW mean : 10.002846 V stdev: 0.000049 V min : 10.002674 V max : 10.003069 V p2p : 0.000395 V ~bits: 18.63 samples: 2662 --- RESULT SUMMARY --- Reference : 10.002170 V Measured : 10.002805 V Error : +0.000635 V ---------------------- === FINAL SUMMARY === Vset | Measured | Error 2.5 | 2.501647 | +0.002777 5.0 | 5.003690 | +0.002170 7.5 | 7.501090 | +0.001190 10.0 | 10.002805 | +0.000635 AIN 2 [ENTER / S skip / SA stop]: === AD584 MODE (AIN 2) === High-resolution verification mode → Set 2.5V Signal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 2.501644 V stdev: 0.000034 V min : 2.501577 V max : 2.501734 V p2p : 0.000158 V ~bits: 19.16 samples: 200 SLOW WINDOW (~60s) SLOW mean : 2.501657 V stdev: 0.000039 V min : 2.501498 V max : 2.501734 V p2p : 0.000237 V ~bits: 18.95 samples: 2658 --- RESULT SUMMARY --- Reference : 2.498870 V Measured : 2.501644 V Error : +0.002774 V ---------------------- → Set 5.0V Signal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 5.003699 V stdev: 0.000043 V min : 5.003627 V max : 5.003785 V p2p : 0.000158 V ~bits: 18.82 samples: 200 SLOW WINDOW (~60s) SLOW mean : 5.003722 V stdev: 0.000043 V min : 5.003627 V max : 5.003864 V p2p : 0.000237 V ~bits: 18.83 samples: 2655 --- RESULT SUMMARY --- Reference : 5.001520 V Measured : 5.003699 V Error : +0.002179 V ---------------------- → Set 7.5V Signal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 7.501106 V stdev: 0.000046 V min : 7.501019 V max : 7.501177 V p2p : 0.000158 V ~bits: 18.73 samples: 200 SLOW WINDOW (~60s) SLOW mean : 7.501127 V stdev: 0.000046 V min : 7.501019 V max : 7.501256 V p2p : 0.000237 V ~bits: 18.74 samples: 2654 --- RESULT SUMMARY --- Reference : 7.499900 V Measured : 7.501106 V Error : +0.001206 V ---------------------- → Set 10.0V Signal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 10.002811 V stdev: 0.000048 V min : 10.002674 V max : 10.002911 V p2p : 0.000237 V ~bits: 18.66 samples: 200 SLOW WINDOW (~60s) SLOW mean : 10.002862 V stdev: 0.000047 V min : 10.002753 V max : 10.002990 V p2p : 0.000237 V ~bits: 18.68 samples: 2670 --- RESULT SUMMARY --- Reference : 10.002170 V Measured : 10.002811 V Error : +0.000641 V ---------------------- === FINAL SUMMARY === Vset | Measured | Error 2.5 | 2.501644 | +0.002774 5.0 | 5.003699 | +0.002179 7.5 | 7.501106 | +0.001206 10.0 | 10.002811 | +0.000641 AIN 3 [ENTER / S skip / SA stop]: === AD584 MODE (AIN 3) === High-resolution verification mode → Set 2.5V Signal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 2.501626 V stdev: 0.000044 V min : 2.501498 V max : 2.501734 V p2p : 0.000237 V ~bits: 18.81 samples: 200 SLOW WINDOW (~60s) SLOW mean : 2.501641 V stdev: 0.000041 V min : 2.501498 V max : 2.501734 V p2p : 0.000237 V ~bits: 18.89 samples: 2664 --- RESULT SUMMARY --- Reference : 2.498870 V Measured : 2.501626 V Error : +0.002756 V ---------------------- → Set 5.0V Signal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 5.003702 V stdev: 0.000042 V min : 5.003627 V max : 5.003785 V p2p : 0.000158 V ~bits: 18.85 samples: 200 SLOW WINDOW (~60s) SLOW mean : 5.003719 V stdev: 0.000042 V min : 5.003548 V max : 5.003864 V p2p : 0.000316 V ~bits: 18.87 samples: 2672 --- RESULT SUMMARY --- Reference : 5.001520 V Measured : 5.003702 V Error : +0.002182 V ---------------------- → Set 7.5V Signal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 7.501101 V stdev: 0.000044 V min : 7.501019 V max : 7.501256 V p2p : 0.000237 V ~bits: 18.79 samples: 200 SLOW WINDOW (~60s) SLOW mean : 7.501126 V stdev: 0.000046 V min : 7.501019 V max : 7.501256 V p2p : 0.000237 V ~bits: 18.74 samples: 2651 --- RESULT SUMMARY --- Reference : 7.499900 V Measured : 7.501101 V Error : +0.001201 V ---------------------- → Set 10.0V Signal stable → acquiring data Progress: ############################# FAST WINDOW FAST mean : 10.002822 V stdev: 0.000051 V min : 10.002674 V max : 10.002911 V p2p : 0.000237 V ~bits: 18.58 samples: 200 SLOW WINDOW (~60s) SLOW mean : 10.002858 V stdev: 0.000047 V min : 10.002753 V max : 10.002990 V p2p : 0.000237 V ~bits: 18.70 samples: 2676 --- RESULT SUMMARY --- Reference : 10.002170 V Measured : 10.002822 V Error : +0.000652 V ---------------------- === FINAL SUMMARY === Vset | Measured | Error 2.5 | 2.501626 | +0.002756 5.0 | 5.003702 | +0.002182 7.5 | 7.501101 | +0.001201 10.0 | 10.002822 | +0.000652
The voltages of my reference unit haven’t changed all that much from new (HP/Agilent/Keysight 34401A 6½ digit multimeter factory test) over to a re-test with the successor multimeter 34461A (calibrated) at work, to a simple reading at home in the 500k high-res mode of said Greenlee multimeter, so I’m not sure what to make of these numbers. They clearly indicate a serious amount of resolution and linearity, but a single bit in high-res 22bit/±10V mode is 4.8µV, and all of the Labjack units are out hundreds of µV, up to 10mV in some cases. Offsets and slopes aren’t resolution, sure, but I find it difficult to believe that (attention, untested GPT hypothesis) a V= 0.99972Vset+3.46 mV (725 bits) slope/offset is acceptable for a 600€ DAQ module that is explicitly advertised as 22bits.
Maybe I’m missing a calibration feature? After all, these have been updated to the newest firmware and then reset to factory defaults. Or maybe the hardware is actually defective, or at least defective enough to toss it out of the intended measurement operation? I’ll probably have to dig deeper and update this entry with new findings.
Back to the hardware itself, we need some pictures as well: Labjacks, at least the non-OEM variants, come in those fancy semi-transparent red enclosures:
They are, at least for the U6, oversized and do not offer much mechanical support for the screw terminals on one side, but I always liked the look. A lot. The red really pops in my lighting setup, they’re much darker and less transparent in their typical dark corner of some control cabinet.
Six screws in, this is the entire module:
Impressively for this performance class, this is a single-sided load. Sure, the other side is jam-packed, and the PCB probably got a few layers, but it all fits on one side…
Main components:
- Silicon Labs C8051F340 USB-enabled MCU based on the good-old 8051 architecture
- TI HB126 AFSY, likely 74xx126 Quad Buffer, Tristate
- Two TI LM334 current sources
- ADI AD8692 dual RRO op-amp
- ADI AD8542 dual RRO op-amp
- ADI AD7190 24bit sigma-delta 4.8kHz ADC with PGA, the daddy IC here
- Two Intersil DG408 8ch analog multiplexers
- Intersil DG413 quad SPST switch
- TI DAC7552 12bit dual channel DAC
(and a bunch more tiny stuff with unreably cryptic chip markings, even the DAC7752 in the tiny QFN16 case is pretty borderline)
One probably has to study the datasheet to see how that yields 14 mapped ADC channels on those 8ch+8ch multiplexers over the quad switch, but regardless, it’s a very nice solution for just-a-couple high res ADCs. If more are needed, the Keithley 2700 series multiplexing multimeter is the next step up (max. 80 ports if you really want to hate yourself during wiring!), but that is also an order of magnitude more expensive. And the Labjacks have the additional benefit of some digital I/O and the two DACs, these are always handy for debugging, self-testing, or just silly status signalling.
Well, that’s it for today, I’ll update the script once I found out if there is some DC offset/slope calibration available, or if my hardware actually is defective and downgraded to the (absolute) performance level of some run-of-the-mill Arduino module for five bucks. It’ll still outperform these in terms of resolution, but what’s the use of five significant digits when you’re constantly off by a thousand counts?



