Hallo, ich nutze den ADC des STM32 um ein Signal mit einigen kHz
auszuwerten. Dabei habe ich ein merkwürdiges Verhalten im Testaufbau
festgestellt.
Versuchsaufbau: Signalgenerator, gibt Sinus aus mit ca. 30kHz. Amplitude
ca. 1V mit 1.6V Offset. Der Signalgeneratorausgang ist über 10 kOhm
direkt mit dem ADC verbunden.
Firmware: Die Firmware führt alle paar Sekunden einen Burst von einigen
hundert Acquisitions durch. (Abtasttheorem weit übererfüllt, mehr als
1MS/s) Steuerung per Timer + DMA. Die Daten werden danach integriert
bzw. die Fläche unter der Kurve wird berechnet. => Ein einzelner
Messwert ist das Ergebnis.
Das funktioniert soweit sehr gut. Allerdings sehe ich im Messwert über
die Zeit eine Art Sägezahn mit ca. 1% Amplitude. D.h. der Wert der
Integrals wächst von Messung zu Messung an, um dann plötzlich wieder
abzufallen. Der ADC sieht also mehr Amplitude. Das passiert im Zeitraum
von einigen dutzend Sekunden, ist also ein langsamer Effekt. Unabhängig
von der Messung selbst (tritt also nicht alle N Messungen auf, sondern
alle M Sekunden).
Nehme ich den 10 kOhm Widerstand raus, so tritt dieser Effekt nicht auf.
Auch bei einem anderen Signalgenerator sehe ich das gleiche Verhalten.
Dieser Effekt kommt also definitiv vom zu großen Quellwiderstand. Laut
Datenblatt sind auch nur ein paar Ohm erlaubt bei meiner
Messgeschwindigkeit. Dahingehend ist der STM32 auch funktional in
Ordnung.
Halte ich den Lötkolben an den Chip, dann wird der Sägezahn schneller.
Obwohl nun alles wie geplant funktioniert, interessiert mich trotzdem:
Was ist da los? Ist da intern ein Kompensationsmechanismus drin, der
irgendwelche Kapazitäten(?) im ADC umschaltet? Würde gerne verstehen,
was da intern vor sich geht, falls da jemand mehr Erfahrung auf diesem
Gebiet hat.
Moin,
da musst du schon etwas mehr Fleisch am Knochen liefern:
- Welcher STM32? (SAR oder Sigma Delta ADC?)
- Siehst du den Sägezahn auf den gemessenen Rohwerten oder nach deiner
Integration?
- Kannst du die Frequenz des Sägezahns garantieren? (also kein Artefakt
durch Unterabtastung eines hochfreq. Störsignals)
Beim simplen Aufaddieren über ein Rechteckfenster kannst du dir
Artefakte einhandeln, aber danach sieht's a priori nicht aus, wenn's bei
Niederhohmigkeit verschwindet. Prinzipiell werden bei SAR natürlich
interne Kondensatoren umgeladen, wenn du da hochohmig reingehst, kannst
du alles Mögliche sehen (kippende Adresszähler machen auch schön
korreliertes "Rauschen"), oder irgend ein Quarz streut dir was rein.
Benjamin S. schrieb:> Hast du die Referenzspannung vom ADC und die Spannung von STM32 sauber> geglättet mit einem Kondensator?
Ja, die Referenzsspannung bzw. die analoge Versorgung ist stark
geglättet. Low-Noise LDO + einige Kerkos direkt am IC. Durchgehende
Ground-Plane drunter. Sollte also deutlich stabiler als 1% sein.
Strubi schrieb:> - Welcher STM32? (SAR oder Sigma Delta ADC?)
STM32F303, also SAR ADC
> - Siehst du den Sägezahn auf den gemessenen Rohwerten oder nach deiner> Integration?
Ich sehe ihn nach der Integration. Softwareprobleme kann ich
ausschließen, die müssten auch bestehen wenn ich die Quellimpedanz
ändere.
> - Kannst du die Frequenz des Sägezahns garantieren? (also kein Artefakt> durch Unterabtastung eines hochfreq. Störsignals)
Nein. Das ist ziemlich schlecht vorherzusehen, hängt primär wohl von der
Umgebungstemperatur ab.
> Beim simplen Aufaddieren über ein Rechteckfenster kannst du dir> Artefakte einhandeln, aber danach sieht's a priori nicht aus, wenn's bei> Niederhohmigkeit verschwindet.
Ja, zusätzlich: N Perioden des Signals passen exakt in die Fensterlänge.
Dadurch dürfte es zu keinen Artefakten kommen.
> Prinzipiell werden bei SAR natürlich> interne Kondensatoren umgeladen, wenn du da hochohmig reingehst, kannst> du alles Mögliche sehen (kippende Adresszähler machen auch schön> korreliertes "Rauschen"), oder irgend ein Quarz streut dir was rein.
Hmm... Wäre denkbar, ich suche die "Schuld" aber eher beim ADC, da es ja
auch temperaturabhängig ist. Aber genau dort kenne ich mich kaum aus:
Macht so ein ADC intern self-calibration der Eingangsstufe oder so
etwas? (ohne dass es durch einen Befehl ausgelöst wird?)
Über die Ströme und Spannungen, die der ADC am Eingang verursacht,
kannst Du gerne spekulieren, ist aber sinnlos.
Willst Du sie wissen, messe mit Oszi.
Willst Du sie verstehen, besorge Dir den Aufbau.
Willst Du nur Signale messen, Sorge für entsprechende niederinnige
Aufbereitung.
stbastler schrieb:>> - Kannst du die Frequenz des Sägezahns garantieren? (also kein Artefakt>> durch Unterabtastung eines hochfreq. Störsignals)> Nein. Das ist ziemlich schlecht vorherzusehen, hängt primär wohl von der> Umgebungstemperatur ab.
Dann taste doch mal mit einer anderen Frequenz ab. Drei gut gewählte
Frequenzen reichen...
> Ja, zusätzlich: N Perioden des Signals passen exakt in die Fensterlänge.> Dadurch dürfte es zu keinen Artefakten kommen.
Exakt gibt's eigentlich nicht, irgendwann driftet was weg.
> Hmm... Wäre denkbar, ich suche die "Schuld" aber eher beim ADC, da es ja> auch temperaturabhängig ist. Aber genau dort kenne ich mich kaum aus:> Macht so ein ADC intern self-calibration der Eingangsstufe oder so> etwas? (ohne dass es durch einen Befehl ausgelöst wird?)
Nee, das machst du typischerweise nur einmal. Kenne die Tricks bei STM
jedoch nicht im Detail.
Wenn du wirklich die Detektivarbeit zu inneren Strukturen aufbringen
willst, bist du ganz schön beschäftigt...
Achim S. schrieb:> Über die Ströme und Spannungen, die der ADC am Eingang verursacht,> kannst Du gerne spekulieren, ist aber sinnlos.>
Sinnlos keineswegs, das ist oft tägliche Arbeit und die Übung schadet
definitiv nicht.
> Willst Du sie wissen, messe mit Oszi.
Womit man auch wieder die Impedanz verändert und der Log-Buffer begrenzt
ist, geschweige denn die Möglichkeit zur genauen Analyse der Artefakte
auf Bit-Level existiert.