Schaltung zum sicheren Ausschalten des Raspberry Pi

8

Ich möchte einen Raspberry Pi als XBMC-Server im Auto verwenden. In den XBMC-Dokumenten heißt es, dass Sie immer den Befehl shutdown verwenden sollten, bevor Sie die Stromversorgung trennen. Ich möchte mich nicht in den Pi einloggen und ihn abschalten müssen, bevor ich das Auto ausschalte - ich möchte es können

Ich habe darüber nachgedacht, dass es möglich sein sollte, eine einfache Schaltung mit einem Kondensator und wahrscheinlich einer Diode zu erstellen, um zu erkennen, wann die Stromversorgung unterbrochen wurde (und einen Interrupt an einem der GPIO-Pins auszulösen), aber der Kondensator würde lange genug Strom liefern damit das System ordnungsgemäß heruntergefahren wird.

Sieht das richtig und ausreichend aus?

zweiter Entwurf

Die Schaltung wird von einer Autobatterie mit 12,6 bis 11,7 V betrieben. Der Raspberry Pi nimmt 5 V (5,25 bis 4,75 V) auf und zieht 700-1200 mA. Ich habe es noch nicht geplant, aber ich schätze, dass das Herunterfahren wahrscheinlich ungefähr 5 Sekunden dauert.

Ich nehme an, ich muss wissen:

  • Welche Art von Kondensator würde ich benötigen, um genügend Ladung zu speichern, damit der Pi lange genug läuft, damit XBMC ordnungsgemäß heruntergefahren werden kann?

  • Angesichts der Tatsache, dass der GPIO-Anschluss des Rasperry Pi 3,3 V benötigt, ist dies der beste Komparator / Operationsverstärker (ich nehme an, ich könnte ein paar Widerstände verwenden, um den Ausgang von 5 auf 3,3 zu senken).

  • Wäre es von Vorteil, wenn die GPIO-Leitung normalerweise hoch oder normalerweise niedrig wäre?

Nicholas Albion
quelle
Dieser IC: linear.com/product/LTC2935 könnte für Sie von Interesse sein.
Bitrex
3
Gemäß der Antwort unten im Konzept ist Ihre Idee in Ordnung, erfordert jedoch sehr große Obergrenzen. Sie können auch versuchen, den Pi ständig mit Strom zu versorgen, und dann einfach die Zündung verwenden, um eine Abschaltung zu starten, und möglicherweise einen Timer, um nach etwa einer Minute den Strom vollständig zu ziehen.
PeterJ
Das ist eine gute Idee @PeterJ - wäre wahrscheinlich viel billiger. Könnten Sie das in Form einer Antwort näher erläutern?
Nicholas Albion
Anstatt das RPi nach dem Ausschalten der Zündung einige Sekunden lang über einen Kondensator mit Strom zu versorgen, ist es wahrscheinlich sinnvoller, ein Relais zu verwenden, das von einem 555 gesteuert und mit Strom versorgt wird, um auf die Batterie umzuschalten. Ich habe eine andere Frage erstellt: electronic.stackexchange.com/questions/61877/…
Nicholas Albion

Antworten:

4

Eine alternative Strategie wäre, den Raspberry Pi kontinuierlich mit Strom zu versorgen und die Zündleitung zu verwenden, um die Abschaltsequenz einzuleiten. Ich habe das in der Vergangenheit gemacht, aber mit Systemen, bei denen die genaue Lösung nicht für einen Pi gelten würde, sondern im Allgemeinen:

Verwenden Sie einen DC-DC-Wandler für den besten Wirkungsgrad. Es gibt viele Beispiele, aber das folgende ist ein Beispiel für etwas, das bequem zu verwenden wäre und 1A bei 5 V von einem 6,5 V- bis 32 V-Eingang liefern kann:

http://www.digikey.com/product-detail/de/V7805-1000/102-1715-ND/1828608

