# Offset Error Changing after Calibration of Output

I have a circuit (shown in figure 1) that is supposed to function as a precision analog output. It outputs a DC voltage in the range of either ±10V or ±5V, depending on which gain resistors are used. This analog voltage is intended for use as a reference type of voltage, entailing:

• High Accuracy ±(0.1% + 1mV): after calibration
• ~5-10mA of output current maximum
• DC output, no transient slewing specifications formally stated

Figure 1: circuit in question.

For +/-5V output the gain is $$\G=1+\dfrac{R_1}{R_2}=2\$$

For +/-10V output the gain is $$\G=1+\dfrac{R_3}{R_4}=4.026\$$

Output is $$\G\cdot(V_{DAC}-2.5V)\$$

After a calibration, the output of the circuit performs to spec. The calibration I used is a simple slope and offset error correcting equation that operates on the code I send to a DAC, shown the code below.

voltage = 5.0;                         // set voltage

cal = (voltage * 1.0047) + 0.0144;     // slope and offset calibration
value = ((cal + 5) * (65535 / 10));    // translate -5 – 5 –> 0–5

if (value > 65535)                     // send max output if value > 2^16
{
value = 65535;
}

output_MAX5134(value, AO_DAC_0);       // write to DAC output 0


The problem is, if I come back the next day after calibration, there will be an offset present on the output. The gain error is still eliminated, but I will see something like 2.5200V instead of 2.5005V. The thing I can think of is the temperature is effecting things, maybe I have to account for it?

For reference I am using:

1% Tolerance SMD resistors -> should be accounted for in calibration

REF3425 -> 0.05% 2.5V Reference

INA145 -> Difference amplifier as Unipolar to bipolar converter

MAX5134 -> 16-bit DAC with high linearity
https://datasheets.maximintegrated.com/en/ds/MAX5134-MAX5137.pdf

I am using a u3606A 5-1/2 digit multimeter for voltage measurements

INA145 Gain Error Vs Temp:

INA145 Offset Voltage Drift Vs Temp:

• What is the INA145 offset and drift by specs? – Marko Buršič Mar 14 '20 at 23:08
• @MarkoBuršič Added datasheet table/graph. Looking at the numbers I didn't think it be much of an issue. The day to day temperature has stayed relatively constant, but I ideally want to remain accurate under a range of temperatures from ~10C to 30C. Unfortunately, I have no way of testing this board under temp. – Michael Mar 14 '20 at 23:18
• By the way, you have to do float math and then parse into integer math. Example 65535/10=6553. Do always use a decimal point on all float numbers, 5=5.0 ; 65535=65535.0, and so on...else the compiler would choose a type on his own – Marko Buršič Mar 14 '20 at 23:57