25
\$\begingroup\$

On many voltage reference ICs (As an example a MAX610x) there seems to be various different reference voltages available (1.25, 1.8, 2.5, 3.3 etc).

What strikes me as odd are the 2.048V and 4.096V references. Why do we use references at those voltages instead of just simply 2V and 4V which would surely be easier to use mathematically?

\$\endgroup\$
  • 11
    \$\begingroup\$ for a binary system, 2.048 is easier to use mathematically \$\endgroup\$ – Alnitak Mar 28 '18 at 9:35
  • \$\begingroup\$ @Aln: Not really. It just looks easier to the non-thinking at first glance. \$\endgroup\$ – Olin Lathrop Mar 29 '18 at 11:25
50
\$\begingroup\$

When quantising voltages (i.e. passing through a ADC), you usually convert the voltage to an integer representation which is represented using a power of 2 scheme.

This means that they fall into the pattern of binary numbers, e.g. an 8 bit DAC has 256 individual levels. Using a reference that has a power of 2 number of millivolts means that the actual digital values have significant values.

For example, if you have an 11-bit DAC with a reference of 2.048, then the digital value is the number of millivolts.

Edit: As pointed out by Andrew Morton, this provides 2048 levels, whereas there are 2049 millivolt levels including 0. So therefore to properly represent each bit as a millivolt you would require an extra bit. However if you round consistently, it is still possible to round each element down and achieve 0-2047 mV, or round up and have 1-2048 mV. If you fit 2048 to 2049 then you lose the nice property of directly matching the number of millivolts.

\$\endgroup\$
  • 3
    \$\begingroup\$ Which is very useful for metering using a comparator. One of the reasons we can buy a $5 multimeter. \$\endgroup\$ – mckenzm Mar 28 '18 at 2:09
  • 1
    \$\begingroup\$ Ummm.... 11111111111 (binary) is 2047. Does that mean that an input of zero to the DAC will output 1 mV, or that an input of 1024 will output 1024.5 mV? \$\endgroup\$ – Andrew Morton Mar 28 '18 at 13:46
  • \$\begingroup\$ Ah good point! Well it matches the same number of levels, but with an off by one error. \$\endgroup\$ – loudnoises Mar 28 '18 at 13:53
  • \$\begingroup\$ That's a fence-post error and it halves every time you increase the number of bits by one. (as does the quantization error). \$\endgroup\$ – Rodney Mar 29 '18 at 7:43
  • \$\begingroup\$ The typical bread-and-butter ADC actually seems to be 12bit, and if the high bit is used as a sign, and the voltage range is configured to be bipolar - centered around 0V, the 12bit signed integer actually has a range of -2048..+2047. Makes me wonder if the "binary even" reference could somehow be related to the negative end of the range by any chance :-) \$\endgroup\$ – frr Mar 29 '18 at 11:05
21
\$\begingroup\$

4.096V and 2.048V references allow the ADC to generate an integer value in mV. It means each step of the ADC represents 1mV or an integer multiple of 1mV. 4.096V = 2^12 mV

\$\endgroup\$
  • 2
    \$\begingroup\$ allow a 12 or 11-bit ADC, to be precise. \$\endgroup\$ – jcaron Mar 28 '18 at 12:16
  • 1
    \$\begingroup\$ Higher resolution ADCs also benefit from such arrangement, to be exact, the software driving these ADC can use integers to represent 0.5mV, 0.25mV and so on instead of fixed point variables. \$\endgroup\$ – Lior Bilia Mar 28 '18 at 12:43
  • \$\begingroup\$ Higher and lower resolutions ADCs definitely benefit from the arrangement, but to get specifically 1 mV steps as you state in your answer, you need to match the reference with the resolution. \$\endgroup\$ – jcaron Mar 28 '18 at 12:45
  • \$\begingroup\$ That is the ideal, yes, but sadly there is no 16.777216V reference out there. \$\endgroup\$ – Lior Bilia Mar 28 '18 at 13:08
10
\$\begingroup\$

The reason for these is because they can be easily divided down to a base 2. This makes them useful for things like ADCs where a 12-bit ADC with a rail between 0 and 4.096V will mean 1mV per bit, which is a much easier number.

There are also more voltages that do the same thing. You can also get Voltage references in 1.024V, which is 210. Different references can be used for different bit ADCs.

\$\endgroup\$
5
\$\begingroup\$
Why do we use references at those voltages instead of just simply 2V and 4V

This can be advantageous in just the right circumstances when the microcontroller is displaying values directly to a human. However, most of the time it's because there are lots of people out there that are bad at math or don't stop and actually think.

As others have already shown, 2.048 = 211/1000 and 4.096 = 212/1000. If you use a 12 bit A/D with a 4.096 V reference, each count is 1 mV.

However, stop and consider when that actually matters. There is nothing inherently special about units of millivolts. In terms of physics, they are a totally arbitrary unit for measuring EMF.

In a control system, for example, the units used for the various measured quantities can be anything you like, as long as you know what they are. If you are using fixed point, then you want the maximum value to nearly fill the number, and use enough bits so that you have the necessary resolution. The scaling of units should be dictated by convenient internal binary representations.

There will inevitably be adjustable gain factors later in the process anyway. Custom scaling of all the input values can be adjusted for by using different values of gain factors that are already there, and that the system already has to handle arbitrary values of. No additional computation is required, only different values fed into the same computations.

In some cases, these small embedded systems need to display digital values to humans. In that case, units of millivolts are useful when you want to show a voltage with three decimal places. However, human interfaces by their nature are slow compared to microcontrollers. Generally you don't want to update a digital display at more than 2 Hz. Converting a number to decimal digits already requires some arithmetic anyway. Scaling some internal value to match the displayed resolution is a rather minor additional step relative to that process.

Then also consider how often you actually want to measure a voltage in the range of 0 to 4.095 V, or at least most of that range. If you want to measure 0 to 5 V, then the 4.096 reference really doesn't help. You need to attenuate the signal into the A/D anyway, so reading the attenuated signal in units of millivolts confers no special advantage, even when displaying digital values.

So in short, in today's world with microcontrollers handling A/D readings, 2.048 and 4.096 V references mostly cater to a perceived need, and to knee-jerkers who don't think about the problem properly.

\$\endgroup\$
  • \$\begingroup\$ not everyone what needs a division of 1V (or portion thereof) is using a micro-controller \$\endgroup\$ – Alnitak Mar 29 '18 at 14:41
  • \$\begingroup\$ vote up and there is one thing you forgot to mention - I think - all discussed answers ignore, that 1024 ~= 1000 <3% error and smaller the 3% is still expensive and hard to get (if tou keep the whole system in mind) \$\endgroup\$ – halfbit Mar 29 '18 at 20:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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