Elektronik_Header_3LŘftersteuerung mit ESP-01

 

RaspberryPi USV

In unserem Haushalt gibt es inzwischen ein paar RaspberryPi. Normalerweise verrichten die Zwerge unauff├Ąllig ihren Dienst, aber wenn die Versorgungsspannung unvorhergesehen ausf├Ąllt, ist die Wahrscheinlichkeit zumindest gegeben, dass die SD-Karte zerschossen wird und neu aufgesetzt werden muss. Gut wenn man nach Einrichtung aller Erfordernisse z.B. mit imgUSB ein Backupimage erstellt hat.

Um diese Eventualit├Ąten zu umschiffen, ist die Verwendung einer USV ein gangbarer Weg. Der deutsche Begriff USV f├╝r “Unterbrechungsfreie Stromversorgung” ├╝bersetzt sich ins Englische mit UPS, “Uninterruptable Power Supply”.

Auf der Suche nach einer einfachen und preiswerten L├Âsung bin ich auf die Ver├Âffentlichungen von Joachim Baumann gesto├čen, der die Ideen und Untersuchungen des niederl├Ąndischen Kollegen Brousant zum Geekworm UPS HAT weitergef├╝hrt und auf seiner Github Seite ver├Âffentlicht hat.

Joachims Beschreibung bezieht sich auf Geekworm UPS HAT V1.0 und V2. Alle Schritte von notwendigen Modifikationen des UPS HAT, der Installation des korrespondierenden Programms auf dem Raspberry und der Bau einer AtTiny85 befeuerten Zusatzplatine, die die Steuerung des Konstrukts ├╝bernimmt, sind haarklein und auch f├╝r einen nicht Linux affinen Nachbauer verst├Ąndlich erkl├Ąrt.

Allerdings kann es passieren, dass das eigene Linux-System verschiedene der von Joachim eingesetzten Erweiterungen nicht von Hause aus an Bord hat. Joachim setzt auf aktuellste Softwareumgebung, man muss also ggf. sein System entsprechend hochr├╝sten, damit die zur Verf├╝gung gestellten Programme auf dem RaspberryPi laufen.

So ist auf meinem betagten RasPi 1B unter Jessie Python V2.7 aktiv, vom AtTiny-Daemon genutzte Erweiterungen, z.B. die ÔÇ×typing-extension“, setzen aber mindestens Python V3.4 voraus.

Die Modifikationen am UPS HAT sind bei den von Joachim beschriebenen Versionen V1.0 und V2 notwendig, da der UPS HAT zwar bei Ausfall der Versorgungspannung sauber auf Akkubetrieb umschaltet, aber bei Wiederkehr der Versorgung den Akku nicht wieder l├Ądt.

In der Version V1.1 des Geekworm UPS HAT ist dieses Manko inzwischen behoben, ein Teil der von Joachim beschriebenen  Modifikationen ist in diesem Fall also unn├Âtig.

Da das automatische Laden des Akkus bei Wiederkehr der Netzspannung bei Version  V1.1 des Geekworm UPS HAT bereits hardwarem├Ą├čig implementiert ist, kann die Schaltung des UPS HAT unver├Ąndert bleiben. Es muss lediglich die M├Âglichkeit geschaffen werden, den Raspberry vom AtTiny gesteuert neu zu starten. Das erfolgt ├╝ber ein Kabel, welches an Pin3 (PB4) des AtTiny und auf dem UPS HAT parallel zum dort vorhandenen Taster angeschlossen wird. Das Herunterfahren des RasPi bei Energiemangel erfolgt hingegen ├╝ber ein via I┬▓C abgewickeltes Protokoll zwischen AtTiny und RasPi.

