Forum: Analoge Elektronik und Schaltungstechnik Nervige Spannungsschwankungen (AVR) Akku vs ADC


von Paul H. (powl)


Lesenswert?

Hi!

Ich habe meine LED-Fader Schaltung an 3 in reihe geschaltete NiCd Mikro 
Akkus mit 250mAh Kapazität. Die Last besteht aus 3 LEDs die vom AVR per 
Software PWM über NPN Transistoren gegen Vorwiderstand-->Masse getrieben 
werden. Wenn die LEDs aus sind verbraucht die Schaltung nur wenige mA. 
Bei weißem Licht können das dann schonmal 70 mA sein. Der AVR läuft mit 
8 Mhz.

Um die Akkuspannung nun zu überwachen messe ich mit dem ADC 
(Wandlungstakt 125kHz) im ADC Noise-Reduction Sleep-Mode periodisch alle 
ungefär viertel Sekunden (durch einen Timer gesteuert) über einen 
Spannungsteiler die Akkuspannung. Um den Einfluss der ständig anders 
angesteuerten LEDs auf die Spannung zu unterbinden schalte ich diese vor 
der Wandlung ab und danach wieder an. Das bringt schon deutliche 
Unterschiede.. zumindest verhindert es dass der Wert um +-30 
rumschwankt.

