My background: experimental physics. Not an electrical engineer, but I have some experience putting together basic electronic circuits for physics experiments. So please be kind and explain as if I'm a noob. Thank you!

What I'm trying to do: A very accurate (<10 ppm accuracy, 5ppm ideal) measurement of charge passing through a load over a period of time of hundreds of hours. The currents are typically between 50 mA and 500 mA.

Typically, this is done using an off-the-shelf programmable high precision <10 ppm precision current source to drive the load, and measuring the current separately on the low-side using a calibrated precision resistor and a high accuracy multimeter. The measurements from the multimeter are then integrated to estimate coulombs. The calibrated resistor and multimeter are temperature stabilized in an incubator to minimize thermal drift.

Now my problem is that these precision current sources are expensive and I need to build several of these setups for relatively cheap.

So I need to build a <10ppm precision, 50-500 mA current source & sink that will be stable and low-noise for hundreds of hours. Set-point accuracy is not very important, since I will be measuring the current separately anyway. But the current does need to be very stable and precise, so that I don't have to take too many samples to get high accuracy on the integrated coulombs. (Remember that the measurement will go on over hundreds of hours, so it is practical to take a sample once every ten or twenty seconds at most, otherwise there will be too much data to process). The current source does not need to be programmable, as long as I can change a scaling resistor or two to change the set point for the particular experiment. (scaling resistor and the source in general can be temperature stabilized in an incubator)

Now all the technical notes and forums I read are for 0.01% (100 ppm) or .005% (50 ppm) precision at most. I need something that is much better than that, and I haven't found strategies for doing that online. Any ideas on how this can be done?

Thanks in advance for your help!

  • 6
    \$\begingroup\$ Even if you have to take measurements 100 times a second it still seems to be the easier approach. \$\endgroup\$ Commented Sep 25, 2017 at 19:12
  • 8
    \$\begingroup\$ One big issue here you have not mentioned is temperature drift. Unless you are containing all this in a VERY temperature controlled environment "constant" at 5ppm or 10ppm may be unattainable. Also ppm is not a very good number to use here. 10ppm at 100A is a lot easier to achieve than 10ppm at 5mA. \$\endgroup\$
    – Trevor_G
    Commented Sep 25, 2017 at 19:14
  • 18
    \$\begingroup\$ So I need to build a <10ppm precision, 50-500 mA current source & sink that will be stable and low-noise for hundreds of hours. In my opinion: if you need to ask that then you lack the experience to design and build one. These requirements are a challenge even to a very experienced EE with years of experience in measurement equipment. Either you buy the device ready made or have someone else design and build it for you. Either way it will cost a lot. \$\endgroup\$ Commented Sep 25, 2017 at 19:17
  • 7
    \$\begingroup\$ You also say that the reason you want to build your own is cot, but I fear that as soon as you add in time to build and verify such a device you will be better off buying a device from keithley or NI or whatnot \$\endgroup\$
    – Joren Vaes
    Commented Sep 25, 2017 at 20:25
  • 15
    \$\begingroup\$ I am willing to put in the work needed to learn how to do this, if you could just point me in the right direction Hmm, if designing circuits (let alone high performance, accurate circuits) can be learned by just pointing someone in the right direction, why does it still take years to master electronic circuit design? What would you say if I said, mwah, I have an EE degree so that basically means I know Physics as well so I can also work on experimental Physics like you're doing if you just give me a few pointers. You'd probably laugh in my face and rightly so! \$\endgroup\$ Commented Sep 25, 2017 at 20:54

8 Answers 8


First, you don't need a precision current source. The reason is that, at heart, a current source works by measuring the current through a resistor, then closes a feedback loop around the current measurement and a precision voltage source. Since you only want to measure the current (and therefor the charge) through your load, you don't need the precision reference voltage. You can use a fairly sloppy source, as long as you measure the current precisely.

So, how do you measure current? Well, that is (in principle) pretty straightforward. You just measure the voltage across a resistor in series with your load, generally called a shunt resistor. Of course, you have not indicated that extreme stability in the current level is required, and if it is you do need to worry about that.

Unfortunately, you've bitten off quite a lot with your requirements. You want quite a high current for your stability. This will play merry hell with your requirements, since self-heating will become a major player. Let's start with a baseline system. Let's figure you want 1 volt across your shunt at full current. Then the power dissipated will be 1/2 watt, and the target resistance will be 2 ohms. This will cause significant self-heating in the resistor. Go to digikey.com, and start looking at low-tempco resistors. Let's figure on using 10 ppm/deg C units. Restricting the search to in-stock resistors, you'll notice that the available higher-power units are still less than 1/2 watt, and they are generally not in stock, with minimum buys of 4000 units (admittedly, at 40 cents a pop, but that's still about 1600 bucks). Worse, they have high resistance values.

