Remote controlled DMM DCV INL tester based on voltage divider idea - Page 1
Forum section: electronics / general

author: Echo88
author_rank: Frequent Contributor
timestamp: January 08, 2024, 06:03:42 pm
content: Heres a circuit suggestion expanding on the idea of a voltage divider being used together with ratio sum math to calculate the INL-curve of the 10V/1V/100mV ranges of a DMM, like done in a manual way here with his LTC2400 by Andreas:https://www.eevblog.com/forum/testgear/hp34401-measurement-of-linearity/msg358682/#msg358682Im pondering wether this method can be made good enough to characterize the INL of a 8.5 digit DMM or rather scratch the 0.1ppm realm, circumventing the need for a known linear calibrator/companion DMM.Heres a rough description:-very stable selectable 13V/1.3V/130mV voltage source-connected to a voltage divider consisting of 14 thermally coupled resistors-which are individually able to connect the binding posts to any given resistor and therefore voltage with added polarity reversal-all situated in a milled nice alucase + inner guard case + outer earthed case-fiber controlled via external µC/PC for lowest EMI-battery powered for lowest EMI and avoiding CM-errorsWith Python for example, it can then be used to compute an INL curve for a given DMM with the underlying math and linear fit shenanigans.Asking for comments and criticism.

author: Andreas
author_rank: Super Contributor
timestamp: January 08, 2024, 08:38:43 pm
content: Hello,just some annotations:I would interleave the divider resistors RN?A - RN?H (using neighboured resistors to compensate instead of 2 halves with different temperature)Typically the X-Capacitor at the common mode choke is larger (> factor 10) than the Y-Capacitors to ground.I would also use another X-Capacitor on the other side of the common mode choke.I would use the relay variant if you really have to deal with common mode disturbances.33uF * 200 Ohm coil resistance may be a bit too low time constant to guarantee 4 ms of the "set current" especially when regarding the ~60 Ohms of the HCT374Do you plan to do temperature control for better repeatability?with best regardsAndreas

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: January 08, 2024, 08:55:32 pm
content: This is an interesting idea to measure INL. I would guess Andreas used this to measure the parabolic error function because reversal is not feasible if the voltage range is positive only. I wonder if one could solve for the second order coefficient using reversal and use this method to solve for the third order coefficient. My understanding is you generate some stable voltage Va referred to GND and then check that V(a,GND) + V(ref,a) = V(ref,GND) with the goal of measuring linearity beyond what your voltage source is capable of. It does not seem critical that the voltage source be especially linear since it mostly serves to give you an x-coordinate in the nonlinearity vs input voltage that you are mapping out. Given the cost of just the photoMOS parts, you could probably just build your voltage source using an AD5791 and still come out ahead, though a less expensive DAC, as long as it is stable, should also work. You could imagine using two latching relays to switch the output voltage to check the sum or three to be able to do hands-free reversal.With this discrete DAC, I would be a bit nervous about the SSRs and thermal EMFs contributing to low frequency noise and increasing the settling time to 0.1 ppm or less. If you are already dissipating the power of running an ADR1000 in this case, I would just put the MCU on the board and control it with an isolated USB to UART using something like an FT230 with some opto isolators. With the long integration times you will need to use to measure sub-ppm INL, a low power MCU will be of little concern for EMI as long as the layout is OK. All it will need to do is drive a DAC, a UART, and a couple GPIOs for relays. I don't think it would be necessary to scale the reference voltages for the DAC to minimize excess resistor noise if you are using something like a DAC81001 as it is 400 nV p-p with an OPA827 buffer with a 10V reference voltage. For battery powered, you could probably skip the case + shield as well, but you will want to be cognizant of the change in power dissipation that occurs over the battery discharge cycle as this can give changing offsets from thermal EMF.

author: IanJ
author_rank: Unknown
timestamp: January 08, 2024, 09:23:57 pm
content: Nice idea, would love to see it built up and testing.Q. How do you thermally couple 14 resistors, i.e. layout, in order to get an exact thermal affect on the all equally. With 14 I would have thought there would be an element of those towards a centre of some description.Ian.

author: Echo88
author_rank: Frequent Contributor
timestamp: January 08, 2024, 09:54:09 pm
content: Thanks for the feedback, ill include it in the newer revision schematic.Andreas:Im unsure wether it makes sense to interdigitate the RN? network (6.6Vref -> 13.2V) as the dissipation in all resistors is the same. Wont hurt to do that though, as i need to do that for the other networks anyway due to their different resistor dissipation scheme.The CM-filter wasnt defined yet, ill include your suggestions.The 33µF relay cap has worked great so far for these relays, so while a bit on the tight side ill continue with this value.Temp stabilizing the case with a heater should provide added stability, when assuming that the roomtemp variation induced changing TEMF between INL tester and DMM wont completely spoil the increased stability completely.Im still unsure wether it makes sense to add the heater or rely on alu case thermal capacity.Curtis:Some parts are chosen because i bought them once in quantity for quite a bit less than the new price from ebay or similar, thats why i use them here despite the contemporary new price.In this case these are the OptoFETs, Relays, fiber-converter and i also have some suitably sized milled alu cases which once housed RF-stuff, so in this particular case i use them for best performance.OptoFETs like PVA3054 have shown small offset voltages in the <100nV-range with low LED drive current in my measurements, though i have to test the AQW210S for this and also the TEMF settling time of single ended switching relay AGQ210A4H.I roughly get your DAC-idea, but can you draw a schematic of it?The changing dissipation during battery discharge is something to look out for indeed, thanks.Ian:The 14 resistors consisting of RN3 and RN4, while all dissipating the same power, might also be interdigitated (not yet done in the schematic) to further the thermal coupling via copper traces between them.As these two networks will however be in separate DIP-cases they might have less statistical equal behavior (TC-ratio) than a single DIP-package with all 14 resistors in it, sitting on the same substrate. Unfortunately theres no 14 resistor network in DIP-package, which i want to avoid pcb swelling induced network instability...though that might be irrelevant given the timeframe of an INL-test...TDP1601/1401 would be interesting, but Mouser/Digikey dont stock them.

author: Kleinstein
author_rank: Super Contributor
timestamp: January 08, 2024, 10:43:08 pm
content: Like all such tests with a slow meter the test is only a spot check, testing a selction of points, never all points. There is just not enough time for all the values to check.There are a few challanges. One is the residual error and noise of the meter under test. One sums up about equal parts and with the sum of up to 14 parts the noise and INL error also adds up.So one needs to have assumptions on the hard INL (local errors) to make the test with the sum of many voltages work. One would need a limit for the hard INL that is quite a bit tighter than the final result.One should complement the test with a check on the hard INL in the vincinity of the 1 V rage partial voltage. So a test to check many points the a re close by that there are no significant local INL effects, like step. Depending on the ADC to test the resistor chain idea may work or be limited by the hard INL.As an alternative one may get away with doing the test sequence with multiple test voltages, even if only a tiy bit different, kind of avearging over possible hard INL effects.Not sure if one really needs 14 resistors in the chain - at least for the start a shorter chain may be enough. For a start one could still have 14 resistors, but maybe only populate half the relays/switches.The Photomos version may have problems with leakage and thermal EMF. So far I had quite good results with Photomos switches (VOR1142), but this is not guaranteed.I would still prefer the Photomos version, though one may be able to mix, like the 4 switches for the link to the meter as electronic and the rest as relays. This way one could to the inner loop of the test faster and this way make the test faster and quieter. At least the possible offsets from these 4 switches would compensate if all 4 combinations are used in the test.For the external ref.erence noise and drift, there is not need to be much better than the DUT. One always gets a combined noise / drift and there is little return once significant better.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: January 09, 2024, 01:15:48 am
content: I attached a quick schematic using DACs after I thought about it some and had an idea of what might be a better way of doing this. By the way, I wouldn't use two AD5791s for this because it just seems like an irresponsible use of money. Maybe two DAC81001s. The various relay set positions give you V(A,GND), V(B,GND), V(A,B), and V(B,B). The last can give you an idea of the differential thermal offset between the two relays. K3 lets you invert to get negative voltages. It is not really important that your two voltages are a defined fraction of each other, just that they are stable. As such, you get some helpful flexibility for error checking here, and this could allow you to locate error peaks that are not centered in the range or centered between 0 and the upper or lower limit. With 16 bit DACs, you would get at least 1000 points on a 100mV range with Vref at ca. 13V.Getting the required short term stability from this will still require care in design to minimize power dissipation and thermal gradients, but I think it could be done. From a thermal perspective, the LTC2756 may be a better choice as it draws much less current, but inversion of the voltage would be required, so you would need at least a -7V rail to support that. Also the LTC2758 has two channels, which is nice. I think with this general scheme, if you can get short term stability to the required level to interrogate INL at sub-ppm levels, you will be able to calculate it with fewer assumptions about placement of maxima and minima, which is worthwhile.Edit: The schematic didn't attach.

author: Kleinstein
author_rank: Super Contributor
timestamp: January 09, 2024, 10:50:35 am
content: In principle the 2 DAC version can work, but the resistor chain may be more stable for the difference of the voltages only 1 step separate.An advantage of the DAC version is that the voltages are low impedance, so less effect of leakage / bias currents. For the switch/relay configuration a slightly different configuration may make more sense, with 2 separate switches to do the high/low side swiching and this way polarity choice. The 3rd optional one would than allow a separate zero level. The separate zero level could be useful for tests of the sum of 2 voltages type as than one could keep the DAC settings fixed for this - which helps with thermal and parasitic effects.For switching one does not need isolation. So instead of the Photo-mos switches one could as well use CMOS switch chips, if one is a bit careful with ESD. This could especially simplify things for a version with only 8 resistors, because there are good 8:1 mux chips available.If the output resistance of the resistor chain is an issue (e.g. high bias from the DUT and switch leakage), one could have separate buffers for the taps. The offset of the buffers could be treated as part of the ref. voltage. With 7 - 12 taps this is still managable.

author: guenthert
author_rank: Frequent Contributor
timestamp: January 09, 2024, 11:05:27 am
content: I think this is in spirit what  hints at (but doesn't elaborate on). There commercially available automatic switch systems (scanner) with low thermal EMF were used (Dataproof?) .Since you need only short term stability, some money could be saved by substituting the ADR1000 for a cheaper reference. Or leave it out and allow for an external ~7V reference one might posses already.https://www.nist.gov/system/files/documents/calibrations/im-34-2a.pdf

author: Kleinstein
author_rank: Super Contributor
timestamp: January 09, 2024, 12:33:27 pm
content: For the reference one still needs low noise and good stability over the range of some 10-30 seconds for the simple sum of 2 voltages test, and maybe 10s of minutes for the full chain von 1 V steps.One may get away with a different solution, but it is still not easy. A couple (e.g. 5 x 2.5 V) of LTC6655 are also not cheap and still a bit noisy. A JFET based ref. may work, but needs tinkering / trimming of the resistors. A ADR1000 / LTZ1000 with not especially expensive resistors could still be sensible option, just for low noise.At the very low cost end, a set of thermally well insulated batteries can do the trick (especially for the faster tests like turn over and sum of 2 voltages), if one does a check over multiple repeats and maybe simple drift correction.For the remote control it would be good to have the automation for a single INL test sequency, so that this can run reasonable fast and repeated over multiple cycles. This helps with the reference drift and very low frequency noise. For different test types or ranges one could likely still get away with manual switching / jumpers.

author: Echo88
author_rank: Frequent Contributor
timestamp: January 09, 2024, 09:37:41 pm
content: Yes, the ADR/LTZ1000 was chosen as the lowest shortterm drift and noise reference. But maybe some paralleled LTC6655(-LN) would be more cost efficient/achieve better specs in general.Thermally stabilized batteries should provide lower noise, but i have no experience just how stable you can get them and therefore didnt go that route.Did anyone do measurements on CMOS analog switches for offset voltages? Id assume they should be very low, especially due to the low switch quiescent current.

author: Kleinstein
author_rank: Super Contributor
timestamp: January 09, 2024, 10:22:44 pm
content: I have tried batteries for a INL test, however only for the relatively fast parts with only 4 readings in the loop (some 20 s for the loop). It works when there is interpolation in time to correct for a linear drift rate. When really stable in temperature it may also work without. I don't consider it very practical for much slower tests.Some LTC6655 may be a little more cost effective. 2 x LTC665 combined in series or parallel may reach a comparable noise level (relative to the voltage), if one can belief the DS numbers. One uncertainty with the DS values is the exact filter used - some cut off more than others. So the frequency ranges are not all the same approximation of the standard 0.1-10 Hz range.A FAIK the LTC6655LN version only adds RC filtering and this would not really help much with the test, as most DMMs / high resolution ADCs are relative slow anyway. Still some (with 1 PLC classical AZ cycle) react to noise around 25 Hz. With a large capacitor the LN version may just help here. Similar filtering may as well be external also with other reference. If it is relevant depends on the DMM.Also ADR1399 may be feasable - 2 combined could also reach a similar noise level.I have used CMOS mux chips, especially DG408 quite a bit. I don't have numbers on the absolute offset, but different channels usually agree quite well, though not perfect and the offset seems to be quite stable over time. Also with intentional warming they don't seem to be very sensitive - the more tricky parts are some resisors that show thermal EMF. So they are likely better than most photomos switches. As far as I see it the string type DAC would only need stable offsets, not a low offset.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: January 15, 2024, 01:04:12 am
content: I was thinking about this some more, and I believe there is a simpler way to accomplish the goal of determining the higher order transfer function coefficients. You just feed a resistor divider with a stable voltage source, say from a DAC. The divider should have a reasonably consistent ratio over the voltage range in question, at least with the math I did, but there may be a way of working it out so you can compensate for voltage coefficients. So with the resistor divider, we have three nodes, the DAC output (DAC), the center tap of the divider (CT), and ground. So you can connect these nodes to the front panel with relays as in OP's schematic. The procedure is as follows.1. Call the ADC transfer function Y(x) = a0 + a1*x + a2*x^2 + a3*x^3 + a4 * x^4 ...2. For each DAC voltage you measure V(CT,GND) + V(DAC,CT) - V(DAC,GND) to get your error function. For a reasonably accurate ADC, x in the transfer function can just be V(DAC,GND).3. Run a polynomial fit of the error function to get the coefficients delta(x) = c0 + c2 * x^2 + c3 * x^3 + c4 * x^4 ... (the linear term should be insignificant)4. Calculate the divider ratio as b = V(CT,GND)/(V(CT,GND) + V(DAC,CT)).5. The relationships between the coefficients area0 = c0a2 = c2/(-2b + 2b^2)a3 = c3/(-3b + 3b^2)a4 = c4/(-4b + 6b^2 -3b^3 + 2b^4)a5 = c5/(-5b + 10b^2 - 10b^3 + 5b^4)In practice, you can add reversal to extend the voltage range and/or check the even order coefficients. The system will be most forgiving around a 1:1 ratio, as each of the functions of the ratio b (in step 5) has a first derivative of 0 at b = 0.5. On the hardware side, I believe this will be easier to implement than a string DAC using discrete resistors because only relays are necessary for switching the voltages (minimally two, three DPDT for reversal), and temperature homogeneity of a monolithic divider is going to be much easier to achieve than it is with a handful of discretes. The primary requirement for the voltage source (i.e. the voltage reference and the DAC) is low noise and reasonable short term stability.I will probably make one of these (with some modifications for low voltages) for testing the nanovoltmeter I am working on. I will probably just use an ADR1000 reference as I have a handful of reference modules that use these sitting around.

author: Echo88
author_rank: Frequent Contributor
timestamp: January 15, 2024, 01:32:16 am
content: Thanks for the input, im curious about your DAC based nV-meter variant results.I havent yet thought about the necessary math behind the string divider yet, as i was busy doing the final schematic and layout corrections. Maybe this paper also gives some ideas regarding the math:https://download.flukecal.com/pub/literature/Automatic_Linearity_Calibration.pdfMeanwhile i settled for MUX36S16 as voltage tap switches instead of OptoFETs/Relays for size reasons and since im expecting neglegible voltage offset contribution from them so they should be about equal in performance to AQW210S for example.Ill test the voltage offset of the MUX36S16 with another test pcb and my 34420A beforehand.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: January 15, 2024, 06:58:34 am
content: I'll post a schematic when I get there. I was looking at switches for the string DAC and came to the same conclusion as you about the best switch for the job.

author: Kleinstein
author_rank: Super Contributor
timestamp: January 15, 2024, 08:15:14 am
content: Measuing the both halfs of the divider is a good idea. In the test loop one should add a 4 th offset measurement as (V(CT,CT). This would eliminate offsets of the meter and also the swiched.As much of the effort is with the external reference and DAC it would likely make sense to have at least 2 divider ratios (e.g. b = 1/2 and 1/3), as an extra check.Ideally one should run the test several times to reduce the errors from ref. drift and noise. The drift part can be reduces with interpolation in time (average on values before and after in the sequence).Chances are one would not need a LTZ / ADR1000 grade ref., a ADR1399 should be good enough. It mainly needs a few more repeats if the references are a bit noisy.

author: Kleinstein
author_rank: Super Contributor
timestamp: January 16, 2024, 10:52:47 am
content: I looked a bit more at the test with the divider and different total voltages. The divider ratio b is not very critical. The initial sum of V(CT,GND) + V(DAC,CT) - V(DAC,GND) already reduced the required resolution and required accuracy for the further math. These sums are already much smaller (e.g. about the size of the INL error). The factors in the conversion from the C0...Cn polnynom to the a0..an form depend on the divider ratio b, but not very much. Even if there is an error in the percent range this would be a percent error relative to the INL - unless one has a huge error and wants to correct the error one does not really care wether the INL is at 1 ppm or 1.1 ppm. So the divider should not be critical at all. If the meter under test is relativey low in impedance one could even have a fixed buffer at the divider, as long as the offset there is not too large (e.g. < 5 % of the voltage). The error to the divider is still moderate and the first sum already compensates most of it.For the accuracy the test is not so much relying on a fixed divider. The main point is that the sum of 2 voltages in series adds up and thus no change to the voltages when switching the configuration.The linearity and stability of the divider should not be an issue. The point is more that loading the divider (switching different links to CT) does not chance the voltage. So a buffer for the divider center (even if with some offset) would be a point to consider.Chances are that the even powers are easier tested with the simpler turn over test, comparing the 2 polarities.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: January 17, 2024, 07:00:23 am
content: Those points are all consistent with the observations I made when I was working out the math. The divider ratio is indeed not that critical, but the impact of divider ratio inaccuracies is least with a ratio of 1:1. An issue to consider with the buffer is the linearity of the buffer itself if the goal is to measure nonlinear gain terms at sub-ppm accuracy. One way around this would be to tap off the input of the buffer and the output and measure Vos with the DUT at the test voltages as part of the test. This may be unnecessary with an AZ op amp if the CMRR is high enough or is predominantly linear. Another potential solution would be to add the equivalent output impedance of the divider at the DAC and GND outputs.The implementation I had considered would use the output switching I had in the schematic I posted before, and I agree that it would be good to get V(CT,CT) at each step of the test to mostly cancel thermal offsets. I had also planned to incorporate reversal because being able to isolate the even order coefficients could give better accuracy. It would be interesting to write a quick python script (or even just use excel) with some RNG-based noise to get an idea of how accurately one could determine the coefficients.I would probably use a DAC11001A and either an ADR1000 or an ADR1399 because I have those parts on hand. I believe all the TI DACs in that series have interchangeable pinouts, so the 16- or 18-bit versions could fit the same board and reduce the BOM cost. With either reference, a battery power supply boosted with an LT1533 + LDOs could be a good way to keep power dissipation consistent as the batteries discharge.

author: Kleinstein
author_rank: Super Contributor
timestamp: January 17, 2024, 10:01:11 am
content: The extra buffer for the divider would naturally be powered from the reference side. So the CMRR would not be really important. An offset there corresponds to a small error in the divider ratio and is thus not that critical (sepcially for higher voltage ranges). Especially at 1:1 the exact ratio is sopposed to be not that important, even if the ratio changes slightly over time and thus diffent test votlages.The INL test from the sum of 2 voltages only need short time stability for a run of the 3 or 4 measurements (in may case this are some 20 seconds - with relay switching one may want it a bit slower).It depends on the system to test, but I would not expect the normal random noise to be the limiting factor. There is always the chance to let the system run for quite some time, if it is automated. The white noise part should be relatively easy, though it gets more important for lower voltages. The low frequency noise from the references and maybe thermal fluctuations is more the limiting factor.Another point could be the hard INL of the DUT - so more local deviations in the INL curve that are not well described by a polynominal. For a SAR type ADC this would be steps of high value bits and for a SD and similar ADC this can be idle tone / special feedback patterns. To reduce the effect it would need quite a few test points. So well more than the min. number needed to fit something like a 6th order poylnominal for the INL. It is anyway a good question on what polynominal order to use for the assumed soft INL part.

author: miro123
author_rank: Frequent Contributor
timestamp: January 17, 2024, 09:24:11 pm
content: Quote from: CurtisSeizert on January 15, 2024, 01:04:12 am#4. Are you running to chicken en eggs problem?I did not to the error calculation but my "feeling" is that small error in B calculation introduce huge error in a0....a5 calculation - it is 4-th order polynomial for a5#4 I also expect that b varies with V(CT) since you are running divider at different power - maybe fake measurements due to thermal EMFs.Maybe running pythhon script with error estimation /sensitivity calculation/ can help to validate your solution

author: Kleinstein
author_rank: Super Contributor
timestamp: January 17, 2024, 09:51:44 pm
content: The sensitivity to changes in the divider ratio is really small, especially of near b= 0.5. The polynomina in b are only effecting the scaling factors to convert from one decription to the other. So b does not need to be stable / accurate to the ppm level - just the percent level is good enough and it would hardly matter if b changes a little with the voltage (e.g. with thermal EMF or an offest from an extra buffer for the center tap). The need for ppm level (or whatever resolution is needed for the INL) stability and "accuracy" is when getting the error function, as the sum with the 3 or 4 parts. Here it can be starting with up to some 10 V and about getting the values to the 1 µV and ideally better resolution and low noise and repeatablity. With a reasonable good ADC/DVM the sum will be in the µV maybe 10s of µV range.The relative accuracy for the C0..C5 would not be great to start with and having the fators depending on b to be a little off would not be an issue. It takes a rather poor divider to get changes in b of more than 0.1%.I am a bit surprized that the conversion from the error function to the INL polynomina is so simple and well behaved. I have not checked the calculation though. With b = 0.5 the factors are at some 2 , 1.33, 1.33 and 1.066 and thus not very large. The even powers are anyway likely better measured with a slightly simpler turn over test and one may also inclode a 6th power there.For the odd power there are than a3 and a5 left, so only 2 parameters to be really meaured with this series of tests.

author: miro123
author_rank: Frequent Contributor
timestamp: January 17, 2024, 11:20:58 pm
content: I agree that C part has less influence in total uncertainty.I find this idea great but still many thinks are not clear yet.1. I don't have the full picture of uncertainty even using the idealized models.2. I think that CT buff cannot be powered from DAC out.3. CT buffer CMMR is the smalest issue the problem is that Ib varies with common mode and Ib also depend from opamp supply voltage4. But here are many other fundamental questions - what does it mean the error function - Let assume 0,5 divider - ErrorFunct = 2* Error(Udac/2)- Err(Udac) - This function look like regression polynomial, isn't it?Assuming Udac- 5V that ErrorFunct(5) = U(~2,5)+ U(~2,5) - U(~5)Later on ErrorFunct(2,5) = U(~1,25)+ U(~1,25) - U(~2,5)and so onAnother question is what does error function phisicaly represent - error at 5V, at 2.5V or combined?My point is that It requires calculation the total uncertainty of proposed solution. I see a plenty of error sources - without calculation is hard to say what for accuracy are you gonna achieve.

author: Kleinstein
author_rank: Super Contributor
timestamp: January 18, 2024, 08:41:56 am
content: In the simple form the test does not need a buffer at the center of the divider. The problem here is however that a bias (and common mode leakage) current from the DUT can cause an error that depends on the switch settings to choose which voltage is measured. A buffer at the CT would essentially eliminate this problem as the buffer has not problem driving a current in the nA range. The buffer can add an offset error (directly and via bias and divider impedance), but this error is essentially fixed, at least for the test at one voltage.There is no problem to power the buffer from the DAC = external tester side, as the CM voltage is well within the supply there. The main point of the buffer is that it is not good to have a variable load there and thus a buffer powered from the DUT side is not good.The tests with the 3(4) readings that should ideally sum up to zero gives a mix of the INL at 3 points , with the 0.5 divider ratio 2 of them fall together and thus only 2 INL points mixed.One could see the test as taking the reading at half the reading and than compare the extrapolation to the full value with the reading at the full voltage.For the test with the full-scale voltage one has a easier interpretation, as the common definition is to have the INL curve at zero for the ends of the range. So INL(FS) = 0 per definiton and one gets Err(FS) = 2 x INL(FS/2) for the test. In theory one could than do a 2nd test at Udac = FS/2 and this way get INL(FS/4) = 0.5 * ( ERR(FS/2) - INL(FS/2)) = 0.5 * ERR(FS/2) - 0.25*ERR(FS)A weak point of the analysis with the polynominal fit is the assumption that the INL is a rather smooth curve and the polynominal approximation is good. It depends on the DUT if this is really the case. For an integrating ADC this may well work, with a SAR type ADC this may not work that well as the INL curve is usally a more stepped function. Even with an integrating ADC there can also be more lokal error, e.g. from idle tones.

author: miro123
author_rank: Frequent Contributor
timestamp: January 19, 2024, 01:15:55 pm
content: Idea is interesting.Simulation results are ok. I gonna breadborad one and just for fun I will calibrate one of my ADS1256/PGA280 boards.Instead of resistive divider I will use MAX5387 because I have some of them in the drawer.

author: Kleinstein
author_rank: Super Contributor
timestamp: January 19, 2024, 03:01:09 pm
content: I ran a few tests on the sum of 2 voltages test with my DIY DMM. The switching part is already part of the DMM with 2 inputs and 2 low sides to choose from. This are effectively 2 double through switches to set the 4 parts of the test. In my case a 0 V reading (to get the offset), some 8.76 V and some 9.24 V from a 9 V block each and finally a 18 V reading as the sum of the 2 voltages.The readings are 7 readings of 32x1 PLC and than 1 reading that is effected by the switching and droped later for each of the steps. Together a cycle needs some 21 seconds. To allow compensation for the drift 2 cycles are combined and the values are interpolated to a common time. For a fully automated test one would need the controllable source instead of the 2 x 9 V.The 2nd attachment shows the more raw data. To get all 4 readings in 1 plot only the last 3 digits and thus a 100 µV wrap around (modulo) is shown.One can see quite some drift (~ 50 µV for the sum) is present as the batteries are low noise, but not low TC or long term stable. the drift make the interpolation in time mecessary.The 1nd graph shows the calculated residual for the summation (0+18-9-9): there are quite a few outliers, but many of the points are around 7.7 µV.Some of the outliers are likely from popcorn noise in the DMM reference (LM399). Similar errors from the external votlages are also possible.To get a reasonable stable result it needs quite a bit of averaging / not as much as used here, but some 20 repeats for the cycle seem to be a good idea. So this would be some 15 minutes for 1 point to the curve. Of cause the time needed depends on the ADC / DMM to test. For a reasonable polynominal fit it would need maybe 10 points at least, better quite a few more.

author: Kleinstein
author_rank: Super Contributor
timestamp: January 19, 2024, 05:42:45 pm
content: I analyzed a few more of the data, as an example on how such a curve may look like. The voltages are set by sets of alkaline batteries (some older and thus not all 1.5 V).The curve shows the residual of the sum test for a few test points in the 20 V range (the prime range of the meter). The actual ADC sees +U/2 and -U/2 and thus kind of does an internal turn over. So the turn over error is very small and the 2 points measures with a negative voltage are also just symmetric. So the error curve should mainly have the odd powers.The fit with 3 odd powers is a bit of a stretch with the limited number of points. Only linear and 3rd power however does not give a good fit.The blue curve would be the err polynominal converted to INL error (with the linear slope adjusted to about overall low error). Due to the limited number or points this is more for demonstration, not a serious result.The data so far are a bit crude, but with an easier way to change the voltage and thus more points with less user interaction the test method looks promissing.Even the batteries as test voltage look OK, though not great and much of the drift can be corrected. The demand main on the reference for this test is low noise. Low drift is not really needed, though it could help a little. Other tests, like the originally planed sum of many similar steps would be more sensitive to drift (at least more difficult to correct). So low drift can still be desirable.

author: guenthert
author_rank: Frequent Contributor
timestamp: January 20, 2024, 09:12:58 am
content: If I'm not mistaken, one difficulty lies in distinguishing actual non-linearities from offsets due to thermal EMF. I'd think the method using a resistor string has the advantage there as it allows to reverse polarity of the driving voltage w/o detaching/re-attaching a probe.

author: Kleinstein
author_rank: Super Contributor
timestamp: January 20, 2024, 10:22:19 am
content: If done with moving around cables the thermal EMF would indeed be a big problem. The test should use something like relays or CMOS switches to switch between the 3 or 4 voltages to measure. This are 2 single pole, double through switches: one each for the high side and low side for the DMM / DUT. The nice point with the test (4 voltages including the zero) is that in the sum each of the switch contacts enters twice with a positive and twice with a negative sign. So any fixed offset or thermal EMF at any of the swich connectors will cancel out. For the automated test the thermal EMF is thus no longer an issue.A polarity reversal could than be done manual (change the connections) for a separate run. So it could be enough if the test source is one polarity. It does not matter if the offsets / thermal EMF would change between the runs. Also a slow drift during repeated test sets are not am issue. A nice point with the sum test is that only 4 readings are critical as a set and long term drift is not that critical.One weak point with the test is reference noise, that can make the test a bit noisy and thus slow. At least the LM399 in my case is a real issue and due to the jumps they produce quite some outliers and thus makes the test slow. So one shoud have a really low noise reference (e.g. LTZ, ADR1399 ?, LTC6655) at both the external source and DMM. With only 4 voltage readings for a sum one can at least limit the effect of very low frequency noise - the test with the resistor string would be even more sensitive to ref. noise due to a longer time for a set of readings.Another weak point is the assumption of a smooth INL curve. So a more local / jagged INL contribution (hard INL) can interfere with the calculation back the the INL curve. One can still get the residual error from the sums as spot tests for the linearity, but it would be hard to really calculate back to the INL curve. It would at least need quite some test voltages to hopefully average out more local effects. For the more loacl INL errors one would need a separate test.The sum of equal steps from the resistor string definitely has an advantage that the interpretation of the result is easier. One kind of gets a limited set of points for the INL curve. One however still has the assumption that the INL error for the step size measurements (e.g. 5-10% of FS) is about equal. The number of points in the curve is limited as with very small and thus more steps more errors add up and noise / drift gets more of an issue. Because of the drift one would likely want automated switching of the connections and thus quite some relays / CMOS switches.The problem with the hard INL is similar, just only for a more limited range around the step size. With the limited number of points / steps in the string the averaging it out is bit more tricky.Ideally one would do both tests - they test different aspects of the INL and at the very low levels and extra check is a good thing.

author: iMo
author_rank: Super Contributor
timestamp: January 20, 2024, 11:44:30 am
content: What if I would have got, for example, two 0..12V output 12bit DACs, both fed by the same Vref, and the DUT/meter will be wired between the DAC's outputs floating. Will that help somehow?

author: Kleinstein
author_rank: Super Contributor
timestamp: January 20, 2024, 01:00:33 pm
content: The 2 DACs would allow getting positive and negative voltages. One could also average out errors of the DAC be using different combinations for nominally the same result, at least with many values in the middle. Still the avearge of 2 12 bit DACs would not be that good to be really helpfull as a highly linear source.There is a way to use the 2 DAC also as a stack of voltages, but as far as I see with an extra complication of 2 types of step (e.g. a positive and negative). At least I don't see a good way to use it to replace the string type test.For just the simple sum of 2 equal voltages test it would only need 1 DAC. 12 Bit could be good enough, if the DAC is low noise (e.g. many current output types). Depending on the meter to test one may want additional scaling (e.g. for a 20 / 10 / 2 / 1 V range), than a divider with just 2 about equal resistors (nothing special needed just cheap thin film to avoid extra noise). I would prefer a buffer amplifier for the divider center, especially if the DMM to test is not super low bias. The buffer should not be tricky for high voltages like a 10 V or 1 V range , maybe with 100 mV and less.The main part for the test are the 2 switches for the DMM inputs - if not at the DMM this could be DMOS switches like DG419 / DG413 with the reference. I would consider a DIP version in a socket and than skip on extra protection.For the links from the voltages to the switches one may want some jumper options to allow also the turn over version.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: January 20, 2024, 08:26:29 pm
content: Quote from: miro123 on January 17, 2024, 11:20:58 pmI haven't tried to analytically determine the uncertainties in this, but I did write some code in python to see how it does when there is noise. I don't consider Ib dependence on Vin to be something that is necessary to confront here since that can be measured separately. The equations I presented are to determine the transfer coefficients at V(DAC,GND). The code is kind of a mess, but here it is:Code:import numpy as npimport numpy.polynomial.polynomial as nppolyimport matplotlib.pyplot as pltdef displayplot(title=None):plt.figure(dpi=600)plt.plot(Vin, uV_errors, label='Noiseless')plt.plot(Vin, uV_errors_n, label='With noise')plt.plot(Vin, uV_errorscalc, label='Calculated')plt.plot(Vin, uV_errorscorr, label='Corrected')plt.legend()plt.xlabel('Voltage')plt.ylabel('Error (uV)')plt.grid(visible=True, which="both", axis="both")plt.title(title)plt.show()rng = np.random.default_rng()#parametersnumpts = 101Vmax = 10Vmin = -10divratio = 0.5sumfitorder = 5revfitorder = 4'''transfer function coefficient array asdeviations from linearity in ppmy = A + Bx + Cx^2 + Dx^3 + Ex^4 + Fx^5B represents gain error and cannot be calculated.The index of the array is the order of the term.'''tcoeff = [-0.6, 0, 0.0035, -0.0013, 0.0000097, 0.000006]calcdcoef = np.zeros(6)torder = 5stdev0 = 0.03 #zero order noise, uVstdev1 = 0.05 #first order noise, uV#calculated parametersVint = (Vmax - Vmin)/(numpts - 1)Vin = []'''Calculate input voltages'''for x in range(0,numpts):Vin.append(Vmin + x * Vint)'''Calculate low divider voltages'''Vin_divl = []#calculate input voltagesfor x in range(0,numpts):Vin_divl.append((Vmin + x * Vint)*divratio)'''Calculate high divider voltages'''Vin_divh = []#calculate input voltagesfor x in range(0,numpts):Vin_divh.append((Vmin + x * Vint)*(1 - divratio))'''Calculate error voltages'''uV_errors = np.zeros(numpts)for i in range(0, numpts):for x in range(0,torder + 1):uV_errors = uV_errors + tcoeff * Vin**x - calcdcoef * Vin_divl**x'''Add noise'''uV_errors_n = np.zeros(numpts)uV_errors_nr = np.zeros(numpts)for i in range(0, numpts):uV_errors_n = uV_errors + stdev0 * rng.standard_normal() + Vin * stdev1 * rng.standard_normal()for i in range(0, numpts):uV_errors_nr = uV_errors[numpts-i-1] + stdev0 * rng.standard_normal() + Vin[numpts-i-1] * stdev1 * rng.standard_normal()'''Calculate reversal error voltages'''uV_errors_rev = np.zeros(numpts)for i in range(0, numpts):uV_errors_rev = (uV_errors_n + uV_errors_nr)/2#offsetrev = np.average(uV_errors_rev)#uV_errors_rev = uV_errors_rev - offsetrevrevfitorders = [0,1,2,4]revpoly = nppoly.polyfit(Vin, uV_errors_rev, revfitorders)fit_coeffs = nppoly.polyfit(Vin, uV_errors, sumfitorder)calcdcoef = revpolycalcdcoef = 0calcdcoef = revpolycalcdcoef = revpoly'''Calculate low divider error voltages'''uV_errors_divl = np.zeros(numpts)for i in range(0, numpts):uV_errors_divl = uV_errors_divl + stdev0 * rng.standard_normal() + Vin_divl * stdev1 * rng.standard_normal()for x in range(0,torder + 1):uV_errors_divl = uV_errors_divl + tcoeff * Vin_divl**x - calcdcoef * Vin_divl**x'''Calculate high divider error voltages'''uV_errors_divh = np.zeros(numpts)for i in range(0, numpts):uV_errors_divl = uV_errors_divh + stdev0 * rng.standard_normal() + Vin_divh * stdev1 * rng.standard_normal()for x in range(0,torder + 1):uV_errors_divh = uV_errors_divh + tcoeff * Vin_divh**x - calcdcoef * Vin_divl**x'''Correct total voltages'''for i in range(0, numpts):for x in range(0,torder + 1):uV_errors_n = uV_errors_n - calcdcoef * Vin_divl**x'''Calculate sum error voltages'''uV_errors_sum = uV_errors_n - uV_errors_divl - uV_errors_divhoffsetsum = np.average(uV_errors_sum)uV_errors_sum = uV_errors_sum - offsetsumsumfitorders = [0,1,2,3,4,5]sumpoly = nppoly.polyfit(Vin, uV_errors_sum, sumfitorders)tsumcoef = np.zeros(sumfitorder+1)tsumcoef = sumpoly/(2*divratio - 2*(divratio**2))tsumcoef = sumpoly/(3*divratio - 3*(divratio**2) + divratio**3)tsumcoef = sumpoly/(5*divratio - 10*divratio**2 + 10*divratio**3 - 5*divratio**4)calcdcoef = tsumcoefcalcdcoef = tsumcoef'''calculated transfer errors'''uV_errorscalc = np.zeros(numpts)for i in range(0, numpts):for x in range(0,torder + 1):uV_errorscalc = uV_errorscalc + calcdcoef * Vin**xuV_errorscorr = uV_errors - uV_errorscalcdisplayplot()print("Coefficients: ", tcoeff)print("Calculated coefficients: ", calcdcoef)The code uses reversal to determine the offset and second order coefficient then uses that to apply a correction factor for those terms before doing the regression for the sum error. This seems to work a bit better than doing everything separately as there are fewer degrees of freedom for reversal, which only has even order coefficients. As expected, the more points you get, the better the immunity to noise. I have attached a couple plots from running the script with some random coefficients I had chosen, one where it does well, and one where it does poorly. Noise is modeled as conversion noise that is constant at all input voltages and reference noise that scales with the input voltage.I have nearly finished up the board I am currently working on, so I will design something along these lines in the coming weeks.

author: Kleinstein
author_rank: Super Contributor
timestamp: January 25, 2024, 05:57:33 pm
content: The polynominal fit can get a bit tricky and increasingly sensitive to noise, when higher orders, like 7th or 9 th order are inlcuded. If the actual INL is not well described with a low order polynominal one might have to include those higher terms, at least from the theoretical side. Ignoring them would not improve the result, but make it worse.So if the INL is not well descibed by low order polynominal the calculation back may become tricky. The factors to go from the cn to an coefficients for a 1:1 divider should be - 1 - 1/(2^(n-1)-1) for n > 1 and thus convert to 1 relatively fast. With possibly opposing signs and relatively large values this could still be an issue for the higher powers.Test with the sum from the half way point still makes sense to check, it may just be hard to calculate back to an INL curve if the curve is not well behaved.For the hardware side I did a few more tests. One point that may be interesting is that the impedance of the divider can make a difference. This is especially if the DUT or possibly the switching part is not super low bias / leakage. In my case a series resistor of 6.8 K for the center voltage changes the sum of the 4 readings by some 1.5 µV. An extra buffer for the divider voltage would essentially eliminate the effect. Without a buffer a test with an extra series resistor may be a good idea to check for the approximate effect of output impedance.

author: miro123
author_rank: Frequent Contributor
timestamp: January 26, 2024, 12:51:43 pm
content: I am still struggling with HW implementation. I did simple mistake.I have MAX5216 available, but I overlooked the datasheet noise section.DAC output is really very noisy and useless. Reducing the BW does not help a lot.Actually the datsheet has already described. It is my fault.Vn= 73nV/sqrt(Hz) @ 1KHzVn= 70nV/sqrt(Hz) @ 10KHzVn(0,1..10Hz) 3,5uVppI have looked for low noise DAC but their price is quite high for such simple hobby project.Doe somebody knows - low noise DAC, available on stock and with reasonable price? Or do I ask a lot? :-)

author: Kleinstein
author_rank: Super Contributor
timestamp: January 26, 2024, 05:20:02 pm
content: I have also looked at low noise DACs. A good choice are the current output DACs and there are many similar types to choose from. An example is AD5443 (12 bit) and AD5446 (14 bit).The noise should mainly be set by the resistance and OP-amp for the output (e.g. OPA207) - the slight unknown is if the resistor part has significant excess noise. The example noise performance in the DS uses a rather fast OP-amp with lots of 1/f noise and the LF part is thus dominated by the OP-amp.

author: julian1
author_rank: Frequent Contributor
timestamp: January 26, 2024, 09:30:32 pm
content: I tried in the past with dac8734 (1uV RMS 0.1-10Hz) but it was a bit noisy.For AD5444/5446 -ref input can be +-10V. which means using a ~7V ref is OK.the multiplying r2r dac outputs are limited, to VDD, max +7V.But R2 working as an extra resistor in front of the internal Rfb, can add gain for both the unipolar and bipolar reference circuits,So this would work for eg. +-10V output.What would be a good configuration for sum tests?One could have one multiplying dac with bipolar output to create the first voltage.And also use the output as input ref for a second multiplying dac to create a controllable buffered divider.Alternatively, just one multiplying in a bipolar configuration - followed by a fixed divider (eg. 10k,10k) to create a second midpoint voltage would be enough.

author: Kleinstein
author_rank: Super Contributor
timestamp: January 26, 2024, 11:18:44 pm
content: The basic configuration for the multiplying DACs is with some 10 or 7 V reference and than 0 to -10 or 0 to -7 V out. So an output gain of 0 to -1.The supply to the chip is for the switches and the ref. voltage can be higher and even negative. It is a bit tricky to directly add gain, as Rfb is matched to the resistors in the R2R DAC part. So gain would be relatively separate from the DAC. The bipolar version is a bit tricky with extra precision resistors needed.One may not even need a negative sign. For the negative half one could just change the wiring from the meter to the tester. This would mean running the test as 2 parts.An extra inverter for an alternative signal with the other side also makes some sense (see below).A main case for the sum test is having 1 voltage and half the voltage. It would be relatively few divider ratios that really make much sense. So I see little sense in a 2nd DAC for this.A 2nd DAC may be usefull for other tests, maybe getting close to the chain of voltages as in the original idea: One DAC sets the even voltages and the other the odd ones. For the overall test one would also have ground as a 3rd path for the switches to the DUT terminals.With buffered signals, leakage would be not critical als relatively simple CMOS switches (e.g. DG411) would likely be good enough for switching.The general setup could be 2 MUX chips like DG408/9 and a bunch of test signals to choose for both sides. The question may be if one wants protection (one side can be enough) towards the DUT(meter) or take the risk of possibly damaging the switches(e.g. from ESD or a short).If the 10 V range is enough one could use just the DAC output and a divider. It could make sense to have a buffer for the resistive divider to avoid a loading effect. I would consider a small offset the lesser problem than the output impedance of the divider.For a larger (e.g. 20 V) range one could consider driving both sides and use an extra inverter after the DAC to kind of replace a 1:1 divider by some effective gain of 2 for the signal between the positive and negative output and ground as the center point. Compared to normal gain this would not need a higher supply and may be more convenient with CMOS switches to have the same GND as the DAC.This way one would also have the other sign available for other tests.So possible test signals to the mux chips could be:1) the DAC output (e.g. 0 ... -10 V)2) inverted DAC out 0 ... 10 V3) GND4) 1:1 divider from DAC + buffer (e.g. 0... -5 V)5) optional: 1:1 divider from - DAC + buffer (e.g. 0... 5 V)6) possibly a 2nd DAC7) possibly the raw 7 V or 10 V ref.?

