Forum: Mikrocontroller und Digitale Elektronik AVR ADC: abwechselnd 2.56V und VCC als Referenz?


von kxr (Gast)


Lesenswert?

-> Einsparung von Spannungsteilern.
Es müssen an 4 Kanälen Spannungen gemessen werden:

A: 20..60V - Spannungsteiler, 10bit absolut, einigermaßen genau durch 
langfristiges oversampling

B: U_SHUNT Strommessung - 10bit absolut; gibt nur kleine mV-Spannungen; 
einigermaßen genau durch langfristiges oversampling ohne extra 
Verstärker.

C,D: Eingangssignale 0..5V/VCC  - 8bit; unkritisch; relativ; schnellere 
Wechsel.

alles wird ca. 10Hz ausgelesen (bislang in mainloop incl. Warten)


Damits nur noch für A Spannungsteiler braucht, gute Auflösung für B und 
A, würde ich gerne A und B gegen internalRef2.56V wandeln und C+D aber 
gegen VCC/5V als Referenz.

Ist dieses ständige abwechseln der Ref-Spannung durch die Bits in ADMUX 
einfach so möglich?
Muß man ein lange extra Wartezeit einhalten?
Wird die internal Ref womöglich abgeschalten während REFS=01, und muß 
dann wird langsam abgewartet werden? ...?


bisher einfach:
uint8/16 ADC_read8/10(uint8_t channel) {
  ADMUX = channel | (1<<REFS1)|(1<<REFS0)|(1<<ADLAR);
  ADCSRA = (1<<ADEN) | (1<<ADSC) | (0<<ADFR) | (1<<ADIF) | (0<<ADIE) | 
_ADC_FRQ;
  while(TESTBIT(ADCSRA,ADSC)); // warten bis fertig
  return ADCH bzw ADC;
}

von syn_error (Gast)


Lesenswert?

Aus dem Datenblatt:
The first ADC conversion result after switching reference voltage source
may be inaccurate, and the user is advised to discard this result.

von Ulrich (Gast)


Lesenswert?

Die interne Ref. wird wohl ausgeschaltet, wenn sie nicht für etwas 
anderes (z.B. den analog Komperator) gebraucht wird. Für eine Wirklich 
gute Genauigkeit müsste man also ggf. länger warten.

Das umschalten von int. Ref auf VCC als Ref. geht angeblich reltiv 
schnell. Die Umschaltung von VCC auf die interne Ref. kann aber deutlich 
länger dauern, weil sich der Kondensator an Vref. nur langsam entlädt. 
Da also eher einen kleineren Kondensator (z.B. 10 nF) nehmen.

von Knut (Gast)


Lesenswert?

Ich würde aber wenn möglich nicht gegen die interne Ref messen wenns 
genau sein soll, nimm lieber n gute Externe, die gibts wie Wasser im 
Meer.

Gegen VCC würde ich nur messen, wenn der Wert Pi * Daumen genau sein 
muss.


Knut

von spess53 (Gast)


Lesenswert?

Hi

>Die interne Ref. wird wohl ausgeschaltet, wenn sie nicht für etwas
>anderes (z.B. den analog Komperator) gebraucht wird. Für eine Wirklich
>gute Genauigkeit müsste man also ggf. länger warten.

Wie kommst du darauf? Wenn man sich das Blockschaltbild des ADC ansieht 
findet man dort nur Schalter. Die Voltage Reference wird nur bei 
bestimmten Sleep-Modes abgeschaltet:

'Otherwise, the Internal Voltage Reference will be enabled,
independent of sleep mode.'

@kxr (Gast)

Vielleicht solltest du mal in Betracht ziehen einen AVR zu benutzen, bei 
dem der ADC umschaltbare eine Eingangsverstärkung hat.

MfG Spess

von AVR-Fan (Gast)


Lesenswert?

Ich kann aus der Praxis heraus nur bestätigen, daß das Umschalten
int. Ref -> Vcc-Ref recht flott geht, die Gegenrichtung dauert gut
10 mal länger. Einfach ein Oszi an Aref hängen und man kann sehen
wie die Ref zum Zielwert "schleicht"
Wenn die Zeit vorhanden ist, stört es nicht weiter.

Vcc als Ref ist machbar, dann nehme ich einen Spannungsregler mit
1% Toleranz, hat z.B. Micrel im Angebot.
Oder einen ext. Ref-Baustein.

von kxr (Gast)


Lesenswert?

