Ich habe eine knifflige Aufgabe bei der ich nicht weiterkomme.
Ich lese einen billigen stinknormalen Gasgriff (Poti) der mit 5V betrieben wird ein.
Dieser gibt aber nicht nicht 0 und 5V aus, sondern bei 0-Stellung 0.83V und 4.32V bei maximaler Stellung.
Diese Spannung habe ich dem ADC zugeführt. Den Spannungsteiler habe ich so ausgelegt, dass ich bei 4.32V die 3V habe, weil der ADC eine Referenzspannung von 3V hat (STM32L431CBT6). Siehe Bild ADC_Spannungsteiler.
Bei 0.83V liegt am ADC eine Spannung von 0.575V an. Das Sieht man auch an den Oszibildern oszi_1 und Oszi_2.
Jetzt folgt die 1. Frage: Wenn ich die Spannung mit dem ADC umwandle und die Spannung berechne erhalte ich eine Spannung von 0.475V statt 0.575V. Ein ADC Wert von ca. 650 statt wie von mir berechnet 785. (4096/3V*0.575V)
Bei der Maximalstellung erreiche ich auch nicht 4096 und nur ca. 2.6V. Siehe Bild ADC_WerteSpannungen
Die Berechnung erfolgt folgendermassen:
voltage = (adcValue * adcRefVoltage) / period; // ADC-Wert in eine Spannung umrechnen
adcRefVoltage = 3V
period = 4096
eingestellter Takt uC 16MHz
Ja, schade. Du hast den interessanten Teil vom Schaltplan abgeschnitten. Dann hast du den vom Bildschirm abfotografiert statt schlicht einen Screenshot zu machen oder den Schaltplan als PDF anzuhängen.
Dann ist leider nicht beschrieben was das Oszi zeigt. Was sind da die beiden Kanäle Orange und Grün? Wieso sind bei Grün diese Zacken nach unten?
Welchen Innenwiderstand hat die Quelle des analogen Signals?
Beeinflusst der Spannungsteiler etwa diesen Pegel?
Wenn das so wie man es sieht direkt am ADC hängt, dann ist das sehr hochohmig. Wenn der ADC also seinen Samplekondensator auflädt, dann kann die Spannung einbrechen. Warum also so hohe Widerstandswerte? Wieso ein OPV als Puffer? Damit könnte man auch gleich verstärken und einen Offset abziehen.
Die Spannung vom Spannungsteiler ist direkt mit dem ADC verbunden.
Achja klar, wenn der Spannungsteiler zu hochohmig ist, wird der Samplekondensator womöglich nicht schnell genug während der Abtastzeit aufgeladen und somit kann die Spannung am Spannungsteiler einbrechen. Da würden die komischen Zacken am grünen Signal (Spannung am Spannungsteiler bzw. ADC Eingang) auch Sinn ergeben.
Das gelbe Signal ist die PWM, die nicht den Tastgrad 100% erreicht, bzw. durch den Offset einen bestimmten Tastgrad hat. Grün ist die Spannung am ADC.
Das wäre dann das nächste Problem das ich lösen muss, denn ich muss den Offset irgendwie wegbringen und zwar so, dass ich trotzdem über den gesamten Spannungsbereich des ADC 0-3V auch den maximalen Tastgrad erreiche.
Deshalb knifflige Aufgabe, aber wenn der ADC schon falsche Werte ausgibt, bzw. die Schaltung falsch ausgelegt ist, dann wird es mit der Rechnerei nichts.
Ich mache morgen mal den Spannungsteiler niederohmiger. Ich lege das morgen mal gemäss Bild aus.
Nein ich habe den ADC direkt über das CubeMX initialisiert. Da stand nichts von Kalibrierung. Denkst dudass es daran liegt? Muss dann das eigentlich vor jeder Konvertierung machen oder eeicht es einmal nach dem ADC Start?
Ich habe mir alle Episoden von Starwars gestern Nacht noch reingezogen und 1000 mal über den ADC nachgedacht. Es hat nichts gebracht :)
Heute habe ich die Widerstände angepasst und den ADC kalibriert. Siehe Bild
Leider ohne Erfolg, er springt jetzt zwar von 0.45V auf fast 0.5V, aber immer noch zu wenig. Er müsste auf 0.575V hinauf.
Was "Informatiker" natuerlich nicht wissen koennen, schalte dem
"unteren" Widerstand noch einen 100 nF/1 uF Kondensator parallel.
Die Spannung am ADC-Eingang sollte dann glatt sein.
wenn der ADC schon falsche Werte ausgibt
Ein ADC gibt keine falschen Werte aus. Die ausgegebenen Werte
entsprechen in erster Naeherung der Eingangsspannung am ADC.
Zieh auch mal dickere Massekabel die sinnig angeschlossen sind.
Welchen Spannungsbereich kannst du denn messen, wenn der ADC nicht angeklemmt ist - mit dem Multimeter an Testpunkt 26 und natürlich mit den drei Widerständen?
Welchen Wert hat denn das Poti im Gasgriff? Ist es wirklich ein einfaches Poti? Wenn das nur den Bereich von 0.83V bis 4.32V ausgibt bei 5V Versorgung, sind da auch noch jeweils Widerstände zu GND und 5V verbaut.
Ich vermute, dass es nicht am ADC liegt (kenne allerdings die STM32-Welt nicht), sondern eher an den unbekannte Werten im Gasgriff zusammen mit deiner Teilerbeschaltung.
Welchen Spannungsbereich kannst du denn messen, wenn der ADC nicht
angeklemmt ist - mit dem Multimeter an Testpunkt 26 und natürlich mit
den drei Widerständen?
Naja es muss in diesem Fall am ADC liegen. Denn es sollte doch keine Rolle spielen, was vorher geschaltet ist. Ist ja sozusagen eine Blackbox. Mit dem Multimeter gemessen erhalte ich eben die Offsetspannung 0.83V, halt heruntergebrochen mit dem Spannungsteiler an TP26 0.575V, und 4.4V bei Maximalstellung am Spannungsteiler TP26 3V.
Der ADC sieht am TP26 die Spannung 0.575V, wenn er fertig konvertiert muss er einfach auch die 0.575V bzw. 3V ausgeben. Tut er aber nicht.
Welchen Wert hat denn das Poti im Gasgriff? Ist es wirklich ein
einfaches Poti? Wenn das nur den Bereich von 0.83V bis 4.32V ausgibt bei
5V Versorgung, sind da auch noch jeweils Widerstände zu GND und 5V
verbaut.
Falls es wirklich wichtig sein sollte habe ich es mal gemessen. Der Gasgriff hat 3 Leitungen rot 5V, schwarz GND, weiss Signal.
Zwischen Signal und GND messe ich ca. 0.5MOhm, zwischen 5V und GND 1.8kOhm, zwischen 5V und Signal ca. 427kOhm. Es erschließt sich mir nicht ganz, warum gerade zwischen 5V und GND ein 1,8 kOhm-Widerstand verwendet wird.
Wenn ich den Gasgriff verstelle, bleibt alles gleich. Also ist es kein Poti.
Ich vermute, dass es nicht am ADC liegt (kenne allerdings die STM32-Welt
nicht), sondern eher an den unbekannte Werten im Gasgriff zusammen mit
deiner Teilerbeschaltung.
Naja, ich wüsste nicht was.. ich könnte ja einfach auch eine DC Spannung direkt zum ADC führen zB 2.2V und der ADC müsste diesen Wert ausgeben, ohne zu wissen wie die 2.2V generiert werden.
Der ADC sieht am TP26 die Spannung 0.575V, wenn er fertig konvertiert
muss er einfach auch die 0.575V bzw. 3V ausgeben. Tut er aber nicht.
Ein ADC ist kein Multimeter das Spannungswerte anzeigt.
Ein unsigned 12 bit ADC wird Werte von 0 bis 4095 ausgeben.
Die kann man, evtl. nach einer Kalibrierung, auf Spannungswerte
umrechnen. Statt deiner "fiktiven" Spannungswerte solltest du
den Ausgabewert des ADC nennen.
Falls es wirklich wichtig sein sollte habe ich es mal gemessen. Der
Gasgriff hat 3 Leitungen rot 5V, schwarz GND, weiss Signal.
Es ist ueberhaupt nicht wichtig. :)
Hast du den Kondensator schon verbaut?
Wenn ich den Gasgriff verstelle, bleibt alles gleich. Also ist es kein
Poti.
Vermutlich ein Hallsensor.
Naja, ich wüsste nicht was.. ich könnte ja einfach auch eine DC Spannung
direkt zum ADC führen zB 2.2V und der ADC müsste diesen Wert ausgeben,
ohne zu wissen wie die 2.2V generiert werden.
Der ADC sieht am TP26 die Spannung 0.575V, wenn er fertig konvertiert
muss er einfach auch die 0.575V bzw. 3V ausgeben. Tut er aber nicht.
Ein ADC ist kein Multimeter das Spannungswerte anzeigt.
Ein unsigned 12 bit ADC wird Werte von 0 bis 4095 ausgeben.
Die kann man, evtl. nach einer Kalibrierung, auf Spannungswerte
umrechnen. Statt deiner "fiktiven" Spannungswerte solltest du
den Ausgabewert des ADC nennen.
Naja, der ADC lädt den Samplekondensator und gibt je nach Ladung unterschiedliche ADC Werte aus, klar. Aber wenn die Spannung am TP26 0V ist, ist die Ladung vom Samplekondensator auch 0V, ergo adcWErt =0
Wenn die Spannung an TP26 dem Referenzwert enstpricht, hat der Samplekondensator auch die entsprechende Ladung, also gibt der ADC einen Wert von 4095 aus.
und bei 1.5V muss es demnach ein adcWert von 2048 sein.
Das ist ja auch der Grund weshalb man höhere Spannungen auf die Range der ADC-Referenzspannung anpasst.
Die ADC-Ausgabewerte siehst du oben im Bild rechts Beitrag 24.02.2024 18:32
Oben bei 0-STellung unten Maximalstellung
Du siehst dass er bei 0-STellung Werte um die 680 ausgibt.
und bei Maximalstellung ca. 3600
Falls es wirklich wichtig sein sollte habe ich es mal gemessen. Der
Gasgriff hat 3 Leitungen rot 5V, schwarz GND, weiss Signal.
Es ist ueberhaupt nicht wichtig. :)
Hast du den Kondensator schon verbaut?
Nein noch nicht, ich mach das morgen :) Hatte deinen Beitrag gar nicht gesehen.
Wenn ich den Gasgriff verstelle, bleibt alles gleich. Also ist es kein
Poti.
Vermutlich ein Hallsensor.
Naja, ich wüsste nicht was.. ich könnte ja einfach auch eine DC Spannung
direkt zum ADC führen zB 2.2V und der ADC müsste diesen Wert ausgeben,
ohne zu wissen wie die 2.2V generiert werden.
Wenn der ADC also seinen Samplekondensator auflädt, dann kann
die Spannung einbrechen. Warum also so hohe Widerstandswerte?
Das Problem ist nicht der hohe Widerstand, sondern die fehlende Ladung. Oder was meinst du, welche Grenzfrequenz für das Ablesen eines billigen, stinknormalen Gasgriffes erforderlich ist.
Na klar ist das die Ladung. Aber ein Widerstand steht dem Strom, das ist Ladung je Zeit, im Weg. Wenn schnell abgetastet wird dann kann das zu einem Problem werden.
Hier ist das vermutlich nicht das Problem. Und auch der geforderte Kondensator wird die Situation nicht spürbar verbessern.
Mit ADCs innerhalb von uCs kenne ich mich nicht aus. Die bieten oft viele Konfigurationsmöglichkeiten und somit Möglichkeiten zur Fehlkonfiguration.
Ist die richtige Referenz ausgewählt? Wird richtig umgerechnet? Ist der Wert Offset Binary oder Zweierkomplement? Ist der Eingang Uni oder Biploar? Singleended oder differentiell?
Trenne den Sensor und lege den Eingang auf Masse, welchen Wert liefert der ADC?
Lege den Eingang auf eine bekannte Referenzspannung, ...
Du siehst dass er bei 0-STellung Werte um die 680 ausgibt.
und bei Maximalstellung ca. 3600
Und wo ist jetzt das Problem diesen Wertebereich auf einen
Wertebereich der PWM von 0 bis 100 % abzubilden?
Darum geht es ja wohl.
Nirgends, das habe ich schon gemacht.
Ich finde einfach, dass das gebastelt ist, wenn ich extra Code schreiben und alles umrechnen muss. Der ADC muss meiner Meinung nach Werte von 0 bis 4095 ausgeben.
Er gibt aber bei 0.575V nur 680 aus statt 780 und erreicht bei 3V am tP26 nur einen Wert von 3660 und nicht 4095. Das ist doch quatsch.
Der nächste der den Code liest fragt sich dann auch was das für ein Unfug ist, wenn ich den Wertebereich 0 bis 2.1V (2.68-0.575) auf die Pwm umrechne anstatt 0 bis 3V.
Ich bau morgen den Kondenser ein und miss auch mal mit GMD an TP26 was der ADC macht. Wenn das dann immer noch nicht klappt muss ich mir das fette Manual zur Gemüte führen...
also ich kann dir z.B. mal die Situation beim ESP32 schildern:
dort ist der ADC ziemlich murksig, und hat einen Totbereich von AFAIK ca. 100mV. Das heißt, bis zur Eingangsspannung von ca. 100mV ist der Ausgangswert des ADC 0. Der ADC hat auch keine gute Linearität. Und natürlich ist die Referenzspannung auch Exemplarstreuungen unterworfen. Deshalb gibt es im Espressif-SDK Funktionen, mit denen der ADC kalibriert werden kann. Ruft man dann die Werte über die entsprechenden API-Funktionen ab, funktioniert alles wie gewünscht.
also ich kann dir z.B. mal die Situation beim ESP32 schildern:
dort ist der ADC ziemlich murksig,
Das ist beim STM32 nicht so. Dessen ADC ist viel besser, genauer und schneller. Der kann problemlos im mV-Bereich messen. Bei hochohmigen Quellen ist eine lange Samplezeit empfehlenswert.
Du siehst dass er bei 0-STellung Werte um die 680 ausgibt.
und bei Maximalstellung ca. 3600
Und wo ist jetzt das Problem diesen Wertebereich auf einen
Wertebereich der PWM von 0 bis 100 % abzubilden?
Darum geht es ja wohl.
Nirgends, das habe ich schon gemacht.
Ich finde einfach, dass das gebastelt ist, wenn ich extra Code schreiben
und alles umrechnen muss. Der ADC muss meiner Meinung nach Werte von 0
bis 4095 ausgeben.
Er gibt aber bei 0.575V nur 680 aus statt 780 und erreicht bei 3V am
tP26 nur einen Wert von 3660 und nicht 4095. Das ist doch quatsch.
Nein. Kein vernuenftiger Konstrukteur wuerde den vollen Wertebereich
nutzen wollen. Schon allein um Fehler wie: Es ist kein Drehgriff
angschlossen, Masseschluss und Schluss gegen die Betriebsspannung
zu erkennen. Bei einem Wert von 4095 waere statt Vollgas wohl eben
eher ein "Notaus" angebracht.
Wenn du solche Konstruktionsprinzipien nicht kennst, solltest du
dein "Gebastel" vielleicht einfach sein lassen.
Mittlerweile ist dir ja auch klar, dass kein normales Potentiometer
in dem Ding ist. Gebastel ist es, dass du bislang nicht mal den
wirksamen Innenwiderstand deines Drehgebers z.B. in Mittelstellung
kennst oder gemessen haettest. Das kann man naemlich.
U.U. ist dein nachgeschalteter Spannungsteiler fuer den naemlich
viel zu niederohmig. Ein Richtwert waere, den nachgeschalteten
Teiler so hochohmig zu machen, dass der Fehler durch dessen Belastung
kleiner als 5 oder 10 % ist. Das ist fuer einen Gasdrehgriff voellig
akzeptabel. Genauso wie ein Linearitaetsfehler von 5 % nicht stoert.
Auch der wird durch die Belastung durch den Teiler verursacht.
Mit der gegenwaertigen Dimensionierung nutzt du 75 % des Wertebereichs
des ADC aus. Auch das waere ein voellig akzeptabler Wert.
Das 100 % ueberhaupt nicht angestrebt werden, siehst du schon am
Wertebereich der Ausgangsspannungen des Drehgriffs.
Der muesste dann 0 bis 5 V ausgeben.
Der nächste der den Code liest fragt sich dann auch was das für ein
Unfug ist, wenn ich den Wertebereich 0 bis 2.1V (2.68-0.575) auf die Pwm
umrechne anstatt 0 bis 3V.
Wenn du in deinem Code mit Spannungen rechnest, hast du etwas nicht
verstanden. Das ist naemlich Unfug. Und voellig unnoetig.
Es steht dir natuerlich frei, solchen Unsinn weiter zu kultivieren.
Ich bau morgen den Kondenser ein und miss auch mal mit GMD an TP26 was
der ADC macht. Wenn das dann immer noch nicht klappt muss ich mir das
fette Manual zur Gemüte führen...
Der Kondensator wird, wenn richtig angeschlossen, Stoerungen auf dem
ADC-Eingang filtern. Den Wertebereich wird er nicht vergroessern.
Ich:
Wenn schnell abgetastet, dann könnte Problem entstehen.
Du:
Nenne einen Grund wieso man schnell abtasten sollte.
Hatte nie empfohlen schnell abzutasten. Ich weiß nicht wie schnell abgetastet wird, daher meine Warnung.
Du hast aber nach einem Grund gefragt. Nun um z. B. Rauschen wegzumitteln. Klar das kann man auch analog mit Tiefpass, aber der verschiebt die Grenzfrequenz. Macht hier bei der Anwendung alles keinen Sinn.
Mit der gegenwaertigen Dimensionierung nutzt du 75 % des Wertebereichs
des ADC aus. Auch das waere ein voellig akzeptabler Wert.
Es geht ihm aber nicht drum ob etwas akzeptabel ist oder nicht, er möchte verstehen warum das so ist.
Er misst an einem Testpunkt zwischen Spannungsteiler und ADC eine Spannung und bekommt vom ADC einen Wert der nicht dazu passt. Das würde ich auch nicht akzeptieren ohne Erklärung denn vermutlich kann man daran was ändern.
Das spräche für eine Referenzspannung des ADC von 3.3V statt 3.0V ...
Blöd nur, dass der STM32L431CBT6 laut Datenblatt eine interne Referenz
von 3.0V ± 10mV im Temperaturbereich 25° ... 35° hat.
Kann man bei diesem STM am VREF+ Pin diese ADC-Referenzspannung messen?
Ich meine, es ist doch absolut seltsam, dass ein 12-Bit ADC einen Wert von 3660 liefert, wenn laut Oszi 3.0V stabil am Eingang anliegen und die ADC-Referenz auch 3.0V beträgt.
Das spräche für eine Referenzspannung des ADC von 3.3V statt 3.0V ...
Blöd nur, dass der STM32L431CBT6 laut Datenblatt eine interne Referenz
von 3.0V ± 10mV im Temperaturbereich 25° ... 35° hat.
Kann man bei diesem STM am VREF+ Pin diese ADC-Referenzspannung messen?
Ich meine, es ist doch absolut seltsam, dass ein 12-Bit ADC einen Wert von 3660 liefert, wenn laut Oszi 3.0V stabil am Eingang anliegen und die ADC-Referenz auch 3.0V beträgt.
Da hat man dann halt schnell die Versorgung des STM im Verdacht ...
Mit der gegenwaertigen Dimensionierung nutzt du 75 % des Wertebereichs
des ADC aus. Auch das waere ein voellig akzeptabler Wert.
Es geht ihm aber nicht drum ob etwas akzeptabel ist oder nicht, er
möchte verstehen warum das so ist.
Er misst an einem Testpunkt zwischen Spannungsteiler und ADC eine
Spannung und bekommt vom ADC einen Wert der nicht dazu passt. Das würde
ich auch nicht akzeptieren ohne Erklärung denn vermutlich kann man daran
was ändern.
Danke für deine Klarstellung. Genau das wollte ich gerade schreiben.
Ich glaube so schwer ist das nicht zu verstehen. Alle habens gerafft, nur Motopick steht noch neben der Spur.
@Motopick
Sorry nicht böse gemeint, aber ich glaube dass dir eher lesen gut täte. Oder sag mir was du bei der Konfiguration am TP26 für eine Spannung erwartest, damit der ADC 4095 ausgibt. 5V, 6V?? oder einfach irgendwie höher wie 3V? wohl kaum..
Ich hoffe du siehst es ein, wenn wir morgen ein Rennen in der Formel 1 fahren und das Auto nicht läuft, brauchen wir nicht über die Strecke und sonstigen Strategien quatschen, um erster zu werden, wenn das Auto nicht richtig funzt. Soviel zu deinen Konstruktionsprinzipien über Sicherheiten und Fehlern. Das ist alles Zukunftsmusik.
Ich komme heute wahrscheinlich nicht mehr dazu, um daran zu arbeiten.
Das spräche für eine Referenzspannung des ADC von 3.3V statt 3.0V ...
Blöd nur, dass der STM32L431CBT6 laut Datenblatt eine interne Referenz
von 3.0V ± 10mV im Temperaturbereich 25° ... 35° hat.
Kann man bei diesem STM am VREF+ Pin diese ADC-Referenzspannung messen?
Ich meine, es ist doch absolut seltsam, dass ein 12-Bit ADC einen Wert
von 3660 liefert, wenn laut Oszi 3.0V stabil am Eingang anliegen und die
ADC-Referenz auch 3.0V beträgt.
Da hat man dann halt schnell die Versorgung des STM im Verdacht ...
LG, Sebastian
Du bringst es auf den Punkt.
Jetzt sind einige Tipps gekommen. ich muss erstmal Daten sammeln und melde mich dann nochmals.
Vorsicht! Die interne Referenzspannung bei den meisten STM32 dient nur dem Abgleich. Die ADC-Werte werden immer auf die Versorgungsspannung(!) bezogen, also ~3,3V.
Bei bekannter und stabiler Versorgungsspannung kannst du den ADC-Wert der internen Referenzspannung auslesen und damit die exakte interne Referenzspannung ermitteln.
Bei schwankender Versorgungsspannung lässt sich dann über den momentanen ADC-Wert der internen Referenz auf den momentanen Wert der Versorgungsspannung schließen und damit auch auf den momentanen Referenzspannungswert deiner ausgelesenen ADC-Werte.
Nein. Man kann die interne Referenz zwar auch AD wandeln und so den Wert davon bekommen, aber es gibt auch den VREFBUF Datenblatt 3.17.
Damit kann man VREF puffern und als Referenz für den ADC oder für externes Zeug verwenden.
Aber: VREFBUF kann nur 2.048 V und 2.5 V.
Ich:
Wenn schnell abgetastet, dann könnte Problem entstehen.
Dann mach doch für deine Aussage einen neuen Thread auf. Hier gibt es keinen Anlass für eine schnelle Abtastung und damit auch nicht das von dir angesprochene Problem, weil es sich um einen billigen, stinknormalen Gasgriff handelt.
Dann mach doch für deine Aussage einen neuen Thread auf. Hier gibt es
keinen Anlass für eine schnelle Abtastung und damit auch nicht das von
dir angesprochene Problem, weil es sich um einen billigen, stinknormalen
Gasgriff handelt.
Ich habe nie behauptet, dass da schnell abgetastet wird. Aber da der ADC schnell abtasten kann habe ich auf mögliche Probleme hingewiesen.
Dann muss der TO wohl auf einer erdnahen Umlaufbahn sein.
Von einer geistigen "Mangellage" tappt er in die Naechste.
Die er ja aber auch selbst verursacht.
Und was er auch anstellt, wirklich genau wird so sein ADC nie sein
und werden. Er kennt das Wort "ratiometrisch" naemlich nicht.
(Hier standen noch einige Zeilen ueber das zu erwartende Berufsleben.
Wenn die nicht eintreten sollen, muesste der TO seine Arbeitsweise
aber deutlich aendern.)
Jedes Studium welches nicht genau die Inhalte vom Ingenieusstudium hat ist automatisch mangelhaft? Ist "die Weisheit mit Löffeln fressen" da eigentlich Wahlpflicht? Sagst du auch deinem Arzt er hätte lieber mal Ingenieur studiert?
Jedes Studium welches nicht genau die Inhalte vom Ingenieusstudium hat
ist automatisch mangelhaft? Ist "die Weisheit mit Löffeln fressen" da
eigentlich Wahlpflicht? Sagst du auch deinem Arzt er hätte lieber mal
Ingenieur studiert?
Kenntnisse von "Quereinsteigern" sind naturgemaess in der
Vollstaendigkeit und im Detail als mangelhaft anzusehen.
Dem Informatiker reicht im Zusammenhang mit einem ADC, die formal
richtige Loesung, diesen ADC an die Quelle anzuschliessen, und den
ADC moeglicherweise mit einer stabilen Referenz zu versorgen.
Ein Elektroniker weiss natuerlich, dass das nicht der Weisheit
letzter und bester Schluss ist. Da Informatiker ausserdem ganz
ueberwiegend nicht in der Lage sind, ihre Arbeit selbstkritisch zu
reflektieren und zu hinterfragen, bleibt solcher Informatikermurks
dann im Produkt erhalten.
Mein Studium habe ich sehr entspannt wahrgenommen. Meine schlechteste
Note in den Hauptfaechern war ein "Zwei". Der Rest war besser.
Es gab auch Faecher, in denen mein Durchschnitt auf .0 endete.
Und das war vor der Noteninflation.
Ich bin kerngesund. Mein letzter Arztbesuch ist einige Jahre her.
Das war ein ausgebildeter Sportarzt, in seinen besten Jahren.
Mit einigem Befremden habe ich dann von seinem ploetzlichen
Ableben erfahren.
Will man eine Potistellung einlesen, dann nimmt man dazu die ratiometrische Messung. D.h. die Referenz des ADC wird von der gleichen Spannung abgeleitet, an der auch das Poti hängt.
Will man eine Potistellung einlesen, dann nimmt man dazu die
ratiometrische Messung. D.h. die Referenz des ADC wird von der gleichen
Spannung abgeleitet, an der auch das Poti hängt.
Da hat mal ein richtiger Elektroniker gesprochen. :)
Weil es so einfach ist, dass auch wir Informatiker das können ;-)
Wohl kaum. Von der Anfangsstaerke des Matrikels blieb zum Schluss
nur die Haelfte uebrig. Und wer nix konnte, landete im Schiffs- oder
Waschmaschinennbau. Sich seinen Wunscharbeitsplatz selbst auszusuchen,
war im "System" eigentlich auch nicht vorgesehen.
Aber auch das habe ich geschafft. Ganz ohne Vitamin B. Nur mit Leistung.
Und scheinbar kannst du ja auch bis heute nichts mit "ratiometrisch"
anfangen. Deine letzten Beitraege legen das jedenfalls nahe.
Wenn dein Gasgriff ein Poti mit sagen wir 10 kOhm oder 50 kOhm ist und du schaltest einen Spannungsteiler dahinter, der in der gleichen Größenordnung liegt, kann da nichts Gutes bei raus kommen.
Einfacher wäre es den Gasgriff auch an 3V3 zu hängen oder einen passend berechneten Vorwiderstand dazwischen zu schalten, um den Maximalwert auf 3V zu begrenzen. Ansonsten wird ein Impedanzwandler nötig
Sich seinen Wunscharbeitsplatz selbst auszusuchen,
war im "System" eigentlich auch nicht vorgesehen.
Aber auch das habe ich geschafft. Ganz ohne Vitamin B. Nur mit Leistung.
Und scheinbar kannst du ja auch bis heute nichts mit "ratiometrisch"
anfangen
Sicher kann ich das. Aber ich habe es nicht nötig mit so etwas trivialem anzugeben. Aber wenn du es unbedingt wissen musst: Rein zufällig habe ich sogar schon eine Gaspedal-Auswertung für ein Rennauto implementiert. Mit Erkennung der Tot-Bereiche/Wire-Off, Konsistenzprüfung der redundanten Potis, Motor-Sanftabschaltung im Fehlerfall, Auto-Selbst-Kalibration des Messbereichs, außerdem Bremsdruck-Messung und Konsistenzcheck dagegen, CAN-Anbindung und Logging. Aber führt uns das hier weiter? Nö. Daher hatte ich sinnvolle Beiträge geschrieben, mit Hinweis auf die Funktionsweise der Referenz und Sampletime-Einstellung sowie Kalibration.
Wenn dein Gasgriff ein Poti mit sagen wir 10 kOhm oder 50 kOhm ist und
du schaltest einen Spannungsteiler dahinter, der in der gleichen
Größenordnung liegt, kann da nichts Gutes bei raus kommen.
Mit dem Multimeter gemessen erhalte ich eben die
Offsetspannung 0.83V, halt heruntergebrochen mit dem Spannungsteiler an
TP26 0.575V, und 4.4V bei Maximalstellung am Spannungsteiler TP26 3V.
Und wenn die Performance fehlt, wird der Informatiker fremdgecancelt.
Auch voellig normal. Kennst du ja selbst?
Was heute "normal" ist, war in einem anderen Wirtschaftssystem und
zu seiner Zeit uebrigens eher die gaaaanz seltene Ausnahme.
Sicher kann ich das. Aber ich habe es nicht nötig mit so etwas trivialem
anzugeben. ...
Die Erwaehnung eines trivialen Begriffs ist also angeben?
... Daher hatte ich sinnvolle Beiträge geschrieben, mit
Hinweis auf die Funktionsweise der Referenz und Sampletime-Einstellung
sowie Kalibration.
Ich halte nichts davon, fuer faule TOs Referenzen "fremdzulesen".
Das sollen sie mal schoen selbst machen.
Diese Beitraege waren sicher fuer den TO hoechst wertvoll.
Aber im Moment trollst du nur noch.
Und das ganz schlecht.
Ich halte nichts davon, fuer faule TOs Referenzen "fremdzulesen"
Dann bist du im Forum falsch. Jeder fängt mal an, und die ST Doku kann einen schon erschlagen. Und du hast nichts zu den spezifischen Tücken der STM32-ADCs gesagt, nur Allgemeinplätze und Nörgeleien. So toll scheinst du dich auch nicht auszukennen.
Ich halte nichts davon, fuer faule TOs Referenzen "fremdzulesen"
Dann bist du im Forum falsch. Jeder fängt mal an, und die ST Doku kann
einen schon erschlagen. Und du hast nichts zu den spezifischen Tücken
der STM32-ADCs gesagt, nur Allgemeinplätze und Nörgeleien. So toll
scheinst du dich auch nicht auszukennen.
Ich bin hier. Also kann ich hier nicht falsch sein.
Mit dem L431 habe ich tatsaechlich noch nicht gearbeitet.
Spezifika kann ich daher nicht kennen.
Wenn ich einen Controller auswaehle, wird vor der eigentlichen
Projektarbeit, die im Projekt zu erwartende Peripherie evaluiert.
Bei einem ADC z.B. Rauschen, Linearitaet, TK etc. pp. und natuerlich
die Konfiguration.
Darauf aufbauend, gibt es dann im allgemeinen auch keine
"Ueberraschungen". Wenn der TO diese Schritte auslaesst, ist er
selbst verantwortlich.
Die Berechnung erfolgt folgendermassen:
voltage = (adcValue * adcRefVoltage) / period; // ADC-Wert in eine
Spannung umrechnen
adcRefVoltage = 3V
period = 4096
Wie schon einige Vorredner (Niklas, Mikey, Gustl, auch Motopick hat indirekt darauf hingewiesen) erwähnt haben, ist diese deine Berechnung höchstwahrscheinlich fehlerhaft. Ich hab mir diesbezüglich mal das Referenzhandbuch des STM32L43 zu Gemüte geführt. Der ADC des STM32L43 misst nicht ratiometrisch zu der internen 3.0V-Referenzspannung Vrefint, sondern zu Vref+ beziehungsweise Vdda! Ich habe den entsprechenden Ausschnitt aus dem RM angehängt.
Sollte dein STM also mit 3.3V versorgt werden, so würde dies deine Meßwerte erklären. Dann müssten diese 3.3V an TP26 den ADC-Wert 4095 ergeben.
Der ganze Drops waere uebrigens gelutscht, wenn er seinen "komischen"
Gasdrehgriff auch aus den 3.3 V des Controllers versorgen wuerde.
Das waere dann auch "echt" ratiometrisch und wuerde den vermutlich
voellig flasch dimensionierten Spannungsteiler eruebrigen.
Es koennte natuerlich sein, dass der Geber bei 3.3 V nicht mehr
arbeitet. Das waere dann persoenliches Pech.
Edith:
Ein 1 uF Kondensator zwischen ADC-Eingang und GND bliebe weiterhin
eine brilliante Idee um Stoerungen wegzufiltern.
Der Vorposter hat ratiometrisch irgendwie auch nicht richtig verstanden.
ADC Messwerte und Messungen sind idR durch Kalibrieren zu korrigieren. Schon mal über eine Zwei-Punkt Korrektur nachgedacht? Offset Fehler beim ADC sind eig. normal.
Zwei Messpunkte festlegen, extern Spannung anlegen und Korrekturgerade aus IST/SOLL berechnen. Diese musst du dann in deiner Software entsprechend auf die Messwerte anwenden. Dadurch erhälst du für jeden Messpunkt einen Korrekturwert.
So kannst du den Offset raushauen. Nichtlinearitäten sind eher dann eine theoretische Betrachtung hier aber nicht sonderlich relevant.
Wenn ich sehe wie kompliziert eine solch recht einfache Sache angegangen wird muss ich mich wundern.
Ich habe seit über 20 Jahren mit diesen Drehgriffen zu tun und hunderte von diesen eingesetzt. Normalerweise bekommt man die nur mechanisch kaputt, elektrisch hatte ich da nie einen Defekt.
Also zuerst einmal, es sind analoge Hallsensoren drin die 5V brauchen, mit 3,3V wird das nichts. Sie geben eine Spannung aus die wie schon festgestellt mit gewissen Streuungen von 0,85 bis 4,2V geht.
Sind also als Spannungsquelle zu sehen und NICHT als Poti.
Die über einen Spannungsteiler direkt an eine ADC Eingang zu schalten ist nicht die beste Idee.
Ich hab da immer einen OPV als nicht invertierenden Verstärker geschaltet als Impedanzwandler zwischengeschaltet. So hat man die Probleme mit dem Spannungsteiler gar nicht erst. Und auch die Anpassung an den ADC-Bereich ist so einfach zu machen. Der - Eingang des OPV wurde an eine einfache 'Ref' Spannung mit ner Si Diode in Flussrichtung gelegt damit der untere Pegel etwas runter kam. Absichtlich nicht ganz auf Null damit der kleine Sprung zur Einschalterkennung genutzt werden konnte. Auch die Fehlererkennung bei Drahtabriss muss bedacht werden. Dazu ist auch der Abstand von 4,2 bis 5V wichtig. Den Bereich von 0,85-4,2 auf den gesamten ADC Bereich zu spreizen ist also keine gute Idee.
Die alten Fahrradsteuerungen aus China hatten einen IC drin der diese Eckwerte entsprechend verwendet hat.
Ist schon klar das das nicht sonderlich stabil ist, doch für den Zweck reichte das aus. So super präzise brauchts für die Drehgriffabfrage nicht zu sein. Wenn man das will ist es auch kein Problem da was genaueres zu nehmen. In der Praxis war das nie nötig. Die Schwankungen kann man in der Software leicht berücksichtigen. So genau kann man den Griff in der Praxis ohnehin nicht bedienen.
Ich halte nichts davon, fuer faule TOs Referenzen "fremdzulesen"
Dann bist du im Forum falsch. Jeder fängt mal an, und die ST Doku kann
einen schon erschlagen. Und du hast nichts zu den spezifischen Tücken
der STM32-ADCs gesagt, nur Allgemeinplätze und Nörgeleien. So toll
scheinst du dich auch nicht auszukennen.
Ach Niklas lass ihn doch einfach reden. Bringt ja eh nichts. Wenn er meint er sei schon als Meister vom Himmel geflogen, dann lass ihn das glauben.
Mich wundert es immer wieder welche Respektlosigkeit hier manchmal herrscht. Man kann nicht einmal mehr sachlich über ein Thema sprechen. Aber noch mehr wundert mich, dass er immer noch nicht begriffen hat, worum es mir eigentlich geht und der Spannungsteiler eigentlich nur Mittel zum Zweck ist, um die Funktion und Implementierung des ADC zu testen. Hinzu kommt noch, dass er sich die Fragen selbst beantwortet und davon ausgeht der ITler (und ich bin nicht mal das) 😊 sei ein Blödmann, nur weil er nicht ratiometrisch einliest.. warum, weshalb, wieso interessiert hier nicht
Wie gesagt es macht einfach keinen Sinn sich mit solchen Leuten zu unterhalten, sich auf das selbe Niveau herab zu lassen, sich im Ton zu vergreifen und zuletzt nicht respektvoll mit anderen umzugehen. Das ist nicht meine Art. Deshalb Ignoremodus on!
Analog ratiometrisch zu messen ist mit deinem Mikrocontroller auch schwierig, weil du dem ADC seine Referenzspannung nur über Vdda vorgeben kannst, also erst aus der Drehgriffversorgung eine niederimpedante Quelle ableiten müsstest, die zudem beim Hochlauf von Vdd das richtige Timing haben müsste.
Du könntest allerdings die Drehgriffversorgung selbst, gleichartig spannungsgeteilt, auch noch messen, und dann digital ratiometrisch rechnen.
Aber wenn deine Versorgungsspannungen einigermaßen bekannt sind, scheint mir das ratiometrische Vorgehen für diese Anwendung übertrieben.
Aber zurück zur Ausgangsfrage: Läuft der STM denn tatsächlich mit den vermuteten 3.3V?
Die Berechnung erfolgt folgendermassen:
voltage = (adcValue * adcRefVoltage) / period; // ADC-Wert in eine Spannung umrechnen
adcRefVoltage = 3V
period = 4096
Du solltest also adcRefVoltage in deinem Code auf 3.3V ändern. Und laut Berechnungsformel im Datenblatt sollte zudem period (dort FULL_SCALE genannt) 4095 sein.
Dann sollte fürs Erste (zumindest was die "seltsamen" ADC-Meßwerte betrifft) alles passen.
Die Berechnung erfolgt folgendermassen:
voltage = (adcValue * adcRefVoltage) / period; // ADC-Wert in eine Spannung
umrechnen
adcRefVoltage = 3V
period = 4096
Du solltest also adcRefVoltage in deinem Code auf 3.3V ändern. Und laut
Berechnungsformel im Datenblatt sollte zudem period (dort FULL_SCALE
genannt) 4095 sein.
Dann sollte fürs Erste (zumindest was die "seltsamen" ADC-Meßwerte
betrifft) alles passen.
LG, Sebastian
Hallo Sebastian,
Vielen Dank für deine Bemühungen.
Also in diesem Fall stimmt meine Formel bis auf die 3.3V und ja 4095 statt 4096.
Ich habe das im Manual selbst mal nachgeschlagen. Was ich nicht verstehe ist, warum sollte VDDA nicht bekannt sein? Das ist ja schon aufgrund der Beschaltung des uC bekannt. Oder meint man hier was dieser exakt für einen Wert hat, da dieser von der Versorgung abhängt und diese variieren kann.
Und was ist denn eigentlich
VREFINT_CAL is the VREFINT calibration value
&
VREFINT_DATA is the actual VREFINT output value converted by the ADC
Ich meine wie kommt man zu diesen Werten? STRG+F nach VREFINT_CAL & VREFINT_DATA gibt kein Ergebnis heraus. Die stehen so auch in keinem Register, sodass man sie auslesen könnte.
Bzgl. Vrefint (internal Ref Voltage) sind auch gemäss Bild 2 unterschiedliche Werte angegeben. Deshalb bin ich von 3V ausgegangen, weil ich vorher die anderen Werte zw. 1.18 und 1.23 nicht gesehen hatte. Sonst hätte ich mir die Frage schon vorher gestellt.
Ich habe das im Manual selbst mal nachgeschlagen. Was ich nicht verstehe
ist, warum sollte VDDA nicht bekannt sein? Das ist ja schon aufgrund der
Beschaltung des uC bekannt. Oder meint man hier was dieser exakt für
einen Wert hat, da dieser von der Versorgung abhängt und diese variieren
kann.
Genau. Ein 3V3-Linearregler ist halt keine exakte Spannungsreferenz, er liefert vielleicht 3.25V oder 3.35V.
Wenn du es also genauer haben willst, dann misst du die Spannung zwischen Vdda und Vssa mit einem genauen Voltmeter, und benutzt dann diesen Wert als adcRefVoltage in deinem Code.
Dieser Wert kann sich aber u.U. temperaturabhängig verändern. Da kann dann die interne 1.2V-Bandgap-Referenz Vrefint des STM32 helfen (https://de.wikipedia.org/wiki/Bandabstandsreferenz#Ausgangsspannung). Deren exakter Wert variiert zwar von IC zu IC, aber ihre Temperaturabhängigkeit ist relativ gering, und vor allem ist ihr Wert ab Werk mit dem ADC (gegen eine Vdda von 3.0V, das bedeuten die Angaben unter Description im RM wohl!) ermittelt und an Speicheradresse 0x1FFF75AA/AB gespeichert worden (dies ist VREFINT_CAL).
Wenn du also nun selbst die Bandgap-Referenz Vrefint erneut mit dem ADC vermisst (dies ergibt VREFINT_DATA), dann ergibt dessen Verhältnis zu dem damals für 3.0V ermittelten Wert VREFINT_CAL einen Faktor, der dir mit 3.0V multipliziert relativ genau die aktuelle Vdda errechnet. Und diese so recht genau ermittelte Vdda kannst du benutzen, um dann bei folgenden Messungen von Eingangspins womöglich noch genauer zu wissen was 4095 an absoluter Spannung bedeutet.
Dieser ganze Aufwand ist allerdings für deine Anwendung relativ witzlos, weil Vdda vielleicht gar nicht so sehr schwankt, oder weil die Spannungsversorgung deines Drehgriffs auch schwanken könnte. Diese Schwankungen könnte eine ratiometrische Messung auffangen.
Ich denke aber all das ist unnötig, und dass die Annahme von Vdda mit 3.3V für deine Zwecke ausreicht.
Ich habe das im Manual selbst mal nachgeschlagen. Was ich nicht verstehe
ist, warum sollte VDDA nicht bekannt sein? Das ist ja schon aufgrund der
Beschaltung des uC bekannt. Oder meint man hier was dieser exakt für
einen Wert hat, da dieser von der Versorgung abhängt und diese variieren
kann.
Genau. Ein 3V3-Linearregler ist halt keine exakte Spannungsreferenz, er
liefert vielleicht 3.25V oder 3.35V.
Wenn du es also genauer haben willst, dann misst du die Spannung
zwischen Vdda und Vssa mit einem genauen Voltmeter, und benutzt dann
diesen Wert als adcRefVoltage in deinem Code.
Dieser Wert kann sich aber u.U. temperaturabhängig verändern. Da kann
dann die interne 1.2V-Bandgap-Referenz Vrefint des STM32 helfen
(https://de.wikipedia.org/wiki/Bandabstandsreferenz#Ausgangsspannung).
Deren exakter Wert variiert zwar von IC zu IC, aber ihre
Temperaturabhängigkeit ist relativ gering, und vor allem ist ihr Wert ab
Werk mit dem ADC (gegen eine Vdda von 3.0V, das bedeuten die Angaben
unter Description im RM wohl!) ermittelt und an Speicheradresse
0x1FFF75AA/AB gespeichert worden (dies ist VREFINT_CAL).
Wenn du also nun selbst die Bandgap-Referenz Vrefint erneut mit dem ADC
vermisst (dies ergibt VREFINT_DATA), dann ergibt dessen Verhältnis zu
dem damals für 3.0V ermittelten Wert VREFINT_CAL einen Faktor, der dir
mit 3.0V multipliziert relativ genau die aktuelle Vdda errechnet. Und
diese so recht genau ermittelte Vdda kannst du benutzen, um dann bei
folgenden Messungen von Eingangspins womöglich noch genauer zu wissen
was 4095 an absoluter Spannung bedeutet.
Dieser ganze Aufwand ist allerdings für deine Anwendung relativ witzlos,
weil Vdda vielleicht gar nicht so sehr schwankt, oder weil die
Spannungsversorgung deines Drehgriffs auch schwanken könnte. Diese
Schwankungen könnte eine ratiometrische Messung auffangen.
Ich denke aber all das ist unnötig, und dass die Annahme von Vdda mit
3.3V für deine Zwecke ausreicht.
HTH.
LG, Sebastian
Hey Sebastian, vielen Dank für deine Erklärungen. Jetzt habs ich gerafft. Und ja klar, für meine Anwendung ist das Overkill und eigentlich muss der ADC nicht mal genau sein, aber trotzdem muss er richtig konvertieren. Ich wollte das mit den obigen Vrefint Werten einfach nur verstehen.
Bei 0.475V (ADC Wert ca. 680) statt 0.575V (ADC Wert 780) hätte ich jetzt nichts gesagt, aber wenn der ADC tatsächlich umgerechnet 2.6V statt statt 3 konvertiert, sprich 3600 statt 4095 ausgibt, ist das dann schon fraglich.
Ich passe den Code mal an.
Ich bedanke mich herzlich bei dir und allen anderen Helfenden.
Hebt die Ohren steif Leute und passt auf euch auf. 😊
Ich wollte das mit den obigen Vrefint Werten einfach nur verstehen.
Du kannst ja spaßeshalber Vrefint mal mit dem ADC messen. Da sollte, wenn ich alles richtig verstanden habe, irgendwas zwischen 1450 und 1530 bei rauskommen, und der Wert sollte ungefähr 91% des in VREFINT_CAL hinterlegten Wertes betragen (weil du ja gegen 4095=3.3V misst, und VREFINT_CAL bei 4095=3.0V ermittelt wurde).
Für einen Gasgriff braucht man eh keine Präzision, da der Mensch ja nachregelt.
Man muß nur darauf achten, daß man keinen Einstellbereich verschenkt. In der Praxis hat man daher an den Endanschlägen einen kleinen Totbereich einberechnet, wo sich der Stellwert nicht mehr ändert. So läßt sich der maximale Stellbereich des Motors ausnutzen. Denn keiner will einen Motor, der nur 95% der Nennleistung schafft.
Ich wollte das mit den obigen Vrefint Werten einfach nur verstehen.
Du kannst ja spaßeshalber Vrefint mal mit dem ADC messen. Da sollte,
wenn ich alles richtig verstanden habe, irgendwas zwischen 1450 und 1530
bei rauskommen, und der Wert sollte ungefähr 91% des in VREFINT_CAL
hinterlegten Wertes betragen (weil du ja gegen 4095=3.3V misst, und
VREFINT_CAL bei 4095=3.0V ermittelt wurde).
LG, Sebastian
Werde ich mal probieren. Aber im Moment haben uns die Dozenten mit Aufgaben vollgestopft, sodass ich das Programmieren erstmal beiseite legen muss 😄