Mit einem passenden Spannungsteiler kann der Bereich für positive Spannungen erweitert werden. Dieser Spannungsteiler muss lediglich ausreichend niederohmig für den Analogeingang, und ausreichend hochohmig für die Eingangsspannung bemessen werden.
Sollen negative Spannungen gemessen werden, kommt eine zusätzliche Spannung mit ins Spiel. Diese Referenzspannung Ur hilft, den Nullpunkt in die Messbereichsmitte des AD-Wandlers zu verschieben, sodass auch bipolare Spannungen gemessen werden können. Ein AD-Wert eines 8-Bit ADCs von 0x00 bedeutet dann den negativen Endwert, ein Adwert von 0xFF den positiven Endwert, dazwischen liegen 0V bei 0x80.
Hier gilt die Beziehung
In Kurzform: der Strom durch Ra ist die Summe der Ströme durch Re und Rr.
Werden in diese Formel für Ue und Ua die entsprechenden Minimal- und Maximalwerte eingesetzt sowie für z.B. Ra ein vorgegebener Wert, erhält man zwei Gleichungen und man kann sich Re und Rr berechnen.
Zur Abkürzung dieses Prozesses habe ich mir eine Excel-Tabelle gemacht. Hier werden in die grünen Felder einfach die festen Werte Ur, Uemin, Uemax, Uamin, Uamax und Ra eigegeben. Als Resultat werden die beiden anderen Rr und Re oder eine Fehlermeldung ausgegeben.
Wer auch keine Lust zum Selber-Rechnen hat kann sich hier das Arbeitsblatt herunterladen: Analogeingang.xls
Die errechneten Werte sollten aber auf Plausibilität geprüft werden
Für den einfachen Fall von Ue = -5V..5V ergeben sich zusammen für Ur = 5V ein Re = Rr von 0 Ohm. Das mag zwar theoretisch richtig sein, in der Praxis kommt aber nichts sinnvolles dabei heraus. Abhilfe schafft dann, den Ausgangsspannungsbereich zu verkleinern (ADC-Referenz) z.B. auf 0V..2,5V, oder Ur zu erhöhen (z.B. auf 10V).
Berechnung der Ausgangsspannung aus dem AD-Wert
Die Ausgangsspannung berechnet sich dann entsprechend
Mit z.B.
Uemax = 10V (positiver Maximalwert)
Uemin = -10V (negativer Maximalwert)
adbreite = 12 Bit (==> adwert = 0…0xFFF = 0...4095)
ergibt sich für einen
adwert = 0x000 ==> Ua = -10V
adwert = 0x800 ==> Ua = 0V
adwert = 0xFFF ==> Ua = 9,995V
In C mit Fließkommaberechnung:
#define Uemax 10.0
#define Uemin -10.0
#define adbreite 12
:
Ua = ((float)adwert/(1<<adbreite)*(Uemax-Uemin)) + Uemin;
Das geht natürlich nur bei fließkommatauglichen Prozessoren gut. Ein uC ohne FPU (AVR, PIC, 8051, MSP430…) tut sich bei Floatberechnungen etwas schwer. Dem kann dann mit einer Festpunktberechnung auf die Sprünge geholfen werden.
Wenn ich einen 10-Bit-Wandler habe und auf 1/10 Volt auflösen will, reicht es aus, jeden der Parameter mit 10 zu multiplizieren. Deshalb empfiehlt sich hier die Festpunktarithmetik.
In C mit Festpunktarithmetik:
#define Uemax 10
#define Uemin -10
#define adbreite 10
:
Ua = (10*(int)adwert*(Uemax-Uemin)) / (1<<adbreite)) + 10*Uemin;
Dann ergibt sich für einen
adwert = 0x000 ==> Ua = -100 (= -10,0V)
adwert = 0x800 ==> Ua = 0 (= 0V)
adwert = 0xFFF ==> Ua = 99 (= 9,9V)