Skip to main content
Explorer
May 5, 2024
Solved

ADC Spread using DMA in STM32H750BVT caused by internal ADC capacitor recharge issue

  • May 5, 2024
  • 2 replies
  • 1697 views

Hi, I collecting values from ADC using DMA in my STM32H750BVT. And it have too big repetetive spread in every pin which I checked. Attaching ADC measurments array, attaching graph (y axis is bits and x axis is nr of conversion): 

SFediakov_0-1714927816866.png

0 bit results it's issue of copying data to excell, don't pay attention on that. 

That's my understanding of problem: Internal capasitor of ADC is charging and after that ADC starts conversions which slowly discharging it, after some deadtime that capasitor is recharging.

My question is how can I setup ADC to let it recharge capacitor afrer every conversion in DMA mode?

Didn't I wrongly defined root cause, did I? 

    This topic has been closed for replies.
    Best answer by AScha.3

    You didnt tell, you are using separate AVREF , so ... i would say:

    So what you see, should happen on the pin : check with scope, whats really on the pin. 

    + on Vref ... (adds directly to the ADC result)

    +

    TL431 is a shunt regulator - not suited here as low impedance reference.

    Better use NO adc reference , just connect avref+avdd to vdd , but use a good 3,3V regulator (1% tolerance or so), this is better than fiddling around with not suited parts.

    If you really need better , use a precision reference, like REF3030 . https://www.ti.com/product/de-de/REF3030

     

    +

    You cannot use internal 1,1V , see rm:

    AScha3_0-1714934620425.png

    you can only read it , for reference (as its name suggesting).

    AScha3_1-1714934751374.png

    vref is on a real world pin :

    AScha3_2-1714934855990.png

    AScha3_3-1714934912480.png

     

     

    2 replies

    SFediakovAuthor
    Explorer
    May 5, 2024

    I need to add that i tried to change alot of settings of ADC in Cube MX but nothink helped, my  current setup is

    SFediakov_0-1714930250632.pngSFediakov_1-1714930259821.png

     

    Super User
    May 5, 2024

    Hi,

    >My question is how can I setup ADC to let it recharge capacitor afrer every conversion in DMA mode?

    No , the sampling cap is connected to pin on the (8.5 ticks here) sampling time - on every conversion.

    So what you see, should happen on the pin : check with scope, whats really on the pin. 

    +

    Connect 100nF cer.cap from ADC in (this pin) to gnd. (short wires !) Then check again, what comes out.

    +

    You set "continuous" conversion request - you want this really ?

    SFediakovAuthor
    Explorer
    May 5, 2024

    I already had connected 10nf capacitor, tried without that 10nf cap and the result is the same. 

    my osciloscope don't see any pulsations.

    Those pulsations fully repetetive i reviewed my PCB and found nothink which can have such frequency.

     

    I'm debuging my STM throw STlink, but I don't think it can't generate pulsations on supply line because i have near 200uf of ceramic caps near my MCU

    SFediakovAuthor
    Explorer
    May 5, 2024

    Ok, I found issue- it was my external V ref which I made using TL431. Have no idea why it pulsating, probably pullup resistor have to big value. 

    SFediakov_0-1714932988677.png

     

    Could someone direct me to the guide how to change Vref source to internal 1.1? I didn't found that information in internet

    AScha.3Answer
    Super User
    May 5, 2024

    You didnt tell, you are using separate AVREF , so ... i would say:

    So what you see, should happen on the pin : check with scope, whats really on the pin. 

    + on Vref ... (adds directly to the ADC result)

    +

    TL431 is a shunt regulator - not suited here as low impedance reference.

    Better use NO adc reference , just connect avref+avdd to vdd , but use a good 3,3V regulator (1% tolerance or so), this is better than fiddling around with not suited parts.

    If you really need better , use a precision reference, like REF3030 . https://www.ti.com/product/de-de/REF3030

     

    +

    You cannot use internal 1,1V , see rm:

    AScha3_0-1714934620425.png

    you can only read it , for reference (as its name suggesting).

    AScha3_1-1714934751374.png

    vref is on a real world pin :

    AScha3_2-1714934855990.png

    AScha3_3-1714934912480.png