Forum: Analoge Elektronik und Schaltungstechnik ADC - ungenaue Werte


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Den (neugieriger)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

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

Warum sind die Werte so daneben? Ist das normal?

static void MX_ADC1_Init(void)
{

  /* USER CODE BEGIN ADC1_Init 0 */

  /* USER CODE END ADC1_Init 0 */

  ADC_ChannelConfTypeDef sConfig = {0};

  /* USER CODE BEGIN ADC1_Init 1 */

  /* USER CODE END ADC1_Init 1 */

  /** Common config
  */
  hadc1.Instance = ADC1;
  hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  hadc1.Init.LowPowerAutoWait = DISABLE;
  hadc1.Init.ContinuousConvMode = ENABLE;
  hadc1.Init.NbrOfConversion = 1;
  hadc1.Init.DiscontinuousConvMode = DISABLE;
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  hadc1.Init.DMAContinuousRequests = DISABLE;
  hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  hadc1.Init.OversamplingMode = DISABLE;
  if (HAL_ADC_Init(&hadc1) != HAL_OK)
  {
    Error_Handler();
  }

  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_5;
  sConfig.Rank = ADC_REGULAR_RANK_1;
  sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;
  sConfig.SingleDiff = ADC_SINGLE_ENDED;
  sConfig.OffsetNumber = ADC_OFFSET_NONE;
  sConfig.Offset = 0;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN ADC1_Init 2 */

  /* USER CODE END ADC1_Init 2 */

}

: Bearbeitet durch User
von Johannes T. F. (jofe)


Lesenswert?

Den schrieb:
> Ich lese einen billigen stinknormalen Gasgriff (Poti) der mit 5V
> betrieben wird ein.

Welchen Innenwiderstand hat die Quelle des analogen Signals?
Beeinflusst der Spannungsteiler etwa diesen Pegel?

von Gustl B. (-gb-)


Lesenswert?

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?

Johannes F. schrieb:
> 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.

von Den (neugieriger)


Angehängte Dateien:

Lesenswert?

Hallo Gustl

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.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Führst du die Selbstkalibrierung vom ADC durch?

von Den (neugieriger)


Lesenswert?

Niklas G. schrieb:
> Führst du die Selbstkalibrierung vom ADC durch?

Hallo Niklas

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?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Den schrieb:
> Da stand nichts von Kalibrierung

Das steht im Reference Manual.

Den schrieb:
> Muss dann das eigentlich vor jeder Konvertierung machen oder eeicht es
> einmal nach dem ADC Start?

Einmal beim Start. Da gibt es eine HAL Funktion für.

von Den (neugieriger)


Lesenswert?

Niklas G. schrieb:
> Den schrieb:
>> Da stand nichts von Kalibrierung
>
> Das steht im Reference Manual.
>
> Den schrieb:
>> Muss dann das eigentlich vor jeder Konvertierung machen oder eeicht es
>> einmal nach dem ADC Start?
>
> Einmal beim Start. Da gibt es eine HAL Funktion für.

Ok danke
Ich mache beides morgen gleich. Widerstände anpassen und Kalibrieren.

Gute Macht 😊

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Den schrieb:
> Gute Macht 😊

Möge die Macht mit dir sein!

von Den (neugieriger)


Angehängte Dateien:

Lesenswert?

Niklas G. schrieb:
> Den schrieb:
>> Gute Macht 😊
>
> Möge die Macht mit dir sein!

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.

Woran kann es noch liegen?

von Motopick (motopick)


Lesenswert?

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.

von Klaus H. (hildek)


Lesenswert?

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.

von Den (neugieriger)


Lesenswert?

Hallo Klaus

Klaus H. schrieb:
> 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.

von Motopick (motopick)


Lesenswert?

Den schrieb:
> 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.

Siehe oben.

von Den (neugieriger)


Lesenswert?

Motopick schrieb:
> Den schrieb:
>> 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.
>
> Siehe oben.

von Rainer W. (rawi)


Lesenswert?

Gustl B. schrieb:
> 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.

von Motopick (motopick)


Lesenswert?

Den schrieb:
> 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.

von Gustl B. (gustl_b)


Lesenswert?

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

von Motopick (motopick)


Lesenswert?

Gustl B. schrieb:
> ... Wenn schnell abgetastet wird dann kann das zu
> einem Problem werden.

Es geht um einen Gasgriff.

> Hier ist das vermutlich nicht das Problem. Und auch der geforderte
> Kondensator wird die Situation nicht spürbar verbessern.

Eine niedrige dynamische Quellimpedanz hat bei nahezu DC noch nie
geschadet.

> Mit ADCs innerhalb von uCs kenne ich mich nicht aus.

Ja. Das koennte wohl sein.

von Den (neugieriger)


Lesenswert?

