Forum: Mikrocontroller und Digitale Elektronik STM32 ADC genauigkeits probleme


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich arbeite mit dem STM32F303.

Mein 12bit ADC welchen ich in JTag proVision programmiert (Python) habe, 
ist sehr ungenau.
z.B. wenn ich eine Spannung von 2.70V habe misst er 2.68V oder wenn ich 
eine Spannugn von 0.303V habe misst er 0.247V. Ich habe Toleranzen von 
20-70mV.
Wie kann ich die Genauigkeit per software präziser machen?

Mit der Sampling-Time habe ich auch schon gespielt, jedoch ohne erfolg.

FYI: Ich arbeite das erste mal mit einem ADC

Danke im Voraus:)

: Bearbeitet durch User
von Ro n. (rwth2212)


Lesenswert?

Hi,

als erstes solltest du mal was zu deiner Eingangsbeschaltung sagen und 
zur Beschaffenheit deiner Spannungsquelle.
Weiterhin wäre interessant woher du deinen Referenzwert hast, also mit 
welchem Messgerät ermittelt?

: Bearbeitet durch User
von Sebastian R. (sebastian_r569)


Lesenswert?

Jonah schrieb:
> ist sehr ungenau.

Jonah schrieb:
> Ich habe toleranzen von
> 20-70mV.

Das ist nicht sehr ungenau, sondern innerhalb der erwartbaren 
Toleranzen.

Der wohl einfachste und üblichste Weg, das zu korrigieren, ist ein 
einfacher Zweipunkt-Abgleich.

Also 0.3V anlegen und den gemessenen AD-Wert als Punkt speichern. Dann 
2.7V anlegen und den gemessenen AD-Wert als zweiten Punkt speichern. Die 
rechnerischen AD-Werte stimmen eigentlich nie mit der Realität überein.

Dann hast du die exakten Werte für 0.3 und 2.7V und alles dazwischen und 
darüber hinaus lässt sich meist ausreichend genau inter- bzw. 
extrapolieren.

Das ganze muss allerdings für jeden Controller aufgrund der erwartbaren 
Bauteilstreuung individuell gemacht werden.

Wichtig ist auch eine stabile, gefilterte Referenzspannung für den 
AD-Wandler

von Ro n. (rwth2212)


Lesenswert?

Was auch wichtig ist und was ich vergaß zu fragen:

woher bekommt dein ADC seine Referenzspannung und wie grosst ist diese?

von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Die Referenzwerte habe ich zeitgleich mit einem Multimerter (Fluke 87)
gemessen.

meine Referenzspannung ist 3.3V welche ich auf meinem PCB aus 26V
generiere.
Vref = 3.13-3.35V / typ = 3.24V.


Irgenwie kann ich als neuer User nur 2 Beiträge alle 30min schreiben, 
darum dauern meine Antworten etwas länger.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jonah schrieb:
> meine Referenzspannung ist 3.3V welche ich auf meinem PCB aus 26V
> generiere.

Ist aber direkt mit Vdda verbunden oder? Per Spannungsregler erzeugt?

Du verrechnest den ADC-Wert entsprechend in der Software um ihn auf die 
Referenz zu skalieren?

Hast du auch mal die interne Referenz gemessen, und die Messwerte 
dagegen skaliert? Führst du die Selbst-Kalibrationsprozedur des ADCs 
durch?

Jonah schrieb:
> Mit der Sampling-Time habe ich auch schon gespielt, jedoch ohne erfolg.

Schau dir im Datasheet die Tabelle "Maximum ADC RAIN" an. Je höher der 
Innenwiderstand/Impedanz des Signals, desto langsamer musst du samplen, 
und die entsprechenden Einstellungen kannst du dieser Tabelle ablesen.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jonah schrieb:
> Vref = 3.13-3.35V / typ = 3.24V.
> Die Referenzwerte habe ich zeitgleich mit einem Multimerter (Fluke 87)
> gemessen.
Und dabei welchen Wert erhalten?

> wenn ich eine Spannung von 2.70V habe
Wo hast du diese Spannung? Direkt am µC-Pin?

> Ich habe Toleranzen von 20-70mV.
Sind das staische Abweichungen oder zappelt der Wert?

> Wie kann ich die Genauigkeit per software präziser machen?
Mach mal einen Schritt zurück: wie sieht denn die Hardware aus 
(Beschaltung und Layout)? Denn die beste Schaltung kann durch ein 
lausiges Layout schlecht werden.

> Wie kann ich die Genauigkeit per software präziser machen?
Welche "Genauigkeit" brauchst du denn? Was ist die Anwendung? Wie gut 
und stabil sind die Quellen der Analogwerte?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Sebastian R. schrieb:
> Das ist nicht sehr ungenau, sondern innerhalb der erwartbaren
> Toleranzen.

Naja, die ADCs der STM32 sind schon ziemlich gut (anders als z.B. beim 
ESP32), damit sollte man schon von Haus aus ohne manuelle Kalibrierung 
bessere Ergebniss erzielen können. Aber man muss ihn eben richtig 
bedienen und die Werte richtig interpretieren.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Mit gutem Layout, guter Referenz und ausreichen Sampling Time habe ich 
gute Erfahrungen mit den ADCs von STM32

