Forum: Mikrocontroller und Digitale Elektronik STM32 ADC misst mist


von Sebastian T. (sebastian_tsch)


Angehängte Dateien:

Lesenswert?

Ich habe hier einen STM32F3 der mit den ADC Werten ziemlich daneben 
liegt. Über eine akkuraten Spannungsteiler (1% Widerstände) 1/10 
versuche ich die Eingangsspannung zu messen, welche 8.2V beträgt. Die 
Gemessene Spannung am ADC Eingang stimmt mit der berechnet von 745mV 
überein, doch der ADC gibt mir nach Berechnung 690mV (ohne die 
Multiplikation mit 11 unten im Code) aus. Ich verwende die HAL Libraries 
mit den Einstellungen im Anhang. Mit über 600 cycles sollte die 
Genauigkeit eigentlich ziemlich gut sein. Die Spannungquelle mit 3.3V is 
sehr genau und es liegen auch stabile 3.3V am VRef Eingang des uC an.

Zum auslesen des ADC wertes und zur Rekonstruktion der Spannung verwende 
ich folgenden Teilcode:
1
HAL_ADC_Start(&hadc1);
2
  while(HAL_ADC_PollForConversion(&hadc1,0) != HAL_OK);
3
  input_voltage=HAL_ADC_GetValue(&hadc1);
4
  input_voltage=(input_voltage/4095)*VOLTAGE_REF*11; //Voltage_ref 3300mV
5
  HAL_ADC_Stop(&hadc1);

Jemand eine Idee was ich da falsch mache?

von hp-freund (Gast)


Lesenswert?

Sebastian T. schrieb:
> input_voltage=(input_voltage/4095)*VOLTAGE_REF*11; //Voltage_ref 3300mV

Diese Zeile würde ich komplett zerlegen.
Es sind alles int Werte.
Was ergibt z.B. int(745/4095) ?

von hp-freund (Gast)


Lesenswert?


von Anfängermist (Gast)


Lesenswert?

Sebastian T. schrieb:
> STM32 ADC misst mist

Nein, du rechnest Mist. Integer und float wild durcheinander
und ohne zu überlegen was du wirklich machst.

von Nop (Gast)


Lesenswert?

Es scheint ja um eine Art Spannungsüberwachung zu gehen, wahrscheinlich 
im Bereich 0-30V, sonst ergibt der heftige Teiler keinen Sinn.

Da würde ich ernsthaft überlegen, nicht zur Laufzeit von ADC-Reading 
nach Spannung zu konvertieren, sondern beim Programmieren von den 
relevanten Spannungen die entsprechenden 12bit-ADC-Werte auszurechnen 
und mit denen zu arbeiten. Mit defines, logischerweise.

Das ist in der Ausführung schneller und auch noch genauer.

von STK500-Besitzer (Gast)


Lesenswert?

Nop schrieb:
> Da würde ich ernsthaft überlegen, nicht zur Laufzeit von ADC-Reading
> nach Spannung zu konvertieren, sondern beim Programmieren von den
> relevanten Spannungen die entsprechenden 12bit-ADC-Werte auszurechnen
> und mit denen zu arbeiten. Mit defines, logischerweise.

Die Umwandlung in einen Spannungswert braucht man doch erst, wenn ein 
Mensch die Zahlen lesen will/muss.

von Nop (Gast)


Lesenswert?

STK500-Besitzer schrieb:

> Die Umwandlung in einen Spannungswert braucht man doch erst, wenn ein
> Mensch die Zahlen lesen will/muss.

Eben. Typisch für µC-Anwendungen ist aber, daß sie auf bestimmte 
Schwellwerte hin irgendeine Aktion tun (oder lassen) sollen.

von Florian (Gast)


Lesenswert?

Laut dem ersten Bild wurde adc 2 auf pins konfiguriert,
Dann kommt aber adc 1 Modul Konfiguration und der
Handle trägt den adc1 suffix..????

Bei deiner Berechnung, wenn tatsächlich int sollte
eigentlich 0 raus kommen außer bei adc fullscale..
Multipliziere erst und dividiere dann dies passt mit
einem int32.

von Sebastian T. (sebastian_tsch)


Lesenswert?

Wie Florian bemerkt hat, würde 0 rauskommen, wenn es an der 
Konvertierung läge. Bei mir ist ein Offset vorhanden. Kann ich den 
Offset irgenwie automatisch Kalibrieren?

Florian schrieb:
> Laut dem ersten Bild wurde adc 2 auf pins konfiguriert,
> Dann kommt aber adc 1 Modul Konfiguration und der
> Handle trägt den adc1 suffix..????

ADC1 misst die Eingangsspannung, ADC2 verwendet 2 Channels und misst 
etwas anderes aus.

Edit: Habe es, lag nur an der Kalibrierung: 
HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);

Diese war bei meinem letzten STM32F4 nicht notwendig.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Was ist das für eine Software, die du zum Konfigurieren der Peripherie 
verwendest? :)

von Horst (Gast)


Lesenswert?


von Mampf F. (mampf) Benutzerseite


Lesenswert?

Horst schrieb:
> CubeMX, gibt es bei ST umsonst:
> http://www.st.com/content/st_com/en/products/devel...

Vielen Dank! :)

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.