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
Bit TSVREFE in ADC_CCR muss gesetzt sein damit die internen Channels auf die entsprechenden Kanäle gelegt werden.
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
Die Formel zur Berechnung der Versorgungsspannung ist laut Datenblatt
1 | VDDA = 3.0 V x VREFINT_CAL / VREFINT_DATA |
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
