Forum: Mikrocontroller und Digitale Elektronik STM32 beste ADC Einstellung bez SNR


von ST M. (stm321)


Lesenswert?

Der H7 hat ja bekanntlich eine ordentliche Verbesserung der ADC 
Performance bezogen auf den F4. Anyway um das Maximum an ENOB stehen 2 
konkurierende möglichkeiten im Raum:

Gem. 
https://www.st.com/resource/en/application_note/dm00628458-getting-started-with-the-stm32h7-series-mcu-16bit-adc-stmicroelectronics.pdf

Z.b. beim TQFT144 wird setteling time basiert ein maximaler ADC clk von 
12 MHz empfohlen (sektion 3.4).

Andererseits hat der ADC eine HW Oversampling Engine und kann wesentlich 
schneller laufen.

Bei einem Signal mit weniger als 100kHz Bandbreite. Ist es besser den 
ADC auf 50MHz laufen zu lassen und entsprechendes höheres Oversampling 
zu nutzen oder den ADC clk auf 12 MHz zu setzen bei tieferem 
Oversampling?

Die Idee besteht darin, dass sich das "ringing" während der setteling 
time über die entsprechenden samples entsprechend kompensieren könnte.

von Hermann S. (diphtong)


Lesenswert?

Servus,
kenne den H7 jetzt nicht, aber hier gibts noch was speziell für den ADC:
https://www.st.com/resource/en/application_note/cd00211314-how-to-get-the-best-adc-accuracy-in-stm32-microcontrollers-stmicroelectronics.pdf

Vll. hilft das weiter.

von Simon D. (jamen)


Lesenswert?

Meine Erfahrung mit den ADCs bei ST ist, dass Rauschen eher das 
geringere Problem ist, als die vergleichsweise hohe Nichtlinearität. 
Gerade beim höchstwertigen Bit habe ich da schon große Probleme gehabt.

Bezüglich des Rauschens ist es wichtig, dass du einen sehr performanten 
ADC-Treiber hast, der den Samplekondensator in der notwendigen Zeit 
ausreichend genau auflädt. Das Einschwingverhalten lässt sich leider 
nicht durch Oversampling kompensieren, da es zu systematischen Fehlern 
führt, die stark von den Umgebungsbedingungen abhängen können. Wenn das 
Einschwingverhalten einen periodischen Anteil hat, wird es noch 
komplizierter, da diese Schwingung von vielen Faktoren beeinflusst wird 
und sich stark von Abtastzyklus zu Abtastzyklus unterscheiden kann. Da 
es sich aber nicht um echtes Rauschen handelt, hilft der Oversampler 
hier erfahrungsgemäß auch nicht. Schon kleine Änderungen der 
Umgebungsbedingungen können zu einem deutlich anderen Histogramm führen.

Meine Empfehlung ist, wenn die Performance vom ADC wirklich wichtig ist, 
ist es einfacher und billiger einen entsprechenden externen ADC zu 
verwenden, der geringere Anforderungen an die Signalkonditionierung 
stellt und ab Werk bessere Eigenschaften mitbringt.

Wenn du unbedingt den internen ADC möglichst optimieren möchtest, dann 
achte besonders auf einen guten Eingangstreiber und darauf, dass der 
Einschwingvorgang abgeschlossen ist, bevor die Abtastdauer vorbei ist. 
Der Aufwand, den du für den Treiber bereit bist zu investieren, legt 
dann deine minimale Abtastdauer fest und damit wiederum die erreichbare 
Messdatenrate. Es gibt bei Analog Devices ein Online-Tool, was einem bei 
der Auslegung des ADC-Treibers hilft. Das hat auch bei mir ganz gut 
funktioniert. Am Ende war das Rauschen akzeptabel aber der tatsächliche 
ENOB ließ sich, trotz Oversampling, nicht über die im Datenblatt 
angegebenen 12 b erhöhen. Außerdem waren die Messfehler leider schon 
lange von der Nichtlinearität dominiert und nicht mehr vom Rauschen.

LG Simon

von Uwe Bonnes (Gast)


Lesenswert?

Lange Sampling Time und Oversampling in der verbleibenden Zeit können 
gegen das Sample Problem helfen, aber nicht gegen die Nichtlinearität.

von ST M. (stm321)


Lesenswert?

