Batteriecontroller - ein Selbstbauprojekt Teil 2
- Details
- Veröffentlicht: Montag, 02. Februar 2015 10:08
- Geschrieben von Martin Erger
a
Ersatz des Arduino uno zur Kostenreduktion
Kern des Arduino uno ist um einen ATmega 328P der Firma Atmel. Der Chip im DIL28 Gehäuse (Reichelt 2,15€) enthält bereits alle wesentlichen Funktionen einschließlich aller analogen und digitalen Schnittstellen. Um mit ihm den Arduino für den Batteriecontroller vollständig ersetzen zu können, sind nur wenige zusätzliche Bauteile notwendig. Für meinen Versuchsaufbau lag nahe, auf einer Lochrasterplatte mit den Maßen des Arduino einen pinkompatiblen zu bauen. Diesen kann man dann gegen den Arduino austauschen.
![]() |
Diese wenigen Bauteile können den Arduino auf dem Batteriecontroller vollständig ersetzen. |
Die Schaltung selbst ist extrem simpel, da zwingend nur ein Quarz zur Takterzeugung benötigt wird. Diesen habe ich auf einem Sockel montiert um leicht mit verschiedenen Frequenzen experimentieren zu können. Die LED mit Vorwiderstand an D13 könnte man auch weglassen. Ich benutze sie im Programm lediglich um das Anspringen der Interruptroutine im Sekundentakt kontrollieren zu können.
Diese auf das absolute Minimum reduzierte Schaltung kann den Arduino nur für den Betrieb als Batteriecontroller ersetzen. Um den Chip zu programmieren ist weiterhin ein Arduino notwendig. Dazu muss in den neu gelieferten Chip zunächst ein Bootlader geschossen werden. Anleitungen, wie man das mit Hilfe des Arduino macht, gibt es reichlich im Internet (z.B. hier). Den so vorbereiteten Chip kann man in den Sockel des Arduino setzen und dann ganz normal mit der Arduino Entwicklungsumgebung (IDE) programmieren. Danach kann man den Chip ohne Einschränkungen für den Batteriecontroller nutzen.
![]() |
Die Schaltung ist pinkompatibel zum Arduino. Es sind nur die Anschlüsse verdrahtet, die für den Betrieb als Batteriecontroller benötigt werden. |
Gegenüber dem Original des Arduino uno hat diese Schaltung nicht nur den Vorteil die Kosten drastisch auf einen Bruchteil zu reduzieren. Auch der benötigte Strom, etwa 55 mA beim Original, wird etwa halbiert. Das kommt den Bemühungen zur Reduktion des Eigenverbrauches sehr entgegen, ist aber allein noch nicht ausreichend.
a
Reduktion des Betriebsstromes
Wie eben beschrieben hat der Ersatz des Arduino durch den den (fast) nackten Prozessor nicht nur eine Kosten- sondern auch eine deutliche Reduktion des Betriebsstromes zur Folge. Eine weitere Reduzierung lässt erreichen, wenn man die Betriebsspannung von 5 V aus der Batteriespannung nicht über einen billigen Längsregler wie den 7805 sondern mit einem getakteten Regler erzeugt. Dafür muss man allerdings deutlich tiefer in die Tasche greifen. Ich habe, weil gerade greifbar, meinen Versuch mit einem TSR 1‑2450 (Reichelt 5,42 €) gemacht. Das Ding kann 1 A und ist damit deutlich überdimensioniert. Der Strom für die Gesamtschaltung ohne Sensor betrug damit nur noch 9,7 mA. Wenn man die CPU, durch Austausch des 16 MHz Quarzes gegen einen mit 4,1943 MHz, langsamer taktet, geht der Strom weiter auf 6,4 mA zurück. Leider kommen für jeden angeschlossenen Hall-Sensor wieder 5 mA dazu. Das angestrebte Ziel von ca. 10 mA ist aber zumindest für die den Anschluss nur einer Batterie erreicht.
Eine weitere Reduktion des Betriebsstromes von 6,4 auf unter 4 mA ließe sich erreichen, wenn man die Schaltung nicht mit 5 sondern mit 3,3 V betreiben würde, was vom Prozessor aus, zumindest für die niedrigere Taktfrequenz, zulässig ist. Dann könnte man allerdings nicht mehr die Hall-Sensoren benutzen.
a
Genauigkeit und Auflösung
Von unbedarften Anwendern wird die Begriffe Genauigkeit und Auflösung häufig miteinander verwechselt. Sie gehen davon aus, dass ein Messgerät, welches 3 Stellen hinter dem Komma anzeigt auch entsprechend genau ist. Dem ist natürlich nicht so. Eine Spannungsmessung, bei der die Spannung vor der Messung durch einen aus Widerständen aufgebauten Spannungsteiler herabgesetzt wird, kann, egal wie genau die Messung erfolgt, niemals besser als die Toleranz der Widerstände sein. Ich habe in meiner Schaltung durchweg Widerstände mit einer Toleranz von 1% verwendet, da geringer tolerierte, zumindest im üblichen Elektronikhandel nur schwer zu bekommen sind.
Eine andere Sache ist die Auflösung, die direkt von den verwendeten Analog/Digital-Wandlern (ADC) abhängt. Die in der CPU bereits integrierten ADC haben eine Auflösung von 10 Bit, d.h. die Referenzspannung (hier 5V) wird 210 = 1024 Schritte aufgelöst. Da wir den Stromfluss sowohl in als auch aus der Batterie messen müssen entspricht der mittlere Wert 512 null Volt. Bei kleineren Werten wird die Batterie ent-, bei größeren geladen. Wollen wir einen 100 A-Stromsensor verwenden ist die Auflösung, d.h. der kleinste Schritt den wir unterscheiden können 100 A/512 = 0,195 A. Mir ist das entschieden zu viel.
![]() |
Aus dem SMD wurde ein besser handhabbarer "DIL"-Chip |
![]() |
Blockschaltbild des MCP 3426 |
Bei der Suche nach einem höher auflösenden und trotzdem preiswerten ADC wurde ich auf den MCP 3426 (Reichelt 1,76€) der Firma Microchip aufmerksam. Der hat zwei voneinander unabhängige Kanäle, bereits integrierte Vorverstärker, über I²C leicht anschließbar und lässt sich per SW umschaltbar mit als 12, 14 oder 16 Bit ADC betreiben. Nachteilig ist, dass es ihn nur im SMD-Gehäuse gibt, was ihn für Bastelzwecke etwas unhandlich macht. Ich half mir, indem ich ihn auf den Ausschnitt einer Musterplatine lötete und diesen mit Sockelstiften versah. So kam ich zu einem gut handhaben "DIL"-Muster.
Da der ATmega 328 bereits hardwaremäßig eine I²C-Schnittstelle hat, ist der Anschluss simpel. Die der SW, dank einer Lib (wire.h), auch. Unerwartete Schwierigkeiten ergaben sich daraus, dass das Programm nicht innerhalb der Interruptroutine, in der ich im Sekundenrhythmus die Daten erfasse, lief. Ich half mir, indem ich ein Flag setzte und das Einlesen in die Loop verlegte.
Dank der relativ hohen Ausgangsspannung des Hall-Sensors konnte ich die Vorverstärkung des MCP 3426 auf 1 setzen. Für die Auflösung wählte ich 14 Bit, was 24 mA bei einem 100 A-Sensor entspricht. Man könnte natürlich auch 16 Bit wählen und damit eine Auflösung von 6,1 mA erreichen. Einerseits ist das bei einer Genauigkeit von 1% relativ witzlos und andererseits würde sich damit ein anderes Problem verschärfen.
Der Hall-Sensor hat seinen Nullpunkt genau in der Mitte der Versorgungsspannung. Die ATmega CPU benutzt die gleiche Versorgungsspannung als Referenz für den integrierten ADC. Eine leichte Schwankung der Spannung spielt von daher keine Rolle, weil sie sich auf beide Komponenten gleichermaßen auswirkt. Mit Verwendung des externen ADC wird das anders. Der MCP 3426 benutzt eine eigene hochgenaue Referenz. Der Nullpunkt des Sensors und der des ADC werden deshalb nie übereinstimmen und mit großer Wahrscheinlichkeit auch noch driften. Ein Abgleich der Nullpunkte ließ sich relativ leicht durch eine kleine SW-Routine erreichen. Die Drift, die sich im Versuch bestätigte, ist dagegen nicht so einfach in den Griff zu bekommen. Für mich ist das Grund genug nicht weiter auf einen Hall-Sensor sondern auf die gute alte Shuntmethode zu setzen.
a
Zusammenfassung und Ausblick
An dieser Stelle habe ich die Arbeiten vorläufig abgebrochen. Mein Ziel etwas tiefer in die Programmierung des Arduino einzudringen habe ich erreicht. Von vornherein war klar, dass ich den Batteriecontroller zumindest aktuell nicht wirklich selbst brauchen würde, da mein über 10 Jahre alter Mobitronic immer noch zu meiner Zufriedenheit arbeitet.
Es würde mich freuen, wenn meine Arbeiten den einen oder anderen zu eigenen Überlegungen anregen würden. Wenn jemand die Source der entstanden SW haben möchte, bin ich gern bereit diese (as it is) weiterzugeben. Vielleicht findet sich ja auch jemand, der bereit und in der Lage ist eine Leiterplatte zu entflechten, ein Gehäuse zu konstruieren und evt. sogar eine Kleinserie zu produzieren und zu vertreiben. Für den Fall biete ich gern an, Schaltung und SW zur Serienreife weiterzuentwickeln. Ich hätte da noch einige Ideen, die ich jetzt aber noch nicht verraten möchte.
a
Hinweis:
Um dem interessierten Leser eine Orientierung zu geben, habe ich an einigen Stellen eine Bezugsquelle und Preise genannt. Diese Daten entsprechen dem von mir recherchierten Stand im Nov./Dez. 2014 und können sich selbstverständlich ändern.