I have just tested my second design with STM32F2, now it is STM32F207ZFT6, the ADC behaviour is the same as in my first application – strong noise in ADC.
Noise of current input without any signal connected :
Note : In the signal graphs above, the vertical axe is in ADC-bits, not in volts!; don’t be confused by its legend „[V]“, for this test we have used our modified program to see rough ADC data.
The same noise appears even when the CPU analog pin shortcircuited to GND, as shown here:
There are permanent spikes over 30 LSBs and more in the sampled signal, although they shouldn’t exceed 5-10 LSBs, by my opinion.
Another details :
2-side PCB, on the bottom side there are other connections but most of it is poured with GND signal – common for both digital and analog, the analog ground is not separated. As the board consumption is minimal, below 100 mA, I think it should not cause such noise.
voltage reference VREF 3.3V buffered by opamp, blocked by 100nF and tantallum 10uF in parallel, the same with VREF/2; each of the processor power pin is blocked with 100nF cap
in our older application we used the same design concept, but the processor used was AduC834; it has 12-bit ADC too and the signal noise was several LSBs only, there were no problems; main difference was that the AduCs internal voltage reference was used, no external one
we have tested to disconnect processor analog ground pin from the board common GND and to connect it with extra wire directly to the voltage reference VREF ground, no effect
it is three-phase network measuring device, there are 3 analog voltage channels and three current channels with switchable gain preamplifier; the CPU oscillator 25 MHz, internal clock 120 MHz by PLL, ADC-clock is 30 MHz(in compliance with techspecs), we have tested to slow main internal clock (therefore all secondary clocks too) downto one quarter, but without any effect
ADC samples periodically input signal with rate 128 conversions per 50 Hz network period, i.e. each 156 usecs; results are transferred by DMA into internal RAM; data from the RAM are transferred via insulated RS485 (on another board) and visualized in our program. We have tried to prolong conversion times to maximum, no effect
excluding CPU, there are only 3 opams, 2 analog switches, I2C thermometer and three ULN-switches(unused during test), powered by linear LF33 stabilizer, normally powered by 5V DC from switcher on another board, but during the test the switcher was disconnected and the LF33 was powered from clear laboratory 5V DC supply. I am sure nothing but the processor oscillator can oscillate on the board.
checking the signal with oscilloscope doesn’t get decisive results, the signal is too weak
Anybody with this processor family ADC performance experience ?
Concerning the signal strength : even if the analog input is shortcircuited, I see noise of 5-10 mV (peak-to-peak) on oscilloscope – measured with coaxial cable with minimum ground wire length soldered to the board. With standard probe, the noise was about twice higher probably due to worse grounding (general EMC noise ?).
This is an image of my board:
And the bottom of the board:
As I reported above, even if signal grounded, noise of about 30 LSBs still persists in the ADC converted data.
I would argue that the ADC has a 4th input in addition to the three cited by Fred: its clock. At least for some types of ADCs, jitter or phase noise on the clock can impact ADC measurements.
You say you have a 25 MHz oscillator but are running the ADC at 30 MHz, so you have some PLL involved in the generation of its clock. If that is not working well, its irregularity could be a source of conversion noise. Can you try changing the software configuration (even temporarily) to not use the PLL and just run off of a the input clock or divided down from it?
I believe some microcontrollers also have a mechanism for suspending most of the digital circuitry while taking an ADC reading in order to reduce noise. You might look into seeing if something like that is possible.