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

NRF52840 ADC noise

I am currently evaluating nrf52840 - CDSENET E73-2G4M08S1C module with installed CircuitPython 7.0.0-alpha.3. Unfortunately the ADC readings are quite noisy. For example for 256 consecutive readings of a DC signal (0.120V) from a potentiometer the stdev = 39.


Any way to improve this ?

Parents Reply Children
  • With 47uF capacitor on the input ? Using the same LDO with STM32WB55 I get about 11 ENOB in 12-bit mode (no oversampling), deviation about 1 LSB. In the nrf52840 case what is the measured ENOB – 8 ?

    Have some questions: I was trying different boot loaders including open_bootloader from nRF5_SDK_17.0.2_d674dde. Non of them worked, except Adafruit_nRF52_Bootloader. With Nordic tools get errors like:

    Failed to upgrade target. Error is: read failed: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

    Any specifics ?

    Also, is there any ready firmware that can use nrf52840 as regular Bluetooth adapter for testing other BLE devices etc. ?

  • Hello,

    Mtk said:
    With 47uF capacitor on the input ? Using the same LDO with STM32WB55 I get about 11 ENOB in 12-bit mode (no oversampling), deviation about 1 LSB. In the nrf52840 case what is the measured ENOB – 8 ?

    Unfortunately you must expect a couple of LSB deviation with the SAADC. Please see the replies by my colleagues in this and this ticket for more information.
    However, I would also say as @awneil already has; A multimeter is not suited to measure/identify noise, because of its averaging. Do you have access to an oscilloscope with which you could perform these measurements? 

    Mtk said:
    Have some questions: I was trying different boot loaders including open_bootloader from nRF5_SDK_17.0.2_d674dde.

    You likely will have to make some modifications to make it work with your CDSENET module, thought I have no personal experience with this exact module.
    I would ask that you open a separate ticket for the bootloader issues since it diverges from the original ticket, in order to keep the forum tidy and easy to navigate for other users.

    Mtk said:
    Also, is there any ready firmware that can use nrf52840 as regular Bluetooth adapter for testing other BLE devices etc. ?

    Yes, please check out the pc-ble-driver and pc-ble-driver-py. These will let you create a desktop application using either cpp or python.

    Best regards,
    Karl

  • Switched to Micropython, as well as disabled the int. DC-DC regulator and used the following settings:

    .burst = NRF_SAADC_BURST_ENABLED

    …..

    nrfx_saadc_simple_mode_set((1 << adc_obj->id), NRF_SAADC_RESOLUTION_14BIT, SAADC_OVERSAMPLE_OVERSAMPLE_Over8x, NULL);

    The results (measuring 1.406 V) seems better – stdev = 4. The mainstream micropython ADC implementation adc.c is not using oversampling, calibration … As well as I was not able to find more advanced example configurations. Wondered if you could recommend some ?

  • Hello,

    I am glad to hear that you are able to reduce the noise you are seeing when switching to Micropython, though I have never heard about Micropython personally.
    Are you now measuring the reference voltage with an oscilloscope?

    Enabling burst and oversampling should decrease the effects of noise on your output, since it then takes multiple samples in a row and averages them before outputting a single sample.

    Mtk said:
    The mainstream micropython ADC implementation adc.c is not using oversampling, calibration

    It is recommended to perform calibration upon initializing the SAADC, and whenever the ambient temperature has changed by more than 10 C since the last calibration. 

    Mtk said:
    … As well as I was not able to find more advanced example configurations. Wondered if you could recommend some ?

    I am not exactly sure what I should point you to when you ask for more advanced configurations, but please have a look at this repository for multiple SAADC examples using different configurations.

    Best regards,
    Karl

Related