Once you get to 1/8 watt, you can find 10 ohm units. If you put 5 in parallel, you'll get 2 ohms at .625 watts. This, however, is going to be a no-go. The individual resistors are rated for a temperature of 70 C, or 50 degrees above ambient. This, of course will produce a thermal drift of nominally 500 ppm. In fact, if you were to find them, you'd need individual tempcos of about 0.2 ppm.

With this in mind, check out https://www.digikey.com/products/en/resistors/chip-resistor-surface-mount/52?k=&pkeyword=&pv2085=u10+Ohms&pv2=4&FV=ffe00034%2C4400c9&mnonly=0&ColumnSort=0&page=1&stock=1&quantity=0&ptm=0&fid=0&pageSize=25 and you'll find 0.2 ppm/deg, 10 ohm, 1/4 W. You can get 4 or 5 to put in parallel, and you should be OK. Not only is TCR low, PCR is 5 ppm at 70C. Granted, swallowing half of your error budget in a single source is just asking for trouble, but that's generally part of the game when doing things on the cheap. There is a very good reason why the current sources you've been looking at cost so much. Of course, they (the specified resistors) will run you about 50 - 60 bucks. Is that a problem? Is that "cheap"?

Well, it's certainly a lot cheaper than the sort of current source you've been looking at. And it's definitely a good idea to consider proper cooling for your shunt, but that will be a good idea anyways.

And while we're at it, you should be aware that your meter requirements are outside the usual boundaries of cheap. You require at least .001% linearity, and at least 5 1/2 digits from a DMM. If you're going to roll your own A/D, you need at least 17 bits.

And this sort of wide dynamic range and high accuracy imply sensitivity to input noise that you need to be aware of. Granted, if all you want to do is adding up the samples you'll get considerable averaging out of noise, although in this case a higher sample rate is better than low.

In neither case is it clear why you want such a low data acquisition rate. Sure, it's a lot of data, but unless you're going to have shifts of workers taking measurements, 200 hours of data is only 720,000 seconds. Assuming 10 bytes per sample, that's only a file size of 7.2 Mbyte. Even the lowly FAT32 can hold about 500 times that amount. On the other hand, even assuming 10 seconds per sample, are you really going to try to crunch 72 thousand data points by hand? for several setups? It is hard to imagine why it does not make sense to automate both the data acquisition and reduction. At the very least, you can do simple totalling in Excel almost trivially.

I'm inclined to agree with Tony Stewart that this is not a project for a beginner. If you absolutely must do it yourself, I'd go for a well-built shunt, and then go to with a commercial DAQ from a company like Measurement Computing. You can get an 8-channel, 24-bit DAQ with software that will do 2 samples/sec for a bit over 400 bucks. Input offset tempco is less than 0.5 uV/deg so you might not need to think about climate control for your instrumentation. Then again, gain tempco is on the order of 4 ppm/deg, so you probably do.

EDIT - Rather than use comments to reply to comments, I'm extending this answer.

I may, perhaps, have misunderstood your requirements. As I understand your post, you are interested in the total charge flowing through your load(s). You've said nothing about distinguishing between the current into the load and the current through the shunt resistor. In other words, you gave the impression that the load input equals the load output current, and if you measure the one you measure the other. Under these circumstances, there is little need for a precision source, at least not in the sense you seem to think it is. If you measure the current to 10 ppm, well, that's the best you can do. If it varies some between samples, then as long at that variation is not correlated with the sample interval it will all come out in the wash.

On the one hand, yes, stability at some level is necessary. My point was, however, that it doesn't need to be as great as you might think. Yes, if the current level changes with time it's necessary to track it. However, unless the changes (which can be considered noise) are correlated with the sampling time, long data runs will average out this noise. In other words, stability issues will tend to be filtered out over the long runs being considered. In principle, there is always the possibility that you can get accumulating errors, but this should not be much of a problem. And stability in this case means stability over 10's of seconds, which is not hard to do.

And I should quantify my terms, particularly stability. 0.01% (100 ppm) in a current source is not that hard or expensive, although 0.1% is much easier. And if you use the sort of low-tempco shunt I've suggested, you can use that voltage to control your current source, and the reference voltage becomes the limiting factor, followed by amplifier offset.

Additionally, temperature control is misleadingly easy to dismiss as "simple", and in some respects it is. However, unless you quantify your control, you have no way of knowing if it's adequate. You can't just supply a heat sink and be sure that the problem is solved. For that matter, you don't even know if there was a problem in the first place.

  • \$\begingroup\$ Thanks for the long and helpful comment! I think the current needs to be stable because I need accuracy in the integrated current -- if there is significant noise in the current, the 'unmeasured' error between samples can accumulate for such a long measurement and can cause the integrated coulombs to be off by quite a bit. You're right that the file size will be 7-8 megs (actually twice that, since voltage will be recorded too), but the difficulty is doing detailed anlaysis on the data, which can be quite slow with excel for such a large data set, and I will be generating many, many sets. \$\endgroup\$
    – ugachmaaz
    Commented Sep 26, 2017 at 17:33
  • \$\begingroup\$ I need to build tens of these current channels to do independent measurements simultaneously. So I need multiple independent current sources, but not multiple multimeters. I have a Keithley 6 1/2 digit multimeter, which I plan to use to read the voltage on the precision resistors serially, in a loop. Roughly, if I take a measurement every second, and there are 20 channels, then each channel will be measured with a 20 second interval. \$\endgroup\$
    – ugachmaaz
    Commented Sep 26, 2017 at 17:37
  • \$\begingroup\$ Agree with your point about self-heating of the resistors. However, keeping the resistors stable is not very difficult. It is quite easy to dissipate a watt using some good thermal glue and a water jacketed copper block, or even just a CPU heat sink and a fan. I'll think about the rest of your comment carefully. Thanks for the comment! \$\endgroup\$
    – ugachmaaz
    Commented Sep 26, 2017 at 17:40
  • 1
    \$\begingroup\$ I see that this is a fairly old question, but: Excel is not a great approach for your data analysis at this scale, although I understand it's extremely popular and with good reason. Perhaps use some of your budget to pay a programmer to write some code to do the analysis? It won't take much to do the integration you describe, and it will be EXTREMELY fast, compared with the Excel setup you're implying. \$\endgroup\$ Commented Apr 6, 2018 at 5:41
  • 1
    \$\begingroup\$ @GlennWillen - Eh. If the data runs are going to be in the hundreds of hours, it doesn't seem like a few minutes to crunch a spreadsheet is that big a problem. And yeah, I'd go the programming route myself, but the poster is of unknown competence and unknown budget. \$\endgroup\$ Commented Apr 6, 2018 at 16:04

10 ppm drift is equivalent to 100 dB SNR at DC and this requires an ovenized current sensor for stable sensing and extremely low noise regulator. Then an ADC with 20 bit resolution and 18 bit accuracy which also needs to be thermally regulated. Keithley may make such an instrument for $5k. DIY with no experience? good ruck.


We've manufactured precision current sources for over 26 years and can offer some suggestions. For current sense use the Vishay VPR221Z series or the VCS331Z depending on your wattage. For best results heat sink the sense resistor despite the Tempco of 0.2ppm/°C. Use instrumentation grade amplifiers such as the INA103 for current sense and also for voltage sense across the load. For the reference voltage select the best reference that you can afford, something like the AD587 and buffer it using op amps such as the AD797 configured as a low pass filter. Minimize the current servo loop bandwidth as much as possible, including the pass element. Eliminate stray air currents by shielding the circuit board. Place a 10 ohm in series with all ICs and a .1uF to return. Isolate the analog section from the digital with opto-isolators or newer equivalents. Use linear power supplies with distributed capacitance on the PCB. Use separate power supplies for the analog section and NO common return to the digital section. DO use separate returns with mecca points to minimize copper offsets. Isolate the various copper pours used for inner layer shielding such that isolated analog voltages are separate from isolated current source voltages except at one carefully chosen point. Plan on spinning the board several times.


this link shows a precision current reference circuit with approximately a 10ppm stability http://www.ti.com/lit/an/sbva001/sbva001.pdf

  • 2
    \$\begingroup\$ Linear has better ones \$\endgroup\$
    – Voltage Spike
    Commented Jun 13, 2019 at 22:03
  • \$\begingroup\$ @laptop2d example? \$\endgroup\$ Commented Jun 14, 2019 at 0:09
  • 1
    \$\begingroup\$ LT3092, sorry I have a personal vendetta against TI after they burned me on an amplifier and have non-existent customer support. \$\endgroup\$
    – Voltage Spike
    Commented Jun 14, 2019 at 1:29

With these requirements, you will need an ovenized box, low-drift components, quiet power sources, and some finesse. A current-to-frequency converter and a counter will accumulate an integer value that corresponds to total charge. Calibration will be a challenge, but if you know that the accuracy you seek is indicative of some important phenomenon, that phenomenon can be your calibration source.

