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
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.
@ 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
>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
@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
@Falk: Jo, das klingt auch gut :). Und auch viel logischer... Gruß Jonas
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
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.