11.12.14:
Leckstrom keramischer KondensatorenBeim
Arbeiten mit ganz normalen 100-nF-Scheibenkondensatoren ist mit schon
oft der große Temperaturkoeffizient aufgefallen. Und kürzlich eine
zweite Eigenschaft: Eine geringe aber
reproduzierbare Leitfähigkeit. Auf der Suche bin ich auf ein
Datenblatt von AVX (Y5V Dielectric General Specifications) gestoßen.
Da sieht man, dass die Kapazität bei 10 Grad am höchsten ist.
Darüber nimmt sie mit ca. 1 % pro Grad ab.
Der
Insolationswiderstand ist weit weniger temperaturabhängig und beträgt
bei Zimmertemperatur etwa 2 kOhm bezogen auf 1 F. Unabhängig von der
Kapazität ergibt sich damit theoretisch eine Zeitkonstante T = RC von
2000 s. Für einen 100-nF-Kondensator bedeutet das 20 GOhm. An 9 V würde
ein Leckstrom von 0,45 nA fließen. Das ist nicht leicht zu
messen. Ich habe mir daher eine Hilfsschaltung aus zwei Kondensatoren
gebaut. 100 nF hat das Messobjekt. 470 nF ein Folienkondensator, der
praktisch unendlichen Widerstand hat. Der kleine Kondensator lädt den
großen langsam auf. Bei einem Ladestrom von 0,45 nA und einer Kapazität
von insgesamt 570 nF kommt man auf eine Spannungsänderung von etwa 100
mV in zwei Minuten. Die Messung mit dem Oszilloskop und hochohmigen
Tastkopf ergibt einen Impuls, dessen Spitze die erreichte Ladespannung
zeigt.
Ergebnis:
Kurz nach dem Einschalten und vollständigen Aufladen (470 nF
kurzgehschlossen) komme ich tatsächlich auf ca. 100 mV nach zwei
Minuten. Aber nach einiger Zeit steigt die Spannung praktisch nicht
mehr an. Nochmal ins Datenblatt geschaut, da steht noch etwas zu den
Randbedingungen für den garantierten Isolationswiderstand:
Insulation Resistance 10,000MΩ or 500MΩ - μF, whichever is less
Charge device with rated voltage for 120 ± 5 secs @ room temp/humidity
Also
nochmal mit höherer Spannung gemessen, 40 V war gerade da. Das
gleiche Ergebnis. Am Anfang fließt ungefähr der erwartete Leckstrom,
aber nach ein paar Minuten nimmt er fast auf Null ab. Das erinnert mich
an das Verhalten eines Elkos: Am Anfang ist der Leckstrom groß, aber
längerem Betrieb geht er fast auf Null zurück. Auch in dem keramischen
Kondensator könnte eine Art Polarisierungseffekt stattfinden. Also
Kondensator umgepolt, neu aufgeladen, neue Messung. Und tatsächlich,
wieder fließt am Anfang der erwartete Leckstrom, nach wenigen Minuten
fast nichts mehr.
Das
ganze noch mal mit einem AVR-Controller bei einer Ladespannung von 9 V
genauer nachgemessen und als Diagramm dargestellt zeigt, wie die
Spannung am unteren Kondensator in zehn Minuten auf 100 mV steigt. Vor
der Messung wurde der keramische Kondensator umgepolt. Man sieht
deutlich wie der Leckstrom immer weiter abnimmt und nach zehn Minuten
nicht mehr nachweisbar ist. Nur ganz am Anfang ist er so groß wie oben
berechnet. Die Zeitkonstante liegt eher bei 200 s als bei 2000 s.
Deshalb schlage ich das folgende Ersatzschaltbild für den Kondensator
vor:
Meine
Vermutung ist nun, es könnte etwas mit der Feuchtigkeit zu tun haben,
die ja auch im Datenblatt erwähnt wird. Der keramische Werkstoff nimmt
etwas Wasser auf, das dann für den Leckstrom und den
Polarisierungseffekt verantwortlich ist. Nach ein paar Minuten haben
sich dann wohl alle Ionen so verschoben, dass kein weiterer Strom mehr
fließt. Was die Vermutung stützt ist eine Vorschrift beim SMD-Löten:
Die Bauteile müssen definiert vorgeheizt und damit getrocknet werden,
sonst platzen die Vielschichtkondensatoren beim Löten wegen der
vorhandenen Restfeuchte auf.
Nachtrag:
Dielektrische Absorption
Gestern
Abend habe ich meine Messung mit Roger Leifert besprochen. Er sagte
spontan: Der Effekt ist bekannt und nennt sich dielektrische
Absorption. Genaueres dazu findet man in Wikipedia:
http://de.wikipedia.org/wiki/Dielektrische_Absorption Interessant
ist, dass ich nicht über die Nachladespannung auf das Phänomen gestoßen
bin sondern über den Leckstrom, der am Anfang relativ konstant und
reproduzierbar ist.
Nachtrag:
Messung der Kondensator-NachladespannungDie
dielektrische Absorption zeigt sich auch in einem Nachlade-Effekt. Wird
ein Kondensator aufgeladen und dann entladen, dann lädt er
sich nach einiger Zeit wieder etwas auf. Das wollte ich mit
den keramischen Scheibenkondensatoren genauer untersuchen. Dazu diente
das folgende kleine Programm. Der Kondensator wird einfach nur zwischen
GND und B3 eines Tiny13 angeschlossen. Weil ich immer nur eine Sekunde
warten wollte war der Effekt gering. Der Messwert lautete meist 10,
d.h. der Kondensator war nach einer Sekunde wieder auf 50 mV
aufgeladen.
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 4
$framesize = 4
Dim D As Integer
Config Adc = Single , Prescaler = Auto
Start Adc
Open "comb.1:9600,8,n,1,inverted" For Output As #1
Do
Portb.3 = 1 'Aufladen
Ddrb.3 = 1
Wait 1 '1 s
Portb.3 = 0 'Entladen
Wait 1 '1 s
Ddrb.3 = 0 'High Z
Wait 1 '1 s
D = Getadc(3) 'Messen
Print #1 , D
Waitms 500
Loop
End
Und
dann folgte noch ein Test, ob dieser Effekt irgendwas mit
Feuchtigkeit
zu tun hat. Der Kondensator wurde dazu in feuchtes Papier gehüllt.
Ergebnis: keine Änderung. Die ursprüngliche Vermutung, dass der Effekt
etwas mit Wasser zu tun hat war also falsch. Richtig ist wohl die
Erklärung, die man in Wikipedia lesen kann: Die Dipole im keramischen
Material brauchen einfach etwas Zeit bis sie sich passend gedreht
haben.
4.12.14:
AVR Power-on-ResetGestern
hat mich Andreas Riedenauer besucht. Es kennt beruflich bedingt
alle Feinheiten der AVR-Controller. Ich habe ich gefragt, warum eine im
Programm mit OSCCAL veränderte Taktrate auch noch nach einem Reset
wirksam ist und sich z.B. beim Programmieren auswirkt. Das Problem war
beim Sparrow bei hoher Taktfrequenz aufgetaucht und in der
Vergangenheit auch schon mal beim Lernpaket Mikrocontroller, wo es
geklemmt hatte, wenn man die Taktfrequenz zu tief einstellt. Ich war
mit schon fast sicher, da steckt ein Bug im Tiny13, aber es ist ganz
anders. Andreas Riedenauer hat mir dazu folgendes erklärt:
Alle
Einstellungen in den Fuses (z.B. 9,6 MHz, Vorteiler durch 8) werden erst
wirksam, wenn man die Betriebsspannugn einmal ganz abschaltet. Da gibt so etwas
wie einen Reset vor dem Reset, Stichwort Power-on-Reset. Wenn die
Betriebsspannung ansteigt, werden ab ca. 1 V die Fuse-Einstellungen in die
zugehörigen Register kopiert. Und da gibt es einen Hinweis in den meisten Datenblättern,
der gern mal überlesen wird, und der früher nicht so deutlich betont wurde: Die
Betriebsspannung soll bis unter 0,05 V fallen! Nur dann ist bei allen
Controllern gesichert, dass beim nächsten Start alles glatt läuft. Jetzt wird
es mir klar, eigentlich müsste in jedem System ein Widerstand an Vcc geben GND
liegen, damit man irgendwann wirklich mal unter 50 mV kommt.
Ein Kommentar zum AVR Power-on Reset von Arne Rossius
Verglichen mit den anderen Werten scheinen mir die 0.05 V extrem gering zu
sein. Im Datenblatt des ATmega168A sind als Minimum realistischere 0.6 V
angegeben (Datenblatt-Version 05/11). Im aktuellen Datenblatt des ATtiny13,
frisch von der Atmel-Website (Version 08/10) fehlen die Angaben fuer Min und
Max, ebenso in der aelteren Version 10/07 von meiner Festplatte. Beim
ATtiny13A findet man 0.6 V als Minimum, genau wie beim ATmega168A. Dann habe
ich mal das aelteste Datenblatt herausgesucht, was ich bei mir gespeichert
habe: AT90S2313 in der Version 08/01. Dort sind es minimal 0.4 V.
Beim ATmega168 (ohne -P oder -A, Datenblattversion 05/11) habe ich dann
endlich die 0.05 V von deiner Website gefunden. Ebenfalls beim ATmega644
(ohne -P oder -A, Datenblattversion 02/12). Gibt es da etwa bei einer
bestimmten Version des AVR-Kerns ein Hardwareproblem, weshalb die
Spannung dort so niedrig ist? Oder ist es einfach ein Druckfehler, der
unbemerkt weiterkopiert wurde, und es sollte eigentlich 0.5 V heissen?
Einen aehnlichen Fehler habe ich auch schon in der Befehlstabelle fuer
die Ausfuehrungszeit der Befehle "rcall" und "ret" entdeckt. Zum
Beispiel beim ATmega644 sind dort 4 Zyklen fuer "rcall" und 5 Zyklen
fuer "ret" angegeben -- das gilt jedoch nur fuer Controller mit mehr als
16 Bit Programmzählerlaenge, d.h. mehr als 128 KiByte (64 KiWords)
Flash. Nachdem ich experimentell ueberprueft hatte, dass es wirklich nur
3 Zyklen fuer "rcall" und 4 fuer "ret" sind, habe ich eine E-Mail an
Atmel geschickt und inzwischen auch eine Bestaetigung erhalten, dass die
Angaben im Datenblatt nicht stimmen. Fuer die -A- und -PA-Versionen ist
es inzwischen korrigiert (falsch in Version 01/10, korrekt in der
aktuellen Version 07/2014, und ein vierstelliges Jahr haben sie bei der
Gelegenheit auch gleich eingefuehrt ;-)). Fuer die regulaere und die
-P-Version gibt es noch kein neues Datenblatt.
Noch ein
Tipp von Andreas Riedenauer: Wenn man auf das PIN-Register schreibt, toggelt der
zugehörige Port. Diese Eigenschaft hatte ich bisher immer übersehen und jetzt
erst im Datenblatt des Mega88 gefunden. Vorteil ist, dass es schneller geht.
Gleich mal in Bascom auf dem Arduino Uno getestet, es funktioniert. Und beim
Tiny13 geht es auch, getestet mit einem Blink-Programm für den Sparrow:
'ATtiny13 Sparrow blink LEDs
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 4
$framesize = 4
Config Portb = &B000011010
Dim T As Byte
Dim N As Byte
Led1 Alias Portb.1
Led2 Alias Portb.3
S1 Alias Pinb.0
S2 Alias Pinb.2
Led1 = 1
Led2 = 0
T = 20
Do
N = 0
Do
If S1 = 0 Then T = T + 1
If T > 250 Then T = 250
If S2 = 0 Then T = T - 1
If T < 1 Then T = 1
Waitms 10
N = N + 10
Loop Until N >= T
Pinb.1 = 1
'Toggle Led1
Pinb.3 = 1
'Toggle Led2
Loop
End
Erst
nach längerem Suchen habe ich es auch im Datenblatt des Tiny13
gefunden: The Port Input Pins I/O location is read only, while the Data
Register and the Data Direction Register are read/write. However,
writing a logic one to a bit in the PINx Register, will result in a
toggle in the corresponding bit in the Data Register.