Forum: Mikrocontroller und Digitale Elektronik STM32WB5MMG -* ADC wackelt um 10 digits


von Philipp L. (viech)


Angehängte Dateien:

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);

: Bearbeitet durch User
von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Deutlich mehr Messungen machen und mitteln.

von Wolf17 (wolf17)


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.

: Bearbeitet durch User
von Kevin M. (arduinolover)


Lesenswert?

Auf was steht denn die "Sampling Time" unter Rank bei den Channels. Das 
ist die Zeit für das Sample and Hold. Wenn die zu niedrig ist, tritt 
solches Verhalten gerne mal auf, vor allem bei hochohmigen Quellen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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.

von Philipp L. (viech)


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?

von Jens G. (jensig)


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) ...

von Philipp L. (viech)


Angehängte Dateien:

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.

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


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.

von Wolf17 (wolf17)


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.

: Bearbeitet durch User
von Philipp L. (viech)


Lesenswert?

Wolf17 schrieb:
> Wird es besser wenn Ref+ nicht mit Vdd, sondern mit dem Ausgang
> verbunden wird,

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

Ich dachte das es evtl. ein Softwareproblem ist.
Mitteln geht natürlich immer...

von Wolf17 (wolf17)


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

von Harald A. (embedded)


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.

von Roland E. (roland0815)


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...

: Bearbeitet durch User
von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


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.

von Philipp L. (viech)


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.

von Harald A. (embedded)


Lesenswert?

Und dann die Calibration wieder rausgenommen? Warum?

Wenn es um 10 digits wackelt würde ich vlt. auf Dauer auch mitteln, 
vorher aber mit allen Mitteln versuchen, der Ursache auf den Grund zu 
gehen. Da machst Du aus Deinem 12bit Wandler ein 9..10bit Wandler.

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.