Eine Autoversorgung kann sehr rau sein, daher sollten Sie eine 30-V-TVS-Diode über dem Eingang verwenden, um sich vor Spitzen zu schützen, und zwar mit einer klobigen Schottky-Diode mit der Anode am Boden und der Kathode am 12-V-Eingang, um sich vor negativen Spannungen zu schützen Eine normale Sicherung oder eine rücksetzbare PTC-Sicherung in Reihe mit der Verbindung zwischen der Leistung des Fahrzeugs und Ihrem System. Andernfalls können Sie möglicherweise ein Auto in ein USB-Ladegerät "hacken", in dem dies alles bereits vorhanden sein sollte.

Ich bin mir nicht sicher, was ein Raspberry Pi im normalen Leerlaufmodus verbraucht, aber vermutlich deutlich unter 500 mA, was die maximale USB-Versorgung und mit größerer Wahrscheinlichkeit 100 mA ist. Angenommen, es werden 100 mA bei 5 V verwendet, was bei 12 V unter 50 mA liegt. Eine Autobatterie liegt normalerweise in der Größenordnung von 50 Ah, sodass es ungefähr 20 Tage dauern würde, bis die Batterie zu 50% entladen ist. Wenn das Auto regelmäßig benutzt wird, müssen Sie wahrscheinlich nicht weiter fahren, und Sie können es möglicherweise einfach laufen lassen und alle nicht verwendeten Peripheriegeräte ausschalten.

Andernfalls ist es wahrscheinlich am praktischsten, einen externen Mikrocontroller zu verwenden, der einen FET ansteuert, um den Zündwechsel in beide Richtungen zu erkennen und den Pi zu informieren, der heruntergefahren werden muss, gefolgt vom Abschalten der Stromversorgung eine Minute später. Dies könnte mit diskreter Logik geschehen, aber Sie müssen auch sicherstellen, dass die Stromversorgung wieder hergestellt wird, wenn die Zündung hoch geht. Dies ist also keine ganz triviale Übung, aber die Teilekosten sind niedriger als bei Verwendung einer großen Kappe.

PeterJ
quelle
Vielen Dank, Ihre Antwort führte mich zu Googeln für "Shutdown Controller Himbeer Pi". Ich habe mir diesen für 42 US-Dollar angesehen , dann aber diesen gefunden, der speziell für den Raspberry Pi entwickelt wurde. Er kostet nur 15 US-Dollar und er hat einen für den Einsatz in einem Auto.
Nicholas Albion
Raspberry Pi Modell A benötigt 300 mA (+ 100 mA max an jedem USB-Port), während Modell B 700 mA benötigt.
Passant
Sie können auch einfach einen Knopf anschließen und jedes Mal eine Python-App ausführen, wenn Ihr Himbeer-Pi eingeschaltet wird. Verwenden Sie dann in der Python-App die Tastenfunktion os ("halt"), um Ihren Himbeer-Pi einfach herunterzufahren. Das habe ich getan und es funktioniert gut. Ich weiß allerdings nicht, wie das mit XBMC funktionieren würde.
Mozcelikors
3

Ich bin mit dem Verhalten des Raspberry Pi beim Herunterfahren und beim Stromverbrauch nicht genau vertraut, daher verlasse ich mich hauptsächlich auf die von Ihnen angegebenen Zahlen und lasse die Formeln.

Die Exponentialentladungskurve, die Sie anzeigen, gilt für eine Widerstands-Kondensator-Schaltung, aber der Linearregler bewirkt, dass sich die Dinge etwas anders verhalten. Angenommen, der RPi verbraucht immer den von Ihnen angegebenen Maximalstrom: 1200 mA. In diesem Fall fließt dieser Strom immer durch den Regler, und der effektive Widerstand der Schaltung ändert sich ständig (nimmt ab), wenn sich der Kondensator entlädt. Dies gilt, solange wir uns im Betriebsbereich des Linearreglers befinden. Dies ist in Ordnung, da der RPi abgeschaltet werden muss, bevor wir diesen Bereich erreichen.