Damit der AtTiny wei├č, wann er dem Raspberry mitteilen soll, dass dieser sich herunterfahren soll, weil der Akku der USV leer ist, muss er die Akkuspannung messen. Diesen Wert erh├Ąlt der AtTiny ├╝ber ein weiteres Kabel, das auf dem UPS HAT an einer der beiden parallel geschalteten Dioden D2/D4 auf der dem Micro-USB-Stecker zugewandten Seite oder direkt am Stecker f├╝r den Akku angel├Âtet wird. Das andere Ende ist direkt die Versorgungsspannung des AtTiny.

Die zweite zu messende Spannung wird ├╝ber einen Spannungsteiler 1:1 (z.B. 2x 100 k╬ę) an den Eingang PB3 gef├╝hrt, der als Analoginput parametriert ist.

Achtung!
Das Layout des UPS HAT V1.1 hat sich gegen├╝ber V1.0 ge├Ąndert. Die beiden oben als Anschlusspunkt erw├Ąhnten Dioden sitzen in der Version V1.1 um 180┬░ gedreht auf der Platine.

Ich habe die Leitung direkt am Stecker des Akkus angel├Âtet.

Geekworm UPS HAT V1.1Detail Leitung am TasterDetail Leitung am Akku-Anschluss                (Click auf Schalter und Akku-Anschluss f├╝r Details)


Joachim hat eine kleine Zusatzplatine entworfen, die mit TH (through hole, bedrahteten) Bauelementen best├╝ckt wird und einfach auf den Erweiterungsstecker des UPS HAT aufgesteckt wird. Zwei zus├Ątzliche Leitungen werden auf dem UPS HAT angel├Âtet und ebenfalls an der Zusatzplatine angesteckt.

Will man den Kauf der Zusatzplatine vermeiden, kann die ├╝bersichtliche Schaltung auch auf einem Steckbrett aufgebaut werden, das funktioniert problemlos. Auf einer Platine aufgebaut ist es aber sch├Âner :-)

Nun gibt es mit dem Digispark eine m├Âgliche Alternative. Der Digispark ist ein ├╝ber USB programmierbarer AtTiny85 mit Spannungsregler, LEDs, ein paar Kondensatoren und Widerst├Ąnden und kann ├╝ber die Arduino IDE programmiert werden, wenn die passenden Bibliotheken installiert sind.

Leider verhindert die Beschaltung f├╝r die USB-Kommunikation an PB3 und PB4 des AtTiny die Nutzung dieser Pins in der gegebenen Schaltung. Um die Pins nutzen zu k├Ânnen m├╝ssen die beiden Widerst├Ąnde R1 und R2 (jeweils 68 ╬ę) entfernt werden, was aber wiederum die Programmierung des Digispark ├╝ber USB unm├Âglich macht.

Das ist aber implizit kein Problem, da der AtTiny85 ohnehin mit 8 MHz betrieben werden muss, damit er auch bei der niedrigen Versorgungsspannung von 3,7 V direkt aus dem LiIon-Akku sicher funktioniert. Und 8 MHz ist zu langsam f├╝r die Abarbeitung des Software-USB-Stack. Die Programmierung des Digispark muss also f├╝rderhin mit einem ICSP Programmierer erfolgen. Ich verwende daf├╝r den mySmartUSB light. Damit ist nat├╝rlich der Hauptvorteil des Digispark gegen├╝ber der reinen AtTiny basierten L├Âsung verschwunden.

Der Digispark muss sich noch eine weitere Modifikation gefallen lassen, um die Anforderungen des AtTiny-Daemon zu erf├╝llen. Die LED an Pin 6 (PB1) liegt beim Digispark zwischen PB1 und Masse, nat├╝rlich mit Vorwiderstand. In der Schaltung von Joachim wird die LED an einem gemeinsamen Pin des AtTiny mit dem Taster zum gezielten Herunterfahren des RasPi betrieben. Um den Pin so nutzen zu k├Ânnen, muss also diese LED umgepolt eingebaut und der Vorwiderstand von Masse nach P5V gel├Âtet werden. Diese Operation ist aufgrund der beengten Platzverh├Ąltnisse und der winzigen Bauteile etwas knifflig, aber machbar.

