Circuito para apagar con seguridad Raspberry Pi

8

Quiero usar una Raspberry Pi como servidor XBMC en el automóvil. Los documentos de XBMC dicen que siempre debe usar el comando de apagado antes de desconectar la alimentación. No quiero tener que (decirle a mi esposa que lo haga) iniciar sesión en el Pi y apagarlo antes de apagar el automóvil; quiero poder

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

¿Esto parece correcto y suficiente?

segundo borrador

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 consume 700-1200mA. Todavía no lo he cronometrado, pero supongo que el proceso de apagado probablemente demore alrededor de 5 segundos.

Entonces supongo que lo que necesito saber es:

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

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

  • ¿Sería beneficioso tener la línea GPIO normalmente alta o normalmente baja?

Nicholas Albion
fuente
Este IC: linear.com/product/LTC2935 puede ser de su interés.
Bitrex
3
Según la respuesta a continuación en concepto, su idea está bien, pero requerirá límites muy grandes. También podría considerar alimentar el Pi de algo encendido todo el tiempo, luego simplemente use el encendido para iniciar un apagado y tal vez un temporizador para extraer la energía por completo después de un minuto más o menos.
PeterJ
Esa es una buena idea @PeterJ: probablemente sería mucho más barato. ¿Podría explicarlo en forma de una respuesta?
Nicholas Albion
En lugar de alimentar el RPi desde un condensador durante varios segundos después de apagar el encendido, creo que probablemente tenga más sentido usar un relé controlado y alimentado por un 555 para cambiar a la batería. He creado otra pregunta: electronics.stackexchange.com/questions/61877/…
Nicholas Albion

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 hice 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 obtener 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:

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

El suministro de un automóvil puede ser bastante duro, por lo que es posible que desee utilizar un diodo TVS de 30 V a través de la entrada para proteger 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 reiniciable PTC en serie con la conexión entre la alimentación del automóvil y su sistema. De lo contrario, puede 'hackear' un automóvil con un 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 500 mA, que es el máximo que puede suministrar USB y más probablemente 100 mA. Digamos que está usando 100 mA a 5 V que será inferior a 50 mA a 12 V usando ese circuito, la batería de un automóvil normalmente es del orden de 50 Ah, por lo que sería alrededor de 20 días agotar la batería al 50%. Si el automóvil está en uso regular, probablemente no sea necesario ir más allá, y es posible que pueda dejarlo en funcionamiento y apagar los periféricos que no esté utilizando.

De lo contrario, para detectar el cambio de encendido de cualquier manera y para informar al Pi que necesita apagarse, y luego quitar la energía un minuto después, la forma más práctica es probablemente usar un microcontrolador externo que impulse un FET. Podría hacerse con una lógica discreta, pero también debe asegurarse de que la energía se vuelva a aplicar cuando el encendido sea alto, por lo que no es un ejercicio completamente trivial, pero los costos de las piezas serán más bajos que usar una tapa grande.

PeterJ
fuente
Gracias, su respuesta me llevó a Google para "apagar el controlador de frambuesa pi". Estaba mirando este por $ 42, pero luego encontré este específicamente diseñado para Raspberry Pi, y solo cuesta $ 15 y tiene uno diseñado para usar en un automóvil.
Nicholas Albion
Raspberry Pi Model A toma 300ma (+ 100ma max en cada puerto usb), mientras que el Modelo B toma 700ma.
Passerby
Lo que también puede hacer es simplemente conectar un botón y ejecutar una aplicación python cada vez que se enciende su raspberry pi. Luego, en la aplicación Python, use la función de botón os ("detener") para simplemente apagar su raspberry pi. Eso es lo que hice y está funcionando bien. Sin embargo, no sé cómo funcionaría eso con XBMC.
mozcelikors
3

No estoy íntimamente familiarizado con el comportamiento de la Raspberry Pi para el apagado y el uso de energía, por lo que confiaré principalmente en los números que proporcionó y dejaré las fórmulas.

La curva de descarga exponencial que muestra es para un circuito resistor-condensador, pero el regulador lineal hace que las cosas actúen de manera un poco diferente. Suponga que el RPi siempre consume la corriente máxima que usted indicó: 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 llegar a esa región.

La ecuación diferencial para un condensador es:

yo=CreVret
que se puede reorganizar para resolver C:
C=yoretreV
  • Simplemente soy 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 su ejemplo, esto es 5 s.
  • dV es el cambio en el voltaje del condensador. Asumiremos que el voltaje de inicio es el voltaje más bajo especificado de 11.7 V, y que el voltaje de finalización es 7.0 V. Estoy configurando el voltaje de final a 7.0 V porque el regulador lineal 7805 requiere un margen de dos voltios para una operación adecuada (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,2UNA5 5s4.7V=1,28F

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

Entonces, el otro problema es su circuito: no funcionará de la manera que desea, porque la única forma en que la entrada positiva del comparador se acerca al voltaje de entrada negativo (para que la salida pueda cambiar) es cuando el 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 condensadores y el diodo, y comparar ese voltaje con una "referencia" que puede establecer con un potenciómetro. Ver ejemplo de circuito a continuación:

esquemático

simular este circuito : esquema creado con CircuitLab

W5VO
fuente
Tienes razón: quise alimentar la entrada positiva del comparador desde el otro lado del diodo D1. Necesito el pin GPIO para activar una interrupción en el momento en que se desconecta el suministro de 12V (la radio y los accesorios se apagan). ... Entonces el voltaje de referencia es 0, ¿no? ¿Cuál es el propósito del diodo TVS?
Nicholas Albion
Tengo varios de estos aquí, ¿serían perfectos para este trabajo? i.ebayimg.com/images/g/lF8AAOSwBP9UYdRb/s-l300.jpg
feedc0de
@danbru No tengo idea, es una imagen, no una hoja de datos. Si cree que sus condensadores de eBay son realmente 1.5F a 5.5V, entonces aún necesitará poner múltiples en serie y en paralelo para obtener la capacidad necesaria.
W5VO
@ W5VO ¿hay alguna manera fácil de probar la capacitancia?
feedc0de
2

Nota: la siguiente respuesta se escribió asumiendo que solo el uso del sistema de archivos de una tarjeta SD podría corromperse. Desde entonces, ha salido a la luz una gran cantidad de evidencia anecdótica que sugiere 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 la pérdida de energía en el momento oportuno, algo que puede no ser posible evitar. nivel del sistema de archivos.


Me sentiría tentado a mirar un enfoque completamente diferente, uno de resolver el problema en su origen. Esencialmente, no hay nada fundamentalmente malo en simplemente extraer el poder del pi; el problema es el estado del sistema de archivos potencialmente no confirmado que conduce a la corrupción del sistema de archivos y la posterior falla de arranque hasta que repare / vuelva a crear una imagen del volumen.

Pero esto es algo que se puede solucionar en el lado del software, mediante una combinación de:

  • Cree más particiones en la tarjeta SD y nunca monte la partición de arranque o del sistema operativo en modo de escritura. Si desea ir un paso más allá, nunca escriba nada en la tarjeta SD, manteniendo todos sus datos mutables en una memoria USB.

  • Utilice un sistema de archivos de diario para almacenar datos que en realidad se modificarán en la operación.

  • Simplemente tenga a mano una tarjeta de respaldo, opcionalmente podría tratarse de 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 cualquier momento (puede combinarse con la primera regla del sistema de arranque / sistema operativo) particiones que nunca se pueden escribir)

En última instancia, se trata de 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 para que no sufra corrupción.

o

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

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

Chris Stratton
fuente
Las particiones separadas en una tarjeta SD con algo de solo lectura no resolverán por completo el problema. La nivelación del desgaste en las tarjetas SD puede destruir CUALQUIER bloque de la tarjeta (cuando se intercambian bloques). Esta nivelación de desgaste está completamente oculta en la SD y no hay forma de controlarla. De hecho, con la partición del sistema de archivos de solo lectura tendrá los recuentos de escritura más bajos y serán los principales objetivos con los que intercambiar cuando se nivele el desgaste.
Darron
Por cierto, he llegado a la conclusión de que es imposible diseñar soluciones integradas robustas para tarjetas SD a menos que pueda garantizar cierres limpios. La especificación realmente apesta para los casos de uso incrustados ... que dado cuántos ESTÁN incrustados es un estado de cosas bastante triste.
Darron
@darron: Es triste, dado que hay muchas maneras en que los problemas podrían haberse evitado. Por ejemplo, la especificación podría haber especificado un comando de "apagado" y exigir que cualquier dispositivo debe poder ponerse en un estado seguro dentro de, por ejemplo, 250 ms de haberlo recibido. Creo que la mayoría de las implementaciones prácticas de tarjetas SD no habrían tenido ningún problema con tal especificación, incluso si el comando de apagado se produjo en medio de una operación de "desfragmentación en segundo plano" que habría tardado minutos en completarse.
supercat
@darron: fue específicamente debido a tales problemas de partición cruzada que mencioné la posibilidad de nunca escribir en la tarjeta SD.
Chris Stratton
Cuando se apaga correctamente, XBMC guarda el punto actual en la canción / película que se está reproduciendo en el disco para que pueda reanudar desde el mismo punto cuando se reinicia. Realmente me gustaría evitar "Papá, ya hemos visto esta parte, ¿puedes parar y avanzar rápidamente a la parte donde ese hombre hace la cosa?"
Nicholas Albion
0

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

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

usuario22047
fuente