É seguro remover abruptamente a energia do Arduino? [fechadas]
Fechado há 11 meses .
Se eu tiver um Arduino, posso ligar e desligar abruptamente a energia sem danificá-lo? Se estou projetando um produto que possui uma chave liga / desliga, preciso incorporar um atraso antes de desligar a energia, para que o microcontrolador possa fazer algum tipo de desligamento limpo? Ou é bom apenas conectar um comutador SPST à linha de energia do Arduino?
(Ao projetar um produto, quero dizer, usar um ATmega com código Arduino de forma independente em uma placa personalizada com outros componentes.)
Edit: Por Arduino, quero dizer apenas piscando o gerenciador de inicialização do Arduino para que eu possa programar no Arduino em vez do AVR. O chip que desejo usar é o Atmel atmega328P. Não preciso de nenhum uso de EEPROM.
— Michael Sohnen
Observe que "Arduino" é um nome de marca e, portanto, recebe um "A" maiúsculo. Capitais importam.
Talvez se realmente seja um "Arduino", mas a questão é realmente sobre um ATmega em um quadro personalizado que seria mais um "arduino". Quanto ao tópico atual, além do ATmega, deve-se considerar outros componentes que possam ter estado , principalmente memórias externas - por exemplo, se houver um cartão SD que precise de muita reflexão e preocupação. Finalmente, algumas fontes de alimentação fazem coisas desagradáveis ​​ao ligar / desligar.
Podemos assumir que você também não está usando um cartão SD?
É o seu produto. Você precisa salvar algo se a energia desligar? A resposta a essa pergunta responde à sua pergunta.
Sim, é seguro desligar abruptamente um Arduino.
Bem, principalmente seguro.
Os processadores usados ​​nos vários Arduinos têm três tipos de memória:
Flash - Onde seu programa está armazenado. Seu programa pode ler coisas daqui, mas não pode escrevê-las.
RAM - Onde as variáveis ​​do seu programa são mantidas enquanto o programa está em execução. Os dados aqui desaparecem quando você desliga o Arduino. Seu programa lê e grava aqui constantemente.
EEPROM - Onde seu programa pode armazenar coisas, ele precisará da próxima vez em que for executado. Geralmente coisas que mudam raramente, mas são necessárias sempre que o programa é executado. Como dados de calibração para um sensor.
A maioria dos programas usa apenas Flash e RAM. Você pode ligar e desligar o Arduino a qualquer momento com esses programas.
Se o seu programa gravar na EEPROM, desligar a energia enquanto estiver gravando na EEPROM poderá corromper os dados.
Como isso afeta o seu programa depende de quais são os dados.
Se ele corromper os dados de calibração de um sensor, você obterá medições ruins para o que o sensor estiver detectando.
Se você escrever somas de verificação com os dados da EEPROM, poderá detectar a corrupção e o programa poderá desligar em vez de usar dados incorretos.
Obviamente, você saberia se o seu programa grava na EEPROM - você precisa carregar uma biblioteca separada e usar comandos especiais para ler e gravar na área da EEPROM.
O perigo é realmente apenas naquele breve momento em que você escreve para a EEPROM. Como isso acontece raramente (e geralmente apenas sob condições controladas), também será raro corromper os dados da EEPROM.
Você pode ativar e desativar um Arduino à vontade, sem perigo, a menos que esteja usando a EEPROM - e mesmo assim você poderá se safar na maior parte do tempo.
"Flash - Onde seu programa está armazenado. Seu programa pode ler coisas daqui, mas não pode escrevê-las." - Muitos chips AVR (o 328P definitivamente incluído) podem auto-programar o flash. De fato, é assim que o ciclo de programação do Arduino funciona; o carregador de inicialização, executando o 328P, programa o próprio 328P. É muito improvável que o OP faça isso, mas é possível.
Além disso, se você usa um Arduino com hardware extra, (como um sensor), é possível adicionar um capacitor e gastar um alfinete de porta para medir a energia externa, para que, quando desaparecer, você possa salvar com segurança no eeprom o que quiser. quer. Em um ATmega, um ciclo de gravação da EEPROM é tipicamente 3,4 ms. Portanto, se o seu capacitor puder manter o processador ativo por 5 ms e antes de cada operação de gravação eeprom você verificar a energia externa, você estará seguro.
— vsz 11/03/19
Sim, você pode desligar rapidamente a energia sem danificá-la.
A única razão que vejo para colocar um atraso no desligamento do circuito seria por motivos de segurança ou funcionais dos seus periféricos externos.
Por exemplo, ao desligar, é necessário salvar os dados na memória não volátil. Ou, ao desligar, é necessário garantir que um mecanismo esteja em uma posição segura ao desligar.
Isso exigiria monitoramento do suprimento e capacidade de retenção suficiente para executar o processador e qualquer função que fosse necessária para ser executada.
— JCollins
O termo Arduino refere-se a um espectro muito amplo de placas de microcontroladores que possuem vários chips diferentes e, portanto, o efeito da perda de energia varia. Portanto, recomendo que você coloque o número exato da peça do chip ATmega que está sendo usado. Mas, de maneira geral, para chips como o ATmega328, o seguinte é válido.
Sim, você pode remover a energia de um Arduino sem danificar ou danificar nada, mas lembre-se do seguinte:
Se o seu código utiliza EEPROM, o flash pode ficar corrompido ou os dados podem não ser armazenados com precisão quando o dispositivo está piscando e a energia é removida.
A única maneira de uma súbita perda de energia causar danos além da EEPROM é nos dispositivos que estão sendo usados ​​com o Arduino (por exemplo, um cartão SD).