: Bearbeitet durch User
von Jonah (jonah)


Lesenswert?

Habe alle Rückmeldungen mal gelesen und probiere auf alle einzugehen.


Sebastian R.
Zweipunkt-Abgleich
=> Deine Idee werde ich mal anschauen



Niklas G
Ist aber direkt mit Vdda verbunden oder? Per Spannungsregler erzeugt?
=> Ja und ja

Die Interne referenz ist in der zuerwartenen Toleranz und ändert sich 
auch nicht fest. => 3.26V DC / 1.8mV AC

Meine Berechnung
=> adcValue = round((ReadMemory(0x50000540) * 3.3)/4096,3)

Meine Sampling-Time habe ich nun wieder auf 7.5 clock cycles welche mir 
empfohlen wurde.



Lothar M.
Und dabei welchen Wert erhalten?
=> 0.303V mit dem Mulimeter und 0.247V mit dem ADC

Wo hast du diese Spannung? Direkt am µC-Pin?
=> ja

Sind das staische Abweichungen oder zappelt der Wert?
=> sind eig immer die selben abweichungen und verändern sich nicht 
gross.
bei dem pin mit 0.303V sind es immer so 55mV und bei andern mit 2.7V 
immer so 20mV.


Mach mal einen Schritt zurück: wie sieht denn die Hardware aus
(Beschaltung und Layout)? Denn die beste Schaltung kann durch ein
lausiges Layout schlecht werden.
=> Da das Layout von Fachleuten in meiner Firma gemacht wurde und über 
viele Versionen verbessert wurde sollte dies eig nicht das Problem sein.
Bei meiner 2ten Antwort sollte jedoch noch ein screenshot vom design der 
Speisung des uC angehängt sein.


Welche "Genauigkeit" brauchst du denn? Was ist die Anwendung? Wie gut
und stabil sind die Quellen der Analogwerte?
=> Grundsätzlich teste ich mit der Software alle Eingäge des uC und 
vergleiche sie mit den soll Werten welche ich erwarte. Dafür habe ich 
eine gewisse toleranz in welcher der wert liegen muss. Jedoch zb bei der 
abweichung von 55mV kann ich die toleranzen nicht mehr einhalten und der 
test failt obwohl die echte Spannung stimmen würde.

Die Analogwerte sind stabil.


Danke für alle Rückmeldungen

: Bearbeitet durch User
Beitrag #7739031 wurde von einem Moderator gelöscht.
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jonah schrieb:
> Meine Sampling-Time habe ich nun wieder auf 7.5 clock cycles welche mir
> empfohlen wurde.

Empfohlen von wem? Was für eine Impedanz hat deine Quelle, wo kommt die 
Spannung her? Wenn da z.B. ein Spannungsteiler ist musst du die Sampling 
Time erhöhen.

Jonah schrieb:
> Niklas G
> Ist aber direkt mit Vdda verbunden oder? Per Spannungsregler erzeugt?
> => Ja und ja

Wenn deine Versorgungsspannung schwankt sind dann natürlich auch die 
Messwerte falsch (sind ja relativ zu Vref). Aber das Multimeter misst 
natürlich absolut. Es kann sehr helfen, die Werte mit der internen 
Referenz zu verrechnen (diese immer mitmessen und auf den ADC-Wert 
aufmultiplizieren).

: Bearbeitet durch User
von Jonah (jonah)


Lesenswert?

Niklas G. schrieb

> Empfohlen von wem?
Sorry habe mich falsch ausgedrückt. habe es von einem Code bsp. von STM.

> Was für eine Impedanz hat deine Quelle, wo kommt die
> Spannung her?
> Wenn da z.B. ein Spannungsteiler ist musst du die Sampling
> Time erhöhen.

Ja die spannungen kommen alle von einem Spannungteiler. Meist mit 100k 
und 12k.

Jedoch habe ich das mit der Sampling time schon probiert. Aber werde es 
gleich nochmals versuchen.

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jonah schrieb:
> habe es von einem Code bsp. von STM.

Na der kennt ja nicht deine Gegebenheiten...

Jonah schrieb:
> Ja die spannungen kommen alle von einem Spannungteiler. Meist mit 100k
> und 12k

Ziemlich groß. Da ist so eine kurze Sampling Zeit vermutlich zu kurz.

Tatsächlich ist es laut der Tabelle im Datasheet gar nicht möglich, bei 
100k Eingangsimpedanz 12bit Genauigkeit zu erzielen, nur 10bit bei 
Sampling time 8354ns. Am Besten wohl einen Impedanzwandler dazwischen 
schalten...

: Bearbeitet durch User
von Jonah (jonah)


Lesenswert?

Habe es nun mit 61.5 clock cycles versucht jedoch immernoch dieselben 
resultate.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jonah schrieb:
> Habe es nun mit 61.5 clock cycles versucht jedoch immernoch
> dieselben resultate.

Das bestätigt die Angabe aus dem Datasheet, dass es so nicht geht

Du könntest den im STM32 integrierten OPAMP nehmen und als "Follower" 
(Impedanzwandler) konfigurieren. Geht natürlich nur mit wenigen Kanälen.

: Bearbeitet durch User
von Jens G. (jensig)


Lesenswert?