Hermann S. schrieb:
> Servus,
> kenne den H7 jetzt nicht, aber hier gibts noch was speziell für den ADC:
> 
https://www.st.com/resource/en/application_note/cd00211314-how-to-get-the-best-adc-accuracy-in-stm32-microcontrollers-stmicroelectronics.pdf
>
> Vll. hilft das weiter.

Danke, hmmm gem diesen Daten benötigt bei:
RAIN = 1 kΩ, CAIN/CPCB = 2 nF, VREF+ = 2 V and FADC = 20 MHz
16 bit 0.5 LSB 67.1ns. Das wären bei 2.5 Zyklen Sample und 36MHz ADC 
erreicht, die Konvertierung benötigt dann 16.5 Zyklen für 0.5 LSB.
Also folglich sollten ca 1.8MSPs pro ADC möglich sein.

Wieso ist der im bsp genannte RAIN = 1 kΩ so hoch? Am package/bonding 
kann ja kaum 1kOhm liegen, hat der S/H Transistor einen solch hohen 
RDSon?

Das Nichtlinearitätsproblem hat ST mit dem H7 auch erkannt/ist dieses 
angegangen. Die kalibration sollte beim H7 anders als bei F4 etc. nicht 
nur den offset sondern ebenfalls die Nichtlinearitäten kompensieren.
So zumindest die Theorie, wie guts funktioniert ist eine andere Frage.

Ich mag eigentlich einen internen ADC. Ist halt irgendiwe cooler als 
extern :P. Naja und Kalibrierung ist auch einfacher.
Zumindest von den theoretischen Daten her ist der H7 ADC eigentlich 
genial, das P/L ist besser als bei manchen externen ADC und bekommt 
kostenlos noch einen uC dazu.

von Uwe Bonnes (Gast)


Lesenswert?

Der ADC arbeitet mit geschalteten Kondensatoren und einigen Schaltern im 
Analogpfad, z.b. zur Kanalauswahl. Beim Samplen muss der Kondensator auf 
besser als ein LSB geladen sein, sonst sampelst Du falsch. Aus tau = R * 
C, also den internen (Sample) Kondensator und R = externe plus interne 
Widerständen ergibt sich obige Forderung. Meist wird der Eingang aber 
von einem OP getrieben. Der mag diese plötzliche Stromänderung beim 
Aufladen meist nicht und liefert den nötigen Strom nur nach einem 
Einschwingvorgang. Mit längeren Samplezeiten läßt Du dem 
Einschwingvorgang mehr Zeit.

von ST M. (stm321)


Lesenswert?

Uwe Bonnes schrieb:
> Der ADC arbeitet mit geschalteten Kondensatoren und einigen Schaltern im
> Analogpfad, z.b. zur Kanalauswahl. Beim Samplen muss der Kondensator auf
> besser als ein LSB geladen sein, sonst sampelst Du falsch. Aus tau = R *
> C, also den internen (Sample) Kondensator und R = externe plus interne
> Widerständen ergibt sich obige Forderung. Meist wird der Eingang aber
> von einem OP getrieben. Der mag diese plötzliche Stromänderung beim
> Aufladen meist nicht und liefert den nötigen Strom nur nach einem
> Einschwingvorgang. Mit längeren Samplezeiten läßt Du dem
> Einschwingvorgang mehr Zeit.

Soweit verstanden Danke. Es scheint so zu sein, dass beim H7 das Analoge 
frontend der limitierende faktor ist, eigentlich sehr schade... Nicht 
dass ich ST gross kritiseren möchte -zu dem Preis ist der H7 genial-. 
Etwas mehr platz auf dem Die für eine bessere Analoge aufbereitung/ggf. 
bufferung wäre wünschenswert. Anyway beim oben genannten RAIN = 1 kΩ ist 
die Signalquelle (opamp oder wie der auch immer getrieben wird wohl kaum 
limitierend). 1k Ohm ist massiv, und dass die Gehäuseform (BGA vs TQFP) 
ebenfalls so einen grossen Einfluss haben soll ist für mich ebenfalls 
schwer nachzuvollziehen.

nun die Zeitberechnung gem Tau bei 50uV delta und 1kOhm (!) - naja die 
1kOhm sind halt schief...

von Simon D. (jamen)


Lesenswert?

Ich glaube du bringst gerade etwas durcheinander. Das Beispiel aus der 
Application-Note ist mit einem Quellwiderstand von 1 kOhm. Im Datenblatt 
vom H725 stehen ab S. 197 die wichtigen Werte.

