This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nRF52832 SAADC error versus temperature

I'm using the SAADC of an nRF52832. I'd like to reduce the error of my measurements from the nominal +/-3%. I'm calling the NRF_SAADC_TASK_CALIBRATEOFFSET periodically to reduce errors, but I do still measure errors that are in the range of +/-3%. Generally, the error I measure is a relatively constant offset error, even over applied voltage and external temperature.

I've added a 2 point calibration to reduce error. In this calibration, I apply 2 known voltages to a SAADC input, then determine a slope and offset correction to apply to subsequent measurements on that same SAADC input. (The slope and offset are stored in flash. Thus this calibration could be done once in manufacturing, and calibration values used when the device is in operation.)

I've implemented this calibration, and reduced my measurement error to about +/-15mV over the temperature range of 2C to 50C and my input voltage range.

My question: Can expect this reduced error to be stable over many components, components lots, and time? Or could some parts exhibit much high error over temperature, or component lot?

  • Hi,

    It looks like your calibration method is similar to the one described in this answer. There will be some deviation from device to device, so you will have to calibrate the SAADC for every device to get the reduced error you want.

    If you want to make the SAADC output more stable then you could enable oversampling, or connect a capacitor to reduce noise, description on this blog. Offset calibration is also recommended. Oversampling and offset calibration is coded here.

    Best regards,

    Jørgen

  • Jorgen - Thanks for the response. Yes, my method is similar to the link you provided. I am already using an external capacitor and running the offset calibration. And yes, I understand I need to perform both the offset calibration periodically and my 2 point calibration for every part.

    My question is this: If I do this 2 point calibration on every part, how stable will it be over my voltage range, temperature, and time? Will the error be a function of component lot? I'm going to characterize this error over my voltage and temperature range for a small number of parts, but I am concerned that all parts are from the same lot and this error might be a function of component lot. I don't want to "get lucky" with a good lot of parts, and later find out that even the calibrated error can change, more than I expect, over temperature or time.

  • Hi Paul, the INL and DNL descriptions found in the SAADC Electrical Specification should describe the non-linear properties of the SAADC over the voltage range. You need to periodically run the offset calibration task whenever there is major temperature change. This can either be done periodically, e.g. every few seconds, or you can measure the temperature on the die with the TEMP peripheral sensor and calibrate only if there is major temperature change. Gain error as result of temperature change is given in the above linked electrical specificaiton as parameter C_EG. If you make sure you enable the external 16MHz crystal before sampling, this should not vary with time.

Related