Niklas G. schrieb:
> Tatsächlich ist es laut der Tabelle im Datasheet gar nicht möglich, bei
> 100k Eingangsimpedanz

Er hat aber eher 10...11kOhm ...

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jens G. schrieb:
> Er hat aber eher 10...11kOhm ...

Hmm?

Jonah schrieb:
> Ja die spannungen kommen alle von einem Spannungteiler. Meist mit 100k
> und 12k.

Wenn der "obere" Widerstand 100k hat, muss der Eingangsstrom durch 100k 
durch um den Sample-Capacitor zu laden. Und das dauert halt.

von Jonah (jonah)


Lesenswert?

Niklas G. schrieb:

> Du könntest den im STM32 integrierten OPAMP nehmen und als "Follower"
> (Impedanzwandler) konfigurieren. Geht natürlich nur mit wenigen Kanälen.

Für meine Anwendung benötige ich alle Kanäle.

von Ro n. (rwth2212)


Lesenswert?

100k in Reihe zum ADC-Eingang und 12k gegen GND? Ohne weitere Maßnahmen 
ist das vermutl. viel zu hochohmig für den ADC Eingang.

schau dir mal Datenblatt Seite 108 an.

wenn du recht langsame Signale erfasst:

Setz mal testweise einen 1nF Kondensator an einen ADC Eingang gegen GND. 
Wenn es dann deutlich besser wird dann weisst du das deine 
Eingangsbeschaltung anders dimensioniert werden muss.

: Bearbeitet durch User
von Monk (roehrmond)


Lesenswert?

Niklas G. schrieb:
> Wenn der "obere" Widerstand 100k hat, muss der Eingangsstrom durch 100k
> durch um den Sample-Capacitor zu laden. Und das dauert halt.

Das ist nicht richtig. Die Impedanz des Spannungsteilers entspricht der 
Parallelschaltung der beiden Widerstände.

Man kann es so betrachten: Da die Spannung am Eingang 10x höher ist, 
lädt der Sample-Capacitor auch 10x schneller.

von Jens G. (jensig)


Lesenswert?

Niklas G. schrieb:
> Wenn der "obere" Widerstand 100k hat, muss der Eingangsstrom durch 100k
> durch um den Sample-Capacitor zu laden. Und das dauert halt.

Ein Spannungsteiler mit zwei R wirkt wie die Parallelschaltung dieser 
zwei R auf den C.

von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Dies ist die aktuelle Schaltung.
Schutzdioden habe ich weggelassen

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Monk schrieb:
> Man kann es so betrachten: Da die Spannung am Eingang 10x höher ist,
> lädt der Sample-Capacitor auch 10x schneller.

Guter Punkt.

Jonah schrieb:
> Habe es nun mit 61.5 clock cycles versucht

Wie hoch ist deine ADC-Clock, damit man die Sample-Time in ns berechnen 
kann?

Ist es ein fast oder slow channel?

von Ro n. (rwth2212)


Lesenswert?

Schaltungstechnische Platzierung und Typ der Schutzdioden wäre durchaus 
interessant und wichtig zu wissen da dir in einigen Fällen Leckströme 
durchaus beachtliche Fehler (und das zu allem Überfluss dann auch noch 
extrem temperaturabhängig) einbringen können.

: Bearbeitet durch User
von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Niklas G. schrieb:
> Wie hoch ist deine ADC-Clock, damit man die Sample-Time in ns berechnen
> kann?

> Ist es ein fast oder slow channel?

Muss es kurz anschauen.

Aber hier schonmal ein screenshot von meiner Clock config.

: Bearbeitet durch User
von Axel R. (axlr)


Lesenswert?

Ich habe mit den stm32 bislang nur wenig gemacht.
Muss man da den ADC nicht Kalibrieren, bevor da überhaupt was sinnvolles 
gemessen werden kann?

https://www.st.com/content/ccc/resource/technical/document/application_note/group0/3f/4c/a4/82/bd/63/4e/92/CD00211314/files/CD00211314.pdf/jcr:content/translations/en.CD00211314.pdf

von Bauform B. (bauformb)


Lesenswert?

Axel R. schrieb:
> Muss man da den ADC nicht Kalibrieren, bevor da überhaupt was sinnvolles
> gemessen werden kann?

Ja. Siehe Reference Manual RM0316, "15.3.8 Calibration (ADCAL, ADCALDIF, 
ADCx_CALFACT)".

Sehr lesenswert ist auch Kapitel "15.3.32 Monitoring the internal 
voltage reference".

Der Name ist evt. irreführend, man kann die ADC-Referenz nicht zwischen 
interner und externer (VREF- oder VDDA-Pin) umschalten. Die interne ist 
einfach eine 1.23V Spannungsquelle, die man auf Kanal 18 messen kann. 
Die wird bei der Chip-Produktion kalibriert und das Ergebnis ins Flash 
geschrieben (VREFINT_CAL und VREFINT_DATA). Mit etwas Rechnerei bekommt 
man die maximale Genauigkeit. Jedenfalls bei Zimmertemperatur, 100ppm/K 
ist leider nicht so toll.

von Jonah (jonah)


Lesenswert?

Niklas G. schrieb
> Wie hoch ist deine ADC-Clock, damit man die Sample-Time in ns berechnen
> kann?
 ADC Clock = 64MHz

