Dieses Blog durchsuchen

Sonntag, 17. März 2013

[Projekt] DIY PiPower Netzteil

Hallo.

Da ich mich seit einiger Zeit mit der kleinen Himbeere befasse ist es mir etliche Male passiert das ich vergessen habe das Kabel aus dem Pi zu ziehen. Jedesmal habe ich mich dann früh morgens geärgert wenn der kleine wieder die ganze Nacht unter Strom stand obwohl ich ihn am Abend heruntergefahren habe. Darum habe ich ihn an eine Schaltbare Steckdose gehängt. Das hatte aber wieder zur Folge das ich einige Male den Schalter betätigt habe obwohl der Pi noch arbeitete.
Na gut, selber Schuld, aber ich hatte einfach vergessen das der kleine ebenfalls an der Steckdose hängt.

Deshalb habe ich nach einer Möglichkeit gesucht den Pi automatisch auszuschalten und gegen Stromausfälle zu sichern. Meine Lösung möchte ich euch nun hier vorstellen.


Aufbau auf einer Lochstreifenplatine

 

Das Pipower Netzteil 


Die von mir entwickelte Schaltung ist im Grunde kein richtiges Netzteil, da man zum betreiben noch ein normales Steckernetzteil mit mindestens 9V bei 1,5A braucht.
Der Grund ist ganzeinfach:

Dieser Block hier richtet sich vorallem an Anfänger und ich möchte keinem Anfänger raten irgendetwas mit 230V zu bauen!!!

Jeder der das Wissen und die Fähigkeiten dazu hat, wird diese Schaltung selbständig zu einem Vollwertigem 230V Netzteil erweitern können.

Im Grunde bietet diese Schaltung folgende Möglichkeiten:
  • Ein und ausschalten des Pi's über einen Taster (mit vorherigem automatischen Herunterfahren)
  • Auto-off nach Herunterfahren
  • Sicherung vor Stromausfällen über ein Akkupack
  • Die Möglichkeit die Batteriespannung zu überwachen
  • Die Möglichkeit die Netzspannung zu überwachen

Durch die Überwachung der Batterie- und Netzspannung ist es möglich den Pi sicher herunterzufahren, sollte 1. Der Netzstrom ausfallen, oder 2. Die Batteriespannung beim Batteriebetrieb zu gering werden um einen sicheren Betrieb des Pi's zu gewährleisten.


Die Bauteile


Die Schaltung basiert auf einem Atmel Mega8, einem L4940V5 Low-Drop-Spannungsregler sowie einem IRZL34N Mosfet.

Folgende Bauteile werden benötigt:
  • 1x DC-Jack zum Anschluss des eigentlichen Netzteils
  • 1x USB-A-Buchse zum Anschluss des Pi's
  • 1x ELKO 20V 1000uF
  • 1x ELKO 10V 100uF
  • 4x 100nF Keramik- oder Folienkondensator
  • 1x 47nF Keramikkondenstor
  • 2x 22pF Keramikkondensator
  • 4x 1N4001 Gleichrichterdioden
  • 1x L4940V5 Spannungregler
  • 1x Atmel Mega8
  • 1x Pinleiste min. 1x10 Pins
  • 1x LTV847 Optokoppler
  • 1x Schwingquarz 4-16MHZ
  • 1x IRLZ34N N-Kanal-Mosfet (HEXFET)
  • 4x 10kOhm Widerstand
  • 4x 330Ohm Widerstand
  • 2x 1MOhm Widerstand
  • 2x 630kOhm Widerstand
  • 2x Taster
  • 2x Kühlkörper

 

Die Schaltung


Die Schaltung ist vom Prinzip her in 3 Blöcke geteilt. Zum ersten in die Spannungsversorgung mit schaltbarer USB-Buchse für den Pi, zum Zweiten in die Atmeg8 Steuerung und zum dritten in die Pegelwandlung mit galvanischer Trennung der seriellen Verbindung.

Schauen wir uns aber zuersteinmal die Gesamte Schaltung an. ACHTUNG!!! PIN 1 und PIN 4 der ISP sind vertauscht. Pin 1 muss natürlich an MISO und Pin 4 an MOSI!!!

Hier könnt ihr die drei Blöcke erkennen.

Der erste Teil (Spannungsversorgung)