author: julian1
author_rank: Frequent Contributor
timestamp: January 27, 2024, 10:45:10 pm
content: Is there any way to guess at the possibility of excess resistor noise - for different part choices?Rfb is a proxy for the values of all other switchable resistors.The size of Rfb varies, but lower values (5k versus 7-12k) may risk more thermal effects.Judging by max VDD they all use typical cmos process nodesIt appears there are many ways to do resistors,https://aicdesign.org/wp-content/uploads/2018/08/lecture07-140310.pdfBut I think only metal thin-film has good enough TC, to meet part datasheet specs, so perhaps thin-film could be assumed?Maybe tests are the only way to know for sure.As Kleinstein notes, the datasheet 1kHz noise figures are likely meaningless for LF DC, but relate more to the fast op-amps used for test setup circuits.The AD part, is nice in that it brings out a separate gnd for the resistors.AD5444_5446Output Noise Spectral Density 25 nV/√Hz @ 1 kHzFig. 39 shows output noise ramping at lot <1kHz / AD8038.Rfb 7-11k.DS states resistors are thin film - "consideration the effect of the temperature coefficients of the thin film resistors".RM10 mssop 10. 0.5mm pitch.LTC1595Equivalent DAC Thermal Noise Voltage Density (Note 10) f = 1kHz 11 nV/√HzRfb 5-10k, 7k typ.soic-8. 1.27mm 4mm width.DAC8811.Output spot noise voltage f = 1 kHz, BW = 1 Hz 12 nV/√Hzdoesn't say Rfb, but probably the same as dual DAC8812, which gives Rfb= 5k.dgk = vssop. 0.65mm.DAC7821 12bit dualRfb 8 to 12k.tssop-20.

