É seguro remover abruptamente a energia do Arduino? [fechadas]

12

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
fonte
3
Observe que "Arduino" é um nome de marca e, portanto, recebe um "A" maiúsculo. Capitais importam.
Transistor
3
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.
Chris Stratton
1
Podemos assumir que você também não está usando um cartão SD?
UKMonkey
É o seu produto. Você precisa salvar algo se a energia desligar? A resposta a essa pergunta responde à sua pergunta.
StainlessSteelRat

Respostas:

18

Sim, é seguro desligar abruptamente um Arduino.

Bem, principalmente seguro.

Os processadores usados ​​nos vários Arduinos têm três tipos de memória:

  1. Flash - Onde seu programa está armazenado. Seu programa pode ler coisas daqui, mas não pode escrevê-las.

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

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


Resumo:

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.

JRE
fonte
8
"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.
marcelm
2
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
10

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
fonte
6

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

Electric_90
fonte