Inhaltsverzeichnis:
- Schritt 1: Schema und Theorie
- Schritt 2: Konstruktion
- Schritt 3: Software
- Schritt 4: Betrieb und erweiterte Kalibrierung
Video: ATTiny85 Kondensatormeter - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:15
Dieses anweisbare ist für ein Kondensatormessgerät basierend auf dem ATTiny85 mit den folgenden Funktionen.
- Basierend auf ATTiny85 (DigiStamp)
- SSD1306 0,96" OLED-Display
- Frequenzmessung für niederwertige Kondensatoren 1pF - 1uF mit 555 Oszillator
- Ladezeitmessung für hochwertige Kondensatoren 1uF - 50000uF
- 2 separate Ports für die Methoden zur Minimierung der Stary-Kapazität
- Zwei Stromwerte für die Ladezeit, um die Zeit für große Kondensatoren zu minimieren
- 555 Methode Selbstnullierungen beim Start, kann mit Druckknopf zurückgesetzt werden
- Ein Schnelltest, mit dem ausgewählt wird, welche Methode für jeden Messzyklus verwendet werden soll.
- Die Genauigkeit der Ladezeitmethode kann durch die Unterstützung der OSCVAL-Taktfrequenzanpassung verbessert werden
Schritt 1: Schema und Theorie
Das Schema zeigt den ATTiny, der das SSD1306-OLED-Display über eine I2C-Schnittstelle ansteuert. Es wird direkt von einem LiOn 300mAh Akku mit Strom versorgt und ein Ladepunkt ist im Lieferumfang enthalten, der mit einem LiOn kompatiblen externen Ladegerät verwendet werden kann.
Die erste Messmethode basiert auf der Messung der Frequenz eines 555 freilaufenden Oszillators. Diese hat eine durch die Widerstände und einen Kondensator bestimmte Grundfrequenz, die eine hohe Genauigkeit aufweisen sollte, da dies die Genauigkeit der Messungen bestimmt. Ich habe einen 820pF 1% Polystyrol-Kondensator verwendet, den ich hatte, aber andere Werte um 1nF können verwendet werden. Der Wert muss zusammen mit einer Schätzung der Streukapazität (~20pF) in die Software eingegeben werden. Dies ergab eine Grundfrequenz von etwa 16KHz. Der Ausgang des 555 wird in PB2 des ATTiny eingespeist, der als Hardwarezähler programmiert ist. Durch Messung der Zählung über einen Zeitraum von ca. 1 Sekunde kann die Frequenz bestimmt werden. Dies erfolgt beim Start, um die Grundfrequenz zu bestimmen. Wenn ein zu prüfender Kondensator parallel zum Basiskondensator hinzugefügt wird, wird die Frequenz abgesenkt und wenn diese gemessen und mit der Basisfrequenz verglichen wird, kann der Wert der hinzugefügten Kapazität berechnet werden.
Das Schöne an dieser Methode ist, dass der berechnete Wert nur von der Genauigkeit des Basiskondensators abhängt. Der Zeitraum der Messung spielt keine Rolle. Die Auflösung hängt von der Auflösung der Frequenzmessungen ab, die recht hoch ist, sodass auch sehr kleine zusätzliche Kapazitäten gemessen werden können. Der begrenzende Faktor scheint das "Frequenzrauschen" des 555-Oszillators zu sein, das für mich etwa 0,3pF entspricht.
Die Methode kann in einem anständigen Bereich verwendet werden. Um die Reichweite zu verbessern, synchronisiere ich die Messperiode mit der Erkennung von Flanken der eingehenden Impulse. Dies bedeutet, dass selbst niederfrequente Schwingungen wie 12 Hz (mit einem 1uF-Kondensator) genau gemessen werden.
Für größere Kondensatoren ist die Schaltung so ausgelegt, dass sie ein Ladezeitgebungsverfahren verwendet. Dabei wird der zu testende Kondensator entladen, um sicherzustellen, dass er bei 0 beginnt, und dann über einen bekannten Widerstand von der Versorgungsspannung aufgeladen. Ein ADC im ATTiny85 wird verwendet, um die Kondensatorspannung zu überwachen und die Zeit bis zum Übergang von 0% auf 50% der Ladung wird gemessen. Dies kann verwendet werden, um die Kapazität zu berechnen. Da die Referenz für den ADC auch die Versorgungsspannung ist, hat dies keinen Einfluss auf die Messung. Das absolute Maß für die benötigte Zeit hängt jedoch von der Taktfrequenz des ATTiny85 ab und Abweichungen davon beeinflussen das Ergebnis. Ein Verfahren kann verwendet werden, um die Genauigkeit dieser Uhr unter Verwendung eines Abstimmregisters im ATTiny85 zu verbessern, und dies wird später beschrieben.
Um den Kondensator auf 0 V zu entladen, wird ein n-Kanal-MOSFET zusammen mit einem niederohmigen Widerstand verwendet, um den Entladestrom zu begrenzen. Dies bedeutet, dass selbst große Kondensatoren schnell entladen werden können.
Zum Laden des Kondensators werden 2 Werte des Ladewiderstands verwendet. Ein Basiswert ergibt angemessene Ladezeiten für Kondensatoren von 1uF bis ca. 50uF. Ein p-Kanal-MOSFET wird verwendet, um einen niedrigeren Widerstand parallel zu schalten, damit Kondensatoren mit höherem Wert in einem vernünftigen Intervall gemessen werden können. Die gewählten Werte ergeben eine Messzeit von ca. 1 Sekunde für Kondensatoren bis 2200uF und entsprechend länger für größere Werte. Am unteren Ende des Wertes muss die Messperiode angemessen lang gehalten werden, damit der Übergang durch die 50%-Schwelle mit ausreichender Genauigkeit bestimmt werden kann. Die Abtastrate des ADC beträgt etwa 25 µSek, so dass eine Mindestperiode von 22 mSek eine angemessene Genauigkeit ergibt.
Da der ATTiny über begrenzte IO (6 Pins) verfügt, muss die Zuweisung dieser Ressource sorgfältig erfolgen. Für das Display werden 2 Pins benötigt, 1 für den Timer-Eingang, 1 für den ADC, 1 für die Entladekontrolle und 1 für die Ladestromkontrolle. Ich wollte eine Drucktastensteuerung, um jederzeit eine Neunullierung zu ermöglichen. Dies geschieht durch Hijacking der I2C-SCL-Leitung. Da die I2C-Signale Open-Drain sind, gibt es keinen elektrischen Konflikt, wenn der Taster diese Leitung auf Low ziehen kann. Das Display wird bei gedrückter Taste nicht mehr funktionieren, dies hat jedoch keine Auswirkung, da es beim Loslassen der Taste wieder aufgenommen wird.
Schritt 2: Konstruktion
Ich habe dies zu einer kleinen 55 mm x 55 mm 3D-gedruckten Box gemacht. Entworfen, um die 4 Hauptkomponenten zu halten; die ATTiny85 DigiStamp-Platine, das SSD1306-Display, der LiOn-Akku und ein kleines Stück Prototypenplatine, die den 55-Timer und die Ladekontrollelektronik enthält.
Anlage unter
Benötigte Teile
- ATTiny85 DigiStamp-Platine. Ich habe eine Version mit einem microUSB-Anschluss verwendet, der zum Hochladen von Firmware verwendet wird.
- SSD1306 I2C-OLED-Display
- 300mAH LiOn-Akku
- Kleiner Streifen Prototyping-Board
- CMOS 555-Timer-Chip (TLC555)
- n-Kanal-MOSFET AO3400
- p-Kanal-MOSFET AO3401
- Widerstände 4R7, 470R, 22K, 2x33K
- Kondensatoren 4u7, 220u
- Präzisionskondensator 820pF 1%
- Miniatur-Schiebeschalter
- 2 x 3-polige Stiftleisten für Ladeanschluss und Messanschlüsse
- Druckknopf
- Gehege
- Draht anschließen
Werkzeuge benötigt
- Lötkolben mit feiner Spitze
- Pinzette
Stellen Sie zuerst die 555-Timer-Schaltung und die Ladekomponenten auf der Prototypenplatine her. Fügen Sie freie Kabel für die externen Anschlüsse hinzu. Bringen Sie den Schiebeschalter und den Ladepunkt sowie den Messanschluss im Gehäuse an. Bringen Sie den Akku an und führen Sie die Hauptstromkabel zum Ladepunkt, Schiebeschalter. Masse an Taster anschließen. Befestigen Sie den ATTiny85 und schließen Sie den Anschluss ab.
Sie können vor dem Einbau einige stromsparende Modifikationen an der ATTiny-Platine vornehmen, die den Strom etwas reduzieren und die Batterielebensdauer verlängern.
www.instructables.com/Reducing-Sleep-Curre…
Dies ist nicht kritisch, da ein Netzschalter vorhanden ist, um das Messgerät auszuschalten, wenn es nicht verwendet wird.
Schritt 3: Software
Software für dieses Kondensatormessgerät finden Sie unter
github.com/roberttidey/CapacitorMeter
Dies ist eine Arduino-basierte Skizze. Es benötigt Bibliotheken für das Display und I2C, die unter zu finden sind
github.com/roberttidey/ssd1306BB
github.com/roberttidey/I2CTinyBB
Diese sind für den ATTiny optimiert, um minimalen Speicher zu belegen. Die I2C-Bibliothek ist eine Hochgeschwindigkeits-Bit-Bang-Methode, die die Verwendung von 2 beliebigen Pins ermöglicht. Dies ist wichtig, da die I2C-Methoden, die den seriellen Port verwenden, PB2 verwenden, was in Konflikt mit der Verwendung des Timer-/Zählereingangs steht, der zum Messen der 555-Frequenz erforderlich ist.
Die Software ist um eine Zustandsmaschine herum strukturiert, die die Messung durch einen Zyklus von Zuständen führt. Ein ISR unterstützt den Überlauf vom Timer-Zähler, um die 8-Bit-Hardware zu erweitern. Ein zweiter ISR unterstützt den ADC-Betrieb im Dauerbetrieb. Dies ergibt die schnellste Reaktion auf das Überschreiten des Schwellenwerts durch die Ladeschaltung.
Zu Beginn jedes Messzyklus bestimmt eine getMeasureMode-Funktion, welche Methode für jede Messung am besten geeignet ist.
Bei der 555-Methode beginnt die Zählung erst, wenn sich der Zähler geändert hat. Ebenso wird die Zeitmessung erst nach dem Nennmessintervall und bei erkannter Flanke gestoppt. Diese Synchronisation ermöglicht eine genaue Berechnung der Frequenz auch für niedrige Frequenzen.
Wenn die Software startet, sind die ersten 7 Messungen 'Kalibrierzyklen', die verwendet werden, um die Grundfrequenz des 555 ohne zusätzlichen Kondensator zu bestimmen. Die letzten 4 Zyklen werden gemittelt.
Es gibt Unterstützung für die Anpassung des OSCAL-Registers für die Taktabstimmung. Ich schlage vor, OSCCAL_VAL zunächst oben in der Skizze auf 0 zu setzen. Dies bedeutet, dass die Werkskalibrierung verwendet wird, bis die Abstimmung durchgeführt wird.
Der Wert des 555-Basiskondensators muss angepasst werden. Ich füge auch einen geschätzten Betrag für die Streukapazität hinzu.
Wenn für die Lademethoden unterschiedliche Widerstände verwendet werden, müssen auch die Werte CHARGE_RCLOW und CHARGE_RCHIGH in der Software geändert werden.
Um die Software zu installieren, verwenden Sie die normale Digistamp-Methode zum Hochladen der Software und Verbinden des USB-Ports, wenn Sie dazu aufgefordert werden. Lassen Sie den Netzschalter in der Aus-Position, da die Stromversorgung für diesen Vorgang über den USB-Anschluss erfolgt.
Schritt 4: Betrieb und erweiterte Kalibrierung
Die Bedienung ist sehr unkompliziert.
Nachdem Sie das Gerät eingeschaltet und gewartet haben, bis die Nullkalibrierung abgeschlossen ist, schließen Sie den zu testenden Kondensator an einen der beiden Messanschlüsse an. Verwenden Sie die 555-Ports für Kondensatoren mit niedrigem Wert < 1uF und den Ladeanschluss für Kondensatoren mit höherem Wert. Bei Elektrolytkondensatoren den Minuspol mit dem gemeinsamen Massepunkt verbinden. Während der Prüfung wird der Kondensator auf ca. 2V aufgeladen.
Der 555-Port kann zurückgesetzt werden, indem der Taster etwa 1 Sekunde lang gedrückt und losgelassen wird. Stellen Sie sicher, dass dafür nichts mit dem 555-Port verbunden ist.
Erweiterte Kalibrierung
Die Lademethode basiert auf der absoluten Taktfrequenz des ATTiny85, um die Zeit zu messen. Die Uhr verwendet den internen RC-Oszillator, der so angeordnet ist, dass er einen nominalen 8-MHz-Takt liefert. Obwohl die Stabilität des Oszillators bei Spannungs- und Temperaturschwankungen recht gut ist, kann seine Frequenz um einige Prozent abweichen, obwohl er werkseitig kalibriert ist. Diese Kalibrierung setzt das OSCCAL-Register beim Start. Die Werkskalibrierung kann verbessert werden, indem die Frequenz überprüft und der OSCCAL-Wert optimaler für eine bestimmte ATTiny85-Karte eingestellt wird.
Ich habe es noch nicht geschafft, eine automatischere Methode in die Firmware zu integrieren, daher verwende ich das folgende manuelle Verfahren. Je nachdem, welche externen Messungen verfügbar sind, sind zwei Variationen möglich; entweder ein Frequenzmesser, der die Frequenz der dreieckigen Wellenform am 555-Port messen kann, oder eine Rechteckwellenquelle mit bekannter Frequenz, z. B. 10KHz mit 0V/3,3V Pegeln, die an den 555-Port angeschlossen werden können und die Wellenform überschreiben, um diese Frequenz in den Zähler zu zwingen. Ich habe die zweite Methode verwendet.
- Starten Sie das Messgerät mit normaler Leistung ohne angeschlossene Kondensatoren.
- Schließen Sie das Frequenzmessgerät oder den Rechteckwellengenerator an den 555-Port an.
- Kalibrierzyklus durch Drücken der Taste neu starten.
- Am Ende des Kalibrierzyklus zeigt das Display die vom Zähler ermittelte Frequenz und den aktuellen OSCCAL-Wert an. Beachten Sie, dass die wiederholte Verwendung des Kalibrierungszyklus zwischen der Anzeige der gemessenen Frequenz und der normalen Anzeige ohne Anzeige wechselt.
- Wenn die angezeigte Frequenz niedriger als die bekannte ist, bedeutet dies, dass die Taktfrequenz zu hoch ist und umgekehrt. Ich finde, dass ein OSCCAL-Inkrement die Uhr um etwa 0,05% anpasst
- Berechnen Sie einen neuen OSCCAL-Wert, um die Uhr zu verbessern.
- Geben Sie den neuen OSCCAL-Wert in OSCCAL_VAL oben in der Firmware ein.
- Neu erstellen und neue Firmware hochladen. Wiederholen Sie die Schritte 1 -5, die den neuen OSCCAL-Wert und die neue Frequenzmessung anzeigen sollten.
- Wiederholen Sie ggf. die Schritte erneut, bis das beste Ergebnis erzielt wird.
Es ist wichtig, den Messteil dieser Abstimmung bei normaler Stromversorgung und nicht über USB durchzuführen, um Frequenzverschiebungen aufgrund der Versorgungsspannung zu minimieren.