author: julian1
author_rank: Frequent Contributor
timestamp: January 28, 2024, 12:32:57 am
content: Sorry for the edits.Got a nice statement here from AD, that white/thermal noise is dominant,"Low noise — the AD54xx and AD55xx family of IOUT DACs utilize low impedance architectures. These are inherently low noise architectures dominated by the thermal noise of the RDAC resistor."https://www.analog.com/media/en/news-marketing-collateral/solutions-bulletins-brochures/AnalogMultiplyingDACs.pdfAnd the resistors are silicon/chromium thin-film,"The AD5449 (and the AD5415) are dual CMOS multiplying DACs (MDACs). They aremade with silicon/chromium thin film resistors and CMOS switches. Since theresistance of the CMOS switches is much lower than that of the resistors in thenetwork the noise of such devices is quite close to the thermal noise of theresistance. "https://ez.analog.com/data_converters/precision_dacs/w/documents/3490/ad5449-output-noise-spectral-density

author: Kleinstein
author_rank: Super Contributor
timestamp: January 28, 2024, 08:51:47 am
content: The white noise part from the normal resistor noise should not be that important. The LTZ1000 has a white noise part that about corresponds to a 100-150 K resistor. The point to possibly worry about is the low frequency noise. For the multiplying DACs this is mainly excess noise from the resistors and maybe a little from the FETs.Because of the thermal effects I would prefer the slightly higher resistance variants, especilly if a 10 V or even slightly higher reference is used. I would consider the rather low resistance version more suitable for lower ref. voltages (e.g. 5 V).It is hard to tell how much excess noise the ADCs have. The resistor arrays on a silicon substrate usually have low excess noise, but this is usually NiCr and not CrSi.I see a good chance that the DAC noise would be lower than the noise of the reference also for the LF noise.The noise data I have found so far all included the noise from the OP-amp at the output and possibly the ref. drivers.Having separate analog and digital ground may be an issue for higher speed operation. I don't see an issue with relatively slow changing values. With only 1 GND pin (e.g. DAC8801) it should go to the analog ground as it is the return path for the DAC current. So any ground bounce here would add to the output. A seprate digital ground is nice (e.g. helps with decoupling), mainly a thing if one uses the DAC with fast changing data. With only 1 GND pin I would definitely include a series resistor / ferrite in the supply path to reduce coupling from the digial supply to the analog ground.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: January 30, 2024, 03:04:52 pm
content: Kleinstein,I think the best way of dealing with the impedance issue is not to buffer the divider output but to put resistors equal to the impedance of the divider center tap at all the outputs. With regards to the higher order INL terms, they may be an issue, but most of the differential ADCs I see have third order errors being the biggest issue. This method is probably better suited for higher order terms than a string DAC. Most polynomial regression algorithms treat x, x^2, x^3... as independent variables in a multiple regression, so one quickly runs into the problem of overfitting the data set and fitting noise. I would need to review the guidelines for minimizing this problem, but larger data sets with replicates are going to help. With a 16-bit DAC, time is always going to be the limiting factor in how many points one wants to do. Algorithmically, you could imagine running a reasonable number of points (say 100), running the regression through fifth order, and re-running points with a large residual. If the residual goes down by a certain amount when you average the old data point and the new one, you can say it is noise, but if it does not, it may be that you have not captured terms to a high enough order.I have finally finished laying out my NVM, so I will begin working on a design for this shortly, but my general philosophy is for things I am going to make one or two of, I'll spend $100 on a DAC without hesitation because I will inevitably be putting in many hours of labor as well as ordering boards, stencils, enclosures, etc. My plan was to use a DAC11001B and use an INL test of my 3458a to measure the nonlinearity of the source to be able to use it as a calibrator. The power supply will be 4S lithium cells with a LT1533 push-pull converter to generate +/- 15V as well as some other taps. By the way, you can order DAC81001s (a 16-bit version of the 11001) directly from TI. They are about $30 in unit quantities and have the same footprint as the 18 and 20 bit versions. The noise on these is low enough that reference voltage noise is likely to be dominant.