Mit diesen beiden Änderungen sollte der Digispark für die Steuerung des UPS HAT geeignet sein.

Damit die AtTiny-Daemon Firmware auf dem so umgebauten Digispark l├Ąuft, muss in der Datei ÔÇ×ATTinyDaemon.h“ das Define LED_BUTTON von PB4 auf PB1 ge├Ąndert werden, PIN_SWITCH wandert daf├╝r von PB1 nach PB4, die beiden Anschl├╝sse werden also, geschuldet der vorliegenden Beschaltung des Digispark, vertauscht.

Man sieht schon, die einfachste ├ťbung ist das nicht. Nimmt man noch den Fakt hinzu, dass Joachim einige Kniffe angewandt hat um den Stromverbrauch des AtTiny-Daemon zu reduzieren, der Digispark aber eine Power-LED hat, die immer leuchtet, dr├Ąngt sich unweigerlich der Gedanke auf, doch lieber Abstand von der Digispark-L├Âsung zu nehmen.


Da ich keine Angst vor der Verarbeitung von SMD Bauteilen habe und Fan von einseitigen Platinen bin, solange sich das ohne Kr├Ąmpfe erledigen l├Ąsst, habe ich eine kleine Platine f├╝r den AtTiny-Daemon entworfen und auf meiner CNC-Fr├Ąse hergestellt.

Der 8-polige Stecker stellt die Verbindung zwischen AtTiny-Daemon und USV Platine her, lediglich die vier Signale VCC, GND, SDA und SCL sind hierf├╝r notwendig. Die beiden anderen Signale werden f├╝r die Programmierung des AtTiny in der Schaltung mittels ICSP Programmierer gebraucht.

Am zweipoligen Stecker rechts werden “Plus” des Akku und der Taster auf der USV Platine angeschlossen.

RasPi USV AtTinyDaemon                (Click auf das Bild f├╝r volle Aufl├Âsung)

Leider musste ich eine Leitung als Draht vorsehen, diese wird zwischen den beiden runden Testpunkten eingel├Âtet und erlaubt die Programmierung des AtTiny85 auch im aufgel├Âteten Zustand. F├╝r den Betrieb des AtTiny als Supervisor f├╝r die USV ist diese Verbindung nicht notwendig.

RasPi USV AtTinyDaemon

Fertig aufgebaut und in Betrieb:

AtTiny_Daemon

 

AtTiny_Daemon auf dem Geekworm UPS HAT V1.1

Soweit die Hardware Vorbereitungen.


Weiter geht’s mit der zugeh├Ârigen Software.

Die Software ist zweigeteilt. Zum einen gibt es die Firmware f├╝r den AtTiny, zum anderen l├Ąuft auf dem RaspberryPi ein Daemon als Service, der im Wesentlichen auf die Mitteilung des AtTiny wartet, sich wegen Akkumangel schlafen zu legen.

Betrachten wir zuerst die AtTiny Firmware.

Die Firmware von Joachim wird unver├Ąndert auf den AtTiny geflasht. Die meiste Zeit verbringt der Prozessor im SleepMode und verbraucht so kaum Energie. Alle paar Sekunden wird er ├╝ber den Watchdog Timer aus dem SleepMode aufgeweckt. Die Sleep Zeitdauer h├Ąngt von der Akkuspannung ab.

Wacht der Prozessor auf, nimmt er verschiedene Messungen vor. Zuerst ermittelt er seine eigene Chiptemperatur, danach misst er ├╝ber die Funktion “Eigene Versorgungsspannung messen” die Akkuspannung, anschlie├čend, falls das so parametriert ist, noch eine weitere Spannung. In unserem Fall ist das die Versorgungsspannung des RaspberryPi, wodurch der AtTiny feststellen kann, ob der RasPi l├Ąuft oder bereits abgeschaltet wurde.