Motopick schrieb:
> Den schrieb:
>> 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...

: Bearbeitet durch User
von Marci W. (marci_w)


Lesenswert?

Hallo Den,

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.

ciao

Marci

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Marci W. schrieb:
> 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.

von Motopick (motopick)


Lesenswert?

Den schrieb:
> Motopick schrieb:
>> Den schrieb:
>>> 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.

von Sebastian W. (wangnick)


Lesenswert?

Den schrieb:
> und erreicht bei 3V am tP26 nur einen Wert von 3660 und nicht 4095

Das spräche für eine Referenzspannung des ADC von 3.3V statt 3.0V ...

LG, Sebastian

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Gustl B. schrieb:
> Wenn schnell abgetastet wird dann kann das zu einem Problem werden.

Sag mir einen vernünftigen Grund, warum ein billiger, stinknormaler 
Gasgriff (Poti) schnell (aus Sicht eines uC) abgetastet werden sollte.

von Gustl B. (gustl_b)


Lesenswert?

Deine Frage passt nicht zu meiner Aussage.

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.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Den schrieb:
> sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5

Es wird doch gar nicht so schnell abgetastet. Im Datasheet steht wie 
hoch die Eingangsimpedanz sein darf, in Abhängigkeit von der Sampletime.

von Gustl B. (gustl_b)


Lesenswert?

Motopick schrieb:
> 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.

von Klaus H. (hildek)


Lesenswert?

Sebastian W. schrieb:
> 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.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Klaus H. schrieb:
> Blöd nur, dass der STM32L431CBT6 laut Datenblatt eine interne Referenz
> von 3.0V ± 10mV im Temperaturbereich 25° ... 35° hat.

Die wird aber nicht direkt benutzt um den ADC zu betreiben. Die kann man 
nur auch messen und damit manuell die Werte abgleichen.

von Sebastian W. (wangnick)


Lesenswert?

Klaus H. schrieb:
> Sebastian W. schrieb:
>> 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.

LG, Sebastian

von Sebastian W. (wangnick)


Lesenswert?

Klaus H. schrieb:
> Sebastian W. schrieb:
>> 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

von Motopick (motopick)


Lesenswert?

Niklas G. schrieb:
> Die wird aber nicht direkt benutzt um den ADC zu betreiben. Die kann man
> nur auch messen und damit manuell die Werte abgleichen.

Und:
> und die ADC-Referenz auch 3.0V beträgt.

> muss ich mir das fette Manual zur Gemüte führen...

Das tut wohl dringend Not.

Edith:
Vermutlich muesste der TO auch sonst noch viel lesen.

: Bearbeitet durch User
von Den (neugieriger)


Lesenswert?

Gustl B. schrieb:
> Motopick schrieb:
>> 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.

von Den (neugieriger)


Lesenswert?

Sebastian W. schrieb:
> Klaus H. schrieb:
>> Sebastian W. schrieb:
>>> 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.

von Mikey M. (mikey_m)


Lesenswert?

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.

von Gustl B. (gustl_b)


Lesenswert?

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.

von Rainer W. (rawi)


Lesenswert?

Gustl B. schrieb:
> Deine Frage passt nicht zu meiner Aussage.
>
> 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.

von Gustl B. (gustl_b)


Lesenswert?

Gustl B. schrieb:
> 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.

In diesem Baustein ist das nicht vorhanden. VREF ist also die 
Versorgungsspannung.

Rainer W. schrieb:
> 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.

von Motopick (motopick)


Lesenswert?

> Motopick steht noch neben der Spur

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

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Motopick schrieb:
> Er kennt das Wort "ratiometrisch" naemlich nicht.

Hummeln kennen das Wort Aerodynamik auch nicht, fliegen aber trotzdem.

von Motopick (motopick)


Lesenswert?

Das "ratiometrisch" Informatikern auch ein Fremdwort ist,
liegt wohl an deren mangelhafter Ausbildung.

Und von Aerodynamik haben sie auch keine Ahnung.
Wo eine Hummel locker weiterfliegt, fliegen die naemlich auf die 
Schn....

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


Lesenswert?

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?

von Motopick (motopick)


Lesenswert?

Niklas G. schrieb:
> 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.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Motopick schrieb:
> Mein Studium habe ich sehr entspannt wahrgenommen

Weil es so einfach ist, dass auch wir Informatiker das können ;-)

von Peter D. (peda)


Lesenswert?

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.

von Motopick (motopick)


Lesenswert?

Peter D. schrieb:
> 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. :)

von Motopick (motopick)


Lesenswert?

Niklas G. schrieb:
> Motopick schrieb:
>> Mein Studium habe ich sehr entspannt wahrgenommen
>
> 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.

von Torben (microman10)


Lesenswert?

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

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


Lesenswert?