> Ist es ein fast oder slow channel?
Die 0.247V messe ich an PD10. Also slow channel.

von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Hab letztens noch eine Zusammenfassung von meinem Code geschrieben als 
übersicht.
Also so ist mein Code aufgebaut.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Auch wenn sie das "schönere Ergebnis" gibt und nicht der Grund für die 
pfundigen Abweichungen hier sind: die Zahl 4095 da drin ist falsch.

Es handelt sich um einen Zaunpfahlfehler:
- https://de.wikipedia.org/wiki/Zaunpfahlfehler

von Jonah (jonah)


Lesenswert?

Ich dachte 4096-1, da es bei 0 startet und nicht bei 1. Bit0 halt. oder 
sehe ich das falsch?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jonah schrieb:
> ADC Clock = 64MHz

Okay. Das heißt bei

Jonah schrieb:
> Habe es nun mit 61.5 clock cycles versucht

hast du eine Sample time von 961ns. Laut Datasheet sind bei slow 
channels dann maximal 6.8 kOhm Eingangswiderstand erlaubt.

Wenn das stimmt

Monk schrieb:
> Die Impedanz des Spannungsteilers entspricht der
> Parallelschaltung der beiden Widerstände.

hast du eine Eingangsimpedanz von 10.7 kOhm. Somit ist also deine 
Samplingzeit zu kurz.

Versuche es mit einer Samplingzeit von 181.5 Cycles.

Lothar M. schrieb:
> die Zahl 4095 da drin ist falsch.

Laut Datasheet "Converting a supply-relative ADC measurement to an 
absolute voltage value" ist 4095 korrekt in der Formel

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jonah schrieb:
> Ich dachte
Zum Glück noch selber gedacht und nicht nur irgendwo abgeschrieben... 
;-)

> oder sehe ich das falsch?
So ist es. Der ADC wandelt den Analogwert mit 4096 Schritten, denn auch 
0 ist ein gültiges Wandlungsergebnis: 0,1,2, ..., 4095 = 4096

Niklas G. schrieb:
> Laut Datasheet "Converting a supply-relative ADC measurement to an
> absolute voltage value" ist 4095 korrekt in der Formel
Ja, ich habe auch schon andere Fehler in Datenblättern gefunden. Man 
glaubt nicht, was Praktikanten da so alles reinschreiben. Das war auch 
vor 12 Jahren im Beitrag "Re: 1023 oder 1024" 
schon so.

Dort im Beitrag "Re: ADC-Spannung korrekt berechnen?" wurde das 
Thema dann auch wieder aufgegriffen.

Ich sags mal so: wenn ich ein Programm bewerten muss und sehe da 1023, 
2047 oder 4095 (eben 2^n-1) beim ADC, dann denke ich mir "Obacht, da 
sind sicher auch noch andere Fehler drin!"

Niklas G. schrieb:
> Monk schrieb:
>> Die Impedanz des Spannungsteilers entspricht der
>> Parallelschaltung der beiden Widerstände.
> hast du eine Eingangsimpedanz von 10.7 kOhm. Somit ist also deine
> Samplingzeit zu kurz.
> Versuche es mit einer Samplingzeit von 181.5 Cycles.
Mit dem Kondensator ist die Impedanz aber unheimlich niedrig.

Das Thema haben wir mal mit dem AVR im 
Beitrag "Re: Attiny85 ADC Eingangswiderstand - wie hoch" 
durchgekaspert. Es dürfte so ähnlich auch bei anderen ADC mit 
Samplingkondensator und Ladungsteiler zutreffen.

: Bearbeitet durch Moderator
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Lothar M. schrieb:
> Ja, ich habe auch schon andere Fehler in Datenblättern gefunden.

Soweit so normal... Woanders steht dort 1LSB IDEAL = VREF+ / 4096...

Lothar M. schrieb:
> dann denke ich mir "Obacht, da
> sind sicher auch noch andere Fehler drin!

Das ist eine Null-Aussage, Fehler sind sowieso überall drin, egal ob da 
4095 oder 4096 steht ;-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Niklas G. schrieb:
> Lothar M. schrieb:
>> dann denke ich mir "Obacht, da sind sicher auch noch andere Fehler drin!
> Fehler sind sowieso überall drin, egal ob da 4095 oder 4096 steht ;-)
Durchaus, aber mit unterschiedlicher Wahrscheinlichkeit... ;)

von Jonah (jonah)


Lesenswert?

Habs gerade mit 181.5 clock cycles versucht. Leider hab ich immernoch 
die Abweichung. Resultat mit 181.5 = 0.245V; Resultat mit 7.5 = 0.244V

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jonah schrieb:
> Leider hab ich immernoch
> die Abweichung. Resultat mit 181.5 = 0.245V; Resultat mit 7.5 = 0.244V

Mach mal eine kleine Versuchsreihe mit >=5 verschiedenen Spannungen über 
den ganzen Bereich und nenne die Rohwerte aus dem ADC-Register und die 
dazugehörige direkt am ADC-Pin per Multimeter gemessene Spannung. 
Verwende nicht jeweils den ersten ADC-Wert sondern lasse einige 
ADC-Konvertierungen durchlaufen nach dem Anlegen der jeweiligen 
Spannung. Prüfe per Oszilloskop ob die Spannung auch konstant ist und 
nicht irgendwie mit HF überlagert. Mach mal eine Trendlinie in Excel...

