When experimenting I sometimes need a precise voltage. So I set out to build my own voltage calibrator.
Features- Resolution 1 mV or better
- 10V range
- Unipolar and bipolar operation
- Exact zero
- Load correction
- Gain and Offset
- Limiting function
- Remote control via USB without any special drivers
- Touch screen
- Compact design
SchematicThe device is built around the 16-bit DAC AD5761 from Analog devices. It receives settings from the MCU via its SPI interface.
The reference source is a low noise, low drift ADR4525. The output of the DAC is fed into a precision amplifier LT1997-3 which can be configured to have a gain of 1 or 0.1 by switching relay K1. Relay K2 can short the output to guarantee an output voltage of exactly 0 Volt regardless of any offset voltage the circuit may have.

The analog circuitry needs power supply voltages of -15V and +15V. An ADP5070 switching regulator creates voltages ±16.8V from the 5V of the USB interface. These voltages are then filtered by the low noise linear regulators ADP7142 and ADP7182 to get approximately ±15V.
RangesThe AD5761 includes a configurable output amplifier. With a 2.5V reference and by configuring gain and offset of this amplifier these ranges can be set:
±10V / ±5V / ±3V / −2.5V to +7.5V / 0V to 20V / 0V to 16V / 0V to 10V / 0V to 5V.
Of these we are only using ranges ±10V / ±5V / 0V to 10V and 0V to 5V here. Together with the attenuator switch this gives us ranges 0.5V / 1V / 5V / 10V, unipolar or bipolar.
The AD5761 has an overrange option by which the nominal ranges can be extended by 5%. I am using this option to make sure each range is fully covered and to also leave some headroom for calibration.
From the computed granularities it can be seen that the targeted resolution of 1 mV should be feasible for all ranges. For ranges ±1 V and below we may even go for a resolution of 0.1 mV.
Test ResultsThese are results of test runs over all ranges with unipolar (left) and bipolar (right) polarities.







NoiseThe noise measured with my DMM (BW=100 kHz) was below 200 uV RMS. My oscilloscope shows around 550 uV RMS if the bandwidth is set to 20 MHz.
Load CorrectionThe internal resistance of the device is small but finite. Therefore the voltage measured at a load resistor connected to the output will be lower than expected as the internal resistance and the load form a voltage divider. If both the internal resistance Ri and the resistance of the load RL are known, the voltage drop can be compensated by increasing the internal EMF by a factor k.
k = ( RL + Ri ) / RL
The internal resistance can be determined by measuring the voltage drop at a known load as part of a calibration procedure. The resistance of the load can be entered by the user.
Offset and GainTo model an amplifier connected to the output, a user can set its gain and offset parameters. This shifts the plane of reference to the output of the amplifier.
The voltage at the amplifier’s output is modelled as Voltage = EMF * Gain + Offset.
For example, with a gain of 2 the internal EMF is reduced by the same factor but the voltage in the display remains unchanged. By the same logic with an offset of 1V the internal EMF is decreased by 1V.
LimitsTo prevent inadvertently outputting a voltage which may damage a connected device the firmware includes a limiting function.
[:SOURce]:LIMits:ENABle[:STATe]?
[:SOURce]:LIMits:LOWer?
[:SOURce]:LIMits:UPPer?
For safety reasons these three parameters are not affected by a *RST or a reset via the GUI. The limits refer to values in the reference plane, i.e. they clip the voltage parameter not the EMF.
MCU, Display and FirmwareFor MCU and display I am using the proven combination of a STM32F446RE microcontroller and a 2.8” capacitive touch display.
The firmware uses the framework I have already been using for several other projects. It includes a SCPI parser which interprets commands coming in via one of the composite USB interfaces USBTMC or CDC(serial).
PCBThe PCB is a two-layer board with assembly from one side. The display is mounted on top op the main PCB. Power supply and remote control is via the USB-C connector on the left, the voltage output is through two banana jacks on the right. The 100x88x38mm aluminum enclosure is from AliExpress.

A more detailed description of the project as well as downloads for schematic, Gerbers and firmware can be found
here.
Modified 10.8.: Added noise measurement results.