I'm working with a dsPIC that measures the output of a variable 20V power supply. I'm experiencing errors on the ADC measurements and they are not constant errors, they vary according to the output voltage. I measured the output voltage of the power supply and the voltage at the ADC input of the microcontroller with a UNI-T IT61E multimeter: Where Output Voltage is the measured voltage at the output of the power supply, the Voltage in ADC is the voltage measured in the ADC pin relative to the AVSS pin and the Division Factor is calculated as Voltage in ADC/Output Voltage. As you can see, this factor is not constant, so my multimeter is not that accurate (I think it should be precise and accurate enough) or the ADC input stage is not that linear. Here's the input stage:

Is it due to the OPAMP or the low pass filters? Or is it really my multimeter giving wrong readings?

• could be offset voltage of op-amp or offset voltage of ADC. Usually, a multimeter will read "0.000" when you short its two leads together - check that too. – glen_geek Feb 13 '17 at 0:23

Per the MCHP datasheet, Figure 4.4, extrapolating out past the 0.01uF upper value, I'd replace the 10_Ohm R21 output dampening value with 100 Ohms. The figure, extrapolated, suggests at least 50 Ohms for 0.1uF Cload.

The datasheet gives no hint on output impedance.

Unless we examine how the phase margin changes from 90_degrees at 1MHz with NO Cload, to 45_degrees at 1MHz with 500pF Cload; Xc[500pF, 1MHz] is -j318 Ohms; thus the Rout is also 318 Ohms, to produce the 45 degree phase shift. If we dare proclaim this is inductive reactance, knowing 1uH at 1MHz is +j6.3 Ohms, we compute 318/6.3 = 30uH inductive equivalent reactance; 0.1uF and 30uH will resonate at 50KHz.

Thus you may have an oscillator, caused by the heavy C_load.

Is it due to the OPAMP or the low pass filters? Or is it really my multimeter giving wrong readings?

All valid possibilities. Also:

1) non-linearity of the opamp for low-voltage input/output;