Circuito para desligar com segurança o Raspberry Pi


8

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?

segundo rascunho

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?


Este IC: linear.com/product/LTC2935 pode ser do seu interesse.
Bitrex

3
Conforme a resposta abaixo no conceito, sua ideia é boa, mas exigirá limites muito grandes. Você também pode ligar o Pi a partir de alguma coisa o tempo todo, em seguida, basta usar a ignição para iniciar um desligamento e talvez um temporizador para puxar a energia completamente depois de um minuto ou mais.
precisa

Essa é uma boa ideia @ PeterJ - provavelmente seria muito mais barata. Você poderia elaborar isso na forma de uma resposta?
Nicholas Albion

Em vez de ligar o RPi a partir de um capacitor por alguns segundos após o desligamento da ignição, acho que provavelmente faz mais sentido usar um relé controlado e alimentado por um 555 para alternar para a bateria. Eu criei uma outra pergunta: electronics.stackexchange.com/questions/61877/...
Nicholas Albion

Respostas:


4

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.


Obrigado, sua resposta me levou a pesquisar no Google por "shutdown controller raspberry pi". Eu estava olhando para este por US $ 42, mas depois encontrei este projetado especificamente para o Raspberry Pi, e custa apenas US $ 15 e ele tem um projetado para uso em um carro.
Nicholas Albion

O Raspberry Pi Modelo A leva 300ma (+ 100ma no máximo em cada porta USB), enquanto o Modelo B leva 700ma.
Transeunte

O que você também pode fazer é simplesmente conectar um botão e executar um aplicativo python toda vez que o seu raspberry pi for ligado. Em seguida, no aplicativo python, use a função de botão os ("halt") para simplesmente desligar o seu raspberry pi. Foi o que fiz e está funcionando bem. Eu não sei como isso funcionaria com o XBMC.
mozcelikors

3

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 é:

I=CdVdt
que pode ser reorganizado para resolver C:
C=IdtdV
  • Eu sou simplesmente a corrente média para o RPi. Nesse caso, assumiremos que é de 1200 mA ou 1,2 A.
  • dt é o tempo que leva para desligar o RPi. Usando seu exemplo, são 5 s.
  • dV é a mudança na tensão do capacitor. Vamos supor que a tensão inicial seja a mais baixa tensão especificada de 11,7 V e que a tensão final seja 7,0 V. Estou configurando a tensão final para 7,0 V porque o regulador linear 7805 requer dois volts de altura livre para operação adequada (5,0 V + 2,0 V = 7,0 V). Isso faz com que dV = 11,7 V - 7,0 V = 4,7 V.

Isso fornece o seguinte resultado:

C=1.2A5s4.7V=1.28F

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:

esquemático

simular este circuito - esquemático criado usando o CircuitLab


Você está certo - eu pretendia alimentar a entrada positiva do comparador do outro lado do diodo D1. Preciso do pino GPIO para acionar uma interrupção no momento em que a fonte de 12V for desconectada (o rádio e os acessórios estão desligados). ... Então a tensão de referência é 0, não é? Qual é o objetivo do diodo TVS?
22613 Nicholas Albion

Eu tenho vários desses aqui, eles seriam perfeitos para este trabalho? i.ebayimg.com/images/g/lF8AAOSwBP9UYdRb/s-l300.jpg
feedc0de

@danbru Não faço ideia, isso é uma imagem, não uma folha de dados. Se você acha que seus capacitores do eBay são realmente 1.5F a 5.5V, ainda precisará colocar vários em série e paralelo para obter a capacitância necessária.
W5VO

@ W5VO, existe alguma maneira fácil de testar a capacitância?
feedc0de

2

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).


Partições separadas em um cartão SD com apenas leitura não resolverão completamente o problema. O nivelamento de desgaste nos cartões SD pode destruir QUALQUER bloco no cartão (quando estiver trocando de bloco). Esse nivelamento de desgaste está completamente oculto no SD e não há como controlá-lo. De fato, com a partição do sistema de arquivos somente leitura, ela terá as contagens de gravação mais baixas e será o principal alvo do que trocar ao nivelar o desgaste.
22413 darron

BTW - Cheguei à conclusão de que os cartões SD são impossíveis de projetar soluções embarcadas robustas, a menos que você possa garantir desligamentos limpos. A especificação é realmente péssima para casos de uso incorporados ... que, considerando quantos SÃO incorporados, é um estado de coisas bastante triste.
21413 darron

@ Darron: É triste, dado que existem muitas maneiras pelas quais os problemas poderiam ter sido evitados. Por exemplo, a especificação poderia ter especificado um comando "shutdown" e exigido que qualquer dispositivo possa se colocar em um estado seguro dentro de, por exemplo, 250ms após o recebimento. Acho que a maioria das implementações práticas de cartão SD não teria problemas com essa especificação, mesmo que o comando shutdown viesse no meio de uma operação de "desfragmentação em segundo plano" que levaria alguns minutos para ser concluída.
Supercat 12/13 /

@ Darron - foi especificamente por causa desses problemas de partição cruzada que mencionei a possibilidade de nunca gravar no cartão SD.
Chris Stratton

Quando desligado corretamente, o XBMC salva o ponto atual da música / filme que está sendo reproduzido no disco, para que possa retomar do mesmo ponto quando reiniciado. Eu realmente gostaria de evitar "Papai, nós já vimos essa parte, você pode encostar e avançar rapidamente para a parte em que aquele homem faz a coisa?"
22613 Nicholas Albion

0

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.