Skip to main content
Johi
Senior II
March 12, 2023
Solved

Best ADC accuracy that can be obtained with a Nucleo board or similar.

  • March 12, 2023
  • 19 replies
  • 11609 views

I am using STM32F407 and STM32F767ZI on Nucleo and other boards. My configuration is a simple potentiometer as voltage divider (200K or 1K) to generate the analog input voltage.

Even with stable voltage on the ADC input (verified with my fluke 117 & Picoscope 5000, 2,000V, delta < 5mV), the values read on the ADC vary over ranges of about 100mV (0,117mV).

My question:

1) What is a typical accuracy one can expect on such a simple configuration.

2) What is the major contributor to this inaccuracy, and what can be done about it.

Note:

Detailed analysis added as an attachement.

This topic has been closed for replies.
Best answer by Johi

Changing from PA0 to PA3 on the Nucleo board solved my problem. This confirms the noise hypothesis as indicated in the previous posts. Standard deviation went from 0.0025 (10 times better than before). This makes sense as the PA3 (A0) CN9 on the Nucleoboard is a pin that is used on the Arduino as analog input, and routed appropriately and the PA0 as CN11 P28 is probably not.

19 replies

S.Ma
Principal
April 5, 2023

If you want more precision in analog to digital conversion, use an STM32 with ADC supporting differential channels such as STM32H5. It's the analog counterpart of differential pairs for serial interfaces. They are typically used in Wheatstone bridge - Wikipedia

ST Technical Moderator
April 5, 2023

Hello @Johi​,

You can check AN4073 section 4.1 Configuration options for ADC accuracy, you can try the configurable options.

To give better visibility on the answered topics, please click on "Best answer" on the reply which solved your issue or answered your question.Best regards,FBL
Johi
JohiAuthorBest answer
Senior II
April 9, 2023

Changing from PA0 to PA3 on the Nucleo board solved my problem. This confirms the noise hypothesis as indicated in the previous posts. Standard deviation went from 0.0025 (10 times better than before). This makes sense as the PA3 (A0) CN9 on the Nucleoboard is a pin that is used on the Arduino as analog input, and routed appropriately and the PA0 as CN11 P28 is probably not.