: Bearbeitet durch User
von Jonah (jonah)



Lesenswert?

Niklas G. schrieb:

...

Oszi hab ich gerade keines zur Hand

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Da ist keine Tendenz erkennbar, ausser dass der ADC Wert grob zum 
Multimeter passt (der einzige Ausreißer ist der mittlere Wert). Lassen 
sich die Messungen reproduzieren?

von Jonah (jonah)



Lesenswert?

Lothar M. schrieb:
> Da ist keine Tendenz erkennbar, ausser dass der ADC Wert grob zum
> Multimeter passt (der einzige Ausreißer ist der mittlere Wert). Lassen
> sich die Messungen reproduzieren?

2. Versuch

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jonah schrieb:


Das sind ja unterschiedliche Channels. Mach das mal nacheinander am 
selben Channel.

von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Niklas G. schrieb:
> Jonah schrieb:
>
> Das sind ja unterschiedliche Channels. Mach das mal nacheinander am
> selben Channel.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Und jetzt nochmal die Multimeter-Spannung als X-Achse und die 
ADC-Messwerte als Y-Achse...

Beitrag #7739739 wurde vom Autor gelöscht.
von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Niklas G. schrieb:
> Und jetzt nochmal die Multimeter-Spannung als X-Achse und die
> ADC-Messwerte als Y-Achse...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jonah schrieb:
> ADC-Messwerte
Da ist offenbar ein Offset von 150mV drin. Nur der letzte Messwert 
passt. Du misst mit dem Multimeter schon direkt am uC? Minusklemme 
direkt am Pin 20 und Plusklemme am ADC-Pin?

Niklas G. schrieb:
> Und jetzt nochmal die Multimeter-Spannung als X-Achse und die
> ADC-Messwerte als Y-Achse...
Besser wäre einfach die Differenz (= Abweichung) der beiden über der 
Multimeter-Spannung. Im Idealfall wäre das ja ein Strich auf der 
Nullinie.

Und dann sollte pro Messpunkt auch noch die Referenzspannung direkt am 
Referenzpin gemessen werden. Nicht, dass die irgendwie instabil ist.

: Bearbeitet durch Moderator
von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:
>> ADC-Messwerte
> Du misst mit dem Multimeter schon direkt am uC?
Hab nochmals eine Version angehängt wo ich so nah wie möglich am uC Pin 
messe.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jonah schrieb:
> Hab nochmals eine Version angehängt wo ich so nah wie möglich am uC Pin
> messe.

Versuch mal irgendwie an ein Oszilloskop zu kommen und prüfe dabei auch 
die Stabilität von Vdda.

Jonah schrieb:
> Da das Layout von Fachleuten in meiner Firma gemacht wurde und über
> viele Versionen verbessert wurde sollte dies eig nicht das Problem sein.

Professionelle Hardwareentwicklungsfirma und kein Oszilloskop verfügbar?

von Jonah (jonah)


Lesenswert?

Niklas G. schrieb:
> Versuch mal irgendwie an ein Oszilloskop zu kommen und prüfe dabei auch
> die Stabilität von Vdda.
Hab mit dem Multimeter AC ca. 1.8mV

> Professionelle Hardwareentwicklungsfirma und kein Oszilloskop verfügbar?
Da ich kürzlich den Arbeitsplatz gewechselt habe, muss ich mir noch eins 
organisieren.

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jonah schrieb:
> Hab mit dem Multimeter AC ca. 1.8mV

Das hilft leider kaum.

Jonah schrieb:
> Da ich kürzlich den Arbeitsplatz gewechselt habe, muss ich mir noch eins
> organisieren.

Wenn der Prophet nicht zum Berg kommt...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jonah schrieb:
> Hab nochmals eine Version angehängt wo ich so nah wie möglich am uC Pin
> messe.
1. Sind diese Vref-Messwerte bei den unterschiedlichen 
Eingangsspannungen reproduzierbar?
2. Warum ändert sich deine Vref bei sich ändernder Eingangsspanung so 
sehr (immerhin im Bereich von 2%)?

Lothar M. schrieb:
> Besser wäre einfach die Differenz (= Abweichung) der beiden über der
> Multimeter-Spannung.
Die ist bei einer Eingangsspannung ungleich 0V immer etwa gleich und ca. 
70mV. Im ähnlichen Bereich 60mV ändert sich lustigerweise auch die Vref.
Warum schwankt die so sehr? Was passiert da in deinem System? Was 
passiert, wenn du da mal eine ordentlich stabile Vref anlegst? Ist da 
ein Bug im Layout?

: Bearbeitet durch Moderator
von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:
> 1. Sind diese Vref-Messwerte bei den unterschiedlichen
> Eingangsspannungen reproduzierbar?
Siehe Anhang. Diese Werte sind korrekt und reproduzierbar.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jonah schrieb:
> Diese Werte sind korrekt und reproduzierbar.
Üble Sache. Kein Wunder misst du Mist.