Trotzdem variiert der Wert immer um so +-3 je nach dem wie viele LEDs 
gerade wie hell an sind :-( Habe ausser parallel zu den Tastern zum 
entprellen keine Kapazitäten in der Schaltung verbaut und die enden ja 
an den hochohmigen Eingängen des µC also kann hier kein Strom fließen. 
Wenn ich den Fading-Vorgang pausiere bleibt der Wert stabil, ich habe 
bis auf die normalen Quantisierungsfehler absolut kein Rauschen am ADC.

Woher kommen diese Spannungsschwankungen obwohl die Bedingungen während 
der Messung eigentlich immer gleich sind? Müssen sich die Akkus erst 
eine Zeit lang erhohlen um ihre ursprüngliche Spannung nach abschalten 
der Last wieder bereit zu stellen?

mfg PoWl

von Hubert.G (Gast)


Lesenswert?

Du hast dir die Antwort bereits selbst gegeben, genau das ist es. Je 
nach Ladezustand geht das schneller oder langsamer.

von Paul H. (powl)


Lesenswert?

D.h. dagegen kann ich garnix machen?

von holger (Gast)


Lesenswert?

>Trotzdem variiert der Wert immer um so +-3

Was ist denn daran so schlimm ?
Bei 8Bit Messwert sind das gerade mal 1.5%.

>D.h. dagegen kann ich garnix machen?

Akkus heiss machen. Pro 10° Celsius mehr verdoppelt
sich die Reaktionsgeschwindigkeit deiner Akkus.

von Thomas F. (thomas-hn) Benutzerseite


Lesenswert?

>>D.h. dagegen kann ich garnix machen?

Glättungs-C ?

von Paul H. (powl)


Lesenswert?

Glättungs-C. Ich weiß nicht wo ich den hinbauen soll. Alle Versuche die 
Spannung irgendwie zu stabilisieren haben eher das Gegenteil bewirkt. 
sobald ich einen Kondensator zwischen Vcc und GND lege schwankt mein ADC 
noch viel stärker. Das Liegt wohl daran dass der Kondensator der ja nun 
von den LEDs leergesaugt wird sich während die LEDs aus sind wieder 
vollsaugt und somit den akku weiter destabilisiert. Denk ich mal. 
Eventuell hilft es wenn ich einen Kondensator mit ausreichender 
kapazität nehme, hm? Aber da stehen wieder kosten und nutzen nicht ganz 
im Verhältnis.

von Werner B. (Gast)


Lesenswert?

Ich würde den Glättungs-C direkt an den ADC Eingang legen. Wirkt dann 
mit dem Spannungsteiler (bei entsprechender Dimensionierung) als 
Tiefpass.

von Paul H. (powl)


Lesenswert?

glättungs-C am ADC hat nur eine deutliche verstärkung der Schwankungen 
gezeigt :-( egal wo ich einen kondensator hinbaue, er wirkt sich immer 
negativ aus, ob zwischen ADC eingang und GND, zwischen Vcc und GND. Nur 
zwischen Aref und GND zeigt er zwar keine negative aber auch keine 
positive wirkung. Der ADC rauscht nichtmal wenn ich die 
"mindestbeschaltung" also den 100n-kerko zwischen Aref und GND ganz weg 
lasse. habe jedoch das gefühl dass wenn ich nun die Referenz nicht an 
den Aref pin lege, das rauschen schlimmer bzw. vorhanden ist. Aber wie 
schon gesagt habe ich kein problem mit rauschen sondern mit 
spannungsschwankungn der gnazen schaltung. Auch ein 470µF kondensator 
direkt am akku hat nix gebracht, oder ist der einfach nur zu klein?

Naja aber danke für die hilfe, ich denke wir brauchen hieran nicht 
weiter zu diskutieren da es für mein vorhaben nicht wichtig ist genauste 
messungen zu machen während die schaltung auf akku-betrieb läuft.

von Anon Y. (anonymous)


Lesenswert?

der kondensator muss direkt an den an den verbraucher sonst induktivität 
+ widerstand zu groß

Ein kondensator 100nF für mikrocontroller
Ein Kondensator ~400µF für leds
Ein Kondensator 10µF für spannungsteiler (Tiefpass)

mikrocontroller und leds nicht auf die selbe gnd plane und vcc setzen, 
sondern mit einer dünnen leiterbahn verbinden. Die Akkus sind's nicht 
schuld, sondern induktivität & Widerstand der Zuleitungen.

von Paul H. (powl)


Lesenswert?

danker, werd ich mal probiern :-)

von Reinhard R. (reirawb)


Lesenswert?

Du willst also die Akkuspannung im (fast) Leerlauf messen und schaltest 
vor der Messung die LEDs aus. Wenn die LEDs eingeschaltet sind, stellt 
sich an der gesamten Schaltung eine durch den Innenwiderstand der Akkus 
verringerte Betriebsspannung ein. Schaltest Du die LEDs aus, steigt die 
Betriebsspannung langsam auf den Wert der Leerlaufspannung an. Langsam 
deshalb, weil der Akku-Innenwiderstand und die in der Schaltung 
verbauten Kondensatoren einen Tiefpass bilden.

1. Abblockkondensatoren nicht größer als notwendig (aber auch nicht
   weglassen!)

2. Ein Tiefpass am Messeingang hat ebenfalls einen negativen Einfluss,
   da dadurch der Messeingang nur langsam der Betriebsspannung folgt.

3. Zwischen Abschaltung der LEDs und Messung etwas Zeit verstreichen
   lassen damit die Spannungen auf ihren korrekten Wert einschwingen
   können, Zeit ermitteln Mittels Trial and Error (ich schätze ein paar
   Millisekunden).

Reinhard

von Paul H. (powl)


Lesenswert?

ebenfalls interessant :-) wird ausprobiert!

abblockkondensator? da meinst du doch denk ich mal nur einen kondensator 
am µC zwischen Vcc und Masse, oder? Einen solchen habe ich garnicht 
verbaut.

von Ulrich P. (uprinz)


Lesenswert?

Bitte daran denken, dass die AVRs für jeden Vcc und AVcc einen separaten 
Blockkondensator brauchen (Datenblatt!). Und ja, die Blockkondensatoren 
müssen so dicht wie möglich an die zuständigen Pinne vom Chip.
Um Deine Probleme nicht zu verschlimmern solltest Du die 
Blockkondensatoren mit nur 4.7nF..10nF wählen.
Ggf. AVcc und Vcc über eine kleine Induktivität verbinden AVcc und AGnd 
nahe beieinander führen und zentral mit den Gegenparts Vcc / GND 
verbinden. Keine Tannenbaumversorgung oder Strickleiter, sondern 
Sternförmige Versorgung aufbauen.