author: Kleinstein
author_rank: Super Contributor
timestamp: January 30, 2024, 05:04:08 pm
content: I like the idea if re-running those points with a large residual. When doing things manually one tends to do this also, making sure the points are real and not due to some odd effects. This may however also be tricky as if one is not careful adds more weight to regions that show the larger initial residual.For my setup, that is ADC noise wise comparable (to slightly better) to the 3458, but so far has only a LM399 ref. it takes quite some time for a set of voltages / point in the crive. Uusually some 10-20 minutes. It may get a little better with a better reference, as part of the averaging is needed for ref. popcorn noise that just need some averages. Even with a lower noise reference I don't see it getting much faster than some 5 minutes ( ~ 15 readings for each setting). So this would be some 200 points at most for 1 day of running the setup. 100 points sounds like a reasonable number, with possibly separate sets to check for reproduciblity and drift effects. At least for this test there is no real need a really high resolution of highly linear DAC - 12 bits would be plenty. Of cause a different test may make good use of a better DAC.For my ADC I was also expecting mainly an X³ term - but the data points I got so far did not support this. There seems to be more.The even powers are usually easy to handle with the turn over test and in my case that part works really well. So the main fit would be with only the odd powers and even with x, x^3,x^5 and x^7 there are not that many parameters to fit. A problem in the fit is that the X^5 and X^7 powers and similar higher orders still look relatively similar for most of the points. So only a small part of the data near the full scale will really make a difference. The points near zero have little effect on this more critical part of the fit.One should still be OK to fit something like 5 or 6 parameters with suitable spaced testpoints, like more points near the ends.Adding resistance to make all test points the same impedance may not be enough, as 2 links (input and low side) to the DMM and swiches may not have the same amount of leakage. This would especially be the case if the switches are powered from the ref./DAC unit. Also more impedance make the whole setup more sensitive to hum.I see no problem with adding an extra buffer to the dividers - this is at least for the more high voltages like the 10 V range. The sum error does not change much when a little off the 50:50 point and the offset would be only a tiny fraction of the test voltages.Things can be different for very low voltages, e.g. for a 100 mV range and below. There the divider can be much smaller resistance too.Having provisions to add resistors may still be a good idea - similar it is good to have the option of an extra buffer.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: January 30, 2024, 08:49:51 pm
content: Interesting observations about your own test, and good point about optimizing the spacing.Regarding the input buffers, my thought was that most low noise buffers will not do as well as an autozeroing input stage in terms of maintaining high impedance as well as low offset, but if the design to be tested did not have a high input impedance, then this could be problematic. For the design I am planning out, I plan on using something like a 19:1 divider to scale the input voltages down to 0-0.5 V, then buffering that and dividing with a three resistor string of something like 450R, 25R, and 25R. The "V_dac" would be taken from the tap between the 450 and top 25R resistors, and the center tap would be taken from between the two 25R resistors. An additional 22R at the center tap to the output would put both impedances at ~45R. I agree that at 100 mV and below, a buffer is probably not practical. In general, the choice requires one to make some assumptions about the input impedance and noise of the DUT.I wonder if thermal tailing would be an issue if the divider for the main 10V output was, say 1k/1k. My instinct is probably not as the whole test is quite slow and the steps are fairly small, so the increase in power dissipation would not be very large. One could drive such a divider with a 3904/3906 pair without concern for biasing as you would not be crossing 0V quickly. This would keep the loop gain of the buffer amp high and isolate it from thermal EMFs.My main motivation for using a 20-bit DAC is because measuring the INL of an ADC simultaneously allows one to measure the INL of the source, so the whole thing can serve as a voltage calibrator once the DAC's transfer function is characterized.The MAX549x resistor networks use SiCr thin film, and these have a measured noise index of -55 dB (https://arxiv.org/pdf/2109.02448.pdf). Of the thin film types, NiCr seem to generally be the best.

author: Kleinstein
author_rank: Super Contributor
timestamp: January 30, 2024, 10:36:14 pm
content: For the higher voltage the buffer would not be an issue at all. Even if not super low offset of input bias the buffer only sees the fixed divider and thus a fairly constant impedance. So any bias would only add a little offset. A little offset is not that critical: the offset does not directly add to the error sum, but effectively changes the divider to a slightly different value. The actual ratio is measured in the test and thus could be used. I see no problem if the divider ration is a little off - this only slighty increases the dependence on the ratio. If we have some 100 µV of offset and a target of 1% deviation for the divider this would still be only 10 mV for the partial voltage and 20 mV total.Having 10 V with 1K /1K would likely run into thermal problems: that would be 5 mA and 50 mW. With such low resistors one might get away without a buffer for the center tap.For the divider I would more consider 10K/10K and even than there can be some thermal effect, though not sure if this would be an issue for the test.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: March 21, 2024, 02:57:36 am
content: I finally got around to putting together a schematic for the single divider version. I also need a general purpose calibrator that is reasonably accurate, so that guided some of the design decisions here. The low voltage range will be good for testing INL for ranges up to 100 mV. A pdf of the interesting part is attached. The power source will be a 4S 21700 Li battery with isolated and coupled-inductor Cuk converters for the primary positive and negative rails, respectively.

