13 votos

¿Es seguro quitar abruptamente la alimentación de Arduino?

Si tengo un Arduino, ¿puedo apagar y encender abruptamente la energía sin corromperlo? Si estoy diseñando un producto que tiene un interruptor de encendido y apagado, ¿necesito incorporar un retraso antes de apagar la energía para que el microcontrolador pueda hacer un apagado limpio de alguna manera? ¿O está bien simplemente conectar un interruptor SPST a la línea de energía del Arduino?

(Cuando digo diseñar un producto, me refiero a utilizar un ATmega con código Arduino de forma independiente en una placa personalizada con otros componentes)

Editar: Cuando menciono Arduino, me refiero a cargar el bootloader de Arduino para poder programar en Arduino en lugar de AVR. El chip que quiero utilizar es el Atmel atmega328P. No necesito utilizar ninguna memoria EEPROM.

3 votos

Tenga en cuenta que "Arduino" es una marca comercial, por lo que lleva una 'A' mayúscula. Las mayúsculas son importantes.

3 votos

Tal vez si en realidad es un "Arduino", pero la pregunta es en realidad sobre un ATmega en una placa personalizada que sería más como un "arduino". En cuanto al tema en cuestión, además del ATmega, también se deben considerar cualquier otro componente que pueda tener estado, especialmente memorias externas - por ejemplo, si hay una tarjeta SD que requiere una gran cantidad de pensamiento y cuidado. Por último, algunas fuentes de alimentación hacen cosas desagradables al encenderse/apagarse.

1 votos

¿Podemos asumir que tampoco estás usando una tarjeta SD?

18voto

JRE Puntos 4167

Sí, es seguro apagar abruptamente un Arduino.

Bueno, principalmente seguro.

Los procesadores utilizados en los diferentes Arduinos tienen tres tipos de memoria:

  1. Flash - Donde se almacena tu programa. Tu programa puede leer cosas de aquí, pero no puede escribir en ella.

  2. RAM - Donde se mantienen las variables de tu programa mientras el programa se está ejecutando. Los datos aquí desaparecen cuando apagas el Arduino. Tu programa lee y escribe constantemente aquí.

  3. EEPROM - Donde tu programa puede almacenar cosas que necesitará la próxima vez que se ejecute. Normalmente, cosas que cambian raramente, pero se necesitan cada vez que se ejecuta el programa. Como datos de calibración para un sensor.

La mayoría de los programas solo utilizan Flash y RAM. Puedes encender y apagar el Arduino en cualquier momento con esos programas.

Si tu programa escribe en la EEPROM, entonces apagar la alimentación mientras se está escribiendo en la EEPROM podría corromper los datos allí.

Cómo afecta tu programa esto depende de qué datos se traten.

Si corrompe los datos de calibración de un sensor, obtendrías mediciones incorrectas para lo que el sensor está detectando.

Si escribes sumas de verificación con tus datos de EEPROM, entonces podrías detectar la corrupción y tu programa podría apagarse en lugar de usar datos incorrectos.

Tú, por supuesto, sabrías si tu programa escribe en la EEPROM - debes cargar una biblioteca separada y usar comandos especiales para leer y escribir en la zona de la EEPROM.

El peligro realmente solo está en ese breve momento cuando se escribe en la EEPROM. Dado que esto sucede raramente (y generalmente solo en condiciones controladas), también será raro corromper los datos de la EEPROM.


Resumen:

Puedes encender y apagar un Arduino a voluntad sin peligro, a menos que estés usando la EEPROM, y aún así te saldrás con la tuya la mayoría de las veces.

8 votos

"Flash - Donde se almacena tu programa. Tu programa puede leer cosas de aquí, pero no puede escribirlo. " - Muchos chips AVR (definitivamente incluido el 328P) pueden auto-programarse la flash. De hecho, así es como funciona el ciclo de programación de Arduino; el gestor de arranque, que se ejecuta en el 328P, programa el 328P en sí. Es bastante improbable que el OP esté haciendo eso, pero es posible.

2 votos

También, si usas un Arduino con hardware adicional (como un sensor), es posible que también desees agregar un condensador y usar un puerto de E/S para medir la energía externa, de modo que cuando desaparezca, puedas guardar de forma segura en la EEPROM lo que desees. En un ATmega, un ciclo de escritura en la EEPROM normalmente dura 3.4 ms. Por lo tanto, si tu condensador puede mantener viva a la placa durante 5 ms, y antes de cada operación de escritura en la EEPROM verificas la energía externa, estarás a salvo.

10voto

JCollins Puntos 94

Sí, puedes apagar la energía rápidamente sin corromperla.

La única razón que veo para poner un retraso en el apagado del circuito sería por razones de seguridad o funcionales de tus periféricos externos.

P. ej. al apagar, necesitas guardar datos en memoria no volátil. O al apagar, necesitas asegurarte de que un mecanismo esté en una posición segura al apagar.

Esto requeriría monitorear el suministro y tener suficiente capacidad de retención para ejecutar el procesador y cualquier función que se requiera realizar.

6voto

Electric_90 Puntos 23

El término Arduino se refiere a una amplia gama de placas de microcontrolador que tienen diferentes chips, y el efecto de la pérdida de energía varía. Por lo tanto, te recomendaría que pongas el número de parte exacto del chip ATmega que se está utilizando. Pero, en general para chips como ATmega328, lo siguiente es válido.

Sí, puedes quitar la energía de un Arduino sin corromper o dañar nada, pero ten en cuenta las siguientes cosas:

  • Si tu código utiliza EEPROM, entonces la memoria flash podría corromperse o los datos pueden no almacenarse correctamente cuando el dispositivo está escribiendo datos y se quita la energía.

  • La única forma en que una pérdida repentina de energía puede causar daño aparte de la EEPROM es a los dispositivos que se utilizan con Arduino (por ejemplo, una tarjeta SD).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X