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

SAADC differential input range?

Hi:

In the datasheet, there have a  description

Input range = (+- 0.6 V or +-VDD/4)/Gain

for a example, if Gain = 2, reference = 0.6V,

input range = 0.6 / 2 = 0.3V = 300mV

so, this range is +/- 150mV or +/- 300mV?

Parents
  • Hi,

    The input range of the ADC core is nominally ± (0.6 V / Gain) if you use the internal reference or ± ((VDD / 4) / Gain) if you use VDD as reference. So, with internal reference and Gain = 2, the input range is from -300 mV to +300 mV.

  • so, in the single ended input with a same calculate

    gain = 1/6

    Input range = ± (0.6 V)/(1/6) = 3.6 V

    range is -3.6V to 3.6V?

    but, I had tried a SAADC with nrf52832, only 0~3.6V

    I use those setting

        {                                                  \
            .resistor_p = NRF_SAADC_RESISTOR_DISABLED,     \
            .resistor_n = NRF_SAADC_RESISTOR_DISABLED,     \
            .gain       = NRF_SAADC_GAIN1_6,               \
            .reference  = NRF_SAADC_REFERENCE_INTERNAL,    \
            .acq_time   = NRF_SAADC_ACQTIME_10US,          \
            .mode       = NRF_SAADC_MODE_SINGLE_ENDED,     \
            .burst      = NRF_SAADC_BURST_DISABLED,        \
            .pin_p      = (nrf_saadc_input_t)(PIN_P),      \
            .pin_n      = NRF_SAADC_INPUT_DISABLED         \
        }
        
        
        // and
        
        nrf_saadc_resolution_set(NRF_SAADC_RESOLUTION_12BIT);

    and use this formula to calculate my input

    float vf = p_event->data.done.p_buffer[0] * 3.6f / 4096.0f; // 12bit resolution

    and I get a correct result, also it is means range only 0~3.6V

Reply
  • so, in the single ended input with a same calculate

    gain = 1/6

    Input range = ± (0.6 V)/(1/6) = 3.6 V

    range is -3.6V to 3.6V?

    but, I had tried a SAADC with nrf52832, only 0~3.6V

    I use those setting

        {                                                  \
            .resistor_p = NRF_SAADC_RESISTOR_DISABLED,     \
            .resistor_n = NRF_SAADC_RESISTOR_DISABLED,     \
            .gain       = NRF_SAADC_GAIN1_6,               \
            .reference  = NRF_SAADC_REFERENCE_INTERNAL,    \
            .acq_time   = NRF_SAADC_ACQTIME_10US,          \
            .mode       = NRF_SAADC_MODE_SINGLE_ENDED,     \
            .burst      = NRF_SAADC_BURST_DISABLED,        \
            .pin_p      = (nrf_saadc_input_t)(PIN_P),      \
            .pin_n      = NRF_SAADC_INPUT_DISABLED         \
        }
        
        
        // and
        
        nrf_saadc_resolution_set(NRF_SAADC_RESOLUTION_12BIT);

    and use this formula to calculate my input

    float vf = p_event->data.done.p_buffer[0] * 3.6f / 4096.0f; // 12bit resolution

    and I get a correct result, also it is means range only 0~3.6V

Children
No Data
Related