Precision Voltage and Current Reference

A little something to check your digital multimeter accuracy occasionally.

Public Chat
Similar projects worth following
A small box that outputs 10.000V, 1.0000V, 0.1000V, and 10.000mA, 1.000mA, and 100.0µA. This should be handy to check my Keysight 34461A 6.5-digit DMM from time to time.

[Update 2022-07-05: Replaced older 3-reference/4-voltage design with newer single reference/3-voltage design.

Why am I doing this?:

I'm waiting for delivery of my Keysight 34461A 6.5-digit digital multimeter (DMM). I got to thinking that this would be the perfect time to build a precision voltage reference to check the DMM for parameter drift. This is a bit daunting. The voltage accuracy of the meter is specified as:

After 1 year the meter should measure a 100mV reference with an error of less than ±8.5µV, 1V±47µV and 10V±1mV. The real question is which is correct -- the meter or the reference?

Wandering through the reference wilderness:

There is a lot of passion about this subject. The absolute best ever reference is a Josephson Voltage Standard, but expect to pay ~$300k for one.

The next best thing is a heated buried zener diode, ala LTZ1000. This voltage output of the diode can hardly be called a reference since it is usually somewhere around 7.1 V. You don’t build one of these for accuracy. Its claim to fame is low temperature drift and incredible stability (i.e. it doesn’t change much with time). But the LTZ1000 is a bit pricey as well — around $60 just for the hermetically sealed metal can that encloses it. And the surrounding circuitry is a nightmare of concern. Not for me with just my lowly 6.5-digit DMM.

After you discard the top two, you’re left with a bazillion choices in a more reasonable price range: $1-$12. The problem is to choose wisely. In order to do that I had to decide what is important for my purposes. Here’s a list of primary specifications:

  • Temperature drift. How much is too much? The other factor is how does the drift change when the reference voltage is trimmed, which I intend to to. Really good drift is 1ppm/C, but you pay dearly for it. <10ppm/C is pretty common and cheaper. I figure that the temperature in my shop varies from 50°F (10°C) in winter to not more than 80°F (27°C) in summer, for a total range of 17°C. That’s not a lot, but with 10ppm/C drift the voltages vary 0.017%, or 1.7mV @10V. That’s a bit more than desired.
  • Stability (or Aging). This is the biggy. The lower the better. Specifications range from 10ppm/1000hrs to 100ppm/1000hrs. No design tricks to fix this.
  • Noise. This is a big deal if you are designing a reference for a data converter (ADC or DAC), but I think this doesn’t matter in this application because the DMM filters the input and averages many readings to obtain a good result. Any noise above 1 Hz should disappear.
  • Line regulation. All of the specs are pretty good: usually < 5ppm/V. This translates to an output variation of 5µV of change at the output for every 1V change on the supply.
  • Load regulation. Usually in the range of 10-30 ppm/mA. Doesn’t matter. The 34461A has a highZ input that puts a negligible load on the reference output. Even the 10MegΩ input resistance of a lower grade DMM won’t be of any significance.

Other Stuff to Worry About:

  • Temperature effects on the other components can destroy the integrity of the reference. Temperature drift of discrete resistors is not guaranteed to match. Discrete resistor tolerances below 0.1% get very expensive, along with tempcos less than 10ppm/C.
  • Using an amplifier to generate a separate reference, either higher or lower in value, incurs offset errors and offset drift, resistor matching tolerances and drift. Also possible loading effects on the reference source.
  • Thermoelectric noise in electrical connections of dissimilar metals. This is caused by temperature differentials between circuit connections that generate small voltages. The trick is to use metals (like gold) that don't tend to generate much potential, or keep the temperature of the entire circuit the same value.
  • Kelvin connection at important junctions to prevent unwanted errors induced into circuit traces.
  • I'm sure I'll be adding to this list as the design progresses.

My Bright Idea:


Read more »


Latest BOM version of precision voltage reference. Some sources provided.

ms-excel - 10.50 kB - 07/04/2022 at 23:21


Latest version of precision voltage reference using single LT1021CCN8-10 reference IC. This zip file should be accepted by JLCPCB and OSH Park. Includes paste mask.

x-zip-compressed - 31.95 kB - 07/04/2022 at 23:17


Gerber files of the Heater PCB. No need for a BOM for this board; there's only two components -- 2512 resistors, and the SOT23 AO3400 FET.

Zip Archive - 34.34 kB - 10/09/2019 at 18:00



Bill of Materials for the Current Reference.

ms-excel - 8.50 kB - 05/16/2019 at 04:30


Gerber files of the Current Reference PCB.

Zip Archive - 55.85 kB - 05/16/2019 at 04:19


View all 6 files

  • New Voltage Reference Results (Preliminary)

    Bud Bennett07/01/2022 at 22:04 0 comments

    The new design using a single LT1021-10 with a single resistor divider appears to work fine. I was able to salvage the LT1021, TLV170 opamp, inductor and a couple capacitors from the previous board. All of the resistors are new. 

    The heater feedback loop works fine. I don't have the Zener diode to limit the swing of the opamp yet, but the loop settles to its steady state value in about 30 minutes. After several attempts to trim the heated 10V reference to exactly 10.00000V I gave up. Here are my initial readings with my now 3 year-old Keysight 34461B DMM:

    New Voltage Reference (>3.5hr soak, 62F ambient, 100PLC, HighZ input)

       Reading              Scale            Other                                                     Error

       99.9906mV        100mV          Average of 20 samples, zero null         -9.4uV

       1.0000833V        1V                 Average of 20 samples                         +83.3uV

       9.999987V          10V              Average of 20 samples                         -13uV

    So you can see that I was able to trim the LT1021-10 to within 100uV of 10V (according to my 34461B). It's a bit disconcerting that the 1V reference is a bit to the high side while the 100mV reference is a bit low. My initial reaction is that the 34461B is drifting on the 1V scale. If I can get my hands on a calibrated 6-8 digit DMM I will know the truth.

    I will keep the reference powered for 1000 hours and trim any resulting drift. After that...time will tell.

  • Striving for Simplicity

    Bud Bennett06/16/2022 at 20:22 0 comments

    Well, in my humble opinion, the LT1021C-10 is the clear winner. The LT1021-5 is not nearly as good, as it uses external components for temperature compensation. Neither is the REF5025A. I'm starting over with an objective to produce better stability for fewer reference voltages -- 10V, 1V, 0.1V -- all derived from a single 10V reference. Here's the schematic:

    There is a single trimmer pot to adjust the LT1021 to 10V+/-100uV. 

    A single resistor divider produces both the 1V and 0.1V. With standard deviations of 0.0016%. There are enough of the 20k 0.1% 0805 resistors left over from my original purchase to populate the PCB. (And you can still get them, as of 2022-06-15, on eBay for a reasonable price.) But any reasonable 0805 resistor value with the same tolerance should work.

    I ran a Monte Carlo simulation over 1000 cases (assuming that the 10V reference varied uniformly between +/- 100uV) , which produced this histogram for the 1V reference:

    and this histogram for the 0.1V reference point:

    Since the REF5025 is no longer providing a temperature output the LM34D is used instead. I have a few of these (accumulated during the 1980's most probably) in metal cans. The voltage output of the LM34D is the temperature in degrees Fahrenheit x 10mV, with an accuracy of +/- 3F. So for 100F the output would be 1.0V. No trimmer required. The LM35, providing output voltage in degrees C, could probably be used as well. These metal cans are prohibitively expensive, so I have provided for the other two possible package types (TO92 and SOIC8) to be mounted on the PCB as well -- they are less than $4/each from Digikey at the time of this log. 

    I added D1 to clamp the output of the PID opamp rather than let it be overdriven against either the supply or GND. This should improve the response time of the heater (I think).

    The Layout:

    The upper half is devoted to the input filtering and the heater PID controller. The lower half is the voltage reference and divider. Note that there is only one negative reference point for all of the outputs -- 10VN. All sensitive connections are Kelvin connected, as before.

    This reference box should not cost me very much. I'll be scavenging parts from the AliExpress box and don't need to purchase anything new, except the 7.5V Zener diode, which is pretty cheap.

    Ordered the PCB from JLCPCB with super slow shipping.

  • 3 Years

    Bud Bennett06/09/2022 at 22:29 0 comments

    Digikey Voltage Box: (3.5hr soak, 62F ambient, 100PLC, HighZ input)

       Reading              Scale            Other                                     1 yr Drift                  Total Drift (2 year spec limit)

    100.00489mV        100mV          Null + AVG 20 samples          3.92uV                    -1.61uV (+/- 10uV)

    0.9999747V          1V                  Null + AVG 20 samples          15.6uV                     -48.3uV (+/- 62uV)

    2.49983V              10V                Null + AVG 20 samples         -12uV                       100uV

    4.999283V            10V                Null + AVG 20 samples        162uV                       63uV

    9.999972              10V                AVG 20 samples                   -46uV                      -98uV (+/- 550uV)

    AliExpress Box: (2.75hr soak, 64F ambient, 100PLC, HighZ input)

       Reading            Scale              Other                                 1 yr Drift                     Total Drift (2 year spec limit)

    100.00095mV      100mV           Null + AVG 20 samples      1.13uV                        8.45uV (+/- 10uV)

    1.0000647V          1V                  Null + AVG 20 samples      -2.8uV                      86.7uV (+/- 62uV)

    2.500199V            10V               Null + AVG 20 samples      35uV                        219uV

    10.000073V          10V               AVG 20 samples                 17uV                         3uV (+/- 550uV)

    Current Reference:

    (3 hour soak, 64F ambient, 100PLC)

    Reading                 Scale            Other                                    1 yr Drift                   Total Drift* (2 yr Spec Limit)

    99.99724uA          100uA           Null + AVG 20 samples       -4nA                          4.76nA (85nA)

    0.999974mA          1mA              Null + AVG 20 samples ...

    Read more »

  • 2 Years

    Bud Bennett06/29/2021 at 02:07 0 comments

    Digikey Voltage Box: (2.5hr soak, 64F ambient, 100PLC, HighZ input)

       Reading              Scale            Other                                1 yr Drift (Vref + DMM)

    100.00097mV      100mV           Null + Avg 20 samples       1.57 uV

    0.9999591V         1V                  Null + Avg 20 samples       -51 uV

    2.499842V           10V               Avg 20 samples                  82 uV

    4.999121V             10V               Avg 20 samples                  -279 uV

    10.000018V          10V               Avg 20 samples                  -12 uV

    AliExpress Box: (6hr soak, 62F ambient, 100PLC, HighZ input)

       Reading            Scale              Other                                 1 yr Drift (Vref + DMM)

    99.99982mV       100mV           Null + Avg 20 Samples       -1.99 uV

    1.0000619V            1V                Null + Avg 20 Samples       50.9 uV

    2.500164V            10V               Avg  20 Samples                 24 uV

    10.000056V          10V               Avg 20 Samples                  26 uV

    Current Reference:


        Value               Scale                                                  1 yr Drift (Iref + DMM)

    100.00127uA       100uA     Avg 20 samples                 8.14 nA

    0.9999867mA     1mA        Avg 20 samples                 9.7 nA

    9.999337mA        10mA     Avg 20 samples                 -2.137 uA


    After 2 years the meter and references are well within the expected tolerances for both the voltage and current ranges.

  • 1+ Year

    Bud Bennett07/23/2020 at 23:13 2 comments

    It's been more than 1 year since I purchased the Keysight 34461A DMM. It is officially out of calibration now. Time to do a quick measurement. I powered up the voltage calibration box (the Digikey box) and the DMM for six hours prior to taking a measurement. Here's the results:

    DIgikey Box:

    Ambient Temp: 68°F(20C)

    DMM settings: 100PLC, Auto Input Z (High Z)

    Reading (not averaged)    Scale

    99.9994mV (nulled)          100mV

    1.000011V                          1V

    2.49976V                          10V

    4.99940V                          10V

    10.00003V                         10V

    These are not very far off from the six month readings.

    AliExpress Box:

    (same settings and ambient temp as above, soak time 4 hours)

    Reading                                            Scale

    100.00181mV (avg/20 samples)        100mV Nulled

    1.000035V (avg/20 samples)           1V

    2.50014V                                           10V

    10.000114V (avg/20 samples)              10V

    Current Reference(all readings 100plc, averaged with 20 samples):

    Reading             Scale

    10.001474mA     10mA

    0.999977mA     1mA

    99.99313µA       100µA

    General Conclusions:

    All of the voltage references seem to be very stable now. No significant difference between the USA components and the Chinese components. The current readings are drifting a bit, but the specs of the 34461A are quite a bit looser for current than voltage. The only way to tell for sure is to compare readings to a calibrated DMM with >6.5digit capability. That's not happening anytime soon.

  • 6+ Months

    Bud Bennett02/20/2020 at 20:51 0 comments

    All of the references have been sitting in a drawer, collecting dust, until today. I has been a few months since the 1000 hour tests were completed. I let the references and the DVM warm up for at least 2 hours before I took any measurements. At this point in time the DVM is expected to be within 155ppm @ 100mV, and within 80-90ppm for the 1V and 10V ranges.

    The Voltage Reference using Digikey parts:

    2020-02-20 2hrs warmup:

    Set Point: = 0.6278V

    Value          Range     Change
    100.0166    100mV    (+101ppm)
    1.000036     1V         (+13ppm)
    2.50013      10V        (+80ppm)
    4.99932     10V        (+20ppm)
    10.00005   10V        (-2ppm)

    I also calculated the change, in ppm, from the last readings taken at the 1000 hour point. The big disappointment was the 2.5V reference and the 100mV reference, which is derived from the 2.5V. The reading is outside the allowed range of the DVM. 80% of the change appears to be due to a big shift in the 2.5V reference voltage.

    There are some differences: I believe that the 2.5V reference is a band-gap reference, where the other two references are derived from buried Zener diodes; the 2.5V reference is the only reference that is soldered to the PCB -- the other two are plastic DIP packages that are socketed.

    The 10V reference is truly stellar with only a -2ppm drift.

    The Voltage Reference using Chinese parts:

    2020-02-20 after 2 hrs warmup:

    Value              Range      Change
    100.0043mV   100mV    (+118ppm)
    1.000020V       1V          (+42ppm)
    2.50021V        10V         (+92ppm)
    10.00017V       10V          (-4ppm)

    Again, the big loser is the TI 2.5V reference (both of the TI reference ICs were sourced by Digikey); and the winner is the LT1021-10. The amount of change in the 2.5V reference is nearly the same percent (and direction) between the two PCBs. 

    Current Reference:

    9.99935mA (-13ppm change)

    0.999983mA (-11ppm change)

    100.002µA (-12ppm change)

    The current reference is based upon the LT1021-10 reference, so it is not surprising that the differences are quite small.


    Stick with the buried Zener reference and don't solder them into the PCB.

    [Edit 2020-02-21: Added the following.]


    The day after getting the above results I took more measurements and got essentially the same results. But the 2.5V reference was not changing with the application of power, so I'm thinking it might be worthwhile to just recalibrate the 100mV reference and continue onward, which is what I did. Here's the new readings to compare with future data:

    Digikey Box:

    99.99952mV (averaged)





    AliExpress Box:

    100.00077mV (averaged)




    I discovered that the DVM will calculate mean and SD from the readings. It is nigh impossible to get consistent readings from the 100mV source. Small temperature variations cause galvanic errors and then there is noise. Expect ±2µV uncertainty.

    The reference boxes are going back on the shelf for a few months. We'll take them out and measure again near the first anniversary of the DVM.

  • Do cheap components make a difference?

    Bud Bennett08/28/2019 at 19:55 0 comments

    I decided to make another voltage reference, this time using the cheapest components that I could find on eBay or Aliexpress. I even ordered the enclosure from an Asian source. Here are the results after more than 1000hrs.

    2019-07-14 after running for 2 hours at temperature

    Meter params: HighZ, 100PLC, AZ on

    Value Range
    100.0004mV 100mV
    1.000007V 1V
    2.50014V 10V
    9.9999995V 10V (last digit bouncing)

    2019-07-21 after running for 168 hours at temperature

    Meter params: HighZ, 100PLC, AZ on

    Value Range
    99.9912mV 100mV
    1.000014V 1V
    2.50001V 10V
    10.00008V 10V 

    2019-08-28 1096 hrs:

    Value Range
    99.9925mV 100mV  (79ppm)
    0.999978V 1V (36ppm)
    2.49998V 10V (64ppm)
    10.00021V 10V  (21ppm)

    There doesn't appear to be any significant difference.

  • 1000 Hrs!

    Bud Bennett07/02/2019 at 02:52 0 comments

    The voltage reference has been baking for 1000 hours, give or take a few. The power went down for a few hours during the test, but I don't think it matters much. Here's the results, using the same conditions as when the test began:

    2019-07-01 1000hrs at temp

    Set Point: = 0.627049

    Value         Range    Aging Drift
    100.0065    100mV   9 ppm ±2ppm
    1.000023   1V           18 ppm ±2ppm
    2.49993     10V         16 ppm ±8ppm
    4.99922     10V         18 ppm ±4ppm
    10.00007    10V          1 ppm ±2ppm

    I find it a bit suspicious that all of the voltages drifted upward over time. That would indicate a drift in the measurement tool more than the references. I put tolerances on the aging terms just to account for the uncertainty of the last digit over two measurements. 

    I don't really see a need to open the box to perform any trimming.  

  • 168 Hr Reference Aging Data

    Bud Bennett05/28/2019 at 21:21 0 comments

    It has been a week with the references running at the heater temp continuously. Here's the data (taken after the DVM ran for 1 hr at room temp):

    2019-05-28 168hrs at temp

    Meter params: HighZ, 100PLC, AZ on (Null for 1V and 100mV ranges)

    Set Point: = 0.62785

    Value            Range
    100.0068      100mV
    1.000029      1V
    2.49991         10V
    4.99923        10V
    10.00006       10V

    So far so good. The 100mV reference drifted up by 1.1µV (0.0011%), tracking the upward movement of the 2.5V reference. The 5V and 1V references drifted up by 0.002%. The 10V reference did not move.

    The box will remain powered for another 5 weeks or so.

  • Voltage Reference Results!

    Bud Bennett05/21/2019 at 19:15 1 comment


    I was careful to solder all of the surface mounted parts except the REF5025, which I hand soldered to the PCB using only the 5 pins that were connected to the circuit. I made sure to remove all of the flux with alcohol and a toothbrush. The through-hole parts were then hand soldered and the flux cleaned up as well. The LT1021 references were inserted into gold plated sockets. When power was applied all of the circuitry functioned as designed at first glance.

    Two Problems:

    I spent a couple of days chasing down bad assumptions.

    The 2.5V Reference:

    The TI REF5025 reference datasheet calls out the following circuit for the trim, which I copied without question:

    When I first applied power to the board the two LTC1021 references measured within a few mV of the target value. The REF5025 was sitting at about 3.5V. My first thought was that I had a defective IC. I was able to trim the part in the range of 2.5V, but the trim was twitchy and even small tweaks to the trim pot generated several mV of change to the 2.5V output. 

    I Googled "REF5025 trim error" and the search brought forth many references to the data sheet -- even a data sheet with a Burr-Brown logo, which must have been published back in the last millennium. Nobody was complaining about the trim circuit.

    I then removed the 470Ω ressitor from the circuit and measured the untrimmed output voltage -- which was within a couple mV of the correct value. I also measured the resistance of the TRIM/NR pid to GND with the circuit unpowered: 1MegΩ!

    So now I'm thinking that there is some serious error in the data sheet and that the 470Ω resistor should be in the range of 470kΩ instead. So I soldered a 470kΩ resistor to replace the 470Ω and viola! (I used to play the viola) the trim became much more manageable. I could now trim the 2.5V output to less than a 50µV error.

    The Heater:

    The entire heater/reference system was supposed to be assembled into a small box with insulating foam to isolate the PCBs from the ambient temperature. When I tested the heater circuitry I used an open cell foam which probably does not have a very good R-factor. I used a styrofoam packing material when I assembled the two PCBs into the 100x68x50mm plastic box that I intended to use for this fixture.

    The component values that worked for the bench testing did not work for the new box configuration. The improved insulation and enclosed box allowed for much lower power dissipation in the heater to reach the same temperature for the set point.

    The first cycle with the breadboard component values required about two hours to settle to the set point temperature, but the step response indicated that the system was pretty stable with a phase margin of better than 45 degrees. But 2 hours is too long, so I replaced the resistor, R59, that was setting the integrator time constant with a smaller value, 100kΩ instead of 680kΩ, to decrease the overall time to settle. The result was a shorter settling time, but less phase margin (maybe less than 25 degrees). This is what the response to a perturbation looks like:

    Pretty ringy-dingy, but it still settles to the correct set point in about 30 minutes. This data is produced by the Keysight 34461A DMM, which doesn't attach a timestamp to the data -- go figure -- I had to assume a sample rate for the above plot to get the time information for the x-axis. If this was a design meant to be for production I would never go for this, but for a one-off it might just work. It's pretty clear that my attempt to model the physical and electrical system was way off, but it's not worth the time to figure it out for just one instance.

    OTJ Learning:

    I trimmed the references to the target values, at room temperature (about 12°C in my shop), and then enclosed the heater/reference PCBs within the box. I let it...

    Read more »

View all 18 project logs

Enjoy this project?



BestIdea28 wrote 01/03/2021 at 22:20 point

Hi. How type of PCB surface was used? HASL or ENIG? You finally used 2oz copper?

  Are you sure? yes | no

Bud Bennett wrote 01/03/2021 at 23:16 point

No idea. See OSH Park for specifications on their PCB fab. I used 1 oz. copper.

  Are you sure? yes | no

gelubotezan wrote 02/19/2020 at 16:50 point

Reading the logs I noticed you were wondering why your reference was suddenly (after a black out or something) beginning to drift upwards.
I remember I saw  in a DS  from DA or LT that after 100-200 hours the big drift ceased and  the reference began a drunkard's walk. They say this  can't be controlled but it will stay up/down in the accuracy limits of the device. A similar report I found regarding the OCXOs some time ago. Following, interested, nice! 

  Are you sure? yes | no

Bud Bennett wrote 02/19/2020 at 22:24 point

Thanks for the info. I only ran both reference boxes for 1000 hours. They've been resting, unpowered, since. It's about time to test  them against the DVM again.

  Are you sure? yes | no

Bud Bennett wrote 02/20/2020 at 16:05 point

That's a pretty short App Note. It only talks about long term drift with under continuous conditions. I was wondering how things would go when the references were turned on and off occasionally after the initial 1000 hour burn-in. I found this Design Note that gives a hint as to what to expect: 

  Are you sure? yes | no

Ken Yap wrote 05/02/2019 at 04:36 point

What will you use for the initial calibration check? The meter? So it's to check later if the meter has drifted and you're assuming your reference hasn't?

  Are you sure? yes | no

Bud Bennett wrote 05/02/2019 at 05:08 point

Yes. The meter will be fresh from the factory calibration. I’ll use the meter’s readings to trim the reference’s initial values. Then I intend to run the heated voltage reference for at least 1000hrs and re-trim it if it has drifted. After that I’ll check the DMM occasionally against the references. If the DMM measurement is out of spec then I can trundle down to my old employer where they maintain calibrated equipment to see which unit is out of calibration. If the DMM keeps measuring reasonable values from the references then I’ll continue onward blissfully ignorant.

  Are you sure? yes | no

Ken Yap wrote 05/02/2019 at 05:19 point

Fair enough. I guess the chance of a false negative is far less than that of a false positive.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates