Forum: Mikrocontroller und Digitale Elektronik Spannungsmessung mit Attiny - Minimalbeschaltung?


von Marian S. (sja-m)


Lesenswert?

Hallo Leute,

ich plane eine Schaltung die mit einem kleinen Akku/Batterie betrieben 
werden soll. Die Spannung möchte ich gerne überwachen.

Aus Platzgründen soll ein Tiny10 SOT23(6) eingesetzt werden.
Mein Ziel ist es mit möglichst nur einem ADC-Pin und geringstmöglicher 
Beschaltung auszukommen.

Folgende Methoden zur Überwachung der Versorgungsspannung kenne ich:

1. ADC aus Spannungsteiler füttern und mit interner ref. vergleichen.
-Über den Spannungsteiler findet eine permanente Entladung statt.
-Der Spannungsteiler könnte geschalten werden, kostet aber einen Pin.

2. ADC mit Vcc als ref, die interne Vbg über mux Messen und Umrechnen.
+Geht bei manchen AVRs ohne externe Beschaltung und ohne Portpin.
-Beim Tiny10 kann man leider die Vbg nicht auf den ADC legen.
-Überhaupt hat er keine konstante Referenzspannung.

Meine Frage daher ob dies funktionieren würde:
Eine Diode (evtl. Z-Diode) zwischen ADC und GND zu schalten und zur 
Messung den internen Pullup des ADC-Pin aktivieren.
Die Spannung, die an der Diode abfällt ist ja ziemlich konstant und 
bildet somit meine Konstante zur Variablen ref.


Könnte das funktionieren oder hab ich dabei was übersehen?

Danke schonmal für Eure Hilfe.
Gruß
Marian

von P. M. (o-o)


Lesenswert?

Könntest auch die Entladekurve eines Kondensators messen: Der 
Kondensator wird über Pin (Output, High) --- R --- C --- GND geladen. 
Der Pin wird dann hochohmig und als ADC umgeschaltet und misst nach 
einer bestimmten Zeit die Spannung. Dadurch ist bestimmt, wo man in der 
Entladekurve steht und aus der bekannten Zeit kann man dann die 
Anfangsspannung berechnen. Am besten fügt man parallel zum C noch einen 
Widerstand ein, um eine definierte Entladung zu garantieren.

Braucht keinen Ruhestromstrom und sicherlich auch nicht zu viel 
Rechenzeit.

von Anja (Gast)


Lesenswert?

Marian S. schrieb:
> Könnte das funktionieren oder hab ich dabei was übersehen?

klingt für mich erst mal plausibel:

- Als Z-Diode würde ich einen LM385-1.2 verwenden (liefert ab ca 10uA 
bereits eine stabile Spannung).

- eventuell brauchst Du noch einen Kondensator am ADC-Eingang da 
dynamisch kurzzeitig große Ströme während der Messung fließen. (Dem 
Kondensator mußt Du dann genügend Zeit geben daß er aufgeladen werden 
kann). Der ADC verlangt ja max 10K als Quellimpedanz und die Pull-ups 
haben zwischen 20 und 50K.

Gruß Anja

von Edi R. (edi_r)


Lesenswert?

P. M. schrieb:
> Könntest auch die Entladekurve eines Kondensators messen:

Ich glaube nicht, dass das in dem konkreten Fall klappt. Denn:

P. M. schrieb:
> ...und misst nach
> einer bestimmten Zeit die Spannung.

hier bräuchte man wieder eine Referenz, die man aber nicht hat.

von Michael U. (amiga)


Lesenswert?

Hallo,

irgendwie vermisse ich die Angabe der Batteriespannung und die nötige 
Genauigkeit der Messung...

Ab ca. 2,5V vielleicht einfach eine rote LED mit Vorwiderstand als 
Referenz an den ADC-Pin, VREf = Vcc und etwas rechnen.
Wenn es genauer (eigentlich stabiler gegen Temperaturänderungen usw.) 
sein soll, eine Referenzspannungsquelle an den ADC-Pin, LM385Z z.B., 
kostet nur ca. 50 Cent.

Gruß aus Berlin
Michael

von Ulrich (Gast)


Lesenswert?

Wenn dem Tiny10 die interne Referenz fehlt, ist es vielleicht einfach 
der falsche Chip.  Dafür gibt es spezielle Chips wie etwa Max6775, die 
sogar teils noch kleiner sind und ohne zusätzliche Teile auskommen.
Welcher Chip passt hängt natürlich von den Anforderungen ab - da hat 
meine Glaskugel nicht die nötige Reichweite.

von Marian S. (sja-m)


Lesenswert?

