STM32WB5MMG -* ADC wackelt um 10 digits

OP #7402856
Lesenswert?

Hallo liebe Community,

es ist mein erstes Projekt mit dem STM32(WB5MMG) (sonst viel Atmega`s). Ich brauchte zwar nur 6x grobe Temperaturmessungen und habe daher einen ntc10k und einen 10k als Spannungsteiler an den adc geschlossen. Die Referenz ist absolut glatt bei 3,3V (zumindest laut Fluke Multimeter). Die ausgelesenen Werte schwanken um ca.10 digits, das bin ich vom Atmega bei gleichem Messprinzip nicht gewohnt. Ist dies ein typisches Bild oder vermutet ihr eher Einstellungsprobleme mit dem adc ? Ich habe den ADC im Cubeide eigentlich nur aktiviert (single conversion), sonst keine Änderungen vorgenommen.

Was kann ich euch sonst noch liefern ?

Nur ein schneller Testcode:

1
sConfig.Channel = ADC_CHANNEL_4;
2
HAL_ADC_Start(&hadc1);
3
HAL_ADC_PollForConversion(&hadc1, 10);
4
adctemp = HAL_ADC_GetValue(&hadc1);
5
sprintf (Testtext, "%i", adctemp);
6
ssd1306_SetCursor(0,9);
7
retVal = ssd1306_WriteString("NTC1 = ", Font_7x10, White);
8
retVal = ssd1306_WriteString(Testtext, Font_7x10, White);
Angehängte Dateien:
#7402883
Lesenswert?

Philipp L. schrieb:

Die Referenz ist absolut glatt bei 3,3V (zumindest laut Fluke Multimeter).

Keine HF Peaks von einem Schaltwandler drauf? Mit Oszi und AC Kopplung ansehen, oder Fluke AC Messung, falls das breitbandig genug ist. 100nF Folie am REF Input und am Messeingang probieren, ob es besser wird. Liegt Ref- auf sauberer Masse?

NOTE: ADC accuracy vs. negative injection current: injecting a negative current on any analog input pins should be avoided as this significantly reduces the accuracy of the conversion being performed on another analog input.

(Firma: matzetronics) #7402946
Lesenswert?

  1. Für mehrere Kanäle bietet sich der DMA Modus an, das ist praktisch Fire & Forget
  2. Für Temperaturmessungen muss man den ADC nicht mit Endgeschwindigkeit (sprich ADC Clock) betreiben. Herabsetzen des Taktes ist entspannt möglich, vor allem im DMA Modus, da man dann nicht auf jedes Ergebnis warten muss.
OP #7402989
Lesenswert?

Uwe B. schrieb:

Deutlich mehr Messungen machen und mitteln.

Ja, wenn alle anderen Parameter nicht weiter verbessert werden können wird gemittelt. Ich wollte jedoch erst verstehen woran es liegt.

Wolf17 schrieb:

Keine HF Peaks von einem Schaltwandler drauf? Mit Oszi und AC Kopplung ansehen, oder Fluke AC Messung, falls das breitbandig genug ist.

Oszi muss ich am Dienstag aus der Firma mitnehmen, habe kein zuhause. Es ist jedoch eine Batterieanwendung, in der der uC nur kurz Werte prüft und sonst schlafen soll, weshalb ein Linearwandler drauf ist. Also aktuell keine PWM, kein Schaltregler und gespeist aus Batterie. an allen Versorgungen liegen 100nF Kerkos. Ref- ist auf gutem Platinen-GND

Kevin M. schrieb:

Auf was steht denn die "Sampling Time" unter Rank bei den Channels.

Stand auf 2.5 Cycles, aber wenn ich auf 640.5 ändere ist das Verhalten identisch

Matthias S. schrieb:

  1. Für mehrere Kanäle bietet sich der DMA Modus an, das ist praktisch Fire & Forget

Guter Hinweis, aber bezüglich der Genauigkeit macht das kein Unterschied, richtig ?

Hardware:

Ich habe jedoch evtl. folgenden HW-Fehler begangen: Da ich nur grobe Messungen brauche (Übertemp-Schutz), habe ich dem ADC keine separate Präz-Referenzspannung gegönnt, sondern mit auf die uC Versorgung gelegt. Weiterhin kommt die Versorgungsspannung der NTC`s aus einem Ausgang des uC. Es soll halt alles möglichst wenig Strom verbrauchen, weshalb ich alles abschalte und nur zeitweise prüfe.

Ich hätte trotzdem nicht mit dieser Ungenauigkeit gerechnet, aber evtl. geht es durch den HW-Aufbau nicht anders.

Wie ist eure Meinung dazu?

#7403015
Lesenswert?

Philipp L. schrieb:

Weiterhin kommt die Versorgungsspannung der NTC`s aus einem Ausgang des uC. Es soll halt alles möglichst wenig Strom verbrauchen, weshalb ich alles abschalte und nur zeitweise prüfe.

Wieviel Leitung ist denn zw. NTC und µC? Mache doch mal einen C an den ADC-Eingang direkt am ADC. Kann ruhig weit in den µF-Bereich gehen (zumindest für'n Test) ...

OP #7403051
Lesenswert?

Jens G. schrieb:

in den µF-Bereich gehen (zumindest für'n Test) ...

Ich habe 100nf direkt am Eingang. Grad zum Test 10uF dazu, keine Veränderung.

Die NTC`s sind zwischen 5cm und 30cm entfernt, jedoch gut geschützt umgeben von Akkuzellen im Zwischenraum der Zellen. Ich habe quasi eine Sonde mit NTC´s welche in einem der Zwischenräume auf ganzer Länge steckt.

Angehängte Dateien:
(Firma: matzetronics) #7403053
Lesenswert?

Philipp L. schrieb:

  1. Für mehrere Kanäle bietet sich der DMA Modus an, das ist praktisch Fire & Forget

Guter Hinweis, aber bezüglich der Genauigkeit macht das kein Unterschied, richtig ?

Insofern doch, als das du die Samplingrate (ADC Clock) deutlich reduzieren kannst, ohne auf ein ADC Ergebnis warten zu müssen. Du holst das Ergebnis ab, wenn du möchtest und nicht, wenn der ADC dann soweit wäre.

#7403160
Lesenswert?

Philipp L. schrieb:

Da ich nur grobe Messungen brauche (Übertemp-Schutz), habe ich dem ADC keine separate Präz-Referenzspannung gegönnt, sondern mit auf die uC Versorgung gelegt. Weiterhin kommt die Versorgungsspannung der NTC`s aus einem Ausgang des uC.

Wird es besser wenn Ref+ nicht mit Vdd, sondern mit dem Ausgang verbunden wird, der die NTC Teiler versorgt? Auch da sollten 10-100nF Folie eingesetzt werden. Wenn das der Ausgang nicht verträgt notfalls mit Vorwiderstand und 10 Tau Delay. Da nur das Verhältnis gemessen wird, ist die Absolutspannung egal solange es während der A/D Messung konstant ist.

#7403219
Lesenswert?

Philipp L. schrieb:

Die Platine (4-Layer) ist fertig, da kann ich nix ändern. Bei einer neuen Version würde ich eine separate Ref-Quelle einbauen.

Das hilft gar nichts, wenn die NTC Teilerversorgung über den Ausgang nicht stabil ist. Bei ratiometrischen Messungen müssen beide Spannungen gleich, aber nur kurzzeitstabil sein. Die absolute Höhe ist zweitrangig. Vor einer Layoutänderung einfach ausprobieren. https://www.elektroniknet.de/messen-testen/sensorik/ratiometrische-temperaturmessung.177413/seite-2.html

#7403243
Lesenswert?

STM32 und stark wackelnder ADC, da kommt bei mir sofort das Stichwort „Calibration“ hoch. Es gibt doch bei jedem STM32 mit 12bit diese ADC Calibration Prozedur, der man beim ersten Kontakt nur wenig Beachtung schenkt. Bei Calibration denkt man an bessere Genauigkeit (die man oft nicht braucht), allerdings löst die Prozedur genau das Problem mit dem Wackeln.

#7403343
Lesenswert?

Jens G. schrieb:

Philipp L. schrieb:

Weiterhin kommt die Versorgungsspannung der NTC`s aus einem Ausgang des uC. Es soll halt alles möglichst wenig Strom verbrauchen, weshalb ich alles abschalte und nur zeitweise prüfe.

Wieviel Leitung ist denn zw. NTC und µC? Mache doch mal einen C an den ADC-Eingang direkt am ADC. Kann ruhig weit in den µF-Bereich gehen (zumindest für'n Test) ...

Bei solchen Experimenten kommen mir sofort die "setteling time" und vor allem "input impedance" in den Sinn. Die ist bei den S&H-ADC erschreckend gering. Mit dem üblichen 10k NTC am Spannungsteiler wird es schon nur schätzen...

Also entweder langsamer im Batch 10..20 Werte holen und mitteln, oder einen µP-OPV davor klemmen, der genug Bums in den ADC drückt, wenn Einzelmessungen gemacht werden.

Bei dem SigmaDelta ADC vom STM32 haben wir vor Jahren mal ganz böse Erfahrungen gemacht, dass sich zB das Oversampling nicht abschalten ließ. Eine Messung eines per Relais erzeigten Signalsprungs sah in den ADC-Werten aus wie eine Forierrekonstruktion des Signals. Inklusive voreilendem Ausholen des Signals vor dem Spung.

Von daher würde ich auch bei den S&H-Brüdern erst mal mit einer Referenzquelle messen und einstelln...

(Firma: TU Darmstadt) #7403352
Lesenswert?

Der SDADC des STM32F37x war ein Witz:

Gain error: All gains, differential mode, single ended mode -2.4 -2.7 -3.1

negative gain error = data result are greater than ideal

Damit kann man nicht mal mit VREF eine Kalibration machen, da dann das Ergebnis ueberlaufen wuerde.

OP #7403650
Lesenswert?

Wolf17 schrieb:

Das hilft gar nichts, wenn die NTC Teilerversorgung über den Ausgang nicht stabil ist.

Ja, schon klar. wenn dann zusätzlich zur separaten Vref auch die NTC über diese versorgen und dann über einen FET abschalten.

Harald A. schrieb:

Bei Calibration denkt man an bessere Genauigkeit (die man oft nicht braucht), allerdings löst die Prozedur genau das Problem mit dem Wackeln.

Diese Auto-Calibration hatte ich eingebaut, bringt für das wackeln aber leider nix.

Roland E. schrieb:

Also entweder langsamer im Batch 10..20 Werte holen und mitteln, oder einen µP-OPV davor klemmen,

Ja, es wird wohl auf mitteln hinauslaufen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren