Hallo Forum, ich habe vor, mit einem internen ADC des AT90USB eine Spannug von 0..500mV zu messen. Eine Signalverstärkung würde ich wegen verfälschung nicht anstreben. Ist es eurer Meinung/Erfahrung nach, möglich, problematisch oder geht klar??
@Ugene >ich habe vor, mit einem internen ADC des AT90USB eine Spannug von >0..500mV zu messen. Eine Signalverstärkung würde ich wegen verfälschung >nicht anstreben. Das ist Unsinn. Ob der Verstärker nun im ADC sitzt oder extern ist fast egal. Er muss "nur" ordentlich aufgebaut/dimensioniert sein. >Ist es eurer Meinung/Erfahrung nach, möglich, problematisch oder geht >klar?? Das geht klar, auch mit nem normalen Verstärker auf OPV-Basis. MFG Falk
Nein, das geht in der Regel nicht ohne Bitverlust. Die internen ADC haben die Speisespannung als Referenz. Und wenn man nur einen Achttel davon am Eingang des ADC bringt, hat man 3 bit verloren. Ich wuerde eine Verstaerkung vorschalten. Je nach Budget gibt es da schoene Rail/Rail-Verstaerker. Ich zB messe Shunts mit einem MCP617 (offset 150uV), oder LMC6462 (offset 250uV) bei Verstaerkungen von 40. Z.
> Die internen ADC haben die Speisespannung als Referenz. Wenn Du mit "Speisespannung" die Versorgungsspannung meinst, dann stimmt die Aussage im Prinzip nicht, außer, wenn die Versorgungsspannung intern als Referenzquelle ausgewählt ist. Bei allen aktuellen AVR-Controllern (und bei vielen anderen auch) ist die Referenzspannung für den ADC einstellbar zwischen VCC, einer internen oder externen Referenz. Die externe Referenz darf bei den AVRs aber afaik nicht unter 1 V liegen. Ich würde auch einen OPV benutzen...
> Die internen ADC haben die Speisespannung als Referenz.
Bei AT90USB kann Aref- Referenzspannung - auch extern sein, aber mind
1V.
Aref für ADC würde ich mit 1,5V beschalten. Bei 10bit Auflösung und
einer Genauigkeit von +-2LSB kommmt eine genauigkeit von ca. 4,4mV
Außerdem muss ich für ein rail to rail V- erzeugen. Das heißt weitere
Bauteile...
@johnny.m: warum würdest du OPV nehmen? Wenn es so auch funktionieren
könnte...
@Ugene >Aref für ADC würde ich mit 1,5V beschalten. Bei 10bit Auflösung und >einer Genauigkeit von +-2LSB kommmt eine genauigkeit von ca. 4,4mV 1.) Erst hast du Angst wegen "Verfälschungen" und dann benutzt du 1,5V als Referenzspannung. Hmm???? 2.) Genauigkeit und Auflösung sind zwei vollkommen verschiedene Schuhe!!! >Außerdem muss ich für ein rail to rail V- erzeugen. Das heißt weitere >Bauteile... Der Trick beim Rail-2-Rail OPV ist ja eben, dass er keine -V braucht. Wenn dein uC mit 5V läuft und deine Messpannung Massebezug hat tut auch ein (pseudo) Rail-2-Rail ala LM358, der kann am Eingang bis 0V runter, nur der Ausgang schafft nur VCC-1,5. Allerdings hat der LM358 wohl zuviel Offset. MFG Falk
> 1.) Erst hast du Angst wegen "Verfälschungen" und dann benutzt du 1,5V > als Referenzspannung. Hmm???? Hab vergessen zu erwähnen, dass ich nur die relative Spannungsäderung messen will. The ADC converts an analog input voltage to a 10-bit digital value through successive approximation. The minimum value represents GND and the maximum value represents the voltage on Aref-1LSB. D.h wenn ich 500mV am ADC0 anlege bekomme ich VADCx/1,5*1023 = 341 (bei 500mV) 272 (bei 400mV) 68 (bei 100mV) . 0 (beo 0mV) > 2.) Genauigkeit und Auflösung sind zwei vollkommen verschiedene > Schuhe!!! stimmt
@Ugene Hast du die letzte Posting nicht gelesen. Beitrag "Re: ADC am AT90USB127 (ähnlich mega128)" Ich habe dir ein Vorschlag gegeben, aber du hast nicht reagiert und wieder dasselbe Frage gestellt. Antwort ist noch einmall: In AT90USB schon vorhandenen Verstärker(wie in ATmega128) verwenden, Gain auf 10 eintellen(MUX=0x09), ADC0 auf gnd und ADC1 als Eingang benutzen und Problem ist gelöst. Damit hast du ein Spannungsbereich von genau 0 bis 500mV wenn Aref 5V ist. Branko
@Branko Danke für dein Vorschlag. Natürlich habe ich es im letzten posting gelesen. Dein vorschlag kann ich aber nicht realisieren, da ich drei Leitungen habe, an denen ich 0,5V messen (realtiv zu einander) sollte. Und laut Datenblatt habe ich nur zwei ADCpins mit Verstärkung, wobei hier die max. Auflösung bei 8bit bzw 7bit leigt. Außerdem warst du der einzigste, der geantwortet hatte. Deshalb habe ich die Frage umformuliert und sie allgemeiner gestellt. @all: Danke für eure Beiträge. Nun hat mir jeder geraten ein OPV zu nehmen. Ich denke ich werde es mal genauer anschauen, ob ich doch noch ein OPV dazwischen schalte. Pegel auf 5V anhebe und Aref=VCC=5V schalte.
>Da ich drei >Leitungen habe, an denen ich 0,5V messen (realtiv zu einander) sollte. Was bedeutet genau "relativ zu einander"? Kannst du villeicht ein Schaltplan posten und damit alle Unklarheiten beseitigen? Auserdem bei Verstärkung ist die Atmel nicht sooo schlecht. Anbei Messergebnis bei Single-ended, 1,10 und 200fache Verstärkung.
Ich habe drei Siganale a, b, c, jeder von denen kann 0...500mV sein. Ich muss sie alle "nacheinander" abfragen/AD-wandeln. Deshalb kann ich keine differenziellen Eingäge und damit die Verstärkung des ADC nicht benutzen.
Ich denke ich werde alternativ einen OPV einsetzen (Platz auf LP vorsehen). Was anderes ist aufwendiger, oder wird womöglich nicht funktionieren und Zeit für Experimente habe ich nicht.
Was hält ihr von opa4348? Damit könnte ich alle drei Eingänge mit einem Baustein verstärken. Er ist günstig und Icc ist sehr niedrig. Eure Meinung Branko, Falk?
Ich glaube Problem mit drei 500mV Eingänge ist möglich noch immer ohne externen OPA zu lösen. Nimm einfach ein Analogmultiplexer(74HC4051,HC4052) und verwende wie ich schon erwent INTEGRIERTEN OPA. Mit dem Multiplexer kannst du ein Eingang mit 10-fache Werstärkung nach wünsch erweitern. Auserdem ist diese Lösung sicher billiger. Ich verwende seit jahren ein ATmega32 mit 200-fache Verstärkung für Temperaturmessung mit einem K-Type Thermoelement(NiCr-Ni 41µV/°C). Mit Aufsumierung von 16 Messergebnisen bekomme ich absolut stabile Temperaturanzeige auf einem LCD Display. Auflösung beträgt übrigens 1°C. Integrierte OP ist überhaupt nicht zu unterschetzen. Wenn du nocht Messwerte-streung Messen willst würde dir villeicht dass helfen: Beitrag "ATmega ADC Test" Also dein Problem lass sich auch mit einfachen Mitteln lösen.
> Nimm einfach ein Analogmultiplexer(74HC4051,HC4052)
Ich habe insgesamt 36 Signale zu messen, da habe ich schon bereits einen
MUX (CD74HC4067) integriert und die Signalzahl auf 3 reduziert.
Das System sieht so aus, das ich 15 Sensorboards habe und ein Mainboard.
Ein weitere MUX auf SensorLP (x15) macht nicht so viel Sinn.
Deshalb denke ich an die OPV Lösung auf jedem Sensorboard. Somit werden
die Signale auch gegen die Störungen resistenter.
Aber danke für die Beiträge, ich bin immer offen für alle Vorschläge und
finde die Deskussion sehr hilfreich.
>>Auflösung beträgt übrigens 1°C >Und die Genauigkeit? Hängt von Thermoelement-Genauigkeit ab, Auswertungselektronik hat zusätzlich eine Messfehler von +-1°C(ohne Linearisierung). Als externe Beschaltung verwende ich nur ein Widerstand(2K7 1%). Mit gleichem Schaltung kann ich auch ohne Linearisierung Temperatur mit KTY81 messen. Temperaturmessung mit KTY81 ADC0, Single ended, Aref=0,79*AVCC,Auflosung 0,5°C Messbereich -30 bis 110°C ADC0, Single ended, Aref=0,395*AVCC,Auflosung 0,25°C Messbereich -30 bis 100°C AVCC----|-----------| | _ _ 5 2 K K p -----|-----Aref 7 o _ _ t 1 ADC0----| i 0 n K | _ T | | Y | | AGND----|-----------|------| Temperaturmessung mit K-Type Thermoelement ADC0-ADC1, Gain=200, Aref=0,79*AVCC,Auflösung 1°C Messbereich -50 bis 500°C AVCC---------|-----------| .K-Type| _ / \ _ 5 / \ 2 K / \ K p -----|-----Aref | | 7 o _ | | _ t 1 ADC1 ADC0--| i 0 n K | _ T | | Y | | AGND---------|-----------|------| Anbei ist Excel-Tabelle wo zu sehen ist dass eine Linearisierung (Weder uber Hardware noch uber Software) nicht notwendig ist. Ganz in Gegenteil. 2K7 Widerstand linearisiert Temperatur-Spannung Verlauf von KTY81 in einem Temperatubereich von -20 bis +100°C auserdem ist Temperaurmessung unabhängig von AVCC Schwankungen weil sich Aref auch Ändert. Bei zweitem Schalung verwende ich KTY81 Umgebungstemperatur zu Ermitteln und damit Kompensiere ich(uber Software)die Thermospannung. Branko
> Übrignx beträgt die Minimum Referenzspannung 2 Volt.
Falsch.
siehe Datenblatt, Seite 407, vierte Zeile von unten:
VREF Reference Voltage min max
Single Ended Conversion 1.0 AVCC V
Differential Conversion 1.0 AVCC - 0.5 V
Vielen Dank für die hilfreiche Diskussion. Ich habe mich nur doch für ein OPV entschieden. OPA4348 mit 10-fachen Verstärkung.
Hallo, ich habe gerade eure Beiträge gelesen. @ Branko Ich habe ein ähnliches Problem. Ich muß 4 Thermoelemente vom Typ-K auswerten. Ich habe mir bei Maxim 4 Max6675 bestellt und die an meinen Atmega angeschlossen , leider spinnen die rum und liefern nicht die Gewünschten ergebnisse. Du schreibst, dass du ein Thermoelement auswertest und brauchbare Ergebnisse erziehlst. Ich wollte mal fragen , wie du das genau angestellt hast.Ich brauche stabile Werte im Bereich zwischen 450 und 800 Grad C. Das soll eine Abgasstemperatur messung werden, bei dem alle vier Abgasswerte gemessen werden. Viele Grüße Peppe
Thermoelemente benoetigen Zerodriftverstaerker, die man mit hoher Verstaerkung laufen laesst. Dabei muss man beachten, dass der Eingang im Gleichtaktbereich sein sollte.
>Ich habe mir bei Maxim 4 Max6675 bestellt und die an meinen Atmega >angeschlossen , leider spinnen die rum und liefern nicht die Gewünschten >ergebnisse. Was bedeutet diesen Satz in Klartext? 1. Gibst Schwankungen von Messergebnissen aber Mittelwert ist richtig? Lösung: Softwareseitig: Mittelung von messwerten, Hardwareseitig: Synchronisierung mit der Netzfrequenz, Saubere Layout mit Getränte Analog und Digital GND Fläche, Abkoppelungs-Kondensatoren gleich neben Versorgungspins. 2. Messergebnis entspricht tatsächliche Temperatur nicht? Branko
So Abgasstemperaturmessung funktionert jetzt. Ich verwende dazu Die MAx6675 nud einen Atmega8 Peppe
Peppe wrote: > So Abgasstemperaturmessung funktionert jetzt. > Ich verwende dazu Die MAx6675 nud einen Atmega8 > > Peppe Schön! Wo lag der Fehler? AxelR.
Hi, gibt es zu oben gezeigter Schaltung auch ein codebeispiel? Ich hab das ganze wie beschrieben aufgebaut, benutze einen ATMega16 mit internen 8Mhz und ein leicht angepasstes "Beispiel" aus einem anderen Thread hier.
1 | ACSR = _BV(ACD); |
2 | ADCSRA = _BV(ADEN) | _BV(ADIF) | _BV(ADPS2) | _BV(ADPS1); |
3 | ADMUX = _BV(MUX3) | _BV(MUX1) | _BV(MUX0); |
4 | |
5 | void ADC_conversion(void) // Spannung über pt100 messen (32 Messswerte-Mittelwert) |
6 | {
|
7 | int ADC_temp; |
8 | int ADCresult = 0; |
9 | unsigned char i; |
10 | |
11 | for(i=0;i<32;i++) // 32 Messungen für bessere Genauigkeit |
12 | {
|
13 | ADCSRA |= (1<<ADSC); // 'single conversion' einleiten |
14 | while(!(ADCSRA & 0x10)); // auf ende der Wandlung warten, ADIF flag '1' |
15 | ADC_temp = ADCL; // ADCL Register lesen |
16 | ADC_temp += (ADCH << 8); // ADCH Register lesen |
17 | ADCresult += ADC_temp; // Ergebnisse der 32 Messungen addieren |
18 | }
|
19 | ADCresult = ADCresult >> 5; // Addierte Ergebnisse durch 32 teilen |
20 | ADCresult_average = ADCresult; // Mittelwert der 32 Messungen der globalen Variable zuweisen |
21 | |
22 | return; |
23 | }
|
Irgendwie bekomm ich aber nur stark schwankende Werte bei der Messung. Ausserdem bin ich mir nicht sicher wierum das Thermoelement angeschlossen werden muss. :/ Könnt ihr mir hier bitte etwas auf die Sprünge helfen? Analogtechnik is nich wirklich so mein Gebiet. :) slime
Hallo nochmal, bin ein ganzes Stück weiter gekommen. Als erstes musste ich feststellen das der KTY den ich hier verwendet hab ein 81-210 Type ist (2000Ohm @ 25°C) und nicht wie angegeben der 81-110 (1000Ohm @ 25°C). Hab den KTY jetzt testweise durch einen 1k Widerstand ersetzt. Jetzt passt zumindest schonmal der wert der an ADC0 gemessen wird. Mit der differentialmessund ADC0 - ADC1 des Thermoelements gibt es aber noch Probleme. Vernünftige und stabile Werte bekomm ich irgendwie erst ab Temperaturen über ca 30-40°C. Ist die Temperatur niedriger springt der Wert der Messung eigentlich zwischen dem gesammten Messbereich wahllos hin und her. Wie ist dies zu erklären? Gibt es irgendwelche schaltungstechnischen Maßnahmen die man dagegen unternehmen kann? slime
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.