Spannungsteil
Dieser Teil dient nur der Spannungsversorgung des Pi's und des Atmels.

X1 ist dabei unsere Buchse für das Netzteil. Bat1 Ist der anschluss für die Batterien, welche Parallel zu X1 Geschalten werden. Für die Batterien solltet ihr min 9V und 2500mAh einplanen, damit euer Pi auch eine Weile mittels Batterie laufen kann. Als Netzanschluss nutze ich ein 12V/2A Universalnetzteil. Ihr solltet außerdem darauf achten das die Spannung vom Netzteil über der der Batterien liegt, da ihr sonst auch die Batterien entladet wenn das Netzteil angeschlossen ist.
Weiterhin könnt ihr eine 12V Zener Diode zwischen den positiven Anschluss des Netzteils und Masse schalten um eine Überspannung abzufangen.

Die Anschlüsse "NET_CHECK" und "BAT_CHECK" dienen zum Überprüfen der Netzteil- bzw. Batteriespannung.
Der Anschluss "PCTRL" dient zum Ansteuern des n-Kanal-Mosfets. Da Mosfets nicht über den Strom sondern über die angelegte Spannung gesteuert werden, müssen wir ihn so wählen das er bei 5V voll durchsteuert. Dies bietet uns der Gewählte IRLZ34N.
Der Kondensator C1 dient zum Abfangen von Spannungseinbrüchen sollte die Spannung vom Netzteil einbrechen (Stromausfall).
Die Rücklaufdiode D5 schützt unseren Spannungsregler sollte die Spannung im 5V Spannungsteil größer werden als im Eingangteil.
Ihr solltet dem L4940V5 und dem IRLZ34N jeweils einen passenden Kühlkörper spendieren. Der Mosfet wird zwar kaum Warm, sicherer ist es jedoch trotzdem, solltet ihr zum Beispiel vorhaben, nicht den Pi, sondern etwas anderes, z.B. über PWM, zu steuern.

Der zweite Teil (Controller Schaltung)

Controller Teil
ACHTUNG!!! PIN 1 und PIN 4 der ISP sind vertauscht. Pin 1 muss natürlich an MISO und Pin 4 an MOSI!!!

Dieser Teil der Schaltung beruht auf der Grundbeschaltung eines Atmel Mega8 wie ihr sie aus dem Tutorial "Raspberry Pi und der Atmel - Teil 1" kennen solltet.

Zusätzlich wurde an den ADC-Eingängen ein Spannungsteiler angebracht welcher uns die Eingangspannungen von Netzteil und Batterie im Verhältniss ~1:2,58 teilt. Aus einer 12V Spannung wird somit eine Spannung von ~4,65V, welche wir Problemlos über den Analog-Digital-Wandler des Atmels messen können. Aus 9V wird natürlich dann verhältnissmäßig weniger.

Über den Taster S2 wird unser Pi dann später geschaltet.
S1 ist wie immer Reset um die ganze Schaltung zu Resetten. Hierbei wird auch die Spannung für den Pi abgeschalten!!! Ihr könnt dies nutzen wenn euer Pi hängen sollte.

Der dritte Teil (Serielle Verbindung)

Serielle Verbindung
Diese Schaltung solltet ihr schon aus dem Tutorial "Raspberry Pi und der Atmel - Teil 2 - Serielle Verbindung" kennen. Deshalb werde ich hier nur Kurz darauf eingehen.

Ich habe die Methode über einen Optokoppler gewählt, da somit gewährleistet ist das der Strom nicht über die Masse an den den GPIO-Pins des Pi abfließt, sondern über den USB Anschluss des Spannungsteils.


Das Controller Programm

Auf jedes Detail einzugehen würde hier den Rahmen sprengen. Solltet ihr interesse daran haben, so könnt ihr gerne mit mir Kontakt aufnehmen.

Zum Wichtigsten sei gesagt das sämtliche Einstellungen die ihr vornehmt in dem im Code gekennzeichnetten Block vorgenommen werden. In den einzellnen Funktionen braucht ihr im Grunde nichts zu ändern.

Das vollständige Programm  für den Atmel könnt ihr euch hier herunterladen:

PiPower.c

 

 

Konfiguration



//Festlegen der Controllerfrequenz und Baudrate

#define F_CPU   4000000UL
#define BAUD    19200UL


Sollte aus den Zwei vorhergehenden Tutorials klar sein.