In Tab. 85 ist angegeben, dass bei einem Quellwiderstand von 47 Ohm eine 
Abtastdauer von 70 ns ausreichen soll. In der Praxis wird es 
wahrscheinlich eher etwas mehr sein aber mit einem guten Treiber kann 
man ja auch den Quellwiderstand weiter reduzieren.

Man kann mit der angegebenen Haltekapazität dann grob abschätzen wie 
groß der Widerstand des Abtastschalters sein mag und damit dann seine 
eigenen Berechnungen anstellen.

von ST M. (stm321)


Lesenswert?

Simon D. schrieb:
> Ich glaube du bringst gerade etwas durcheinander.

Ja anscheinend, danke.

Simon D. schrieb:
> Das Beispiel aus der
> Application-Note ist mit einem Quellwiderstand von 1 kOhm. Im Datenblatt
> vom H725 stehen ab S. 197 die wichtigen Werte.

Sehr gut, da steht ja auch ein max 50Ohm; weshalb sie im AN einen 
absurden wert von 1kOhm verwenden ist mir schleierhaft.

Anyway denke SMP von 2.5 (oder mehr) wird Sinnvoll sein, dieser 
zusätzliche Zyklus beeinträchtigt die samplerate nicht erheblich, 
entschärft jedoch dieses Problem.

Haben eigentlich die Boost bits ausser dem Stromverbrauch keine 
negativen Auswirkungen?

von Low impedance source (Gast)


Lesenswert?

Simon D. schrieb:
> Bezüglich des Rauschens ist es wichtig, dass du einen sehr performanten
> ADC-Treiber hast, der den Samplekondensator in der notwendigen Zeit
> ausreichend genau auflädt.

Dieses!!! Schön das Signal mit nem kräftigen Buffer verstärken und dann 
in den ADC.

Der H7 hat ja cpu power ohne Ende und ne FPU deshalb einfach schnell 
samplen. So schnell du kannst und die ganze HF Schlotze mit nem iir oder 
über fft brickwall weg filtern.
Da faltet sich dann nichts mehr runter und du hast weniger Rauschen im 
eigentlichen nutzsignal, und sparst die nen analogen anti alias filter

von ST M. (stm321)


Lesenswert?

Low impedance source schrieb:
> Dieses!!! Schön das Signal mit nem kräftigen Buffer verstärken und dann
> in den ADC.
>
> Der H7 hat ja cpu power ohne Ende und ne FPU deshalb einfach schnell
> samplen. So schnell du kannst und die ganze HF Schlotze mit nem iir oder
> über fft brickwall weg filtern.
> Da faltet sich dann nichts mehr runter und du hast weniger Rauschen im
> eigentlichen nutzsignal, und sparst die nen analogen anti alias filter

Ja soweit so gut.
Anyway die Frage ist: Wie konfiguriere ich den ADC ab besten, dass er 
von sich aus das beste ENOB bringt. Da gibts etliche Möglichkeiten z.B. 
Boost bits, ADC clock, SMP etc.
Lohnt es sich den ADC schneller laufen zu lassen und den internen HW 
oversampler zu nutzen. Oder doch besser langsamer und präziser?

Annahmen: 1. Signal Quelle ist ordentlich am pin des H7.
2. Das Signal ist ein "general purpose signal" unter 100kHz Bandbreite

von Low impedance source (Gast)


Lesenswert?

Ich nehme an dieses Dokument 
https://www.st.com/resource/en/application_note/cd00211314-how-to-get-the-best-adc-accuracy-in-stm32-microcontrollers-stmicroelectronics.pdf 
hast du schon gelesen und verstanden.

Hier wird klar averaging empfohlen das sehe ich auch so wenn Strom egal 
ist schneller samplen.
Wenn du an der analogen Seite nen AA Filter einbauen kannst mach das, 
das averaging hilft aber auch gegen aliasing sehr gut.
Wenn die Quell-Impedanz klein genug ist bring länger samplen keinen 
Vorteil.

Wenn du die Phase des signals auswerten willst ist bei 100 kHz die 
sampleclock schon nicht mehr egal.

von Low impedance source (Gast)


Lesenswert?

ST M. schrieb:
> Das Signal ist ein "general purpose signal" unter 100kHz Bandbreite

Das ist komplett nichts sagend.

