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

ADC Values Volatile

Hi,

I'm reading an ADC channel connected to large capacitors. I do the read when charging is off so no ripple. The caps are large (super-caps) so hold well enough to show the volatility in reads. I read every 0.5s.

The resistor divider network is shared with a PIC comparator input though I doubt it has varying impedance between reads. The voltage is over the 0.6v reference so I use a 1/2 gain.

  NRF_SAADC->CH[6].CONFIG = SAADC_CH_CONFIG_GAIN_Gain1_2 << SAADC_CH_CONFIG_GAIN_Pos | SAADC_CH_CONFIG_TACQ_15us << SAADC_CH_CONFIG_TACQ_Pos;
  
  NRF_SAADC->RESOLUTION = SAADC_RESOLUTION_VAL_10bit << SAADC_RESOLUTION_VAL_Pos; // 10 bit
  NRF_SAADC->RESULT.PTR = (int32_t) &reads;
  NRF_SAADC->RESULT.MAXCNT = ADC_CHANNEL_COUNT;
  NRF_SAADC->ENABLE = SAADC_ENABLE_ENABLE_Enabled << SAADC_ENABLE_ENABLE_Pos;
  NRF_SAADC->INTEN = SAADC_INTEN_END_Enabled << SAADC_INTEN_END_Pos;
  NVIC_SetPriority(SAADC_IRQn, 8);

I've also done the calcs to convert it into a human readable value.

// STORAGE VOLTAGE
// 1.2V = 1023
// Radc = 1V = 852.5
// 2k/12k = 0.166666666667
// 852.5*0.166666666667 = 142.083611105
#define VOLTAGE_STORAGE_MULTIPLIER 1000
#define VOLTAGE_STORAGE_DIVIDER 142



Now for the reads

<info> app: raw 177 
<info> app: cvt 1246 
<info> app: raw 107 
<info> app: cvt 753 
<info> app: raw 66 
<info> app: cvt 464 
<info> app: raw 108 
<info> app: cvt 760 
<info> app: raw 96 
<info> app: cvt 676 
<info> app: raw 92 
<info> app: cvt 647 
<info> app: raw 113 
<info> app: cvt 795 
<info> app: raw 110 
<info> app: cvt 774 
<info> app: raw 111 
<info> app: cvt 781 
<info> app: raw 110 
<info> app: cvt 774 
<info> app: raw 111 
<info> app: cvt 781 
<info> app: raw 125 
<info> app: cvt 880 
<info> app: raw 64 
<info> app: cvt 450 
<info> app: raw 121 
<info> app: cvt 852 
<info> app: raw 107 
<info> app: cvt 753 
<info> app: raw 105 
<info> app: cvt 739 
<info> app: raw 105 
<info> app: cvt 739 
<info> app: raw 103 
<info> app: cvt 725 
<info> app: raw 94 
<info> app: cvt 661 
<info> app: raw 114 
<info> app: cvt 802 
<info> app: raw 186 
<info> app: cvt 1309 
<info> app: raw 167 
<info> app: cvt 1176 
<info> app: raw 102 
<info> app: cvt 718 
<info> app: raw 24 
<info> app: cvt 169 
<info> app: raw 88 
<info> app: cvt 619 
<info> app: raw 100 
<info> app: cvt 704 
<info> app: raw 152 
<info> app: cvt 1070 
<info> app: raw 92 
<info> app: cvt 647 
<info> app: raw 98 
<info> app: cvt 690 
<info> app: raw 96 
<info> app: cvt 676 
<info> app: raw 95 
<info> app: cvt 669 
<info> app: raw 95 
<info> app: cvt 669 
<info> app: raw 96 
<info> app: cvt 676 
<info> app: raw 95 
<info> app: cvt 669 
<info> app: raw 95 
<info> app: cvt 669 
<info> app: raw 87 
<info> app: cvt 612 
<info> app: raw 91 
<info> app: cvt 640 
<info> app: raw 88 
<info> app: cvt 619 
<info> app: raw 53 
<info> app: cvt 373 
<info> app: raw 88 
<info> app: cvt 619 
<info> app: raw 93 
<info> app: cvt 654 
<info> app: raw 11 
<info> app: cvt 77 
<info> app: raw 85 
<info> app: cvt 598 
<info> app: raw 85 
<info> app: cvt 598 
<info> app: raw 70 
<info> app: cvt 492 
<info> app: raw 85 
<info> app: cvt 598 
<info> app: raw 83 
<info> app: cvt 584 
<info> app: raw 169 
<info> app: cvt 1190 
<info> app: raw 79 
<info> app: cvt 556 
<info> app: raw 78 
<info> app: cvt 549 
<info> app: raw 79 
<info> app: cvt 556 
<info> app: raw 85 
<info> app: cvt 598 
<info> app: raw 98 
<info> app: cvt 690 
<info> app: raw 76 
<info> app: cvt 535 
<info> app: raw 74 
<info> app: cvt 521 
<info> app: raw 74 
<info> app: cvt 521 
<info> app: raw 165 
<info> app: cvt 1161 
<info> app: raw 166 
<info> app: cvt 1169 
<info> app: raw 71 
<info> app: cvt 500 
<info> app: raw 78 
<info> app: cvt 549 
<info> app: raw 123 
<info> app: cvt 866 
<info> app: raw 68 
<info> app: cvt 478 
<info> app: raw 62 
<info> app: cvt 436 
<info> app: raw 64 
<info> app: cvt 450 
<info> app: raw 65 
<info> app: cvt 457 
<info> app: raw 62 
<info> app: cvt 436 
<info> app: raw 58 
<info> app: cvt 408 


Where CVT 774 = 0.774v.

But many of the reads are completely out. Take the first four for example.

<info> app: raw 177
<info> app: cvt 1246
<info> app: raw 107
<info> app: cvt 753
<info> app: raw 66
<info> app: cvt 464
<info> app: raw 108
<info> app: cvt 760

This isn't good enough for my application and while I could do some averaging I'd have to increase the frequency. I'd rather solve the problem at hand.

Any ideas? I've tried increasing the TACQ to max but it makes no difference to the volatility.

Parents Reply
  • Hi Jorgen,

    As the signal is shared I've worked around it by doing the ADC read on the PIC and sending over SPI (the PIC doesn't have a problem with it).

    // store voltage
    //NRF_SAADC->CH[6].PSELP = 4;
    //NRF_SAADC->CH[6].CONFIG = SAADC_CH_CONFIG_GAIN_Gain1_2 << SAADC_CH_CONFIG_GAIN_Pos | SAADC_CH_CONFIG_TACQ_15us << SAADC_CH_CONFIG_TACQ_Pos;

    I've not seen this on other ADC channels which suggests it's pin related.

    Regards,

    Andrew

Children
No Data
Related