In one of the previous logs I covered in depth, how I use the term “calibration” in the context of the programmable decade resistor and how the calibration procedure works. Now it's time for an initial test of the calibration procedure. To automate the calibration I wrote a little Python script that interfaces with the programmable resistor as well as the multimeter (Agilent 34401A) via PyVISA and SCPI commands.
Automated calibration procedure using SCPI commands
Adjustment/calibration results
The result table shows a selection of calibration points for the 4 wire mode. It has the following columns:
- Applied value: Value applied to the input for checking the calibration
- Calculated value: Estimation of the actual resistance, based on the previous “adjustment” procedure
- Ind. value: Indicated value/Measurement taken with an Agilent 34401A 6.5 digit multimeter
- Min: Minimum value according to initial accuracy goals
- Max: Maximum value according to initial accuracy goals
- Dev.: Deviation between indicated value and applied value in percent
- Dev. Calc. to Ind.: Deviation between calculated value based on the calibration constants and the indicated value
Applied value (Ω) | Calculated value (Ω) | Ind. value (Ω) | Min (Ω) | Max (Ω) | Dev. (%) | Dev. Calc. to Ind. (%) |
---|---|---|---|---|---|---|
0 | 0.079 | 0.070 | 0.000 | 0.300 | – | -11.5278 |
1 | 1.062 | 1.052 | 0.995 | 1.305 | 5.2383 | -0.9056 |
2 | 2.080 | 2.074 | 1.990 | 2.310 | 3.7170 | -0.2721 |
10 | 10.122 | 10.108 | 9.95 | 10.35 | 1.0764 | -0.1418 |
100 | 100.074 | 100.061 | 99.5 | 100.8 | 0.0609 | -0.0131 |
1k | 1000.200 | 1000.161 | 995 | 1005.3 | 0.0161 | -0.0039 |
10k | 9999.013 | 9998.949 | 9950 | 10050.3 | -0.0105 | -0.0006 |
100k | 100000.339 | 99999.994 | 99500 | 100500.3 | 0.0000 | -0.0003 |
900k | 900000.234 | 900018.830 | 895500 | 904500.3 | 0.0021 | 0.0021 |
As expected, the programmable decade resistor stays well within the initial goal of << 0.5% of value + 0.3 Ω. That, however, was a pretty low bar. At the upper end, the performance is fairly impressive and showed how well the algorithm described in this post actually works. Also, the estimation of the actual resistance (that is also shown on the display) is very close to the measured value.
At the lower end, however, there is some significant deviation, mostly caused by the relay contact resistances, trace resistance and so on.
Next steps
Before doing a proper full calibration and presenting the final results in a more user-friendly form, let's do a small hardware optimization of the design.
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.