Be aware that temperature, atmospheric pressure, magnetic field, and even stray light can influence your result, so those should all be controlled.

Your sense resistor will be horizontal, so the heat rising from it does not cause a temperature difference on its terminals (which would give rise to thermocouple voltages from copper wire connections).

A stirred oil bath might be useful.

Sampling techniques (like most ADCs) are your enemy, you do NOT want dead time or roundoff errors; with an oscillator as your converter, there is no dead time. Most automated test systems are intended for quick checking of factory goods, and are poorly suited for this precision over days of operation.


I have done a source with similar stability envelope, for somewhat higher currents, as follows:

  1. Shunt: the case of a crystal resonator, soldered (or perhaps brazed) - on each end - onto a a brass block.

    Not every crystal resonator works great in such an arrangement, so finding the right one was a task. The thermal coupling between the case and the crystal element varies a lot between designs, but at least there's one dominant thermal time constant between the case and the crystal and thus can be compensated for without too much trouble.

  2. Shunt thermal compensation: crystal resonators make excellent temperature sensors, but have to be characterized first. Temperature is derived by comparing their period to a frequency standard.

    Tempco needs to be chosen neither too low nor too high: when too high, there was more long-term drift with thermal cycling; when too low, the sensitivty suffered.

  3. Measurement: a 24-bit sigma-delta ADC, its differential inputs connected directly across the shunt.

    To simplify integrating the charge, the ADC clock was instantenously derived from the shunt resonator frequency. First, the oscillation frequency was converted to crystal element temperature through a polynomial. Then an IIR thermal model converted that value into shunt (case) temperature. That way each complete sample had the same scaling factor to Coulombs. The ADC clock was constantly following the shunt temperature, so temperature compensation was spread throughout the sampling period, minimizing error, instead of using a fixed scale for the entire sample.

    For very slowly changing loads, the thermal model may prove unnecessary.

I'm sure people well versed in the metrological black arts could improve significantly on this idea. I'm only an apprentice at the moment.

Almost forgot: a suitably sized resonator package serves as a fusible shunt.

Given the performance, and ignoring R&D costs, the shunt and its accoutrements was dirt cheap :)

  • \$\begingroup\$ "Tempco needs to be chosen neither too low nor too high" -- Tempco of what? \$\endgroup\$ Commented Feb 19 at 21:46

You could use a MOSFET based current source ; since the FET only has a tiny gate leakage current, the voltage on the resistor will give you a good accuracy on the current.

So, you need:

  • An opamp with low noise and offset drift

For low noise, ADA4898 is hard to beat, and not that expensive, plus it has low offset drift...

  • A voltage reference with low drift

Examples are LTZ1000 or LTC6655 etc.

  • A resistor with low drift

Here's an example, feel free to tap the digikey/mouser search engine and sort by tempco ;)

That's just a starting point, it is probably going to be quite difficult... Putting the active devices inside a temperature controlled enclosure could help...

  • 1
    \$\begingroup\$ Minimum value of the resistors you linked is 50 ohms, maybe too high for this application. Vishay has precision parts down to 0.5 ohms (actually other series go down to 5 mOhms, but that's maybe too low here). \$\endgroup\$
    – The Photon
    Commented Sep 25, 2017 at 20:44
  • \$\begingroup\$ @ThePhoton I'll be honest: considering the OP's chances of success, for the resistors I picked the first link from Google. I agree your choice of parts is much better. The specs on these are like they came from the future in a time machine or something. \$\endgroup\$
    – bobflux
    Commented Sep 25, 2017 at 21:23
  • \$\begingroup\$ @ThePhoton -- Links broken. What was it? \$\endgroup\$ Commented Feb 19 at 21:59
  • \$\begingroup\$ @MicroservicesOnDDD A series of Vishay resistors that had values down to 0.5 ohms, presumably. \$\endgroup\$
    – The Photon
    Commented Feb 20 at 1:03

I'm working on a tool to provide such precise systems, but not ready for prime time. On the other hand, building the electronic-data-base for such a tool provides lots of thought experiments, and one major limitation is the resistive sensing of the current.

Copper foil has 4,000 ppm per degree Centigrade temperature coefficient. Buy a shunt. Don' try to build one.

  • \$\begingroup\$ Agree. Won't try to build a shunt. \$\endgroup\$
    – ugachmaaz
    Commented Sep 26, 2017 at 17:41
  • \$\begingroup\$ Don't build a shunt from copper, obviously. But it might be feasible to build one from manganin wire or foil. \$\endgroup\$
    – user57037
    Commented Sep 27, 2017 at 2:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.