author: Kleinstein
author_rank: Super Contributor
timestamp: March 21, 2024, 08:09:49 am
content: The circuit at the output of the DAC11001 looks a bit odd. As shown it is a glorified buffer amplifier with the 2 DAC internal resistors just in sereies at the feedback.

author: EC8010
author_rank: Frequent Contributor
timestamp: March 21, 2024, 08:57:19 am
content: I see that a great deal of thought has gone into data analysis and circuit design, but nobody has mentioned the issue of ensuring that everything is at the same temperature. For a similar problem, I fitted my parts in a sealed can, collected noise spectrum down to 20mHz, then added oil and repeated. Measured improvement as attached. Those frequencies look to be in the time scale this thread is considering. I would warn that white oil leaks through tightened threads, solved by using silicone sealant as used for assembling engines.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: March 21, 2024, 06:33:29 pm
content: Quote from: Kleinstein on March 21, 2024, 08:09:49 amThis is the recommended configuration from the datasheet for unity gain output with matched source impedances for the buffer. The two internal resistors are in parallel as shown. The circuit is indeed just a glorified buffer, but you can have good buffers and bad ones, and I think this is a reasonable occasion for a good one.Quote from: EC8010 on March 21, 2024, 08:57:19 amYou are more dedicated than I am. Oil is a mess. I like to use the cheap Laird SMD RF shields as baffles to minimize airflow, and this works pretty well for reducing LF noise coming from thermal EMFs. My general plan here was to put the output switches reasonably far away from the other components, possibly with isolation slots. I think the TSSOP will be better than the QFN in this case because it will be possible to orient the terminals for each switch perpendicular to any thermal gradients. The lower voltage rails for the LT6018, the fact that I am using an LTZ1000A with a cathode resistor to get good TC with a lower heater setpoint, and the design of the power tree are all ultimately in service of the goal of minimizing power dissipation to make it easier to avoid excessive noise from thermal gradients. Those last two aren't shown here, but this has certainly been a design consideration.

author: miro123
author_rank: Frequent Contributor
timestamp: March 21, 2024, 10:13:32 pm
content: Quote from: CurtisSeizert on March 21, 2024, 02:57:36 amWhat is the internal DAC1101 structure? In case of MOS SC the reference circuit should provide sink as well as source capability. The datasheet reference circuit uses sink&source buffer - no idea is this intentionally.Sems to be SC,1. It is logical there is no way to make such high performance device with resistors2. datasheet shows - THS4011 as Vref buffers- 290MHz 310V/us3. datasheet page page 24 - "The reference pins are unbuffered; therefore, use a reference driver circuit for these pin"

author: Kleinstein
author_rank: Super Contributor
timestamp: March 21, 2024, 10:44:39 pm
content: The datasheet says R2R type for the DAC. The lack of a clock (except for SPI) also sugest that this is not a SC DAC.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: March 22, 2024, 01:46:05 am
content: The REF+ buffer only needs to source current and vice versa for REF-. On p. 18 of the datasheet there's a graph of the current draw from each reference pin. Thinking about this now, it might be a good move to put a resistive load between the two to increase the transconductance of the emitter followers when the load from the DAC is light. The current profile for the reference pins drops to nearly zero at the extreme codes, which seems indicative of it being an R-2R ladder rather than a string DAC for the MSBs and an R-2R ladder for the LSBs like the AD5791. The B version also implements a sample and hold deglitching filter, so in fairness, there's at least one switched cap in there.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: April 19, 2024, 04:13:26 pm
content: I finished layout and assembled a board for the DAC + single ratio version. I wanted to get my money's worth for the LTZ1000A and DAC11001B I used, so I added a Howland-type current source with four ranges and a fourth order Butterworth for an AWG on separate outputs. Those are on switched rails to minimize power consumption and heat dissipation. I am hoping to get the firmware to a point where I can test it with my 3458 in a week or so, but I expect I'll need to run it for a month or so to get the LTZ1000 stable enough for optimal results.

author: Kleinstein
author_rank: Super Contributor
timestamp: April 20, 2024, 08:36:00 am
content: For just INL test it should not take so lang for the LTZ1000 to stabilize. The more tricky part can be drift at other parts (OP-amps, resistors and the DAC) from board stress and humidity changes. Ideally the INL test sequence would allow for some constant drift at least. The drift can be from the ref. source, but also the DUT. As an example have a sequence like full voltage, upper half, lower half, maybe the upper half again and than full voltage again. One may want to repeat the tests multiple times anyway, especially if there can be popcorn type noise as this can cause outlyers.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: April 20, 2024, 04:06:17 pm
content: Fair enough. I baked the board at 125 C for 60 minutes after reflow (but before populating the TH components) per the DAC11001B datasheet, but in my experience, it takes some days of on time for things to settle out.It will be important to characterize the settling behavior of the source and DUT to determine the best way to order the data points while keeping the overall run time reasonable. If there is a non-linear component to settling or drift, that will not be cancelled effectively with an ABCCBA sequence. Also, ideally the sequence of DAC codes would be random (if there were no parasitic effects for the source to consider) because running everything in order would make time dependent gain drift of the DUT appear as INL. However, there will be some inevitable thermal tailing due to power dissipation in the 10k/10k divider that will increase the settling time for large code steps. As such, it will probably be necessary to check for settling or group codes into blocks that would be randomized in both placement and direction if settling time is excessive. Also, to the extent that a power dependent error term exists in the DUT, incomplete settling for the readings taken at a given code will lead to second and/or third order INL terms. The weight of these error terms will depend on whether the DUT input range is bipolar and to what extent the effect is on offset through e.g. parasitic thermocouples or gain through resistor ratio drift.With those considerations in mind, it would be hubris to predict which run order would be best a priori without system feedback. So, to start off, I will run some tests to compare the results of different ways of structuring the run with my 3458. My gut feeling is the best algorithm will capture a number of data points for each code + switch position at, say, 10 NPLC and take a standard deviation of the x most recent of these. Once the standard deviation stops dropping, take the average of those x most recent and record that average and move to the next point. Some degree of randomization will almost certainly be necessary as will replicates for either the entire run or for outliers. I think that it will be wise to collect temperature data for both the DUT and the source at each point as well to be able to run a diagnostic fit of residuals against temperature (as well as the usual fit against order and checking for normality).For the polynomial fit of the sum and reversal errors, my plan is to work these up as one would a data set for multiple regression or design of experiments. Before the run, the number of points would need to be chosen to be sufficiently large to avoid over fitting the data based on the highest order INL term I plan to fit. Once I have the data, I'll run multiple regression and prune the least significant terms from the model until this starts to increase the standard error or adjusted r^2. I will probably use reversal error for the even-order terms and sum error for odd-order to limit the degrees of freedom on the sum error fit. Best practice (at least in process chemistry, which is where I would do this stuff and get paid for it) would be to run replicates for points above a certain threshold standard deviation from the model then generate a sample of random data points not included in the initial run to check their fit to the model to validate its predictive power. None of these can necessarily pick up systematic errors, which is why it will be important to handle that aspect separately through robust experimental design.I will post the data I get once everything is up and running.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: April 25, 2024, 02:47:48 pm
content: I've got the core functionality of the design up and running, and everything seems reasonable at this point. The current draw at 16V is 140 mA, so battery life with 21700 cells should be 24h with margin. I am waiting on a trim resistor to get the +10V reference voltage to 10.48576 V to give a 10 uV LSB for the 10V range. The low voltage part is very quiet and has a range of +/- 100 mV (or less, depending on the reference SW position), so I should be able to also get INL tests for the low range of the 3458 and my NVM in the future.I've included the results from the only real test I have run so far, including the raw data if anyone wants to play around with it. The DUT is my 3458A. I used 50 DAC codes evenly spaced in a random order. For each code, I measured voltage at each of the eight possible switch settings (DAC,GND; CT,GND; DAC,CT; CT,CT + the reverse). For each setting, I took 20 samples at 100 NPLC, kept the last 16, and recorded the average and standard deviation of those 16. I ran ACAL right before the run, but it's been a while since I did a short calibration, so null is a bit off. The total run time was about 7 hours.For future tests, I will see if it is actually important to randomize the order of the codes. I suspect it is not because gain drift between codes would be second order effects that would get lost in the noise with any reasonably accurate DUT. I am also going to try random SW position order but maintaining the CT,CT settings as bookends. I do think this will be more consequential.Standard deviations were reasonably good, averaging about 40 ppb of full scale at the ends and 11 ppb of full scale in the middle. With 16 samples, the total width of the 95% confidence interval is equal to the standard deviation, so getting sufficiently low scatter for moderate order polynomial fits at sub-ppm level should be feasible in 24 hours or less. There reversal errors at the center tap voltages that are in excess of those measured between DAC and GND by several-fold (average is 3-4 uV). I don't know why these should exist other than that they may come from parasitic thermocouples between the leads of the switch. I will try compensating those for future runs by switching the DAC to bipolar references, running codes on either side of zero sequentially, and averaging the error terms for each. I think this will help to avoid confounding non-idealities in the source with DUT nonlinearity.Anyways, with the sum errors (corrected for offset at CT,CT), there are a couple points that I would probably discard or rerun for a fit, but there is a clear shape to the curve. I subtracted out reversal errors for each voltage in the sum to get "corrected" sum errors. This makes the plot symmetric about the origin, but it's not far off from that uncorrected (less the offset, of course). This correction should cancel out the even-order errors in both source and DUT, which is fine because we can determine the even order terms in the transfer function from the reversal error fit. Just by looking at the corrected sum error plot, it seems the dominant term is fifth order with nonlinearity errors topping out around 50 ppb. It will be interesting to see if this shape remains with the bipolar compensation scheme I mentioned. The magnitude of the reversal errors is smaller, and without doing the analysis, my gut feeling is that the experimental power is probably not sufficient to put any even order error terms in an INL model. Overall, I am optimistic that this source could be used to characterize INL down to at least the 0.1 ppm level if the transfer function is well-described by a polynomial fit without too many terms.I also modeled the DAC linearity error, but this isn't really a good way of measuring it because of the amount of time spent measuring other things and the greater opportunity for drift. Here I saw maximum deviations from linearity of about 22 uV, so 2.2 ppm. I did a quicker run before this, and it was within the DAC11001B's +/- 1 ppm spec.

