Forum: Mikrocontroller und Digitale Elektronik STM32L4xx VDDA errechnen


von Johnny S. (sgt_johnny)


Lesenswert?

Ich möchte bei meinem STM32L4xx die Versorgungspannung (VCC = VDDA) des 
Analogwandlers berechnen. Ich habe hier folgendes Beispiel im Netz 
gefunden und auf mich angepasst
1
#define VREFINT_CAL_ADDR   0x1FFF75AA 
2
#define VREFINT_CAL_VAL ((uint16_t*) VREFINT_CAL_ADDR)
3
4
void checkVoltage(void){
5
uint16_t adc_val = get_ADC_DMA(3); //4ten Arraywert aus ADC-DMA Wandlung
6
uint32_t vdda = 3300UL * *VREFINT_CAL_VAL / adc_val;
7
printf("VREFINT=%lu; VREFINT_CAL=%lu; VDDA=%lu mV\n",
8
 (unsigned long)adc_val,
9
 (unsigned long)*VREFINT_CAL_VAL,
10
 (unsigned long)vdda);
11
}

Die Versorgungspannung ist 3.363V (mit gutem DMM gemessen)
Die Referenz des ADC vom STM32L4xx ist 1.212V (Datenblatt)

Ausgegeben wird mir aber folgendes:
1
VREFINT=368; VREFINT_CAL=1649; VDDA=14787 mV

Was mache ich falsch?

Kopiert habe ich von hier:
https://stackoverflow.com/questions/58328342/calibrating-stm32-adc-vrefint
Jedoch ist dort ein Beispiel in reinem C und ohne DMA. Mein ADC hat aber 
DMA. Der ADC funktioniert jedoch einwandfrei, die anderen DMA 
Registerwerte (0,1,2) ergeben Spannungen welche der Realität nahe sind 
(+-100mV)

von user83u493 (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

die Formel ist für die L4-Reihe anders, bzw die Werte sind anders. Der 
Referenzwert wurde bei 3,0V Betriebsspannung und nicht mit 3,3V 
bestimmt.
(siehe anhängtes Bild, Screeenshot aus einem L4 Reference Manual)

von Johnny S. (sgt_johnny)


Lesenswert?

user83u493 schrieb:
> Hi,
>
> die Formel ist für die L4-Reihe anders, bzw die Werte sind anders. Der
> Referenzwert wurde bei 3,0V Betriebsspannung und nicht mit 3,3V
> bestimmt.
> (siehe anhängtes Bild, Screeenshot aus einem L4 Reference Manual)

Danke, muss ich wohl übersehen haben. Nützt aber leider nicht all zu 
viel denn nun kommen statt 14787 mV nämlich 13442mV heraus

von Bauform B. (bauformb)


Lesenswert?

Ist die Sample Time lang genug? Die meisten L4 brauchen mindestens 4us 
für den VREF-Kanal (für den internen Temperaturfühler 5us und für VBAT 
sogar 12us).

von Johnny S. (sgt_johnny)


Lesenswert?

Bauform B. schrieb:
> Ist die Sample Time lang genug? Die meisten L4 brauchen mindestens 4us
> für den VREF-Kanal (für den internen Temperaturfühler 5us und für VBAT
> sogar 12us).

Die Sampletime ist die längst mögliche: 640.5Cycles @4Mhz  (~160us)

von Jim M. (turboj)


Lesenswert?

Johnny S. schrieb:
> Was mache ich falsch?

ADC steht auf 10-Bit anstatt 12-Bit Wandlung?

Bei 12 Bits müsste der ADC Wert irgendwas >1000 sein, Du hast nur 368.

von Johnny S. (sgt_johnny)


Lesenswert?

Jim M. schrieb:
> Johnny S. schrieb:
>> Was mache ich falsch?
>
> ADC steht auf 10-Bit anstatt 12-Bit Wandlung?

Uff.. ja das wars

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.