Signal Aufbereitung für den bestmöglichen Nutzungsgrad des Auflösungsbreichs von Analog Digital Konvertern ( ADC )
am Beispiel eines PTC Temperatur-Sensors PT100
Das Problem:
-- Messsignale sind meist sehr klein..
-- Oft gibt es einen Spannungsoffset relativ zum Bezugspunkt wie GND
-- Die Messsignale dürfen/sollen nicht durch unspezifische Belastungen verfälscht werden.
( das heißt, dass in der Regel ein Impedanzwandler nachgeschaltet werden muss )
Analog-Digital Konverter haben meist ihre Auflösung von X-Bit zwischen dem Eingangsspannungsbereich zwischen
0V=GND und der Referenzspannung ( AVcc )
z.B. 2.56V Band Gap Spannung oder einer im Handbuch angegebenen Spannung . z.B. +5V.
Nehmen wir mal an die ADC Maximalspannung = 5V. Das hängt vom verwendenden ADC ab.
Ein 12 BIT ADC liefert also 2^12 = 4096 Werte zwischen 0..4095
Dieses Messsignal muss nun so aufbereitet werden, dass es in das Eingangsspanungsfenster passt.
Lästig, aber sinnvoll.
Folgende Grafik verdeutlicht diese Verhältnisse:
Es führen immer mehrere Wege zum Ziel.
Das Mittel der Wahl, um die geforderte Präzision zu erreichen sind Operationsverstärker.
Ein 'mögliches' Lösungsprinzip ist die im Funktionszusammenhang quasi "lineare" Signalbehandlung:
Leider wird der Aufwand nun doch schon beträchtlich. Elektroniker nennen das "Gefrickl"
Operationsverstärker = OPs wollen gerne mit Dualen Betriebsspannungen versorgt werden.. also +10V -10V etc..
Und solche Netzteile darf man sich zumeist selber schnitzen. Aufwändig eben...
Abhilfe ist ein möglicher Einsatz von sogenannten Rail-to-Rail Operationsverstärker
.....und so sieht die Realisierung in der Praxis aus:
Das ganze will nun noch einmal kalibriert werden!
Und die Parameter sollen „gut“ dokumentiert sein, sonst ist der ganze Aufwand wertlos.
Denn diese Parameter spielen für die anschließende Interpretation in Form der Auswertesoftware eine große Rolle.
Später weiß sonst niemand mehr was es bedeutet.
Ein völlig anderes Konzept.. evtl mit "Nur einem" RailToRail OP realisierbar :
Sieht aus wie eine abgeglichene Brücke: Aber ! erfordert eine, gut verstandene, Wirkung der Schaltung mit Offsett-Vorspannung und Verstärkung.
Der OP stellt immer einen Abgleich der Brücke her. so dass die "R1/R2 = R4/R5" Bedingung erfüllt ist..
Welche Konsequenz das jedoch auf die Ausgangsspannung hat ist nicht ganz so leicht zu verstehen.
Und es ist schwer beherrschbar...
siehe auch den Artikel auf :
http://www.mikrocontroller.net/articles/Operationsverst%C3%A4rker-Grundschaltungen
In dieser Dimensionierung ist die Ausgangsspannung tatsächlich 0V bei 0 Grad, da hier die Brücke Bei OP=0V abgelichen ist
im Detail:
Eine
Abwandlung des nichtinvertierenden Verstärkers erlaubt es, einen
konstanten Offset vorzugeben. D.h. von der zu verstärkenden
Eingangsspannung U(e) wird eine konstante Spannung U(o) abgezogen und
die Differenz verstärkt. Auf der Ausgangsspannung U(a) findet sich die oOffsetspannung ((o) allerdings wieder:
Der
Vorteil dieser Schaltung ist, daß nur die Differenz verstärkt wird.
Damit kann eine größere Verstärkung gewählt werden. Zu berücksichtigen
ist dabei, daß die Ausgangsspannung U(a) um die Offsetspannung U(o)
überlagert ist.
Es gilt:
Offsetspannung:
mit U(V) = Versorgungsspannung an R1
Verstärkung:
Ausgangsspannung:
und so verhält die Schaltung sich in einer Simulation: Poti = 200Ohm ( OP kann Offsetfehler haben ~50mV )
-->kräftige Verstärkung der Differenz...
und so mit POTI = 100Ohm = 1:1 Brückensituation...fehler ist OP Offsett. OP-Ausgang zeigt immer noch 53mV statt 0V
Offset vom Poti ist gleich dem Ofsett des Spannungsteilers
ADC Pegelanpassung, trickreich und effektiv.
So kann man mit einem ADC der nur z.B. 0..5 V Eingänge hat sehr genau auch negative Spannungen messen..
Vorteil: Gut gegen Zerstörung durch Überspannungen von aussen geschütz.
Überspannung wird einfach abgeleitet.. Hohe Vorwiderstände vorhandenGut eignen sich Widerstandverhältnisse im normalen 10K Bereich
Nachteil: Leider bühst man 1 Bit Auflösung ein.
Es ist eine Rückspannung am "Eingang" messbar.
Das kann unerfahrene Verwirren.!!Es ist immer eine Kalibrierung notwendig.Schritte:
1. Eingang auf Masse (0V) legen.. ADC lesen und Lese-Wert speichern als ZeroRead = OffsetValue
Vorgehensweise: ermittelten Wert entweder fest Einprogrammieren und ablegen oder
Varibale im EEPROM abspeichern
2. Eingang auf ReferenzSpannung im Mittelbereich ( ~2.5V) legen..
ADC lesen und Lese-Wert speichern als RefRead.
3. Berechnen des Kalibrignusfaktors und des Offsets
/*
1. Schritt, Eingang auf Masse Legen
2. Messen des ADC Wertes bei 0V
--> ADC_ZeroValue
3. Schritt, Eingang auf Reference legen.
--> ReferenceVoltage
4. Messen des ADC Wertes mit Referenzspannung
--> ADC_ReferenceValueBerechnen Volt/Bit -> >> ReferenceVoltage/(ADC_ReferenceValue - ADC_ZeroValue )
*/
//Diese Funktion ist 1* auszuführen, "nachdem" die Kalibrierung Vorgenommen wurde.
// ************************************************
void ADC_CalculateFaktor( ADC_CALCULATE_TYPE * psADC )
// ************************************************
{
// Referezspannung / (Messwert -ZeroOffset) Berechnen
Volt/Bit -> ReferenceVoltage/(ADC_ReferenceValue - ADC_ZeroValue )
psADC->fVoltProBit = psADC->fReferenceVoltage / (psADC->ui16Calib_Reference_Val - psADC->ui16Calib_Zero_Val);
};
// ************************************************
float CalcLVolt_LTC1298( uint16_t u16ReadedVal )
// ************************************************
{return (u16ReadedVal * gsLTC1298.fVoltProBit);};