SAADC accuracy problem

I have several issues while using SAADC

1. For the same voltage, the ADC data has a large variance

2.The data of differential ADC seems to have an offset which let measure voltage is smaller than true voltage.

So my question is:

1.What can be  the probable error factor for the above  ADC accuracy problem?

2.Would increasing the number of oversampling improve the data variance?

3.How to calibrate the offset of differential ADC?

Parents
  • Hello,

    Can you provide some measurement that show what you describe? I would like to understand what variation you see with both single ended and differential intput, also how the inputs are connected in each case and what source and reference you are using.

    Typically I recommend using a single AAA battery directly as input source when you encounter any problem, since a AAA battery will be close to an ideal source (very stable and very low impedance). Using a AAA is a good test to find where the problem may be.

    Kenneth

  • Thanks for your reply, Kenneth.

    I am using Single-end ADC and differential ADC to measure the voltage difference of two analog outputs.

    Assume the analog output pair as V1and V2, V3 and V4 whose voltage are guaranteed to be stable.

    The Single-end ADC is set as below. 

    .gain       = NRF_SAADC_GAIN1_6,
    .reference  = NRF_SAADC_REFERENCE_INTERNAL, 
    .mode       = NRF_SAADC_MODE_SINGLE_ENDED, 
    
    OVERSAMPLING_64X

    In order to maintain the same resolution with single-end ADC ,the differential ADC is set as below. 

    .gain       = NRF_SAADC_GAIN1_3,
    .reference  = NRF_SAADC_REFERENCE_INTERNAL, 
    .mode       = NRF_SAADC_MODE_DIFFERENTIAL,
    
    OVERSAMPLING_64X

    In addition, each time the ADC runs , 

    while(nrfx_saadc_offset_calibrate(NULL) != NRF_SUCCESS);

    is executed to perform the ADC calibration.

    The raw value of  [V1(Single-end)-V2(Single-end) ] and [(V1-V2)(Differential ADC)] is shown as below.

    The raw value of  [V3(Single-end)-V4(Single-end) ] and [(V3-V4)(Differential ADC)] is shown as below.

    Apparently, in my ADC program for measuring voltage difference, the error is greater using differential ADC, can you tell the reason please?

Reply
  • Thanks for your reply, Kenneth.

    I am using Single-end ADC and differential ADC to measure the voltage difference of two analog outputs.

    Assume the analog output pair as V1and V2, V3 and V4 whose voltage are guaranteed to be stable.

    The Single-end ADC is set as below. 

    .gain       = NRF_SAADC_GAIN1_6,
    .reference  = NRF_SAADC_REFERENCE_INTERNAL, 
    .mode       = NRF_SAADC_MODE_SINGLE_ENDED, 
    
    OVERSAMPLING_64X

    In order to maintain the same resolution with single-end ADC ,the differential ADC is set as below. 

    .gain       = NRF_SAADC_GAIN1_3,
    .reference  = NRF_SAADC_REFERENCE_INTERNAL, 
    .mode       = NRF_SAADC_MODE_DIFFERENTIAL,
    
    OVERSAMPLING_64X

    In addition, each time the ADC runs , 

    while(nrfx_saadc_offset_calibrate(NULL) != NRF_SUCCESS);

    is executed to perform the ADC calibration.

    The raw value of  [V1(Single-end)-V2(Single-end) ] and [(V1-V2)(Differential ADC)] is shown as below.

    The raw value of  [V3(Single-end)-V4(Single-end) ] and [(V3-V4)(Differential ADC)] is shown as below.

    Apparently, in my ADC program for measuring voltage difference, the error is greater using differential ADC, can you tell the reason please?

Children
Related