author: Kleinstein
author_rank: Super Contributor
timestamp: April 25, 2024, 04:35:34 pm
content: For the DAC error the drift of the reference / gain at both the DAC and meter can definitely be an issue. This may especially effect the first point, when the system is possibly not yet fully settled. It still does not look that bad, expect for a few outlyers.For the sum tests the drift is far less critical. It is mainly about the drift during the 8 readings. One may also just run the test with only 4 readings that belong together and maybe than repeat that same 4 values 2 or 3 times. The other polarity is more like a different test. The combination gets 3 tests from 8 readings instead of 1 test from 4 readings. So it could save some time.Some of the turn error can come from an offset at the meter, e.g. from termal EMF at the terminals / relays use for the reversal. One gets 2 x the meters offset as turn over error.One may get around some of this if the turn over test includes a zero reading from the same switches as used for the source reversal.How is the reversal done exactly ? Is it just the sum of 2 readings or is it 4 readings inlcuding 2 zeros ? Including the zero readings would compensate for the meters offset.I have not yet look at the excel file - maybe it tells the missing details on what is actually shown.edit:I looked at the Excel file: it shows that the results for the sum error is from 4 readings. It is really surprosing to get that much of an error. This makes me question if maybe a different range is used for the zero readings is used, of something else is going wrong. I would not expect that much of an error in the sum and also not an essentially constant value.The turn over error also uses 2 zero readings, but this as zero readings at CT CT. This would only correct the offset at the DMM, but add the errors from the relays at the tester. The right type if zero would be GND,GND and DAC,DAC. The is already the factor 0.5 included.The currected sum error looks odd and for some odd reason it adds up to near zero. I don't understand the idea behind the correction - the compensation is suspiciously good and also super symmetric (not even noise there) for positive and negative, like really removing most real data.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: April 25, 2024, 05:24:12 pm
content: The reversal error is calculated as (V(DAC,GND) - V(OS1) + V(GND,DAC) - V(OS2))/2 to give an equivalence between the magnitude of it and that of offset.The 8 readings are taken together so that the inverse polarity datapoints are done as near in time to the normal polarity ones as possible. This should minimize the error contribution of various drift terms in calculating reversal error.I should note for anyone looking at the spreadsheet that the headings for the reversal error columns correspond to the binary code of the individual SPDT SW positions. They are in the same order as the first three columns of readings.The issue I noted with the reversal error for the center tap voltages is that they are about 7x higher on average than the reversal errors for the DAC voltage itself. The averages for the CT reversals are -4.16 and -3.99 uV while those for the DAC are -0.58 uV. The center tap is buffered, so the output impedance should be the same. I cannot think of a way that this would be from the DUT, but I may be missing something. I am not worried about reversal error for the center tap voltage per se, but if it's indicative of an error with the source that is code dependent, that could lead to spurious conclusions about the higher order coefficients. The good news is that what I would consider the most likely code dependent effect - power dissipation of the nearby divider resistor leading to parasitic thermocouple voltages proportional to P(divider) would be second order. The shape of the CT reversal errors vs. DAC voltage looks very slightly parabolic, but you might have trouble proving that in a court of law.As for the overall structure of the test, I am trying the option of averaging the results from multiple runs with the individual points taken at 10 NPLC rather than 100. This puts measurements of the individual components for calculating the error terms closer in time. We will see if it helps.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: April 29, 2024, 03:43:57 pm
content: First off, I got to the bottom of the anomalously high turnover error for the center tap voltages. I had unwittingly connected circuit GND to the shield of the USB cable via the SMA jack and the case. Things are much better behaved after using some polyimide tape to insulate the jack and connecting the USB cable through an isolator.To address Kleinstein's comments, the "corrected sum error" values came out to near zero seemingly by coincidence for that test. It is an interesting sum because it ends up cancelling out the even-order errors from the data. However, with the source actually floating now, it is noisier than the regular sum error. There is no option to short the meter at a common mode potential relative to circuit ground other than that of the center tap because the output switching is handled by four SPDT switches (a TMUX 7234). The relays on the board are actually range switching for the Howland current source. The short nulls out the TEMF-related offsets back to the common terminal of the first switches. It is not clear to me that anything would be gained by taking short readings at multiple bias voltages unless there is considerable noise from the center tap buffer. The meter would be seeing the exact same impedance between its terminals for a short at any tap, and there is no effect from bias voltage on the short voltage in the data I have captured. The range for the tests was set manually, and it is the 10V range the whole way through.I have been collecting slopes from the data points for each measurement in the test, and I noticed that with a randomized code order, there is a relationship between slope and code. Moreover, when I use bipolar references for the DAC and take readings on either side of zero sequentially, the second of these has a smaller standard deviation. To try to keep the settling better behaved, I started running the codes in sequence. This does help reduce the standard deviation a bit, but it is now impossible to separate drift in time from code-dependent drift, so I may look at some alternatives.The weakest point in this strategy is probably the reliance on polynomial regression. With a dataset I gathered at 10 NPLC with 50 points and 8 replicates each, going above fifth order fits was dicey. Seven was possibly OK except at the edges, but nine was not well behaved. I have been experimenting with fitting cubic splines, and this is definitely better near the edges. I don't know if it is possible to analytically derive the transfer function from such a fit, but I have been testing some algorithmic approaches to converge on a transfer function that minimizes deviation from the turnover error fit spline and the sum error fit spline. This is doable, but it tends to be poorly behaved around zero, which has significant effects on the other points in the curve. I may also try fitting a polynomial to the data near zero, as high order terms will not be important, and calculating out from the fitted curve. The sum error formula is agnostic about what happens on the other side of the origin, and the turnover error data do not constrain the difference between two points on opposite sides of the y axis. That means just trying to derive the transfer function through recursion is subject to compounding errors. The effect of fitting errors on the slope of the transfer function is greatest near zero because the sum error is effectively the slope of the error of the transfer function between the total voltage and the center tap voltage (assuming a ratio of 1/2). As the function approaches zero, the divisor defining this slope gets small, so the impact of the errors gets large. This is a work in progress, and the results would need to be validated against simulated data with various polynomial and non-polynomial transfer functions to gain confidence in the technique. I expect that this general approach will ultimately yield the best way of processing the data.

author: Kleinstein
author_rank: Super Contributor
timestamp: April 29, 2024, 04:11:12 pm
content: The idea of doing the zero readings also with 2 different readings is to also include a possible offset error (thermal EMF) from the switches. With a careful layout this offset may be small. So only the zero reading at the center would not include the offset from the switches. For the test one +-10 or +-5 V range this sytem can be OK.It would be mainly for the low voltage test that a slightly different switch configuration would have been better. This could still be the SPDT switches, just in a different configuration, so that the first switches are used to select the voltages for the test and the 2nd set of switches are used for the 4 steps in a sequence.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: April 30, 2024, 06:41:33 pm
content: There is actually a much better method of using the data to generate a transfer function than I initially thought. It's pretty simple. You generate the corrected sum error by subtracting the turnover error for each tap. This removes the even order errors and gives you a locus of points that is symmetric about the origin. You can prove this algebraically very straightforwardly. Similarly, each value you get for turnover error is equally applicable to the negative and positive voltages used in the sum, so this locus of points is symmetric about the y axis. So now, for each point in the transfer function you have two orthogonal constraints:(1) E_t(x) = (E(x)+E(-x))/2(2) E_s(x) = E(x) - E(-x)Where E_t(x) is the turnover error at x, E_s(x) is the corrected sum error at x, and E(x) is the transfer function error. Thus:(3) E(x) = (2*E_t(x) + E_s(x))/2At this point you can fit the transfer function however you like if the point is to correct for nonlinearity. There are some real advantages to this. First, there is no need for the transfer function or either error function to be well behaved. This is because the eight measurements taken at each DAC code are sufficient to define a point on the transfer function. Zero and first order terms can drift as much as they like between codes, but as long as they are stable within the time needed to take the measurements for a given code that is fine. Any drift term would be multiplied by the linearity error, which would be an imperceptible error with any reasonably linear and stable DUT. Third, this really simplifies uncertainty analysis. In principle, you could just run multiple sweeps and directly calculate confidence intervals at any point.I attached a plot of the linearity error for the 3458A calculated by this method as an example. Some of the data collection was suboptimal, but the spread is generally pretty tight either way. All the data were taken by averaging 16 points taken at 100 NPLC. I took the initially calculated points and removed the slope and offset with a linear regression to make it easier to interpret. I am looking at ways of making sure the turnover errors are consistent because that actually has the most scatter at this point. I included the plots for each. The vertical axis is microvolts. The blue points are directly calculated and the orange are reflected. Each point derived by averaging the data from two DAC codes on the opposite side of 0 V (approximately) at opposite turnover switch positions. The turnover error is still susceptible to offsets coming from even-order harmonic distortion or rectification of AC components of the signal, but any DC error in the source is pretty well compensated.

