Circuito para apagar con seguridad la Raspberry Pi

8

Quiero usar una Raspberry Pi como un servidor XBMC en el auto. Los documentos de XBMC dicen que siempre debe usar el comando shutdown antes de desconectar la alimentación. No quiero tener que (decirle a mi esposa) que inicie sesión en el Pi y lo apague antes de apagar el automóvil, quiero poder

He estado pensando que debería ser posible crear un circuito simple con un capacitor y probablemente un diodo para detectar cuándo se desconectó la fuente de alimentación (y provocar una interrupción en uno de los pines GPIO) pero el capacitor proporcionaría actual el tiempo suficiente para que el sistema se apague correctamente.

¿Esto parece correcto y suficiente?

El circuito será alimentado por una batería de automóvil - 12.6 a 11.7V. La Raspberry Pi toma 5V (5.25 a 4.75V) y dibuja 700-1200mA. No lo he cronometrado todavía, pero supongo que el proceso de apagado probablemente demore alrededor de 5 segundos.

Supongo que lo que necesito saber es:

  • ¿Qué tipo de condensador necesitaría para almacenar la carga suficiente para que la Pi funcione el tiempo suficiente para que XBMC se apague correctamente?

  • Dado que el puerto GPIO de Rasperry Pi toma 3.3V, ¿cuál es el mejor comparador / amplificador operacional a usar (supongo que podría usar un par de resistencias para reducir la salida de 5 a 3.3)

  • ¿Habría algún beneficio en tener la línea GPIO normalmente alta o normalmente baja?

pregunta Nicholas Albion

4 respuestas

4

Una estrategia alternativa sería alimentar la Raspberry Pi continuamente y usar la línea de encendido para iniciar la secuencia de apagado. Lo he hecho en el pasado, pero con sistemas en los que la solución exacta no se aplicaría a un Pi, pero en general:

Use un convertidor DC-DC para la mejor eficiencia, hay muchos ejemplos, pero el siguiente es un ejemplo de algo que sería conveniente usar y puede suministrar 1A a 5V desde una entrada de 6.5V a 32V:

enlace

El suministro de un automóvil puede ser bastante severo, por lo que es posible que desee utilizar un diodo TVS de 30V en la entrada para protegerse contra picos con un diodo Schottky grueso con el ánodo en el suelo y el cátodo en la entrada de 12V para proteger contra voltajes negativos junto con un fusible normal o un fusible reajustable PTC en serie con la conexión entre la alimentación del automóvil y su sistema. De lo contrario, es posible que pueda "piratear" un auto al cargador USB que ya debería tener todo eso en su lugar.

No estoy seguro de lo que dibuja una Raspberry Pi en modo inactivo normal, pero presumiblemente muy por debajo de los 500 mA, que es el máximo que puede suministrar el USB y es más probable que sea de 100mA. Supongamos que está usando 100 mA a 5 V, que estará por debajo de 50 mA a 12 V utilizando ese circuito, la batería de un automóvil normalmente es del orden de 50 Ah, lo que supondría alrededor de 20 días para agotar la batería al 50%. Si el automóvil está en uso regular, probablemente no haya necesidad de ir más lejos, y es posible que pueda dejarlo en marcha y apagar los periféricos que no esté usando.

De lo contrario, para detectar el cambio de encendido de cualquier manera e informar a la Pi que debe apagarse y luego quitar la energía un minuto más tarde, la forma más práctica es usar un microcontrolador externo que maneje un FET. Se puede hacer con lógica discreta, pero también debe asegurarse de que la potencia se vuelva a aplicar cuando la ignición sea alta, por lo que no es un ejercicio completamente trivial, pero los costos de las piezas serán más bajos que usar una gran capitalización.

    
respondido por el PeterJ
3

No estoy muy familiarizado con el comportamiento de la Raspberry Pi para el apagado y el uso de energía, por lo que dependeré principalmente de los números que dio y dejo las fórmulas.

La curva de descarga exponencial que muestra es para un circuito de resistencia-condensador, pero el regulador lineal hace que las cosas actúen de manera un poco diferente. Supongamos que el RPi siempre consume la corriente máxima que declaró: 1200 mA. En este caso, esa corriente siempre fluye a través del regulador, y la resistencia efectiva del circuito cambia constantemente (disminuye) a medida que se descarga el condensador. Esto es cierto siempre que estemos en el rango operativo del regulador lineal, lo cual está bien porque necesitamos que el RPi se apague antes de que lleguemos a esa región.

La ecuación diferencial para un capacitor es: $$ I = C \ dfrac {dV} {dt} $$ que se puede reorganizar para resolver para C: $$ C = I \ dfrac {dt} {dV} $$

  • I es simplemente la corriente promedio para el RPi. En este caso, asumiremos que es 1200 mA, o 1.2 A.
  • dt es el tiempo que lleva apagar el RPi. Usando tu ejemplo, esto es 5 s.
  • dV es el cambio en el voltaje del capacitor. Asumiremos que la tensión de inicio es la tensión más baja especificada de 11.7 V, y que la tensión final es de 7.0 V. Estoy configurando la tensión final a 7.0 V porque el regulador lineal 7805 requiere dos voltios de altura para funcionar correctamente (5.0 V + 2.0 V = 7.0 V). Esto hace que dV = 11.7 V - 7.0 V = 4.7 V

Esto da el siguiente resultado: $$ C = 1.2A \ dfrac {5s} {4.7V} = 1.28 F $$

Sí, eso es 1.28 Farads (no micro o milli aquí). Esto probablemente implicaría comprar varias tapas de bajo voltaje y colocarlas en serie

Entonces, el otro problema es su circuito: no funcionará como usted quiere, porque la única manera en que la entrada positiva del comparador se acerca a la tensión de entrada negativa (para que la salida pueda cambiar) es cuando Su voltaje de entrada ya está muerto. Según lo diseñado, el comparador nunca cambiaría.

Lo que desea hacer es medir su voltaje de entrada, antes de los capacitores y el diodo, y comparar ese voltaje con una "referencia" que puede configurar con un potenciómetro de ajuste. Vea el circuito de ejemplo a continuación:

simular este circuito : esquema creado usando CircuitLab

    
respondido por el W5VO
2

Nota: la siguiente respuesta se escribió asumiendo que solo el uso de una tarjeta SD por parte del sistema de archivos podría corromperse. Una gran cantidad de evidencia anecdótica ha salido a la luz para sugerir que el estado interno de las tarjetas SD, por debajo del nivel de cualquier sistema de archivos está potencialmente en riesgo de corrupción debido a una pérdida de energía inoportuna, algo que puede no es posible trabajar alrededor del nivel del sistema de archivos.

Me sentiría tentado a ver un enfoque completamente diferente, uno de resolver el problema en su origen. Esencialmente, no hay nada fundamentalmente equivocado con solo quitarle el poder al pi; el problema es un estado de sistema de archivos potencialmente no comprometido que conduce a la corrupción del sistema de archivos y al fallo de arranque subsiguiente hasta que repare / vuelva a generar una imagen del volumen.

Pero esto es algo que se puede arreglar en el lado del software, por alguna combinación de:

  • Crea más particiones en la tarjeta SD, y nunca monta la partición del sistema operativo o de inicio en modo de escritura. Si quieres ir un paso más allá, nunca escribas nada en la tarjeta SD, manteniendo todos tus datos mutables en una memoria USB.

  • Use un sistema de archivos de diario para almacenar datos que realmente se modificarán en funcionamiento.

  • Simplemente mantenga una tarjeta de respaldo a la mano, opcionalmente, esto podría ser un esquema automático de respaldo y recuperación de una tarjeta conectada con una regla en la que solo una de las tarjetas se puede montar en un momento dado (combinada con la primera regla) de las particiones de inicio / sistema operativo que nunca se pueden escribir)

En última instancia, todo se reduce a una cuestión de filosofía de diseño: la elección entre:

A) Un sistema delicado que debe protegerse de la pérdida de energía menos sufrir corrupción

o

B) Un sistema diseñado de tal manera que una pérdida inesperada de energía no pueda resultar en una corrupción irrecuperable.

La mayoría de los sistemas integrados están más en la línea de (B).

    
respondido por el Chris Stratton
0

Como han señalado otros, hay algunos problemas con los circuitos propuestos hasta ahora, y puede obtener un condensador lo suficientemente grande como para sostener el suministro. Si está dispuesto a construir un pequeño circuito, podría considerar un controlador de ENCENDIDO / APAGADO de encendido y apagado que se opere mediante un botón pulsador. Para apagar el servidor XBMC, puede presionar un botón que le indique al Pi que se apague, luego podría hacer lo que necesita para un apagado ordenado y luego emitir una señal GPIO al circuito que apaga la alimentación. Eso le da a la RPi todo el tiempo que necesita para hacer cosas como apagar la tarjeta SD de forma segura. El circuito no tiene que ser tan complejo como un relé y un temporizador.

Aquí hay un circuito simple para hacerlo , que utiliza solo un mosfet dual como controlador. El circuito se describe en la página web.

    
respondido por el user22047

Lea otras preguntas en las etiquetas