Knut schrieb:
> Ich würde aber wenn möglich nicht gegen die interne Ref messen wenns
> genau sein soll, nimm lieber n gute Externe, die gibts wie Wasser im
> Meer.

wozu mühsame nicht schaltbare extern wenns intern gibt und Absicht 
minimale Zusatz Bauteile und schon ok? das würd ja nach hinten losgehen 
bzgl. meiner Eingangsfrage ;-)
A (R-Teiler unvermeidbar) und B (Shunt) müssen ja eh noch SW-kalibriert 
werden.

AVR-Fan schrieb im Beitrag #2285665:
> Ich kann aus der Praxis heraus nur bestätigen, daß das Umschalten
> int. Ref -> Vcc-Ref recht flott geht, die Gegenrichtung dauert gut
> 10 mal länger. Einfach ein Oszi an Aref hängen und man kann sehen
> wie die Ref zum Zielwert "schleicht"
> Wenn die Zeit vorhanden ist, stört es nicht weiter.

Welche Zeit-Größenordnungen waren es bei Dir jeweils etwa?
(ich habe keine externe Kapazität, da für A und B sogar etwas noise 3..4 
digits zum langfrist oversampling erwünscht. default noise passte laut 
letzter Messung.)

syn_error hat auf diese Stelle hingewiesen:

"If no external voltage is applied to the AREF pin, the user may switch
between AVCC and 2.56V as reference selection. The first ADC conversion 
result after
switching reference voltage source may be inaccurate, and the user is 
advised to discard
this result." (ATmega8)

klingt so als ob man jeweils nur eine dummy AD-conversion warten müsste?

>
> Vcc als Ref ist machbar, dann nehme ich einen Spannungsregler mit
> 1% Toleranz, hat z.B. Micrel im Angebot.
> Oder einen ext. Ref-Baustein.

C und D sind User-Joysticks (externe Poti/Hall), wie hoch ist die 
menschliche Toleranz - absolut? ;-)

von kxr (Gast)


Lesenswert?

spess53 schrieb:
> Vielleicht solltest du mal in Betracht ziehen einen AVR zu benutzen, bei
> dem der ADC umschaltbare eine Eingangsverstärkung hat.



ist momentan auf ATmega8 und ATmega328.

eigentlich würden nun die Anforderungen schon erfüllt, wenn das 
beabsichtigte funktioniert. beim Shunt wäre wegen der millivolts 
optional noch ca. x4 oder x16 Verstärkung aber hübsch - da könnte ein 
kleines Feature bequemer realisiert werden.

Welcher AVR käme da z.B. zur Migration in Frage, bei welcher 
Größenordnung in der Preisdifferenz?

von Willi W. (Gast)


Lesenswert?

Knut schrieb:
> Gegen VCC würde ich nur messen, wenn der Wert Pi * Daumen genau sein
> muss.

In diesem Fall mag das richtig sein. Das gilt aber nicht allgemein. Bei 
ratiometrische Messung, bei denen sich der Messwert auch auf VCC 
bezieht, wäre eine getrennte Referenz eher kontroproduktiv.

von Simon K. (simon) Benutzerseite


Lesenswert?

Im Übrigen erhöht man nicht die Genauigkeit durch Oversampling, sondern 
lediglich die Auflösung.

von Nils ‫. (n-regen)


Lesenswert?

kxr schrieb:
> Welcher AVR käme da z.B. zur Migration in Frage, bei welcher
> Größenordnung in der Preisdifferenz?

Z.B. ATmega16 und ATmega32. Die haben je zwei ADC-Eingänge mit 
optionaler x10- oder x200-Verstärkung.

von kxr (Gast)


Lesenswert?

Nils ‫‪ schrieb:
> kxr schrieb:
>> Welcher AVR käme da z.B. zur Migration in Frage, bei welcher
>> Größenordnung in der Preisdifferenz?
>
> Z.B. ATmega16 und ATmega32. Die haben je zwei ADC-Eingänge mit
> optionaler x10- oder x200-Verstärkung.

danke. einige ATmega32's als DIL Klodeckel liegen sogar hier rum. wusste 
das Gain nicht. Sie mega32 sind aber eigentlich pinmäßig unnötig groß 
und zu teuer.

leider findet man die Gain Option nicht in den Chip-Selektoren von 
Atmel, Digikey etc.

bislang war jetzt der mega328 im Fokus. Der hat 1.1V Ref, d.h. nochmal 
zumindest 2x empfindlicher.

