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