Steuert das Signal den ADC total aus? Wenn nein warum nicht? Kann man 
das Signal entsprechend verstärken.

Wie sieht das Signal im Spektralbereich aus? Sind die Linien scharf, 
wenns weiche gibt. Interessiert nur die Amplitude oder auch die Phase.
Gibt's nen trigger der das sampling startet.

von ST M. (stm321)


Lesenswert?

Low impedance source schrieb:
> Steuert das Signal den ADC total aus? Wenn nein warum nicht? Kann man
> das Signal entsprechend verstärken.

Ach ne... Ok besser formuliert: Das general purpose Signal liegt nach 
bester Elektrotechnikpraxis am pin an. AA filter ist auch vorhanden.

Low impedance source schrieb:
> Wie sieht das Signal im Spektralbereich aus?

DC-100kHz ist die Bandbreite von intresse.

Low impedance source schrieb:
> Interessiert nur die Amplitude oder auch die Phase.
> Gibt's nen trigger der das sampling startet.

Einfache "langsame" Signale mit allem mögliche was in diesem 
frequenzbereich interessieren kann. Bitte jetzt nicht ein bsp. suchen 
wos knapp wird wie phase von 100kHz signal lässt sich nicht präzise 
feststellen  bei zu grossem oversampling etc. Sonnst halt spez ändern 
auf einige dutzend kHz Bandbreite.

Low impedance source schrieb:
> Wenn die Quell-Impedanz klein genug ist bring länger samplen keinen
> Vorteil.

Das ist eben die Frage. Also Pin-ADC scheint weniger reibuzngslos zu 
sein als man evtl. erwartet. Daher auch aufs package bezogenen 
empfohlenen max ADC frequenzen.

Andererseits hast du richtig bemerkt:

Low impedance source schrieb:
> Hier wird klar averaging empfohlen das sehe ich auch so wenn Strom egal
> ist schneller samplen.

Die frage ist nun welche Einstellung bringt den höchsten ENOB.

Der STM wird am Netz betrieben als Stromverbrauch egal

von Low impedance source (Gast)


Lesenswert?

Die schaltung ist differentiel und der adc ist im direct sampling mode?
Als reference nimmst du die interne bandgap Referenz?

Hier gibt's ne Tabelle mit der maximalen samplingfreq je packege und 
resolution.
https://www.st.com/resource/en/application_note/an5354-getting-started-with-the-stm32h7-series-mcu-16bit-adc-stmicroelectronics.pdf

Quelle des Übels scheint ja der Strom des Sar adc an VREF zu sein.
Deshalb würde ich die samplingzeit entsprechend der Tabelle wählen.
Du wirst trozdem noch 1 bis 2 mega samples/s schaffen. Die würde ich 
dann einfach automatisch averagen lassen z. B. 8 samples zusammen.

Hast du das rauschen deines eingangs mal gemessen? Was macht die CPU 
während der Messungen? Powerdown?

Hast du ne AC oder DC Referenz die gut genug ist um den ADC zu testen?

von Simon D. (jamen)


Lesenswert?

Low impedance source schrieb:

> Hast du das rauschen deines eingangs mal gemessen? Was macht die CPU
> während der Messungen? Powerdown?
>
> Hast du ne AC oder DC Referenz die gut genug ist um den ADC zu testen?

Das empfehle ich auch. Meine Erfahrung ist, dass auch bei guten ADCs 
eigene Messungen deutlich aussagekräftiger sind als die Angaben im 
Datenblatt. Einfach mit einer rauscharmen Quelle, das kann im 
einfachsten Fall ein RC-Tiefpassfilter mit einem dicken Elko sein das 
aus einem Labornetzgerät gespeist wird, den ADC bei verschiedenen 
Gleichspannungen messen lassen, die Daten an den PC übertragen und dann 
mal in Matlab, Octave, Python, etc. vernünftig auswerten. Aus dem 
resultierenden Amplitudendichtspektrum kann man dann schon sehr gute 
Aussagen darüber treffen an welchen Stellen der Messkette noch 
Vierbesserungspotenzial ist.

Grundsätzliche Sachen wurden oben ja schon genannt: erst starker 
Treiber, dann gutes AA-Filter (wenn Kerkos verwendet werden, dann nur 
C0G) mit möglichst knapper Grenzfrequenz, Filterung (das 
Mittelwertfilter in Hardware ist die schlechteste Option aber dafür 
unglaublich billig).

LG Simon

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.