//Ports festlegen
#define TASTER_1        PD2
#define POWER           PD3




Hier legt ihr den Anschluss des Tasters und des Mosfets fest. Solltet ihr die Beschaltung wie oben gewählt haben braucht ihr hier nichts zu ändern.

//Festlegen der Befehle
#define Pi_on_cmd "on"
#define Pi_off_cmd "off"
#define Bat_check_cmd "check_bat"
#define Net_check_cmd "check_net"
#define Shutdown_cmd "shutdown"

Hier legt ihr die Befehle fest welche ihr über die serielle Verbindung vom Pi zum Atmel senden wollt. Ihr könnt dabei die 5 Verschiedenen Befehle frei wählen, damit ihr sie in euer Programm auf dem Pi übernehmen könnt.
"Shutdown_cmd" ist das Commando welches der Controller an den Pi sendet wenn ihr den Taster S2 drückt.

//Festlegen der ADC Ports
#define Net_port 0
#define Bat_port 1

 Hier legt ihr Fest an welchen Port des Ananlog-Digital-Converters ihr die Spannungsteiler angeschlossen habt.

//Festlegen der Ausschaltverzögerung
#define sd_delay 120 

Hier legt ihr die Zeit in Sekunden fest die ihr dem Pi zum herunterfahren gebt, bevor der Atmel den Pi abschaltet.

 

Grundfunktion

Im Grunde ist das ganze noch rechts simpel aufgebaut.

1. Ihr schaltet den Pi mittels Taster S2 ein

Wärend des laufenden Betriebes könnt ihr die Netz- und die Batteriespannung mit einem Script oder Programm über die Serielle Verbindung abfragen. Ihr sendet dazu einfach die unter "Bat_check_cmd" und "Net_check_cmd" festgelegten Befehle und erhaltet ein "ACK".."\n".."xxxx" "\n" zurück.
Das "ACK" steht dafür das der Controller euren Befehl erkannt hat.
Das "\n" dient als Trennzeichen.
Das "xxxx" ist der Wert des ADC.
Sollte der Controller euren befehl nicht kennen erhaltet ihr ein "NAK" zurück.

 2. Ihr betätigt den Taster S2 wärend der Pi eingeschalten ist.

Der Atmel sendet nun den unter "Shutdown_cmd" festgelegten befehl an den Pi. Euer Script/Programm reagiert darauf indem es den Pi herunterfährt und den unter "Pi_off_cmd" festgelegten Befehl an den Controller sendet. Der Controller wartet daraufhin die unter "sd_delay" festgelegte Zeit ab und schaltet den Pi dann aus.

Das wars auch schon. mehr braucht ihr nicht.

Ein Beispielscript (Python) für den Pi findet ihr hier:

Shutdwonscript
Klasse für das shutdwonscript

Steckt einfach beides in einen Ordner und führt das Shutdownscript aus.

(Es wird Pyserial benötigt)


Erweiterte Funktionen (Anregung)


Ihr könnt euer Script/Programm auf dem Pi auch so schreiben das es alle x Sekunden die Spannung der Batterie und des Netzanschlusses liest. Wird das Netzteil nun abgeschalten, z.B. durch einen Stromausfall, könnt ihr den Pi automatisch herunterfahren lassen. Gleiches gilt auch wenn die Batteriespannung einen gewissen Wert unterschreitet.

Das war es für heute ersteinmal. Ich hoffe ihr konntet meinen Ausführungen folgen. Was noch folgt ist eine kurze Übersicht was ich mit dieser Schaltung noch vor habe.
  • Ausgabe der BatterieSpannung/Netzspannung via LCD
  • Ausgabe der IP-Adresse des Pi via LCD
  • Einige Scripte/Programme für die Schaltung
 