Hallo,

schönen Dank für Eure Antworten!

Ich werde es wohl einfach mal mit einem anderen AVR testen müssen, da 
mir das nötige Equipment für die SOT23 Winzlinge noch fehlt.

@Anja
Danke für den Hinweis mit dem C.

@Michael
Versorgungsspannung wird wahrscheinlich ein LiXX Akku mit ~4,2V.
Es reicht die Messung alle paar Sekunden durchzuführen.
Ich möchte damit den Akku vor Tiefentladung schützen (erst Warnsignal, 
dann Abschaltung). Genauigkeit, gute Frage. Die Warnung soll bei ~3,3V 
eintreten, der Akku darf nicht unter 2,7V gehen.

Ein Problem könnte evtl. noch der Temparaturbereich sein:
Normal wären +15 bis +50°C auftreten, wobei unter Extremstbedingungen 
auch -15 bis +80°C auftreten können. Dabei darf er gerne eher 
abschalten.

Die Idee mit der LED finde ich interesant, da ich die ja auch als 
Anzeige nutzen könnte.

@Ulrich
Der Tiny10 hat (fast) alles was ich brauche: ISP, Timer, 2x Pwm, ADC, 
Baugröße (oder besser Baukleine). Ich hoffe mit Eurer Hilfe das Problem 
mit der fehlenden ref lösen zu können.

Für weitere Ideen wäre ich Dankbar

von Jackenkoffer (Gast)


Angehängte Dateien:

Lesenswert?

Was noch möglich wäre ist der Spannunsteiler den du selbst vorgeschlagen 
hast :
Die Widerstände berechnest du mit "RNAVR" ( übrigens: SUPer programm)
ach , ja , ansonsten kannst du ja direkt mit der Spannung Arbeiten, hier 
ein
Pogramm in BAscom :

$regfile "attiny10def.dat"
$crystal = 1000000

Config Adc = Single , Prescaler = auto ,
Start Adc

Config Portb.1 = output

CONST ADC_MULTI = 5.0 / 1024.0
DIM messergebnis AS WORD
DIM volt AS SINGLE

do:
messergebnis = GETADC(0)
volt = messergebnis * ADC_MULTI
Select Case Volt
case 4,5 to 5,5
portb.1 = 0
case else
portb.1 = 1
end Select
wait 1
loop

end

( ich bin mir nicht ganz sicher ob die "def.dat" datei stimmt , aber 
alles andere sollte stimmen =)   )

von Peter D. (peda)


Lesenswert?

Marian S. schrieb:
> Aus Platzgründen soll ein Tiny10 SOT23(6) eingesetzt werden.

Wie klein ist denn der Akku, daß ein SO-8 daneben zu groß ist?

Z.B. der ATtiny25 hat interne Referenz und Temperatursensor.


Peter

von Marian S. (sja-m)


Lesenswert?

Hallo,

@Jackenhoffer
Leider ist bascom für mich ein böhmisches Dorf.
Mit C habe ich schon erste Erfahrungen gesammelt. Dies wäre auch die 
Sprache meiner Wahl.
Das mit dem Spannungsteiler über 2 R wird denke ich an dem Problem der 
mangelnden konstanten Ref scheitern.

@Peter
Super Tipp, Danke.
Der Akku (wird wohl ein 25500) ist separat untergebracht.
Es handelt sich dabei um eine Taschenlapme.
Die Platine ist winzig (29mm Durchmesser, 10mm Loch in der Mitte, 2x 3mm 
Bohrungen) und trägt bereits 9 SOT89 (AMC7135). Ist leider schon recht 
eng bestückt.
Ein SO8 0.150" würde evtl. noch passen. Da muss ich mal bisschen mit dem 
Layout rumspielen. Alternativ wirds halt ein MLF.

Der Tempsensor im Tiny25 hätte durchaus noch was.
Ein wenig mehr Speicher ist auch nie verkehrt.
Und die Neuanschaffung eines TPI Programmers könnte ich mir auch sparen.

Wenn ich das richtig gelesen habe, sollte es so funktionieren:
Vcc als ref., Input als Vbg.
Was mus ich dazu ins ADMUX schreiben (etwa 000X1100)? Das "X" in der 
Tabelle irritiert mich.

Danke und Gruß
Marian

von Ulrich (Gast)


Lesenswert?

Das X steht für Bits die keine Wirkung haben. Da kann also was 
x-beliebiges rein.

von Marian S. (sja-m)


Lesenswert?

Vielen Dank für die Info Ulrich!

Dann kann ich mich jetzt ans Platinenbasteln machen.

Danke für Eure Hilfe!

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.