Motopick schrieb:
> Wohl kaum. Von der Anfangsstaerke des Matrikels blieb zum Schluss
> nur die Haelfte uebrig.

Uiuiui. Das ist in jedem Studium so.

Motopick schrieb:
> 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.

Ist für Informatiker normal.

Motopick schrieb:
> 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.

von Johannes T. F. (jofe)


Lesenswert?

Torben schrieb:
> 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.

Den Gedanken hatte ich auch erst, aber:

Den schrieb:
> 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.

von Motopick (motopick)


Lesenswert?

Niklas G. schrieb:

> Ist für Informatiker normal.

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.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Motopick schrieb:
> Und wenn die Performance fehlt, wird der Informatiker fremdgecancelt.

Aber unfähige Ingenieure werden behalten, aus Mitleid?

Motopick schrieb:
> Die Erwaehnung eines trivialen Begriffs ist also angeben?

Darauf wiederholt zu bestehen, und zu behaupten andere würden es nicht 
kennen und hätten deswegen eine mangelhafte Ausbildung - definitiv ja.

Motopick schrieb:
> 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.

von Motopick (motopick)


Lesenswert?

Niklas G. schrieb:
> Motopick schrieb:
>> Und wenn die Performance fehlt, wird der Informatiker fremdgecancelt.
>
> Aber unfähige Ingenieure werden behalten, aus Mitleid?

Ich bin selbststaendig taetig. Wenn der Kunde meine Leistung gut
befindet, gibt es immer ein Folgeprojekt.
Und das ist schon seit Jahren so.

> Darauf wiederholt zu bestehen,
Ich habe es nicht wiederholt. Du hast es wiederholt.
Mein Beitrag war hier der erste der darauf hingewiesen hat.

> Motopick schrieb:
>> 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.

von Sebastian W. (wangnick)


Angehängte Dateien:

Lesenswert?

Den schrieb:
> 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.

LG, Sebastian

: Bearbeitet durch User
von Motopick (motopick)


Lesenswert?

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.

: Bearbeitet durch User
von Joe J. (j_955)


Lesenswert?

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.

Jo

: Bearbeitet durch User
von Steffen W. (derwarze)


Lesenswert?

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.

: Bearbeitet durch User
von Johannes T. F. (jofe)


Lesenswert?

Steffen W. schrieb:
> Der - Eingang des OPV wurde
> an eine einfache 'Ref' Spannung mit ner Si Diode in Flussrichtung gelegt

Autsch, Temperatur-Drift ...

von Steffen W. (derwarze)


Lesenswert?

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.

von Den (neugieriger)


Lesenswert?

Niklas G. schrieb:
> Motopick schrieb:
>> Und wenn die Performance fehlt, wird der Informatiker fremdgecancelt.
>
> Aber unfähige Ingenieure werden behalten, aus Mitleid?
>
> Motopick schrieb im Beitrag
>
> Motopick schrieb:
>> 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!

von Sebastian W. (wangnick)


Lesenswert?

Den schrieb:
> nur weil er nicht ratiometrisch einliest

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?

LG, Sebastian

: Bearbeitet durch User
von Den (neugieriger)


Lesenswert?

Sebastian W. schrieb:

> Aber zurück zur Ausgangsfrage: Läuft der STM denn tatsächlich mit den
> vermuteten 3.3V?
>
> LG, Sebastian

Ja, 3V3.

von Sebastian W. (wangnick)


Lesenswert?

Den schrieb:
> Sebastian W. schrieb:
>> Aber zurück zur Ausgangsfrage: Läuft der STM denn tatsächlich mit den
>> vermuteten 3.3V?
> Ja, 3V3.

Dann entspricht ein ADC-Wert von 4095 diesen 3.3V.

Den schrieb:
> 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

: Bearbeitet durch User
von Den (neugieriger)


Angehängte Dateien:

Lesenswert?

Sebastian W. schrieb:
> Den schrieb:
>> Sebastian W. schrieb:
>>> Aber zurück zur Ausgangsfrage: Läuft der STM denn tatsächlich mit den
>>> vermuteten 3.3V?
>> Ja, 3V3.
>
> Dann entspricht ein ADC-Wert von 4095 diesen 3.3V.
>
> Den schrieb:
>> 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.

von Sebastian W. (wangnick)


Lesenswert?

Den schrieb:
> 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

: Bearbeitet durch User
von Den (neugieriger)


Lesenswert?

Sebastian W. schrieb:
> Den schrieb:
>> 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. 😊

von Sebastian W. (wangnick)


Lesenswert?

Den schrieb:
> 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

von Peter D. (peda)


Lesenswert?

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.

von Den (neugieriger)


Lesenswert?

Sebastian W. schrieb:
> Den schrieb:
>> 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 😄

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.