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) 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 capacitor 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 capacitor proporcionaría corriente el tiempo suficiente para que el sistema se apague correctamente.
¿Parece esto correcto y suficiente?
El circuito será alimentado por una batería de automóvil - 12.6 a 11.7V. El 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 tarde alrededor de 5 segundos.
Así que supongo que lo que necesito saber es:
¿Qué tipo de capacitor 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 de 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)
¿Habría algún beneficio en tener la línea GPIO normalmente alta o normalmente baja?
Una estrategia alternativa sería encender 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 de 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 usar un diodo TVS de 30 V en la entrada para protegerse contra picos con un diodo Schottky grueso con el ánodo en tierra y el cátodo en la entrada de 12 V para proteger contra voltajes negativos junto con cualquiera 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, es posible que pueda 'piratear' un automóvil a 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 100mA a 5V que estará por debajo de 50mA a 12V usando ese circuito, una batería de automóvil normalmente es del orden de 50Ah, por lo que tomaría alrededor de 20 días agotar la batería al 50%. Si el automóvil se usa con regularidad, probablemente no haya necesidad de ir más lejos, y es posible que pueda dejarlo funcionando y simplemente apagar los periféricos que no esté usando.
De lo contrario, para detectar el cambio de encendido de cualquier manera y ambos informar al Pi que debe apagarse y luego desconectar la alimentación un minuto más tarde, la forma más práctica es probablemente usar un microcontrolador externo que controle un FET. Se puede hacer con una lógica discreta, pero también debe asegurarse de que se vuelva a aplicar energía cuando el encendido suba, por lo que no es un ejercicio del todo trivial, pero los costos de las piezas serán más bajos que usar una tapa grande.
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 de resistencia-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 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 capacitor. 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 de un capacitor es:
Esto da el siguiente resultado:
Sí, eso es 1,28 faradios (aquí no hay micro ni mili). 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 su voltaje de entrada ya esta muerto Tal como fue diseñado, el comparador nunca cambiaría.
Lo que quiere hacer es medir su voltaje de entrada, antes de los condensadores y el diodo, y comparar ese voltaje con una "referencia" que puede configurar con un potenciómetro. Vea el circuito de ejemplo a continuación:
simular este circuito : esquema creado con CircuitLab
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 propias 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 ser posible solucionar en nivel del sistema de archivos.
Me sentiría tentado a buscar un enfoque completamente diferente, uno de resolver el problema en su origen. Esencialmente, no hay nada fundamentalmente malo con simplemente sacar la energía del pi; el problema es un estado del sistema de archivos potencialmente no comprometido 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 alguna 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 quiere ir un paso más allá, nunca escriba nada en la tarjeta SD, guarde todos sus datos mutables en una memoria USB.
Utilice un sistema de archivos de diario para almacenar datos que realmente se modificarán en funcionamiento.
Simplemente tenga a mano una tarjeta de respaldo, opcionalmente, esto podría ser un esquema automático de respaldo y recuperación desde una tarjeta conectada con una regla en la que solo una de las tarjetas puede montarse para escritura en un momento dado (combinado con la primera regla del arranque/sistema operativo las particiones 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 para que no sufra corrupción
o
B) Un sistema diseñado de tal manera que una pérdida de energía inesperada 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).
Como han señalado otros, 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, podría considerar un controlador de encendido/apagado de encendido con enclavamiento que funciona con un botón. Para APAGAR el servidor XBMC, puede presionar un botón que indique que Pi se apague, luego podría hacer lo que necesita para un apagado limpio y ordenado, luego emitir una señal GPIO al circuito que se apaga a sí mismo. Eso le da al RPi todo el tiempo que necesita para hacer cosas como apagar de manera 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.
mattyz
PedroJ
Nicolás Albión
Nicolás Albión