author: Kleinstein
author_rank: Super Contributor
timestamp: April 30, 2024, 08:18:20 pm
content: I am afraid things are not that simple. The trun over part is simple, but the sum test works with 2 different voltages and thus 2 points of the INL curve.The normal sum test uses 2 readings of about the same voltage and not a positive and a negative reading. The version with a negative and positive reading at about half the voltage is also possible (I get that with my DVM comparing the more normal 10 V range with the special 20 V range tha splits a voltage to +U/2 and -U/2).The point is that the sum test also has the reading of the full voltage. It is only at the full scale, that one could argue that the full scale is used as the reference for the INL curve. So one could get the INL at half the full scale, but not at other voltages.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: May 04, 2024, 03:26:26 am
content: Ah, you are right. I made some simplifications when I was doing the math, and then I forgot that I had made them. The error of the transfer function at any given point is actually given by this sum:E(v) = E_t(v) + sum(i = 0 to inf)( (2^i) * Esc(v / (2^i))Where E_t(v) is the turnover error at v, and Esc(v) is the corrected sum error (as defined previously) at v. This can generate a linear component to the fitted error, which I just compensated by adding an appropriate linear term to ensure the slope between the endpoints was zero. How many terms one needs to calculate to get a good approximation depends upon the shape of the corrected sum function near zero. I did some trials with smoothed cubic spline fits to sequences of random numbers to make random transfer functions, and four terms was good for simple transfer functions, while six to ten terms were necessary if things were all over the place (i.e., things that looked like 20+ order polynomials).I tried this procedure with the real data I had from the 3458. When I back calculated the sum error from the transfer function, this gave a linear residual. This should not be possible with a polynomial transfer function, though it could be possible with terms on the order of x log x. Because the area around zero was leading to a large portion of the calculated non-linearity, I tried multiplying the interpolating spline by ( (2/pi) * arctan(a*v) )^2, where a is a horizontal compression factor. I used a=20 so that the effect would be localized close to zero. I attached a plot showing the effect of this. Most of the deviation at the points closest to zero is actually due to the smoothing factor used in calculating the spline. This gave a residual sum error function with a slope of zero. That said, I don't know that this is a good correction to make because the steep slope near zero is a very repeatable observation, so it may be a real thing. Both the turnover error and the sum error indicate some large swings in the transfer function near zero that would be tough to pin on the source. Because the shape of the curve near zero is so influential, it is probably best to get more points in that region.Anyways, it is possible to use the source, some minimal fitting, and a handful of iterations to derive an INL curve from the measurements, and it is looking good well below the ppm level.

author: Kleinstein
author_rank: Super Contributor
timestamp: May 04, 2024, 04:45:04 am
content: The region near zero is a special point for the 3458. There are some more localized errors that can happen here, like the output cross over error of the amplifier and it is the region most effected by the capacitor DA. The 3458 ADC has an odd correction function (Zero glitch jump with U181), that I don't really understand. I don't even know if it is active or disabled by the software anyway.The infinite sum with a 2^i term looks suspicious and is likely no behaving well. It would hardly converge or at least cause problems with diverging errors or numerical problems.The sum test is likely not the best method to use near zero.

author: miro123
author_rank: Frequent Contributor
timestamp: May 04, 2024, 10:02:25 am
content: Quote from: CurtisSeizert on May 04, 2024, 03:26:26 amSorry for my late response. I came to the same equation seems the begin of exploring the idea of R-R divider idea.The equation itself speak for fundamental limitation of algorithm, even if if is quite easy to implement in recursive software algorithm.I suspended any HW development until I'm satisfied with sim results.I was playing with idea of combining of multiple Sum=0 divider based on 1*R/1*R n*R/m*R.I have tried applying Kalman filter to mitigate disadvantages between different resistor divider configurations. I'm still not satisfieed with results. There many parameters. Just to mention few of them error sensitivity, calibration points coverage, measurement time. sensitivity for temperature and time drifts.I'm almost at he point to give up the idea of multiple divider ratios.What is next - I'm considering to explore the initial idea from Echo88 and use DAC + resistive string or not DAC at all

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: May 04, 2024, 05:09:35 pm
content: This sum looks bad on the surface, but it is actually convergent for all polynomial transfer functions. It is pretty easy to convince yourself of why this would be. For a polynomial transfer function, the corrected sum error function has coefficients of 0 for the constant, linear, and quadratic terms. Because the kth term of the sum is (2^k) * E_sc(x / (2^k)), so if E_sc = x^3, the term reduces to x/(2^2k). If, however, there is a linear term, then the kth term just reduces to x, and the sum obviously diverges. This gives a simple test for whether the sum diverges. If you can approximate the corrected sum error function as a Maclaurin series for an arbitrarily small domain centered around zero, then the coefficient of the linear term of the Maclaurin expansion is the the first derivative at zero. So, if the first derivative of the corrected sum error function at zero is zero, the sum will converge.The thing is, if over some domain centered on zero you can approximate the transfer function error as a Maclaurin series, the corrected sum error will have a first derivative of zero at zero because it always has coefficients of zero for the constant, linear, and quadratic terms. Also, as you approach zero, the cubic term in the corrected sum error is dominant, and for a E_sc(x) = x^3, this sum equals (4/3)*E_sc(x). In fact, for any polynomial fit term Ax^n in E_sc(x), this sum will be equal to A*(2^(n-1))/(2^(n-1) - 1)*x^n. So you can do a polynomial fit over part of the domain of the sum error function and use that to avoid infinite recursion.I am looking at using a bipolar sum error to marginally reduce the sensitivity to error near zero. The error term is (V(DAC,GND) - V(GND,DAC)) - (V(DAC,CT) - V(CT,DAC) + V(CT,GND) - V(GND,CT)). I'll also take a closer look at the topology near zero. I should include that even with my spline fitted sum error function without the correction factor, the shape of the transfer function converged around five terms in the sum, and I could not differentiate the plots between six and 20 terms by eye, which is good enough when the limits of the vertical axes are less than 200 ppb fs.Quote from: miro123 on May 04, 2024, 10:02:25 amWith regards to the ideal topology for a source like this, I haven't compared the math between this and the string DAC, but I can say for noise, the limiting factor is definitely the DUT with the design I am using. Rod White at New Zealand's NMI has published some work about using a similar principle but with various series and parallel combinations of four resistors to measure linearity errors of bridges for resistance thermometry down to the 100 ppb level, and this might be worth checking out for ideas.Developing the HW for this was really not that much work, I think the total time I spent was around a week. I believe that having a prototype, potentially with the ability to implement different methods of testing linearity, is probably going to yield more productive results at a certain point. Given the simplicity of the actual schemes, having tested this board, I would say the best way of approaching the design is to implement all of them on one board. Actually, if you just feed the string DAC with an IC DAC, that gives you all everything you need, and you can test all three of those possibilities. Just add a handful of muxes, an MCU with isolated UART to USB, and a reference, and that's it. If I were going to make this again, I would probably also include something where the DAC voltage bootstraps a, say, 2V048 or 2V5 reference, which feeds a divider between itself and the DAC voltage. Then you could calculate the sum error by measuring the bias voltage and the other components of the sum, so you would be getting something like 8, 9, 1, and 10 V for bias, the two centertap readings, and the total, respectively. This would be useful to be able to probe the average concavity around zero without needing to use points in the sum that are spaced very close together. It would give similar information to that available with the string DAC but with better resolution. Imperfect CMRR for the bootstrapped reference would just give horizontal scale compression. Whatever your design, I would recommend being able to bias with bipolar references to cancel out residual thermocouple errors. Also, the DAC11001 is overkill, but that's not really news.

author: Kleinstein
author_rank: Super Contributor
timestamp: May 05, 2024, 07:44:01 am
content: Even if one can not calculate back to the transfer function of the ADC, the test at half the voltage is a rather simple test to get an idea on the magnituide of the INL error.Doing a few more tests is a good idea. A big plus of the sum tests is that the stability of the references and gain is only needed for a relatively short time. The classical scan of the whole range with a near perfect DAC can be effected be drift quite a bit.Using the sum test with a different combination can also make sense, as it is easy to implement. It just gets even more tricky to calculate back to a transfer function.The sum can be OK if the INL error is smooth around zero, but there is usually also some noise from the measurements and some very local errors, e.g. from discrepances in the small contributions or idele tones. The representation with a simple polynominal near zero is thus tricky.For my ADC I have done quite some tests around the center of the range and exactly there, some of the rather loacal errors are expectes. As an example a test for the difference of 2 readings with slightly different run-up is shown. To amplify the error from dielectric absorbtion an intentionally higher DA (~ 30 x higher) capactitor is used. The effect is rather local (even more with longer integration) and with a classic MS ADC, expected to be at around 0 V.

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: May 06, 2024, 02:52:24 am
content: That is interesting to know. The sum error for the 3458 crosses zero around 10, 6.5, and 3.5 V, and I recently found, also around 0.25 V (as well as 0 V). The behavior at low voltages is more chaotic as the influence of the DNL function becomes more apparent. I believe that for the 3458 with ideal, noiseless components, this would give a sawtooth function based on slight differences between theoretical and actual MSB and LSB weights determined by matching tolerances of the slope resistors. The DNL is going to get smeared by noise for high resolution converters averaging several samples, but at the lowest levels, it does not seem productive to try to model this from sum errors. This would imply that it is actually better to assume the corrected sum error is cubic below a certain threshold voltage if you can't fit a fifth order polynomial to the whole data set.A question I have been wondering about is how ADI determined the INL of the AD4630-24 for their typical spec because I assume they did not use a Josephson junction array. There is one slide deck I saw (that I cannot find at the moment) where they had superimposed maybe eight different curves for the part taken at various temperatures. Does anyone know about this?

author: Kleinstein
author_rank: Super Contributor
timestamp: May 06, 2024, 08:55:56 am
content: The somewhat periodic part of the INL that i showed is from the dielectirc absorbtion and following roughly the average voltage in the integrator. This should be some saw tooth like function. Taking onyl the difference of 2 versions can cause some of the extra complications and about flat parts. The not ideal match of the slow slopes / small contributions) would come on top. At least with 10 PLC this should be a rather minor effect. Still the main point remains that there are some more local errors for the small voltages that are beyond a simple polynominal fit.There is the concept of splitting the INL to a more local part (hard INL) and a more smooth part (soft INL). The sum test would be OK for the soft INL part, but not working well for the hard INL part.A way to look at the more local part is with a smooth slope and than subtract a smooth background to get most of the slope generation function and the errors there.How the manufacturer get the INL curves is a good question. It may even be possible that they have a JJA somewhere. If done right a single ramp from the JJA could be used to test many ADCs in parallel.I kow that at least for the faster ADCs a high purity sine wave was used as a method. A very accurate linear slope, possibly with corrections for know non ideal effects could be possible too. This could especially help with the faster ADCs. The AD4630 and similar would anyway need oversampling / averaging over many runs to get the noise down enough to resolve the INL

author: CurtisSeizert
author_rank: Regular Contributor
timestamp: May 10, 2024, 10:40:19 pm
content: There is another way of viewing the transfer function linearity error that seems to fit better for the 3458. If you think about the ADC as a device that is trying to find a null balance with a DAC, there will be quantization non-linearity that comes from deviations of the DAC bit weights from the ideal power of two series. With a high resolution converter, thermal noise essentially provides dithering so that the average input that will generate a certain code will be a Gaussian-weighted average of a group of nearby codes. I wanted to see what this would look like, generated some normally distributed bit weight errors centered on one and multiplied them by the ideal bit weights. I ran through the codes to generate the noiseless DAC output voltage then dithered these by doing a weighted average using a Gaussian PDF and subtracted the ideal to get linearity error. I attached an example plot where the negative voltages just have an equal but opposite error relative to their positive counterparts. This sort of quantization nonlinearity would, of course, compound with transfer function nonlinearity in the analog domain.This is important because it provides a more parsimonious explanation for higher-order (i.e. more than cubic) terms in a hypothetical transfer function than analysis based on effects in the real (vs. discrete) domain. For example, it's easy enough to rationalize third order INL terms through things like PCR of a gain setting resistor, but dominant fifth- or seventh-order terms would be dicey. I don't know if using such a model makes it significantly easier to generate a transfer function, but I am going to try to test the performance of a recursive algorithm again such cases and see how things come out.Finally, I have attached an excel sheet that has the results from four runs I ran on consecutive days with the HP 3458A at 100 NPLC averaging 16 samples for each point. There were 51 steps in a random order plus five additional measurements of ~10V (same code each time). Two of those 10V measurements were used to bookend the entire run, and the other three were shuffled with the rest. Each step was performed with a code offset, so the first eight measurements were done with the DAC at zero code + offset and the second eight were done at zero code - offset. For each point, I also recorded the standard deviation of the readings used to compute the average, as well as their slope from a linear regression. The slope measurement was to check that the system was fully settled for each point. All told, this means there are 896 points for sum error and 448 for turnover error. The source errors should be pretty well canceled out by the multiple layers of reversal performed for each measurement. I only started recording the temp for the last run, unfortunately, so that is not ideal. @miro123, maybe this data set will be useful for testing any fit algorithms you come up with.

author: Kleinstein
author_rank: Super Contributor
timestamp: May 11, 2024, 05:05:33 am
content: For the MS ADC like in the 3458 much of the resolution is from counting and not many real bit weights. The fine slopes would repeat on a rather fine scale ( 0.5 mV range and less).Still the noise would normally only average over a rather small range, hardly effecting more than the smallest contribution.Modeling the INL contribution for a MS ADC is tricky. There are the low order parts, but can also be some hard to predict parts somewhat similar to the idle modes in SD ADCs. A rather nasty part are things like unwanted coupling via the supply and similar. The 3458 had a change note about the decoupling that supposedly improved on the INL somewhat.The more counting contribution to the signal can lead to piecewise linear contributions to the INL.The bit weight model may fit the AD4630 and similar ADCs.Interresting to see some data on the 3458. There is clear pattern visible, though still quite some scattering.Edit:I looks at the spread sheet: the data shown for the sum error already have the average over 2 cases of polarity swiching. The raw data show a bit more scattering, but no difference between the different version on polarity reversal or how to reach the testpoints. So the averaging looks OK.I would not expect much of an effect of the temperature, at least not from a mean temperature during a set of reading. A possible issue is more with temperature drift during one set of 8 readings to calculate the sum errors.