I=CdVdt
C=IdtdV
  • Ich bin einfach der durchschnittliche Strom für das RPi. In diesem Fall nehmen wir an, dass es 1200 mA oder 1,2 A sind.
  • dt ist die Zeit, die zum Herunterfahren des RPi benötigt wird. In Ihrem Beispiel sind dies 5 s.
  • dV ist die Änderung der Kondensatorspannung. Wir gehen davon aus, dass die Startspannung die niedrigste spezifizierte Spannung von 11,7 V ist und dass die Endspannung 7,0 V beträgt. Ich stelle die Endspannung auf 7,0 V ein, da der Linearregler 7805 für einen ordnungsgemäßen Betrieb zwei Volt Headroom benötigt (5,0) V + 2,0 V = 7,0 V). Dies ergibt dV = 11,7 V - 7,0 V = 4,7 V.

C=1.2A5s4.7V=1.28F

Ja, das sind 1,28 Farad (hier kein Mikro oder Milli). Dies würde wahrscheinlich den Kauf mehrerer Niederspannungskappen und deren Reihenschaltung beinhalten

Das andere Problem ist also Ihre Schaltung - sie funktioniert nicht so, wie Sie es möchten, da der positive Eingang des Komparators nur dann nahe an die negative Eingangsspannung heranreicht (damit sich der Ausgang ändern kann), wenn Ihre Eingangsspannung ist ist schon tot Wie geplant, würde der Komparator niemals schalten.

Was Sie tun möchten, ist Ihre Eingangsspannung vor den Kondensatoren und der Diode zu messen und diese Spannung mit einer "Referenz" zu vergleichen, die Sie mit einem Trimmtopf einstellen können. Siehe Beispielschaltung unten:

schematisch

simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab

W5VO
quelle
Sie haben Recht - ich wollte den positiven Eingang des Komparators von der anderen Seite der Diode D1 speisen. Ich benötige den GPIO-Pin, um einen Interrupt auszulösen, sobald die 12-V-Versorgung unterbrochen wird (das Radio und das Zubehör sind ausgeschaltet). ... Die Referenzspannung ist also 0, nicht wahr? Was ist der Zweck der TVS-Diode?
Nicholas Albion
Ich habe mehrere davon hier, wären sie perfekt für diesen Job? i.ebayimg.com/images/g/lF8AAOSwBP9UYdRb/s-l300.jpg
feedc0de
@danbru Keine Ahnung, das ist ein Bild, kein Datenblatt. Wenn Sie der Meinung sind, dass Ihre eBay-Kondensatoren bei 5,5 V tatsächlich 1,5 F betragen, müssen Sie immer noch mehrere in Reihe und parallel schalten, um die erforderliche Kapazität zu erhalten.
W5VO
@ W5VO gibt es eine einfache Möglichkeit, die Kapazität zu testen?
feedc0de
2

Hinweis: Die folgende Antwort wurde mit der Annahme geschrieben, dass nur die Verwendung einer SD-Karte durch das Dateisystem beschädigt werden kann. Seitdem sind zahlreiche anekdotische Beweise bekannt geworden, die darauf hindeuten, dass der interne Status von SD-Karten selbst, unterhalb des Niveaus eines Dateisystems, möglicherweise durch Korruptionsausfälle beschädigt werden kann, woran man möglicherweise nicht arbeiten kann Dateisystemebene.


Ich wäre versucht, einen ganz anderen Ansatz zu betrachten, nämlich das Problem an der Quelle zu lösen. Im Grunde ist nichts grundsätzlich Falsches daran, nur die Kraft aus dem Pi zu ziehen. Das Problem ist möglicherweise ein nicht festgeschriebener Dateisystemstatus, der zu einer Beschädigung des Dateisystems und einem anschließenden Startfehler führt, bis Sie das Volume reparieren / neu erstellen.

Dies kann jedoch auf der Softwareseite durch eine Kombination von Folgendem behoben werden:

  • Erstellen Sie weitere Partitionen auf der SD-Karte und hängen Sie die Boot- oder Betriebssystempartition niemals im beschreibbaren Modus an. Wenn Sie noch einen Schritt weiter gehen möchten, schreiben Sie niemals auf irgendetwas auf der SD-Karte, und speichern Sie alle Ihre veränderlichen Daten auf einem USB-Stick.

  • Verwenden Sie ein Journalling-Dateisystem, um Daten zu speichern, die im Betrieb tatsächlich geändert werden.

  • Halten Sie einfach eine Sicherungskarte bereit. Optional kann dies ein automatisches Sicherungs- und Wiederherstellungsschema von einer verbundenen Karte mit einer Regel sein, bei der immer nur eine der Karten beschreibbar bereitgestellt werden kann (kombiniert mit der ersten Regel des Start- / Betriebssystems) Partitionen sind niemals beschreibbar)

