Forum: Mikrocontroller und Digitale Elektronik interne Referenzspannung vom AVR und STM8


von Owen S. (senmeis)


Lesenswert?

Servus,

soweit ich verstehe unterscheiden sich interne Referenzspannungen für 
ADC vom STM8 und AVR. Im AVR ist es bekannt, dass die interne 
Referenzspannung immer den maximalen AD-Wert besitzt. Im STM8 ist das 
anders:

The internal reference voltage is internally connected to the VREFINT 
channel. This analog
input channel is used to convert the internal reference voltage into a 
digital value.
The VREFINTON bit in the ADC_TRIGR1 register must be set to enable the 
internal
reference voltage. This reference voltage must be enabled only if its 
conversion is required.
The internal reference voltage is factory measured and the result of the 
ADC conversion is
stored in a specific data address: the VREFINT_Factory_CONV byte 
represents the LSB of
the VREFINT 12-bit ADC conversion result while the MSB have a fixed 
value: 0x6.

Soweit ich verstehe hat die externe Referenzspannung immer den maximalen 
Wert. Die interne Referenz wird als normaler AD-Kanal gesehen. Habe ich 
richtig verstanden?

Ciao
Owen

von Grml (Gast)


Lesenswert?

Owen Senmeis schrieb:
> Servus,
>
> soweit ich verstehe unterscheiden sich interne Referenzspannungen für
> ADC vom STM8 und AVR. Im AVR ist es bekannt, dass die interne
> Referenzspannung immer den maximalen AD-Wert besitzt.

Ahja, eine Referenzspannung besitzt einen AD Wert....
So ein Quatsch diese Aussage, aber mal wirklich.

Ein ADC liefert eigentlich immer den höchsten Wert, falls die 
Eingangsspannung gleich der Refenzspannung ist. Ob diese 
Referenzspannung intern oder extern erzeugt wird ist doch egal. Orde mal 
deinen Gedanken.

von Falk B. (falk)


Lesenswert?

@  Owen Senmeis (senmeis)

>soweit ich verstehe unterscheiden sich interne Referenzspannungen für
>ADC vom STM8 und AVR.

Wahrscheinlich.

> Im AVR ist es bekannt, dass die interne
>Referenzspannung immer den maximalen AD-Wert besitzt.

Nö.

> Im STM8 ist das anders:

Nö, nur die Messung zur Bestimmung des Kalibrierbytes ist anders.

>Soweit ich verstehe hat die externe Referenzspannung immer den maximalen
>Wert.

Nö. Wenn man an den ADC eine Spannung anlegt, welcher der 
Referenzspannung enspricht, dann liefert der ADC seinen Maximalwert.

> Die interne Referenz wird als normaler AD-Kanal gesehen. Habe ich
> richtig verstanden?

Nein. Siehe AD-Wandler. Beim STM wird es anscheinend so gemacht, 
dass eine sehr genaue, externe Referenzspannung anlegt wird und damit 
den ADC betreibt. Der misst dann die interne Referenzspannung, ist wie 
beim AVR umschaltbar. Das LSB der Messung wird im Flash auf einer 
bestimmten Adresse gespeichert, damit muss man den ADC später nicht mehr 
selber ausmessen sondern muss nur mit dem Kalibrierwert in seinen 
Rechnungen die Messung korrigieren.

MfG
Falk

von Jonas B. (jibi)


Lesenswert?

>the VREFINT 12-bit ADC conversion result while the MSB have a fixed
>value: 0x6.

Ich verstehe das so, dass der Maximalwert (4095) dann so aussieht: 
0x6FFF statt so: 0x0FFF.

Oder?

Gruß Jonas

von Falk B. (falk)


Lesenswert?

@Jonas Biensack (jibi)

>>the VREFINT 12-bit ADC conversion result while the MSB have a fixed
>>value: 0x6.

>Ich verstehe das so, dass der Maximalwert (4095) dann so aussieht:
>0x6FFF statt so: 0x0FFF.

Nö. Der KALIBRIERWERT sieht so aus 0x6aa, wobei aa das Byte 
VREFINT_Factory_CONV ist. 0x600-0x6FF ist 1536-1791, sprich um die 
37,5-43,7% des Maximalwertes. Wenn jetzt die interne Referenzspannung um 
die 1,1V liegt, legt man für diese Messung wahrscheinlich hochgenaue 
3,0V an und betreibt damit den ADC.

MFG
Falk

von Jonas B. (jibi)


Lesenswert?

@Falk: Jo, das klingt auch gut :). Und auch viel logischer...

Gruß Jonas

von Owen S. (senmeis)


Lesenswert?

Der Demoboard Discovery von ST verwendet die interne Referenz, um die 
externe Referenz VDD zu bestimmen. Die Beschreibung vom Demo Code hier:
1
/* 2 Methods for VDD measurement:
2
  * The first one offers a better accuracy
3
  *
4
  * 1st case: The VREFINT is stored in memory during factory tests
5
  * We use this value for better accuracy in this case
6
  *   Vdd_appli = ( VREF_Factory/Vref_measured ) * VDD_Factory 
7
  *   VDD_Factory = 3V+-10mV
8
  *   Vref_Factory +-5mV
9
  *
10
  * 2nd case: The VREFINT is not stored in memory.
11
  *   In this case:
12
  *   Vdd_appli = (Theorical_Vref/Vref mesure) * ADC_Converter
13
  *   Theorical_Vref = 1.224V
14
  *   ADC_Converter 4096
15
   ---> LSBIdeal = VREF/4096 or VDA/4096*/
Also VDD/3V = VREF_Factory/Vref_measured. D.h. die interne Referenz wird 
gemessen und VDD wird damit berechnet. Schliesslich wird eine höhere 
Spannung VDD als interne Referenz bestimmt.

Im AVR hingegen ist die interne Referenz automatisch 0x03FF. Nicht wahr?

Ciao
Owen

von Falk B. (falk)


Lesenswert?

@  Owen Senmeis (senmeis)

>  *   VDD_Factory = 3V+-10mV

Sag ich's nicht?

>Also VDD/3V = VREF_Factory/Vref_measured. D.h. die interne Referenz wird
>gemessen und VDD wird damit berechnet.

Ja.

>Schliesslich wird eine höhere
>Spannung VDD als interne Referenz bestimmt.

Komischer Satz. Man nutzt VDD als Referenz für den ADC und misst die 
interne Referenz. Da "zufälligerweise" das Gleiche während der 
Kalibrierung beim Hersteller gemacht wird, kann man da sehr einfach 
zurückrechnen.

>Im AVR hingegen ist die interne Referenz automatisch 0x03FF. Nicht wahr?

Du hast es immer noch nicht verstanden. Lies ALLE Postings noch einmal. 
Beim AVR kann man es genauso machen, nur dass man die einmalige 
Kalibrierung der internen Referenz selber machen muss.

MFG
Falk

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.