Labortagebuch Dezember 2014

 Elektronik-Labor  Notizen  Projekte  Labortagebuch

11.12.14: Leckstrom keramischer Kondensatoren

Beim 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-Nachladespannung



Die 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-Reset

Gestern 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.



4.12.14: AVR-Port toggeln



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.


 Elektronik-Labor  Notizen  Projekte  Labortagebuch