Letztendlich kommt es auf eine Frage der Designphilosophie an - die Wahl zwischen:

A) Ein empfindliches System, das vor Stromausfall geschützt werden muss, ohne dass es beschädigt wird

oder

B) Ein System, das so konzipiert ist, dass ein unerwarteter Stromausfall nicht zu einer nicht behebbaren Beschädigung führen kann.

Die meisten eingebetteten Systeme entsprechen eher (B).

Chris Stratton
quelle
Separate Partitionen auf einer SD-Karte mit einigen schreibgeschützten Partitionen lösen das Problem nicht vollständig. Verschleißausgleich auf SD-Karten kann JEDEN Block auf der Karte zerstören (wenn Blöcke ausgetauscht werden). Diese Verschleißnivellierung ist im SD vollständig verborgen und kann nicht gesteuert werden. Tatsächlich hat die schreibgeschützte Dateisystempartition die niedrigste Schreibanzahl und ist das Hauptziel für den Austausch beim Verschleißausgleich.
Darron
Übrigens - ich bin zu dem Schluss gekommen, dass es für SD-Karten unmöglich ist, robuste eingebettete Lösungen zu entwickeln, es sei denn, Sie können ein sauberes Herunterfahren garantieren. Die Spezifikation ist wirklich schlecht für eingebettete Anwendungsfälle ... was angesichts der Anzahl der eingebetteten Fälle ziemlich traurig ist.
Darron
@darron: Es ist traurig, da es viele Möglichkeiten gibt, die Probleme zu vermeiden. Zum Beispiel könnte die Spezifikation einen "Shutdown" -Befehl angegeben haben und erfordert, dass jedes Gerät in der Lage sein muss, sich innerhalb von z. B. 250 ms nach dem Empfang in einen sicheren Zustand zu versetzen. Ich denke, die meisten praktischen SD-Karten-Implementierungen hätten mit einer solchen Spezifikation kein Problem gehabt, selbst wenn der Befehl zum Herunterfahren mitten in einer "Hintergrunddefragmentierungs" -Operation stattgefunden hätte, deren Abschluss Minuten gedauert hätte.
Supercat
@darron - speziell wegen solcher partitionübergreifenden Probleme erwähnte ich die Möglichkeit, niemals auf die SD-Karte zu schreiben.
Chris Stratton
Bei ordnungsgemäßem Herunterfahren speichert XBMC den aktuellen Punkt des abgespielten Songs / Films auf der Festplatte, sodass er beim Neustart an derselben Stelle fortgesetzt werden kann. Ich würde wirklich gerne vermeiden "Dad, wir haben dieses Stück schon gesehen. Kannst du rüberfahren und schnell zu dem Stück vorspulen, in dem dieser Mann das Ding macht?"
Nicholas Albion
0

Wie andere bereits betont haben, gibt es einige Probleme mit den bisher vorgeschlagenen Schaltungen, und Sie können einen Kondensator erhalten, der groß genug ist, um die Versorgung aufrechtzuerhalten. Wenn Sie bereit sind, eine kleine Schaltung aufzubauen, können Sie einen Verriegelungsregler in Betracht ziehen, der per Knopfdruck betätigt wird. Um den XBMC-Server auszuschalten, können Sie eine Taste drücken, die dem Pi das Herunterfahren signalisiert. Anschließend kann er das tun, was für ein sauberes, ordnungsgemäßes Herunterfahren erforderlich ist, und dann ein GPIO-Signal an den Stromkreis senden, der die Stromversorgung für sich selbst abschaltet. Dadurch hat das RPi so viel Zeit, wie es zum sicheren Herunterfahren der SD-Karte benötigt. Die Schaltung muss nicht einmal so komplex sein wie ein Relais und ein Timer.

Hier ist eine einfache Schaltung , die nur einen Dual-Mosfet als Controller verwendet. Die Schaltung ist auf der Webseite beschrieben.

user22047
quelle