Quero usar um Raspberry Pi como um servidor XBMC no carro. Os documentos do XBMC dizem que você sempre deve usar o comando shutdown antes de desconectar a energia. Não quero que (diga à minha esposa) faça login no Pi e desligue-o antes de desligar o carro - quero poder
Eu estive pensando que deveria ser possível criar um circuito simples com um capacitor e provavelmente um diodo para detectar quando a fonte de alimentação foi desconectada (e provocar uma interrupção em um dos pinos do GPIO), mas o capacitor forneceria corrente por tempo suficiente para o sistema desligar corretamente.
Isso parece correto e suficiente?
O circuito será alimentado por uma bateria de carro - 12,6 a 11,7V. O Raspberry Pi leva 5V (5,25 a 4,75V) e consome 700-1200mA. Ainda não cronometrei, mas acho que o processo de desligamento provavelmente leva cerca de 5 segundos.
Então, suponho que o que eu preciso saber é:
Que tipo de capacitor eu precisaria para armazenar carga suficiente para manter o Pi funcionando por tempo suficiente para o XBMC desligar corretamente?
Dado que a porta GPIO do Rasperry Pi leva 3,3V, qual é o melhor comparador / amplificador operacional a usar (suponho que eu poderia usar alguns resistores para reduzir a saída de 5 para 3,3)
Haveria algum benefício em ter a linha GPIO normalmente alta ou normalmente baixa?
fonte
Respostas:
Uma estratégia alternativa seria alimentar o Raspberry Pi continuamente e usar a linha de ignição para iniciar a sequência de desligamento. Eu fiz isso no passado, mas com sistemas em que a solução exata não se aplicaria a um Pi, mas em geral:
Use um conversor DC-DC para obter a melhor eficiência, existem muitos exemplos, mas a seguir é um exemplo de algo que seria conveniente usar e pode fornecer 1A a 5V de uma entrada de 6,5V a 32V:
http://www.digikey.com/product-detail/en/V7805-1000/102-1715-ND/1828608
Uma fonte de carro pode ser bastante dura, então você pode usar um diodo TVS de 30V na entrada para proteger contra picos com um diodo Schottky robusto com o ânodo no solo e o catodo na entrada de 12V para proteger contra tensões negativas junto com um fusível normal ou um fusível reinicializável da PTC em série com a conexão entre a energia do carro e o seu sistema. Caso contrário, você poderá "hackear" um carro no carregador USB que já deve ter tudo isso no lugar.
Não sei ao certo o que um Raspberry Pi desenha no modo ocioso normal, mas presumivelmente bem abaixo de 500mA, que é o máximo que o USB pode fornecer e, provavelmente, 100mA. Digamos que ele esteja usando 100mA a 5V e estará abaixo de 50mA a 12V usando esse circuito, uma bateria de carro é normalmente da ordem de 50Ah, de modo que levaria cerca de 20 dias para drenar a bateria para 50%. Se o carro estiver em uso regular, provavelmente não há necessidade de ir mais longe, e você poderá deixá-lo em funcionamento e desligar os periféricos que não estiver usando.
Caso contrário, para detectar a mudança de ignição de qualquer maneira e ao informar o Pi, ele precisa ser desligado, seguido pela remoção da energia um minuto depois, a maneira mais prática é provavelmente usar um microcontrolador externo que conduz um FET. Isso pode ser feito com lógica discreta, mas você também precisa garantir que a energia seja reaplicada quando a ignição subir, para que não seja um exercício totalmente trivial, mas os custos de peças serão mais baixos do que usar uma tampa grande.
fonte
Eu não estou intimamente familiarizado com o comportamento do Raspberry Pi para desligamento e uso de energia, por isso vou confiar principalmente nos números que você forneceu e deixar as fórmulas.
A curva de descarga exponencial que você mostra é para um circuito resistor-capacitor, mas o regulador linear faz as coisas agirem de maneira um pouco diferente. Suponha que o RPi sempre consuma a corrente máxima que você declarou: 1200 mA. Nesse caso, essa corrente sempre flui através do regulador e a resistência efetiva do circuito muda constantemente (diminuindo) à medida que o capacitor descarrega. Isso é verdade enquanto estivermos na faixa de operação do regulador linear, o que é bom porque precisamos que o RPi seja desligado antes de atingirmos a região.
A equação diferencial para um capacitor é:
Isso fornece o seguinte resultado:
Sim, isso é 1,28 Farads (sem micro ou milli aqui). Isso provavelmente envolveria a compra de várias tampas de baixa tensão e a colocação em série
Portanto, a outra questão é o seu circuito - ele não funcionará da maneira que você deseja, porque a única maneira pela qual a entrada positiva do comparador se aproxima da tensão de entrada negativa (para que a saída possa mudar) é quando a tensão de entrada já está morto. Conforme projetado, o comparador nunca mudaria.
O que você quer fazer é medir sua tensão de entrada, antes dos capacitores e diodo, e comparar essa tensão com uma "referência" que você pode definir com um pote de compensação. Veja o exemplo de circuito abaixo:
simular este circuito - esquemático criado usando o CircuitLab
fonte
Nota: a resposta a seguir foi escrita assumindo que apenas o uso de um cartão SD no sistema de arquivos pode ser corrompido. Muitas evidências anedóticas surgiram desde então, sugerindo que o próprio estado interno dos cartões SD, abaixo do nível de qualquer sistema de arquivos, está potencialmente em risco de corrupção devido à perda de energia em tempo oportuno, algo que talvez não seja possível contornar. nível do sistema de arquivos.
Eu ficaria tentado a olhar para uma abordagem totalmente diferente, a de resolver o problema na fonte. Essencialmente, não há nada de fundamentalmente errado em apenas arrancar o poder do pi; o problema é o estado do sistema de arquivos potencialmente não confirmado, causando corrupção no sistema de arquivos e subsequente falha de inicialização até você reparar / recriar novamente a imagem do volume.
Mas isso é algo que pode ser corrigido no lado do software, por alguma combinação de:
Crie mais partições no cartão SD e nunca monte a partição de inicialização ou sistema operacional no modo gravável. Se você quiser dar um passo adiante, nunca grave nada no cartão SD, mantendo todos os seus dados mutáveis em um pendrive.
Use um sistema de arquivos de diário para armazenar dados que serão realmente modificados em operação.
Simplesmente mantenha um cartão de backup à mão; opcionalmente, esse pode ser um esquema automático de backup e recuperação de um cartão conectado com uma regra em que apenas um dos cartões pode ser montado como gravável a qualquer momento (combinado com a primeira regra do sistema operacional / de inicialização) partições nunca sendo graváveis)
Em última análise, tudo se resume a uma questão de filosofia do design - a escolha entre:
A) Um sistema delicado que deve ser protegido contra perda de energia, a menos que sofra corrupção
ou
B) Um sistema projetado de modo que a perda inesperada de energia não possa resultar em corrupção irrecuperável.
A maioria dos sistemas embarcados é mais parecida com (B).
fonte
Como outros já apontaram, existem alguns problemas com os circuitos propostos até agora, e você pode obter um capacitor grande o suficiente para suportar a fonte. Se você estiver disposto a construir um pequeno circuito, considere um controlador de ligar / desligar a alimentação com trava que é acionado por botão. Para desligar o servidor XBMC, você pode pressionar um botão que sinaliza o Pi para desligar, ele pode fazer o que for necessário para um desligamento ordenado limpo e emitir um sinal GPIO no circuito que desliga a energia para si mesmo. Isso dá ao RPi o tempo necessário para fazer coisas como desligar o cartão SD com segurança. O circuito não precisa ser tão complexo quanto um relé e um temporizador.
Aqui está um circuito simples para fazer isso , que usa apenas um mosfet duplo como controlador. O circuito é descrito na página da web.
fonte