Frank
01.02.2013, 16:25
Hi.
da ich gerade eine kleine Schaltung bastele die sehr wenig Strom benötigen soll, da sie weit über 1 Jahr mit Batterie auskommen soll, hab ich mal kurz eine Tests mit hochohmigen Spannungsteilern gemacht. Der Grund ist die Aussage in den AVR-Datenblättern, das bei der Messung die Spannungsquelle nicht hochohmiger als 10KOhm sein sollte da es darüber zu Ungenauigkeiten kommt.
Ein Spannungsteiler in diesem Wertebereich würde allerdings viel zu viel Strom für nix verbrauchen, das wäre bei meinem Vorhaben völlig ungeeignet.
In einigen Foren basteln User wirklich aufwendige Transistor-Konstrukte um den Spannungsteiler abzuschalten, ich hab mich gefragt ob das wirklich nötig ist! Also hab ich einfach mal mit ein paar vorhanden Widerstandswerten das ganze gecheckt. Das Ergebnis war, das für die Batteriemessung durchaus auch sehr hohe Spannungsteiler gut funktionieren. Ich habe mal einen 900k und 100k Widerstand bei 1,1V interne Referenzspannung genutzt. Die Spannung wurde ohne Probleme im Sekundentakt gemessen. Die Abweichungen gegenüber einem 10k und 1K Spannungsteiler waren kleiner als 0,05V, wobei diese Abweichung vermutlich sogar durch die Widerstandstoleranz hervorgerufen wurde. Also ein 1 MegaOhm Spannungsteiler macht bei einer Batteriespannungsmessung durchaus Sinn, zumal diese Messungen ja nicht 100 mal in der Sekunde vorgenommen werden müssen. Haben die Messungen einen kleinen zeitlichen Abstand von ca. 1 Sekunde, dann ist die Genauigkeit für die meisten Anwendungen sicher völlig ausreichend. Der Strombedarf liegt dann bei ein paar Mikroampere, das ist meistens vertretbar!
Übrigens bei den Messungen habe ich sicherheitshalber noch ein 47nF von Masse nach PA0 eingebaut, damit jederzeit für die ADC-Messung etwas Strom da ist. Aber mit den gegebenen Werten hätte es auch noch ohne diesen Kondensator geklappt.
Für Einsteiger hab ich bei der Gelegenheit das kleine Messprogramm für RN-AVR Universal gepostet. Es kann natürlich fast unverändert auch auf RN-Control usw. genutzt werden.
Es zeigt wie man Spannung aufgrund der Widerstände und UREF umrechnet und zeigt auch gleich Strombedarf an (über Rs232/USB).
'################################################# #############
'SpannungMessen1.bas
'
'Ein kleines Testprogramm für RN-AVR UNIVERSAL bzw. ATMega644
'
'Das programm demonstriert wie man die Spannung an einem
'analogem Port messen kann. Es wird auch genau gezeigt wie
'man Spannungsteiler und Spannung berechnet.
'Die verwendeten Widerstandswerte für den Spannungsteiler
'können einfach den Variablen R1 und R2 zugewiesen werden
'Das Programm demonstriert auch, das auch sehr hochhohmige
'Widerstände am Spannungsteiler durchaus gute Ergebnisse liefern
'wenn keine blitzschnellen Messungen (mehrere pro Sekunde nötig sind).
'Das Programm zeigt auch den benötigten Strom pro Spannungsteiler an.
' (c) Frank Brall 2013
'Software und RN-AVR UNIVERSAL Bezug über www.robotikhardware.de DVD
'Weitere Beispiele auf DVD von robotikhardware.de
'oder im www.Roboternetz.de und rn-wissen.de
'################################################# #####################
'Portbelegung:
'Spannungsteiler aus R1 und R2 an PA0
'Werteausgabe über RS232/USB
$programmer = 12 'MCS USB (Zeile weglassen wenn anderer Programmer)
$prog &HFF , &HFF , &HD9 , &HFE 'Fusebits richtig programmieren (Quarz ein,Jtag aus)
$regfile = "m644pdef.dat" ' oder $regfile = "m644def.dat"
$framesize = 64
$swstack = 64
$hwstack = 64
$crystal = 8000000 'Quarzfrequenz
Config Pind.6 = Output 'LED
Led1 Alias Portd.6
Config Pina.0 = Input
BattAdc Alias Pina.0
Config Adc = Single , Prescaler = 128 , Reference = INTERNAL_1.1
dim adcbattwert as integer
dim r1 as single
dim r2 as single
dim rg as single
dim uref as single
dim udigit as single
dim vh as single
dim spannung as single
dim strom as single
Start Adc
Do
Toggle Led1
r1=900 'Spannungsteiler Widerstand 1 in kOhm
r2=100 'Spannungsteiler Widerstand 2 in kOhm
uref=1100 'Referenzspannung im mV 1,1V =1100mV
vh=r1/r2 'Verhältnis ausrechnen
udigit=uref/1024
adcbattwert=Getadc(0)
spannung= adcbattwert*udigit
spannung=spannung*vh
spannung=spannung/1000 'In Volt umrechnen
rg=r1+r2
strom= spannung/ rg
print "ADC-Wert:"; adcbattwert
print "Spannung V:"; Fusing(spannung , "#.##") ; " Strombedarf Spannungsteiler in mA: "; Fusing(strom , "#.###")
Wait 1
Loop
da ich gerade eine kleine Schaltung bastele die sehr wenig Strom benötigen soll, da sie weit über 1 Jahr mit Batterie auskommen soll, hab ich mal kurz eine Tests mit hochohmigen Spannungsteilern gemacht. Der Grund ist die Aussage in den AVR-Datenblättern, das bei der Messung die Spannungsquelle nicht hochohmiger als 10KOhm sein sollte da es darüber zu Ungenauigkeiten kommt.
Ein Spannungsteiler in diesem Wertebereich würde allerdings viel zu viel Strom für nix verbrauchen, das wäre bei meinem Vorhaben völlig ungeeignet.
In einigen Foren basteln User wirklich aufwendige Transistor-Konstrukte um den Spannungsteiler abzuschalten, ich hab mich gefragt ob das wirklich nötig ist! Also hab ich einfach mal mit ein paar vorhanden Widerstandswerten das ganze gecheckt. Das Ergebnis war, das für die Batteriemessung durchaus auch sehr hohe Spannungsteiler gut funktionieren. Ich habe mal einen 900k und 100k Widerstand bei 1,1V interne Referenzspannung genutzt. Die Spannung wurde ohne Probleme im Sekundentakt gemessen. Die Abweichungen gegenüber einem 10k und 1K Spannungsteiler waren kleiner als 0,05V, wobei diese Abweichung vermutlich sogar durch die Widerstandstoleranz hervorgerufen wurde. Also ein 1 MegaOhm Spannungsteiler macht bei einer Batteriespannungsmessung durchaus Sinn, zumal diese Messungen ja nicht 100 mal in der Sekunde vorgenommen werden müssen. Haben die Messungen einen kleinen zeitlichen Abstand von ca. 1 Sekunde, dann ist die Genauigkeit für die meisten Anwendungen sicher völlig ausreichend. Der Strombedarf liegt dann bei ein paar Mikroampere, das ist meistens vertretbar!
Übrigens bei den Messungen habe ich sicherheitshalber noch ein 47nF von Masse nach PA0 eingebaut, damit jederzeit für die ADC-Messung etwas Strom da ist. Aber mit den gegebenen Werten hätte es auch noch ohne diesen Kondensator geklappt.
Für Einsteiger hab ich bei der Gelegenheit das kleine Messprogramm für RN-AVR Universal gepostet. Es kann natürlich fast unverändert auch auf RN-Control usw. genutzt werden.
Es zeigt wie man Spannung aufgrund der Widerstände und UREF umrechnet und zeigt auch gleich Strombedarf an (über Rs232/USB).
'################################################# #############
'SpannungMessen1.bas
'
'Ein kleines Testprogramm für RN-AVR UNIVERSAL bzw. ATMega644
'
'Das programm demonstriert wie man die Spannung an einem
'analogem Port messen kann. Es wird auch genau gezeigt wie
'man Spannungsteiler und Spannung berechnet.
'Die verwendeten Widerstandswerte für den Spannungsteiler
'können einfach den Variablen R1 und R2 zugewiesen werden
'Das Programm demonstriert auch, das auch sehr hochhohmige
'Widerstände am Spannungsteiler durchaus gute Ergebnisse liefern
'wenn keine blitzschnellen Messungen (mehrere pro Sekunde nötig sind).
'Das Programm zeigt auch den benötigten Strom pro Spannungsteiler an.
' (c) Frank Brall 2013
'Software und RN-AVR UNIVERSAL Bezug über www.robotikhardware.de DVD
'Weitere Beispiele auf DVD von robotikhardware.de
'oder im www.Roboternetz.de und rn-wissen.de
'################################################# #####################
'Portbelegung:
'Spannungsteiler aus R1 und R2 an PA0
'Werteausgabe über RS232/USB
$programmer = 12 'MCS USB (Zeile weglassen wenn anderer Programmer)
$prog &HFF , &HFF , &HD9 , &HFE 'Fusebits richtig programmieren (Quarz ein,Jtag aus)
$regfile = "m644pdef.dat" ' oder $regfile = "m644def.dat"
$framesize = 64
$swstack = 64
$hwstack = 64
$crystal = 8000000 'Quarzfrequenz
Config Pind.6 = Output 'LED
Led1 Alias Portd.6
Config Pina.0 = Input
BattAdc Alias Pina.0
Config Adc = Single , Prescaler = 128 , Reference = INTERNAL_1.1
dim adcbattwert as integer
dim r1 as single
dim r2 as single
dim rg as single
dim uref as single
dim udigit as single
dim vh as single
dim spannung as single
dim strom as single
Start Adc
Do
Toggle Led1
r1=900 'Spannungsteiler Widerstand 1 in kOhm
r2=100 'Spannungsteiler Widerstand 2 in kOhm
uref=1100 'Referenzspannung im mV 1,1V =1100mV
vh=r1/r2 'Verhältnis ausrechnen
udigit=uref/1024
adcbattwert=Getadc(0)
spannung= adcbattwert*udigit
spannung=spannung*vh
spannung=spannung/1000 'In Volt umrechnen
rg=r1+r2
strom= spannung/ rg
print "ADC-Wert:"; adcbattwert
print "Spannung V:"; Fusing(spannung , "#.##") ; " Strombedarf Spannungsteiler in mA: "; Fusing(strom , "#.###")
Wait 1
Loop