Hi,
ich habe mir die letzten Tage ein Kondensatormessgerät mit automatischer Messbereichsumschaltung zusammengeschrieben.
Das möchte ich kurz beschreiben, und evtl gibt es von euch Anregungen, das ganze etwas eleganter zu gestalten.
Meine Ausgangsbasis ist dieser Sketch: https://www.arduino.cc/en/Tutorial/CapacitanceMeter
Als erstes habe ich die Entladung des zu messenden Kondensators vorangestellt, damit keine erste (grobe) Falschmessung mehr.
Nach dem Entladen auf gemessen 0V noch ein verpöntes Delay() eingefügt, hält den Kondensator etwas länger auf 0 Volt.
Das stabilisiert die Messergebnisse, vor allem bei Elektrolytkondensatoren, aber auch bei anderen Typen (Nachladeeffekt).
Danach erfolgt das Aufladen des zu messenden Kondensators mit dem kleinsten Messwiderstand, hier 2 kOhm, bis 1 Tau. Alle anderen Pins mit Messwiderständen (insg. 4), sowie dem Entladewiderstand wurden vorher auf Eingang umgeschalten (Tri-State).
Unten fällt die Messzeit raus (C=t/R). Ist die Messzeit groß genug, fällt diese bis zur Displayformatierung durch, und die Kapazität wird auf dem LCD angezeigt.
Ist die Zeit zu klein um komfortabel gemessen zu werden, wird diese Zeit nur als Vorqualifizierung betrachtet, und eine IF-Anweisung fängt sich die 2. Messung des Kondensators ein, dann über einen 20k, 200k, oder 2MOhm Widerstand. Damit alterniert eine Messung bei kleinen Kondensatoren immer zwischen dem Messwiderstand 2k und einem weiteren. An das Display werden ca. alle 1-2s ein neuer Messwert übergeben, nur bei großen Elkos dauert es länger (1000uF Messzeit = 2s + Entladung + Delay() ).
Da ich über die 4 Messwiderstände einen Bereich von mehr als 1:1000 abdecke, bekomme ich für Kondensatoren kleiner ~ 100nF keine auswertbare Vorqualifizierung über die Messzeit mehr hin, und schicke solche Messungen, also auch kein Kondensator - Messungen über den 2MOhm-Messbereich, der mir alles kleiner ~ 100nF messen soll.
Eine kleine Fußangel besteht darin, daß ich mir über das Delay(10) und ein im falschen Moment eingesteckten, großen Kondensator eine Messung im falschen Messbereich einhandle (Bsp. 1000μF über 2MOhm ... reicht für eine Gassi-Runde;-)). Die Chance ist ca. 1 zu 100.
Hier fehlt mir noch der richtige Einfall und die Programmierkenntnisse um das besser zu lösen.
Bis dahin reicht ein neues stecken des Kondensators, falls dieser Fall aufreten sollte.
Bevor ich mit dem Autoranging rumgespielt habe, habe ich erstmal entsprechende Abschnitte im Datenblatt des Atmel gelesen, und viel mit unterschiedlichen Messwiderständen getestet.
Belastet man einen Digital-Pin zu sehr, bricht die Spannung zu sehr ein, verfälscht die Messung. (I/O Pin Output Voltage vs. Source Current (VCC = 5V)). Das gilt für den kleinsten Messwiderstand (2k).
Das andere Ende, also der 2M Messwiderstand, sorgt für eine noch gut messbare Aufladezeit bei kleinen Kondensatoren (kleiner 10nF) in Kombination mit einer Aufladung bis 2*Tau (86.5% statt 63.2%). Noch höherohmige Widerstände als 2MOhm bringen nur mehr schwankende Messergebnisse, aber nicht unbedingt bessere.
Die Wiederholgenauigkeit der Messergebnisse ist sehr hoch, die absolute Genauigkeit ist eher von den Möglichkeiten des Arduino geprägt. Die Umschaltschwellen der verschiedenen Messwiderstände (und damit Messzeiten) haben bei mir nur ca. eine 0,5% Differenz, wesentlich größeren Einfluss hat das wacklige Steckbrett! Habe ich alle Bauelemente zusammen, werde ich sehen, wo nach unten, also kleiner 1nF wirklich Schluss ist, getestet habe ich nur zwischen 4.700μF und 2,2nF, mit Elkos, Tantal, MKT, MKP, Polyester und Keramikkondensatoren.
Ein Messgerät werde ich daraus nicht bauen, aber ein Shield schon, damit ich in 2min den Arduino und das Display draufstecken und den Sketch einspielen kann, ich habe hier eine Schachtel mit SMD Kerkos rumliegen ...
Gruß André
LCD-Kapazitaetsmesser_V5a.ino (11.4 KB)