Es gibt vielleicht eine Möglichkeit, das Problem eleganter zu lösen, 
aber die erfordert mehr Aufwand. Bei Deiner Lösung ist das Schwierige, 
dass die Messschaltung und die Messgröße sich gegenseitig beeinflussen. 
Du könntest versuchen die Schaltung ein wenig abzukoppeln, also z.B. auf 
3.3V herunter zu setzen über einen Spannungsregler. Hinter dem 
Spannungsregler glättest Du dann mit einem Kondensator. Damit ist Deine 
Referenz-Spannung schon mal weniger durch die Akku-Schwankungen 
beeinflusst. Um weiter runter zu gehen, kannst Du auch einen Mega-L 
einsetzen und das ganze mit <3V betreiben.
Um den Einfluss der LED-Belastung zu verringern, könntest Du die LEDs 
sequenziell Schalten, also jeweils nur eine und das in schneller Folge. 
Das reduziert die punktuelle Belastung für den Akku. Natürlich solltest 
Du bei der Trennung über einen Spannungsregler die LEDs auf der 
Akku-Seite lassen und nur den AVR auf die Reglerseite bringen, da die 
LEDs Dir sonst den Kondensator leer saugen.

Gegen die Trägheit des Akkus kann man nichts machen, da hilft nur ein 
experimentelles Ermitteln eines optimalen Messzeitpunktes, oder, um auf 
unterschiedliche Akkus reagieren zu können, kann man auch mehrere 
Messungen in schneller Folge machen und dann sehen, wann die Änderung 
ausreichend klein geworden ist.

Gruß, Ulrich

von Reinhard R. (reirawb)


Lesenswert?

> abblockkondensator? da meinst du doch denk ich mal nur einen
> kondensator am µC zwischen Vcc und Masse, oder? Einen solchen
> habe ich garnicht verbaut.

Ja genau sowas. Aber egal ob direkt am µC oder sonstwo zwischen
Vcc und Masse, die Wirkung als Tiefpass bleibt im Falle Deiner
Anwendung die Gleiche. Ich kann mich den Ausführungen von Ulrich
nur anschließen, wobei der Ansatz mit der Mehrfachmessung auch
eine gute Idee ist.

Reinhard

von Anon Y. (anonymous)


Lesenswert?

--------------------OT------------------------------------

@Ulrich P.
Du schreibst von 10nF - 4n7F Abblockkondensatoren. Ich habe bis jetzt 
nur 100nF als Empfehlung gefunden. Wie kommst du auf deinen Wert? Hängt 
das vielleicht mit der Frequenz zusammen? Diese wäre bei mir 16MHz. 
Könnte es sein, dass die 100nF ein Wert sind, die von den alten 
Logikgattern stammt?
Eine Webseite wo ich das nachlesen könnte wäre schön

Das wäre praktisch für mich, weil ich eine 4000er Rolle mit 4n7F SMD-Cs 
habe.

von Ulrich P. (uprinz)


Lesenswert?

Die Kondensatoren sollen kurzfristige Strom-Bedürfnisse des Chips 
befriedigen und damit Einflüsse auf die restliche Schaltung minimieren. 
100nF sind der übliche Wert, bei vielen Chips und sparsamer Versorgung 
pumpt hinterher die ganze Schaltung. Man sollte also auch da nicht immer 
einfach nur den Standard verwenden.
In Deinem Fall ist es aber so, dass du eine sparsame Schaltung an einer 
potenten Stromversorgung hast, daher können die Blockkondensatoren 
kleiner ausfallen. Im Grunde ist Lange-Leiterbahn+C ein RC Glied als 
Tiefpass.

Um noch ein wenig mehr heraus zu holen, könntest Du Vcc/GND und 
AVcc/AGND getrennt führen, also direkt hinter einem eventuell 
vorhandenen Spannungsregler trennen und separat führen. Ohne 
Spannungsregler dann einfach ab Akku. In Serie zu AVcc kommt dann noch 
eine Spule 10mH, parallel zu AVcc und AGND einmal 47nF.
Die (Block-)Kondensatoren dann bitte auf jeden Fall so dicht am Chip wie 
möglich, auch die Induktivität. Die Leitungen für AVcc/AGND bitte 
entweder komplett abseits der LEDs führen bzw. wenn sie an den LEDs 
vorbei müssen, dann immer möglichst quer dazu. Kenn jetzt die ADC Stufe 
im AVR nicht auswendig aber nicht dass es da einschlägt und Dir die S/H 
Stufe vorlädt oder die VRef verwirrt.

