Forum: Mikrocontroller und Digitale Elektronik STM32F4 Internal Reference


von Felix F. (wiesel8)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche gerade über die interne Referenzspannung eines STM eine 
externe Spannung zu ermitteln.

Mit der Formel V = ADC_Value * 3300mV / 4095 funktioniert das auch sehr 
gut und ich bekomme den richtigen Wert.

Da meine Spannungsversorgung aber natürlich nie genau 3,3V beträgt, 
würde ich gerne die interne Referenzspannung für bessere Genauigkeit 
verwenden.
Die Formel V = ADC_Value * 1200 / ADC_VREF funktioniert aber leider 
nicht, da ich beim lesen des Kanal 17 immer ca. 1500 als Wert zurück 
geliefert bekomme (Adc_Read(ADC1, ADC_Channel_Vrefint);)

Schaltplan und Source im Anhang.

mfg

von Vincent H. (vinci)


Lesenswert?

Bit TSVREFE in ADC_CCR muss gesetzt sein damit die internen Channels auf 
die entsprechenden Kanäle gelegt werden.

von Felix F. (wiesel8)


Lesenswert?

Vincent H. schrieb:
> Bit TSVREFE in ADC_CCR muss gesetzt sein damit die internen Channels auf
> die entsprechenden Kanäle gelegt werden.

Hast du mal einen Blick in die Sourcen gemacht? Genau das mach ich 
nämlich:
1
// Enable Vrefint channel
2
ADC_TempSensorVrefintCmd(ENABLE);

mfg

von Vincent H. (vinci)


Lesenswert?

Die Formel zur Berechnung der Versorgungsspannung ist laut Datenblatt
1
VDDA = 3.0 V x VREFINT_CAL / VREFINT_DATA

von Felix F. (wiesel8)


Lesenswert?

Könntest du mir auch sagen, wo genau diese Formel steht? Wobei ich mir 
aber kaum vorstellen kann, dass der Wert so viel abweicht.

mfg

EDIT:
Ich möchte aber nicht die Versorgungsspannung berechnen, sondern eine 
externe am ADC

von Vincent H. (vinci)


Lesenswert?

Hm, das is eine ausgezeichnete Frage...

Ich hab die Formel auf die schnelle aus einem L4-Datenblatt (S.425 in 
RM0394) da ich mir fest eingebildet hab, dass der F4 auch diesen 
internen "calibration factor" VREFINT_CAL hat. Beim L4 liegt dieser 
Faktor als uint16_t auf der Adresse 0x1FFF75AA.

Auch der von dir gemessene Wert würde schwer dafür sprechen dass die 
Formel stimmt. Ich hab mal eben bei einem Board mit STM32L431 gemessen 
und da bekomm ich für VREFINT 1487. Das ergibt mit dem internen 
Kalibrationsfaktor dann in etwa 3.3V.

von Felix F. (wiesel8)


Lesenswert?

Der F446 hat diesen Calibration-Wert (S. 148) auch. Werde ihn mal in 
meine Berechnung miteinbeziehen.

https://www.st.com/resource/en/datasheet/stm32f446ze.pdf

Die verschiedenen Serien lassen sich aber sehr schlecht miteinander 
vergleichen. Allein beim F4 gibt es 2-3 verschiedene Ref_mans für die 
jeweiligen "Unterserien".

mfg

von Chris (Gast)


Lesenswert?

Felix F. schrieb:
> ich versuche gerade über die interne Referenzspannung eines STM eine
> externe Spannung zu ermitteln.
>
> Mit der Formel V = ADC_Value * 3300mV / 4095 funktioniert das auch sehr
> gut und ich bekomme den richtigen Wert.
>
> Da meine Spannungsversorgung aber natürlich nie genau 3,3V beträgt,
> würde ich gerne die interne Referenzspannung für bessere Genauigkeit
> verwenden.
> Die Formel V = ADC_Value * 1200 / ADC_VREF funktioniert aber leider
> nicht, da ich beim lesen des Kanal 17 immer ca. 1500 als Wert zurück
> geliefert bekomme (Adc_Read(ADC1, ADC_Channel_Vrefint);)

Auf die Spannung an AVCC kann man mit einem internen Kalibrationswert 
schließen, welcher bei ST in der Produktion vermessen wird. Bei einem 
Versuch habe ich damit eine Abweichung von etwa +- 10 mV. Je nach dem 
was du messen willst, kann das ausreichend sein oder nicht. Dann hilft 
die sehr ungenaue interne Referenzspannung aber auch nicht, da diese 
zwischen 1.2 - 1.25 V schwanken kann (Werte vom STM32F072).

Evtl hilft dir der Beitrag von mir weiter: 
Beitrag "STM32F072 ADC Genauigkeit trotz Kalibrierung nicht optimal"

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.