8 Kommentare:

  1. Ich bin momentan dabei mir ein Internet-Radio mit einem Raspberry Pi zu basteln.
    Aktuelle stecke ich noch in der Planungsphase.


    Wäre es aus deiner sicht denkbar deine Schaltung mit einem Bleigelakku zu betreiben und statt dem Netzteil ein Bleiakkuladegerät zu verwenden?

    Würde der Akku dann überhaupt geladen werden?

    AntwortenLöschen
  2. Hallo,

    das sollte eigentlich kein größeres Problem geben. Der Spannungsregler arbeitet ab 7V bis max 30V Eingangsspannung. Die Frage ist nun ob dein Ladegerät eine Überwachung hat welche automatisch abschaltet. Das wäre suboptimal. Ich hatte selbst schon an Bleigelakkus gedacht bei einem anderen Projekt da diese recht einfach mit konstanter Spannung zu laden sind. Jedoch habe ich diesen Gedanken verworfen, da diese Akkus ausgasen, wenn man die Spannung falsch wählt. Bei Blei-Säure-Akkus ist diese Ausgasung sogar erwünscht. Das wollte ich jedoch nicht in meinem Wohnzimmer ;)
    Im Grunde müsstest du einfach nur die Diode D1 mit nem Widerstand brücken welcher dir im Ladefall den Ladestrom begrenzt und im Entladefall der Strom über die Diode D1 fliesen kann. Was also vor dem Spannungswandler hängt ist eigentlich egal solange es genug Leistung hat um alles sicher zu betreiben. Den Spannungsteiler zur Spannungsüberwachung musst du dann nur noch anpassen.
    Leider habe ich wie schon erwähnt das ganze verworfen da ich derzeit auch an der 2. Version der Schaltung arbeite, welche auf 5x5cm den Pi über die GPIO Pins versorgt. dort nutze ich einen Akku direkt im 5V Teil.
    Informationen zu deinem Vorhaben kannst du aber hier finden:
    http://www.elweb.info/projekte/dieterwerner/AKKU1A1.pdf

    MFG

    Kai

    AntwortenLöschen
  3. Hallo Kai, ich bin in Bezug auf Elektronik ein Laie. Am Anfang deines Artikels sprichst du von einem Akkupack, später nennst du es Batterie. Wenn ich den Schaltplan richtig verstehe, findet keine Aufladung eines Akkupacks statt, ist das richtig?

    AntwortenLöschen
    Antworten
    1. Hallo,

      Du kannst an dieser Stelle Batterien oder Akkus nutzen, welche jedoch wie du richtig erkannt hast nicht geladen werden. Ich nutze 8x1V2 2,5Ah Akkus welche ich extern lade. In der neuen Version, welche ich noch bearbeite, ist vorgesehen die Notfallversorgung über Akkus im 5V Teil zu realisieren. Jedoch werde ich auf fertige Akkupacks mit interner Ladeschaltung ( Wahrscheinlich LiIon oder LiPo) zurückgreifen, da das Laden von Akkus nicht ganz trivial ist. Natürlich gibt es Laderegler, jedoch wird das auch für 8 Akkus im source Teil nicht ganz so einfach.

      MFG

      Kai

      Löschen
  4. Hallo Kai,

    Ich baue gerade diese Schaltung auf. Mir ist dabei aber aufgefallen, dass in der Stückliste 2x 630 Ohm zu kaufen sind, aber im Plan zur Controller Schaltung 2x 630k zu verbauen. Welche sind nun eigentlich die richtigen.

    Ansonsten finde ich diese Stromversorgung echt genial. Ich suche schon lange die Möglichkeit das ganze auf eine solche Art zu schalten. Auch bin ich mal gespannt wie das ganze mit dem Programmieren dann klappt. Das werden mit dieser Schaltung meine ersten realen Gehversuche sein, auch wenn das Programm schon von dir vorgefertigt ist.

    MFG Uwe

    AntwortenLöschen
    Antworten
    1. Hallo,

      Danke für den Hinweis. Die 630kOhm aus dem Schaltplan sind die Richtigen, wenn du 1MOhm mit im Spannungsteiler verwendest. Ich werde es gleich in der Liste ändern.

      MFG

      Kai

      Löschen
    2. Hallo Kai,

      mit ist noch was in der Controller Schaltung aufgefallen. Bei der ISP Schnittstelle sind nach meinen Recherchen der Pin 1 und 4 vertauscht. PIN 1 geht doch nur bei der 10 poligen Schnittstelle an den MOSI des Controllers. Bei der 6 poligen Variante muss PIN 1 and den MISO Anschluss

      Viele Grüße

      Uwe

      Löschen
    3. Hallo, da hast du absolut recht. Pin1 und Pin 4 der ISP sind vertauscht. Ich werde gleich mal schauen wo ich die Schaltpläne habe. Danke dir für den Hinweis.

      Löschen