There are many scenarios when you need an accurate, precise voltage source. This one's accurate to 0.0001V!
Greg has built all sorts of amazing creations, but one that stood out is an ultra-precise voltage reference. We caught up with Greg to understand more about his innovative creation.
For someone who doesn’t quite understand what a voltage reference is, can you tell us what it is and what it does?
According to Wikipedia “A voltage reference is an electronic device that ideally produces a fixed (constant) voltage, irrespective of the loading on the device, power supply variations, temperature changes, and the passage of time”.
The programmable voltage reference that I built has two fixed voltage references on the board and is designed to output a constant fixed voltage that is programmable either from the front panel or by a USB/serial connection. It has a DC voltage output of 0.001-4.095V, which can be adjusted in one millivolt (0.001V) steps. When properly calibrated the accuracy is within +/- 100uV (0.0001V) of the set voltage.
That’s exceptionally precise by just about anyone’s standard! What made you embark on the task of developing your voltage reference?
I had been working on several projects that required a precise low voltage sensor input, but using the actual sensor on the workbench was problematic. An example of this was a solar irradiance monitoring system, which required a thermopile pyranometer and a precisely calibrated instrumentation amplifier. After searching for a new or used adjustable voltage standard, I realised that most precision references were way out of my budget range. In my searching, I found a DIY programmable voltage reference, built by C. Schnarel (uChip) on the SparkFun Electronics forum that met most of my requirements. I built version 1.04 of the Programmable Voltage Reference based closely on uChip’s original design, but soon realised that I preferred an enclosed device with a panel-mounted display, which along with other wants, prompted a major redesign of the circuit board.
You’re using a Teensy 3.2 as the main brain. What functions does the Teensy perform?
The Teensy 3.2 functions as the microprocessor and output monitor for the board. It interfaces with the DAC using a SPI bus to set the output voltage, monitors the output voltage using its internal 16-bit ADC, sends data to the panel-mounted display using an I2C bus, and interfaces to the front panel rotary encoder and push-buttons.
The Teensy 3.2 was designed and built by Paul Stoffregen of PJRC.com, and uses a 32-bit MK20DX256VLH7 ARM Cortex-M4 microcontroller manufactured by NXP Semiconductor, with a maximum rated clock frequency of 72MHz. It is my favourite microcontroller board when I need more processing power and memory than that provided by many of the 8-bit boards, such as the Arduino UNO and Pro Mini boards. Teensy 3.2 is available from several distributers such as Adafruit, Little Bird Electronics, Core Electronics, and directly from PJRC.com.
The Teensy has been popping up in many of our features; it’s definitely a great board! Why did you select a ~0-4V operational range - was that to suit a particular application you have, or dictated by the Teensy/supply voltage/something else?
The operational range is a compromise between my original preferred range of 0.001 to 5.000V, cost, and the capabilities of the components chosen by uChip in the original design. I am finding that most of my newer projects only require a range up to 3.3V anyway. I currently have two of the Programmable Voltage References, and nine other fixed voltage references to choose from.
The USB supply voltage was also an important factor in keeping the output voltage below 5V without adding the complexity of a boost converter and the additional filtering that would be required.
Based on the math, an output of 4,096 millivolts works out to 4,096 distinct steps with 12 binary digits. With a precision onboard voltage reference for the DAC of 4.096V, that lets me utilise the full output range with 1 millivolt resolution per step, and have 4 bits remaining for calibration.
It was a little perplexing as to why it didn’t run to 5V originally, but that makes perfect sense. What unexpected challenges did you have along the way?
Quite a few. The first revision 1.04 of the board only operated for less than a week before the surface mount 8-bit processor failed, and it was extremely difficult to source the obsolete HP LED bubble display used in uChip’s original board, requiring a larger display connected external of the main board.
I learned a lot from building the initial version and that knowledge was used to improve the next revisions. Some of the changes were a socketed microcontroller board, I2C display interface that can accommodate many different displays using only software changes, output voltage monitoring, SPI interface isolation, and RGB LED rotary encoder.
The AD5060BRJZ DAC has great specifications and functionality, but is not very DIY-friendly as it comes in an extremely tiny SOT23-8 package. This makes it difficult to hand solder on the circuit board, and so often requires several tries to remove solder bridges.
That takes a steady hand for sure! The final case is reasonably large compared to the electronics inside. Does this serve some function, or could you feasibly make this a “portable unit”?
The case size was partially determined by the size of some of my other test equipment that I have built in the past. The enclosure is a Hammond model 1455N1601, and measures 6.3(L) x 4.055(W) x 2.087(H) inches (160 x 103 x 53mm) and is made from extruded aluminum. By keeping the size somewhat standardised it is easy for me to stack multiple units on top of each other.
It would not at all be difficult to make this a portable unit, by adding a battery pack through a switch and connecting it to Pad1(+) and Pad2(-) of the board. A trace on the Teensy microcontroller board needs to be cut and a diode added to it, to protect its USB connection. The extra space in the enclosure easily accommodates a battery pack using AA batteries.
We did notice you had stacked it with some of your other devices - that’s great thinking. With a device that has such tiny tolerances, do you have problems with EMI or anything else that could create fluctuations or imperfections in the output?
I tried to design the board to reduce internally generated noise and EMI as much as possible. Some of the noise/EMI reduction design choices include:
- A Maxim Integrated MAX14931 digital isolator for the DAC SPI bus to transfer the digital signals between the two different power domains
- Lots of decoupling capacitors throughout the board
- Large ground plane on the bottom side of the board
- Separation of digital and analog sections of the board, and additional shielding for the analog section
- Choice of an all metal aluminum enclosure
That sounds thoroughly planned and executed. If you had to start this project from scratch again, what would you change?
I am very satisfied with the evolution of the current design that I am working on now. But it would be interesting to build it using a four-layer board, as it would help with the circuit routing, and enable me to make improvements to the ground and power planes.
That would definitely help tidy things up sometimes, but what you have is already exceptionally clean too! What are you working on now?
I am currently working on revision 2.24 of the Programmable Voltage Reference, which includes upgrading the fixed voltage references, and an updated negative bias supply. A dual-channel Programmable DC-Load based on the IXYS L2 series of Linear MOSFETs, and a 10.000V precision reference using some 35-year-old Analog Devices AD584 reference ICs.
That sounds fantastic - we’ll be watching out for your next finished project! Thanks for taking us through your Programmable Voltage Reference!