gäbs auch noch kleinere/günstigere AVR mit Gain, 32kFlash, passend für 
das Projekt hier?
Anforderung:
* möglichst wenig Pins (min. 20)
* hardware MUL
* 32k Flash (min 16k)
* schön: bis zu 20x  Verstärkung  und differenzial-Eingänge die bis 
-50mV unter Masse messen können.
* schön: neben TQFP auch als DIL verfügbar

Gruß

von Nils ‫. (n-regen)


Lesenswert?

Der ATmega328 ist schon der kleinste AVR mit 32kB Flash.
Du könntest aber, wenn du deswegen nicht extra einen großen ATmega16/32 
verbauen willst, einen ATtiny25 zum Messen hernehmen. Der kostet nur 
1,50€ und hat bei zwei der vier ADC-Eingänge eine optionale 
x20-Verstärkung.

von Kurt (Gast)


Lesenswert?

Ohweh, diese Oversampling-Gläubigkeit erfüllt schon
manche Kriterien, die man Sekten zuspricht:

Oversampeln kann bestenfalls fast ein Bit mehr Auflösung
bringen! Alles andere ist dumme Gutgläubigkeit.

Bei keinem x-Bit-ADC wird garantiert, dass 1 Bit auf viel
mehr als ein halbes Bit genau ist. Dies ist gerade die
Voraussetzung, dass das Ergebnis STETIG ist.
STETIG: Größere Spannung -> gleicher oder größerer ADC-Wert
(Auch das wird nicht immer garantiert!)

Wie behauptet, "wenige mV" mit Oversampling
bei 2,56 Vref / 1024 = 2,5 mV ADC-Auflösung
auf GARANTIERTE 1 mV genau auzuflösen oder gar zu MESSEN,
ist ein Scharlatan.

von kxr (Gast)


Lesenswert?

Nils ‫‪ schrieb:
> Der ATmega328 ist schon der kleinste AVR mit 32kB Flash.
> Du könntest aber, wenn du deswegen nicht extra einen großen ATmega16/32
> verbauen willst, einen ATtiny25 zum Messen hernehmen. Der kostet nur
> 1,50€ und hat bei zwei der vier ADC-Eingänge eine optionale
> x20-Verstärkung.

2 µC wird unnötig komplex.
der ATTiny167 mit 16k käme aber evtl. in Frage.
<2€, 20xGain, genau 20pin,
Nur HW-MUL fehlt (und es gibt kein DIL)

muss mal schauen ob ein tiny die vielen fixpoint-mul-Rechnungen schafft.

von kxr (Gast)


Lesenswert?

Kurt schrieb:
> Oversampeln kann bestenfalls fast ein Bit mehr Auflösung
> bringen! Alles andere ist dumme Gutgläubigkeit.

es geht aber schon ;-)
Ampere"_stunden_"  werden gezählt. Dank etwas Noise (ab 2..3 ditigs) 
machen die Treppen nix aus. und der Rest ist  resolution ~ 1/sqrt(N) 
Mathematik und Kalibrierung. Notfalls mit Relinearisierung für Wert nahe 
0.
Befasse dich mal mit Statistik.
Auch viel schnellere Messungen mache ich gelegentlich so um aufwändige 
und fragile HW-Verstärkungen zu vermeiden.

von Kurt (Gast)


Lesenswert?

Klar kann man mit Statistik viel herleiten.
Gibts da nicht so ein Zitat von Churchill? ;-)

Ernst beiseite - gute Statistik lebt von
Voraussetzungen, die auch erfüllt sein müssen.

Treppen machen in diesem Falle NUR DANN NIX AUS,
WENN jede Stufe die gleiche Höhe hat!

Kennt jemand EINEN Hersteller, der das garantiert?

Da stolpert man nicht nur schnell mal im richtigen
Leben. (Es gibt Normen für den Treppenbau, um die
Unfallgefahr durch abweichende Stufenhöhen zu
verhindern!)

Auch wenn man sich auf "overgesampelte" Messergebnisse
verlässt, die implizit (oder intuitiv, wie der
unaufmerksame Treppensteiger) von konstanter Stufenhöhe
ausgehen, fällt man damit ganz fix und unerwartet auf
die Nase.

Leider werden mit dieser schlecht angewandten Statistik
auch viel zu oft die << Ampere"_stunden_"  >> gezählt.
- Was dazu führt, dass so viele Batteriegeräte sich mit
"fast noch voller Batterie" urplötzlich verabschieden.

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.