Die Messung der Temperatur ist f├╝r den Betrieb als Supervisor f├╝r die USV Platine nicht notwendig und wird zur Zeit im Programm auch nicht ber├╝cksichtigt.

Die verschiedenen Spannungen finden nat├╝rlich Ber├╝cksichtigung.
Solange die Akkuspannung oberhalb einer in der Software festgelegten Schwelle - standardm├Ą├čig 3,4 V - liegt, wird der AtTiny einmal in der Sekunde geweckt. Sinkt die Spannung darunter, sendet der AtTiny dem RasPi die Aufforderung, sich geplant in den Shutdown zu begeben und jetzt wird der Prozessor nur noch alle zwei Sekunden geweckt. Bei jeder Messung blitzt die LED einmal kurz auf. Sinkt die Spannung weiter - standardm├Ą├čig unter 3,2 V - wird die Messfrequenz weiter abgesenkt, der Prozessor wacht nur noch alle 8 Sekunden auf, die LED wird nicht mehr eingeschaltet um Energie zu sparen. Zus├Ątzlich schaltet der AtTiny die USV Platine ab indem er die Leitung am Taster f├╝r 4 Sekunden aktiviert.

Der AtTiny ├╝berwacht in diesem Zustand weiterhin die Akkuspannung. Da er direkt am Akku angeschlossen ist, wird er also den Akku ├╝ber l├Ąngere Zeit ohne Stromversorgung tiefentladen und sch├Ądigen. Aus diesem Grund muss der verwendete Akku eine integrierte Schutzschaltung besitzen, die eine Tiefenladung sicher unterbindet.

Ist die Stromversorgung ├╝ber das an der USV Platine angesteckte Netzteil wieder aktiv, wird automatisch der Akku von der USV Elektronik geladen. Erreicht die Akkuspannung einen Schwellwert - standardm├Ą├čig 3,9 V - schaltet der AtTiny die USV ├╝ber einen 4-sek├╝ndigen Impuls am Taster wieder aktiv und der RasPi wird dadurch neu gestartet.

Die oben beschriebenen Vorg├Ąnge finden genau so nur dann statt, wenn bestimmte Parameter in der Konfigurationsdatei “attiny_daemon.cfg” auf dem RasPi passend eingestellt sind. Darauf gehe ich sp├Ąter noch ein.


Wie oben schon erw├Ąhnt gibt es auf dem RaspberryPi ebenfalls einen Teil des Systems, den AtTiny_Daemon Service.

Joachim stellt die auf dem RaspberryPi zu installierenden Softwareteile im Wiki auf seiner Github Seite ausf├╝hrlich vor, ebenso den Weg, wie und wohin die einzelnen Dateien zu legen sind, damit das System anschlie├čend problemlos funktioniert.

Zus├Ątzlich erfolgen noch ausf├╝hrliche Erkl├Ąrungen ├╝ber das Warum, so z.B. die Erstellung bzw. die notwendigen Inhalte einer Unit Datei, die daf├╝r sorgt, dass der Service zur Kommunikation mit dem AtTiny auch beim Systemstart anl├Ąuft.

Beim Nachbau und der Inbetriebnahme sollte das umfangreiche und ausf├╝hrliche Wiki zum Geekworm UPS HAT unbedingt durchgearbeitet werden. Um es einfach vorher zu ├╝berfliegen ist der Stoff zu kompliziert, aber man wird an die Hand genommen und stufenweise gef├╝hrt. Sehr vorbildlich!

Ist die Hardware fertig best├╝ckt und programmiert wird die Platine mit dem AtTiny auf den UPS HAT, der HAT auf den RaspberryPi aufgesteckt. Die Stromversorgung vom USB Netzteil kommt an den HAT, nicht an den RasPi.

Die Software ist auf dem RasPi installiert, wir beginnen mit der Konfiguration des Systems.


Besucherzaehler

Besucher seit
25.11.2000

>