Dann musst du jetzt erstmal feststellen, was ist der Grund für diese 
Abhängigkeit der Referenzspannung von der Eingangsspannung ist. An den 
bisher bekannten Informationen kann man das nicht erkennen. Ändern sich 
die 3V3 dxer Versorgung? Fällt Spannung am R167 ab? Verschiebt sich das 
GND-Potential?

: Bearbeitet durch Moderator
von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:

> Ändern sich die 3V3? Fällt Spannung am R167 ab?
Siehe Anhang (Vergleich VDDA und Vref). Spannungabfall über R167 ist 
1mV.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jonah schrieb:
> Spannungabfall über R167 ist 1mV.
Also fällt der Rest woanders ab. Fazit: weitersuchen.

von Frank K. (fchk)


Lesenswert?

Schau Dir auch noch mal deine Schutzbeschaltung an.

Hier mal das Datenblatt einer beliebigen 3.3V Zenerdiode:
https://www.onsemi.com/pdf/datasheet/nz9f2v4-d.pdf

Seite 3, Tabelle: Die Zenerspannung kann bei einem 3.3V-Typ zwischen 
3.14 und 3.47 schwanken und ist natürlich auch temperaturabhängig. Und 
bei dieser Zenerspannung fließen schon 5 mA.

Du hast ja keine Schaltpläne geliefert, aber ich kann mir vorstellen, 
dass es irgendwas in der Richtung ist.

fchk

von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Frank K. schrieb:
> Du hast ja keine Schaltpläne geliefert, aber ich kann mir vorstellen,
> dass es irgendwas in der Richtung ist.

Sorry ging irgendwie unter. Ich verwende die BAS40DW-04

von Mi N. (msx)


Lesenswert?

Frank K. schrieb:
> Du hast ja keine Schaltpläne geliefert, aber ich kann mir vorstellen,
> dass es irgendwas in der Richtung ist.

Ich vermute, daß wir die Salamischeiben vom falschen Ende der Wurst 
serviert bekommen haben.

von Dirk F. (dirkf)


Lesenswert?

Jonah schrieb:
> BAS40DW-04

Nimm mal eine BAV199. Pico-Ampere Diode mit sehr kleinem Leckstrom.
Verwende ich als Schutzbeschaltung bei einem 24 Bit ADC.

von Jonah (jonah)


Lesenswert?

Dirk F. schrieb:
> Nimm mal eine BAV199. Pico-Ampere Diode mit sehr kleinem Leckstrom.
Meine Aufgabe ist es eine Testinfrastruktur mit Jtag für ein fertiges 
PCB zu erstellen. D.h. ich kann keine Modifikationen an der Hardware 
vornehemen. Ich muss es irgendwie mit der Software regeln.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jonah schrieb:
> D.h. ich kann keine Modifikationen an der Hardware vornehemen. Ich muss
> es irgendwie mit der Software regeln.

Und was wenn das Problem in der Hardware liegt, z.B. instabiles Vref? 
Klar kann man versuchen so was zu "wegkalibrieren" aber da hat man keine 
Garantie dass sich das Problem immer gleich verhält, die Abweichung 
könnte z.B. durch EMI beeinflusst sein...

von Jonah (jonah)


Lesenswert?

Niklas G. schrieb:
> Und was wenn das Problem in der Hardware liegt, z.B. instabiles Vref?
Bekomme in kürze ein Oszilloskop, dann werde ich es prüfen.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Hast du auch mal ein Beispiel Programm in C mit der STM32 HAL versucht? 
Vielleicht ist irgendwas an der Ansteuerung in Python falsch.

von Jonah (jonah)


Lesenswert?

Niklas G. schrieb:
> Hast du auch mal ein Beispiel Programm in C mit der STM32 HAL versucht?

Nein, hatte noch nie mit STM32 HAL zu tun.

von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Niklas G. schrieb:
> Wenn der Prophet nicht zum Berg kommt...

,kommt der Berg zum Prophet.

=> 3V3 AC gemessen

: Bearbeitet durch User
von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Oft hat es noch mehr Störungen, wie in diesem Bild

von Mi N. (msx)


Lesenswert?

Jonah schrieb:
> Oft hat es noch mehr Störungen, wie in diesem Bild

Bleibt nur noch die Frage: Ist das das Signal vor oder hinter R42?

von Jonah (jonah)


Lesenswert?

Mi N. schrieb:
> Bleibt nur noch die Frage: Ist das das Signal vor oder hinter R42?

R42? meinst du R167?

von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Vref

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jonah schrieb:
> Vref

Wenn Vref eine größere Welligkeit hat als deine ADC-Ergebnisse 
abweichen, ist die Performance vom ADC doch beeindruckend!

von Jonah (jonah)


Lesenswert?

Niklas G. schrieb:
> Wenn Vref eine größere Welligkeit hat als deine ADC-Ergebnisse
> abweichen, ist die Performance vom ADC doch beeindruckend!

Aber warum ist es bein jedem Duchgang exakt das gleiche Ergebnis. Es ist 
immer 0.245-0.247V.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jonah schrieb:
> Meine Aufgabe ist es eine Testinfrastruktur mit Jtag für ein fertiges
> PCB zu erstellen.
Ja, dann bist du als Tester schon fertig: du hast einen Test aufgebaut 
und nachgewiesen, dass diese Leiterplatte den Test nicht bestehen wird.