Achso, beim Mega32 liegen AVCC und VCC, glaube ich, auf 
gegenüberliegenden Seiten. Verbindet man diese möglichst kurz, muss man 
unterm Chip drunter durch. Das ist der denkbar schlechteste Weg, weil 
man direkt unterm DIE durch muss und damit der direkten Abstrahlung des 
Chips ausgesetzt ist. Also lieber einen anderen Weg benutzen.

Eine weitere Optimierung ( naja, dann sind wir aber schon fast im 
Audio-Philosophischen-Bereich :)) könnte sein:
Die Schaltung wird ja direkt aus dem Akku versorgt:
Zwei Schottky-Dioden entkoppeln direkt hinterm Akku zwei Spannungen:
Eine ist für die Anzeige zuständig und sie sollte mit 470..1000uF 
geblockt werden.
Die Andere kannst Du mit 100uF grob filtern und dann klemmst Du den AVR 
dahinter. Der natürlich mit den 4,7..10nF an allen Versorgungen. Naja, 
eine dritte Schottky könnte dann auch noch die AVCC entkoppeln, 100mH + 
47nF sollten reichen, aber nee...:)

Aber, hallo, was für ein Aufwand! Ist aber ein interessantes Spiel, auf 
jeden Fall.
Ich würde es für mich nicht treiben sondern VCC mit 10nF gegen GND 
blocken, AVcc gegen AGND mit 47nF blocken, letztere über 1..10mH an VCC.

In der Software 4 Messungen addieren, danach adc >>= 2;

Wenn es dann noch zappelt ist es die kosmische Hintergrundstrahlung, die 
man nicht so ohne weiteres aus der Schaltung bekommt.

Gruß, Astralix

von Mr. K. (kaktus-)


Lesenswert?

Aus Bascom Samples...

MCU mit Idle während der AD Wandlung schlafen legen. Evtl klappts damit 
besser....

'--------------------------------------------------------------------
'                  ADC_INT.BAS
'  demonstration of GETADC() function in combintion with the idle mode
'  for a better noise immunity
'  Getadc() will also work for other AVR chips that have an ADC 
converter
'--------------------------------------------------------------------
$regfile = "4433def.dat"
$crystal = 4000000
$baud = 19200
'configure single mode and auto prescaler setting
'The single mode must be used with the GETADC() function

'The prescaler divides the internal clock by 2,4,8,15,32,64 or 128
'Because the ADC needs a clock from 50-200 KHz
'The AUTO feature, will select the highest clockrate possible
Config Adc = Single , Prescaler = Auto
'Now give power to the chip
On Adc Adc_isr Nosave
Enable Adc
Enable Interrupts



Dim W As Word , Channel As Byte

Channel = 0
'now read A/D value from channel 0
Do
  Channel = 0
  'idle will put the micro into sleep.
  'an interrupt will wake the micro.
  Start Adc
  Idle
  Stop Adc

  Print "Channel " ; Channel ; " value " ; W
  Waitms 500
Loop
End

Adc_isr:
  push r24
  in r24,sreg
  push r24
  push r25
  W = Getadc(channel)
  pop r25
  pop r24
  !out sreg,r24
  pop r24
Return
'The new M163 has options for the reference voltage
'For this chip you can use the additional param :
'Config Adc = Single , Prescaler = Auto, Reference = Internal
'The reference param may be :
'OFF      : AREF, internal reference turned off
'AVCC     : AVCC, with external capacitor at AREF pin
'INTERNAL : Internal 2.56 voltage reference with external capacitor ar 
AREF pin

'Using the additional param on chip that do not have the internal 
reference will have no effect.

von Alex (Gast)


Lesenswert?

@ Ulrich P. Du schreibst
Keine Tannenbaumversorgung oder Strickleiter, sondern
Sternförmige Versorgung aufbauen.

Kannst du bitte eine Zeichnung von diesen Varianten zeichnen.

NOK OK
Kann mir jetzt nichts genaueres darunter vorstellen.

Danke schonmal

mfg
Alex

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.