> D.h. ich kann keine Modifikationen an der Hardware vornehemen.
D.h. das ist ein **PAL** (= **P**roblem **A**nderer **L**eute). Was sagt 
der Entwickler der Schaltung zu deinen Beobachtungen?

Jonah schrieb:
> Oft hat es noch mehr Störungen, wie in diesem Bild
Das sind Störungen eines Schaltreglers mit ca. 90 kHz. Es erklärt aber 
nicht die Abweichungen, die du hast. Du jagst Geister.

> Oft hat es noch mehr Störungen, wie in diesem Bild
Wie wurden die in deiner Schaltung wo gemessen? Du weißt schon, dass du 
bei solchen Signalen mit einer Massefeder messen musst?

Jonah schrieb:
> Screenshot_2024-09-26_111459.png
Das ist kein **Screenshot**, sondern ein **Foto** von einem Bildschirm. 
Und das beste komprimierende Format für Fotos schlechthin ist JPEG.

Ein Screenshot wäre es, wenn du einen USB-Stick in dein Oszi stecken und 
auf die passende Taste drücken würdest. Dafür wären GIF und PNG wieder 
die richtigen Formate.

So gut muss man seine "Werkzeuge" schon kennen.

Niklas G. schrieb:
> Wenn Vref eine größere Welligkeit hat als deine ADC-Ergebnisse
Da wellt sich Vref doch nur um 7mV, aber ich tippe sowieso auf 
"Messfehler, weil mit Masseclip gemessen"...

: Bearbeitet durch Moderator
von Rainer W. (rawi)


Lesenswert?

Jonah schrieb:
> Screenshot_2024-09-26_103741.png
> 1,4 MB

Jonah schrieb:
> Screenshot_2024-09-26_111459.png
> 1,1 MB

Ein "Screenshot" im Dateinamen macht aus einem Photo noch lange keinen 
Screenshot im Sinne des Artikels über die Bildformate.

Den Hinweis hast du gelesen und inhaltlich verstanden?

Jonah schrieb:
> Ja die spannungen kommen alle von einem Spannungteiler. Meist mit 100k
> und 12k.

Bei einer so hochohmigen Quelle darfst du dich über komische Effekte 
nicht wundern (z.B. Kanalübersprechen). Kondensatoren an den Eingängen 
hast du aber schon, oder?

: Bearbeitet durch User
von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:
> Wie wurden die in deiner Schaltung wo gemessen? Du weißt schon, dass du
> bei solchen Signalen mit einer Massefeder messen musst?

Über C150. habe mir eine neue Messsonde zukommen lassen und siehe da. 
Die alte hatte anscheinend irgendwelche Probleme.

Lothar M. schrieb:
> Das ist kein **Screenshot**, sondern ein **Foto** von einem Bildschirm.

Hab das Bild mit dem Handy gemacht, da mein USB Stick nicht erkannt 
wurde. Habes dan per Mail auf den PC geschickt und dan einen Screenshot 
davon gemacht. Wurde dan Automatisch so gespeichert.
(-_-)

von Jonah (jonah)


Lesenswert?

Rainer W. schrieb:
> Bei einer so hochohmigen Quelle darfst du dich über komische Effekte
> nicht wundern (z.B. Kanalübersprechen). Kondensatoren an den Eingängen
> hast du aber schon, oder?

Ja, habe in einer früheren Nachricht ein Bild von der Eingangsschaltung 
geschickt. Mit 2 Kondensatoren.

: Bearbeitet durch User
von Jonah (jonah)


Lesenswert?

Jonah schrieb:
> Über C150. habe mir eine neue Messsonde zukommen lassen und siehe da.

Also damit war gemeint, dass das Signal jetzt Stöhrungsfreier ist, nicht 
das mein Problem gelöst wurde.

Aber gibt es nun irgendwelche Software Anpassungen die ich machen kann, 
um die Genauigkeit zu verbessern. Jetzt abgesehen von der Sampling-Time?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Du betreibst den ADC bzw. den ganzen STM32 ja außerhalb der 
Spezifikation. Heißt also dass die Infos aus dem Datasheet und somit 
auch das Wissen der Leute hier nicht helfen, weil sich das natürlich 
alles auf das Verhalten innerhalb der Spezifikation bezieht.

Daher hilft nur: Den STM32 selbst characterisieren:
Mache eine große Versuchsreihe (viele Millionen Messwerte) von allen 
möglichen Eingangsspannungen, bei allen möglichen Temperaturen, allen 
möglichen Variationen der Störungen der Versorgungs&Referenz-Spannung 
(schwierig zu quantifizieren - je nachdem wie der Rest der Schaltung 
sich verhält wird es vermutlich viele mögliche Zustände geben), allen 
möglichen Alterungszuständen des STM32, und natürlich Bauteilstreuung 
über viele einzelne STM32-Exemplare. Dann kannst du ein mathematisches 
Modell aufstellen, wie die Abweichung von all diesen Variablen abhängt. 
Du muss statistisch prüfen, ob dieser Zusammenhang auch konsistent ist, 
oder ob es große Zufalls-Streuungen gibt. Du musst mit ST klären, ob die 
mal das Design des STM32 ändern, weil du dann diese Aufstellung 
natürlich wieder von vorne machen musst. Das werden die dir vermutlich 
nur verraten wenn du dein paar Millionen im Jahr kaufst.

Vielleicht kannst du dann eine Funktion schreiben, die in Abhängigkeit 
der Temperatur, Betriebsstunden des STM32, Zustand der Gesamtschaltung, 
und einer Initial-Kalibrierung den richtigen Wert aus dem Messwert 
herausrechnet.

Insbesondere die Abhängigkeit von den Störungen dürfte sehr komplex 
sein; je nachdem wie viel Strom der Rest der Schaltung aus dem 
Schaltregler zieht könnte das Störspektrum verändern und somit deine 
Messwerte beeinflussen. Diesen Strom müsstest du also auch irgendwie 
messen.

Das könnte vom Umfang her in Richtung einer Doktorarbeit gehen. Aber 
sicherlich billiger als die Schaltung zu korrigieren.

von Jonah (jonah)


Lesenswert?

Niklas G. schrieb:
> Du betreibst den ADC bzw. den ganzen STM32 ja außerhalb der
> Spezifikation.

Warum meinst du? Wo bin ich ausserhalb der Specs?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jonah schrieb:
> Wo bin ich ausserhalb der Specs?

Weil du ziemliche Störungen auf Vref und Vdda hast. Kein ADC dürfte 
darauf ausgelegt sein, da noch vernünftig zu funktionieren.

von Martin H. (mahi)


Lesenswert?

Es wurde schon x mal vorgeschlagen, die interne Spannungsreferenz zu 
messen, ich sehe aber nirgends ein Ergebnis.
Dazu vielleicht auch mal einen ADC-Pin mit GND verbinden und den messen, 
ob das Ergebnis dann auch einen Offset hat.
Wenn der STM32 einen großen Offsetfehler hat (was ich eigentlich nicht 
glaube), könnte der "verrechnet" werden. Sowas musste ich mal bei einem 
PIC mit bekanntem (erratum) üblen Offsetfehler machen.

Hat der STM32 ADC zufällig auch einen differenziellen Modus, der 
ausversehen aktiviert wurde?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Martin H. schrieb:
> Wenn der STM32 einen großen Offsetfehler hat (was ich eigentlich nicht
> glaube)

Hat er nicht, der ADC ist normalerweise out-of-the-box schon viel 
besser. Der ADC ist einer der Punkte, wo ST (noch) die Nase vorn hat vor 
ESP32 & Co.

Martin H. schrieb:
> Hat der STM32 ADC zufällig auch einen differenziellen Modus

Nicht die normalen SAR-ADCs, das können nur die Sigma-Delta-ADCs.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Niklas G. schrieb:
> Martin H. schrieb:
...
> Nicht die normalen SAR-ADCs, das können nur die Sigma-Delta-ADCs.

Bei den nicht so ganz alten STM32 Typen gibt es viele Typen mit 
differentiellen Eingang. Allerdings muss die Gleichtaktspannung nahe bei 
VREF/2 liegen. Ziemlich unpraktisch...

von Bauform B. (bauformb)


Lesenswert?

Niklas G. schrieb:
> Martin H. schrieb:
>> Wenn der STM32 einen großen Offsetfehler hat (was ich eigentlich nicht
>> glaube)
>
> Hat er nicht, der ADC ist normalerweise out-of-the-box schon viel
> besser.

Die haben aber einen halbautomatischen Offsetabgleich. Den muss man 
(nur) starten.

von Silvio K. (exh)


Lesenswert?

Wie bauformb schon zweimal gesagt hat, führe die interne 
Kalibierungsfunktion aus, so wie es im Datenblatt geraten ist und dann 
ist der falsche Offset weg und der adc ist fortan genau.

von Jonah (jonah)


Lesenswert?

Silvio K. schrieb:
> führe die interne
> Kalibierungsfunktion aus

Den ADC habe ich bereits kalibriert.
In einer vorherigen Nachricht habe ich meinen Code-Aufbau als screenshot 
angehängt.

von M. N. (bmbl2)


Lesenswert?

Jonah schrieb:
> Dies ist die aktuelle Schaltung.
> Schutzdioden habe ich weggelassen

Wo ich das lese... Hast du separate Schutzdioden platziert?

Ich hatte einmal das Problem, dass ich dem STM am Analogeingang eine 
eigene Schutzdiode gegen VDDA spendiert habe, da dieser von einem opamp 
mit 10V Versorgung gespeist wurde und ich im Fehlerfall ein Abrauchen 
des Eingangs verhindern wollte. Waren also 1 kOhm in Reihe zum Signal 
und dann die Diode nach VDDA.
Ich habe damals nicht nachgedacht und tatsächlich hat mir der Leckstrom 
der Diode (bei Schottky noch viel größer als bei normaler Si/Si Diode) 
den Eingang so verzogen, dass eine sinnvolle Messung nicht mehr möglich 
war und sich auch über Temperatur stark ändert.

von Jonah (jonah)


Angehängte Dateien:

Lesenswert?

M. N. schrieb:
> ...

Hier ein Bild der Eingangsschaltung mit den 2 Schottky dioden welche wir 
benutzen. => BAS40DW-04

: Bearbeitet durch User
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.