¿El reinicio del ciclo de energía es diferente del reinicio del pin de reinicio?

1

Estoy usando un arduino uno personalizado para un proyecto de automatización del hogar. A veces, el arduino se bloquea debido a ruidos eléctricos o chispas en las líneas de corriente alterna. Más detalles aquí .

Intenté realizar algunas pruebas controladas para saber más sobre esto, donde dejé el módulo encendido e hice todo lo posible para introducir tanto ruido como sea posible al encender y apagar los interruptores y al girar las perillas del regulador del ventilador. También intenté utilizar el circuito utilizando un mientras el circuito estaba encendido. Hice una configuración que me permitió hacer saltar chispas en cualquier parte de la PCB que quería. Hice esto porque no podía permitirme un arma simulando esd.

Después de todo esto, pude hacer que mi microcontrolador colgara después de torturarlo por unos minutos y pude repetir el proceso de colgar. Éxito hasta esta parte.

Una vez que mi microcontrolador se congela, a veces puedo volver a su proceso normal tirando del pin de reinicio BAJO, pero casi no puedo. Es como si el pin de reinicio no estuviera funcionando en absoluto. Sin embargo, puedo volver a la operación normal volviendo a encenderlo.

(El pin de reinicio funciona bien, de lo contrario, cuando se ejecuta la ejecución normal del código. El pin de reinicio tiene un diodo de activación y protección según lo recomendado por la hoja de datos de atmega. El desacoplamiento está cuidado. Las tapas del filtro están muy cerca de los pasadores de alimentación. verificado por un osciloscopio también.)

¿El reinicio del ciclo de energía es diferente en comparación con el reinicio del pin de reinicio? ¿Es este un comportamiento esperado? ¿Puedo hacer algo para garantizar que mi pin de reinicio siempre funcione en tales condiciones?

    
pregunta Whiskeyjack

4 respuestas

7
  

¿El reinicio del ciclo de energía es diferente en comparación con el reinicio del pin de reinicio?

Sí. Hay algunos comportamientos de semiconductores en los que solo la pérdida de potencia permitirá reanudar el comportamiento anterior. Un SCR es un tipo de componente donde este comportamiento (es decir, solo la pérdida de energía permite que se reanude el estado anterior) es normal, y Existen estructuras similares a SCR en la mayoría de los circuitos integrados.

  

¿Es este un comportamiento esperado?

Depende de lo que quieras decir con " esto ". ¿Es el comportamiento esperado que puede provocar una situación extrema usando descargas de ESD de voltaje desconocido en un circuito en vivo, donde solo se recuperará un ciclo de energía? Si

  

¿Puedo hacer algo para garantizar que mi pin de reinicio siempre funcione en tales condiciones?

Siempre , para las condiciones de esa prueba? De manera realista, no, sin medidas extremas.

Según su descripción, sospecho que su inyección de ESD está activando el bloqueo , a veces llamado bloqueo del SCR (o un comportamiento latch-up like ) dentro de la MCU. Texas Instruments tiene una buena nota de aplicación llamada Latch-Up, ESD y Other Phenomena que contiene información muy relevante para sus preguntas.

Iba a responder a su La pregunta anterior que usted vinculó, pero demasiados detalles no me eran claros, algunas decisiones se basaron en suposiciones con las que no estaba de acuerdo y la experiencia me dice que es poco probable que pueda agregar mucho en esa situación. Tampoco creo que su prueba actual sea realista, en el contexto de sus problemas descritos en la pregunta anterior.

  

Después de todo esto, pude hacer que mi microcontrolador colgara después de torturarlo por unos minutos y pude repetir el proceso de colgar. Éxito hasta esta parte.

Respetuosamente no estoy de acuerdo en que esto sea "éxito". Lo que has hecho es provocar un síntoma similar a tu pregunta anterior (es decir, el bloqueo MCU). Pero hay varias posibles causas raíz para ese síntoma: ¿cómo sabe que está activando la causa misma con la pistola ESD, al igual que con su dispositivo instalado en la ubicación planificada? ? No había pruebas en su pregunta anterior de chispas directas de ESD en el PCB en vivo (que es una prueba extrema), pero eso es lo que está probando ahora.

Por lo tanto, veo los resultados de las pruebas de ESD actuales como un problema XY. Tienes el problema original con el bloqueo MCU. Aún no has podido diagnosticar eso. Ahora ha encontrado otra forma de activar el bloqueo de MCU (utilizando chispas directas de ESD). Pero eso no significa que las chispas directas de ESD sean la causa de su problema original (por lo tanto, no llamaría a ESD desencadenar un bloqueo de MCU como un "éxito"), ni tampoco significa que cualquier solución diseñada para ayudar con la protección contra ESD ayuda con tu problema original tampoco.

Me doy cuenta de que esto suena negativo, lo siento. Solo estoy sugiriendo que, basándose en la experiencia de muchos años en la resolución de problemas de sistemas complejos, es muy probable que esté "bajando por un agujero de ratas" siguiendo sus pruebas actuales, ya que es posible que no le ayude con su original problema.

Personalmente, si estuviera en su situación, me concentraría en diagnosticar mejor el problema original , en lugar de presentar un caso de prueba nuevo (y, creo que no realista). ¡Mucha suerte!

    
respondido por el SamGibson
1

Como usuario de Arduino, sospecho que estás lejos en el campo izquierdo. El Arduino es notablemente EN sensible a los transitorios. Y si está preocupado por los transitorios que llegan a través de la fuente de alimentación, podría colocar un supresor de sobretensiones (o un UPS) en la entrada de alimentación. Si realmente estás preocupado por los transitorios que vienen por el aire, simplemente debes proteger al Arduino (tal vez con una bandeja para asar papel de aluminio).

Sin embargo, según mi experiencia, lo más probable es que ahora sea que ocasionalmente todas las salidas se produzcan al mismo tiempo, y el consumo de corriente total es demasiado alto y, por lo tanto, hace que la tensión regulada caiga. La caída a 4V en lugar de 5V durante unos pocos milisegundos es casi una garantía para colgar el Arduino Uno. Una forma de solucionar esto es mirar detenidamente todas sus salidas y ver si alguna de ellas consume mucha corriente o tiene un retraso inductivo, y reorganiza a los infractores. Otra forma de solucionarlo es agregar un poco de complejidad a su software haciendo una cola de cambios "deseados", y luego realizando solo uno de estos cambios a la vez cada n th call to loop (). De esa manera nunca tendrás mucho que suceder al mismo tiempo.

Aunque sospecho que tu pregunta es completamente irrelevante para tus bloqueos, aquí está la respuesta: la placa Arduino Uno está dispuesta a hacer lo contrario de lo que hace la mayoría de los chips (incluido el chip Arduino): con Arduino Uno, un ciclo de poder no hará mucho, de hecho dejará el programa intacto. Así es como mueves un Arduino desde tu banco de desarrollo / prueba al lugar donde se desplegará. Un reinicio por otro lado borrará completamente todo y esperará una nueva descarga. Si las cosas se complican lo suficiente como para que el pequeño programa de gestor de arranque Arduino en la placa no funcione bien, entonces el reinicio será manejado solo por el chip, y el comportamiento que vea podría resultar.

Exactamente lo que sucederá después de que tu clase de bloqueo esté mal definido. En lugar de tratar de solucionar el síntoma, arregle la causa para que nunca se ponga en esta situación en primer lugar.

Si tiene mucha mala suerte y no puede averiguar la fuente de los bloqueos, es posible que deba agregar algún código de seguimiento de depuración o algún registro en su programa. Por ejemplo, podría registrar cada entrada en cualquier función. Luego, cuando se cuelga, simplemente vea cuál fue el último mensaje de rastreo, y sabrá que el problema está en alguna parte de esa subrutina (probablemente más especialmente si se produjo una interrupción al mismo tiempo).

(Ah, y si hay más de una fuente de alimentación [incluida una que no es obvia porque es parte de un sensor remoto y la que está dentro de la placa Arduino Uno], asegúrese de conectar todos los puntos negativos / tierra juntos De lo contrario, una fuente de alimentación puede "flotar" y, por ejemplo, proporcionar entradas analógicas que están fuera de rango.)

(También preste atención si el compilador advierte sobre la operación "inestable" porque se usa demasiado espacio de datos. En un Arduino no hay protección contra el desbordamiento de pila. Es posible que tenga suficiente espacio libre para toda la operación normal, pero si hay una interrupción sucede exactamente cuando la ejecución es muy profunda y tiene una pila muy grande, se puede desbordar. Los datos se escribirán en el espacio. Eso no es un gran problema hasta que intenta leerlo y no está allí. Por lo general, la función en la que está De alguna manera, seguiremos corriendo, pero cuando termine y "regrese", la dirección de retorno tampoco se puede leer y por lo tanto será aleatoria, y en esencia su código "irá" a alguna ubicación aleatoria. Esto a menudo resulta en un bloqueo. )

    
respondido por el Chuck Kollars
0

Reiniciar o apagar y encender un procesador no debería ser una actividad normal. Un procesador aparentemente bloqueado es una buena indicación de que existe un problema de software o hardware.

Los arduinos no son la plataforma de depuración ideal, pero revise el mensaje de impresión de depuración de su código para determinar la actividad del código durante la ejecución normal y durante el bloqueo.

Compruebe su fuente de alimentación para posibles mejoras. Ejecute sus pruebas mientras ejecuta temporalmente el Arduino con baterías.

Compruebe si está conduciendo en exceso las entradas. Los circuitos digitales pueden bloquearse si la tensión presentada en cualquier pin es más alta que la tensión de alimentación al chip.

Finalmente, hay una función común llamada watch-dog que, como último recurso / salvaguarda , reinicia el procesador. Normalmente es un temporizador físico externo (para el procesador) que. Sin embargo, algunos procesadores lo tienen incorporado. El diseño, a juicio de un perro guardián, es un dispositivo de seguridad y no se utiliza durante el funcionamiento normal.

Aquí hay una discusión sobre un software Arduino implementado watch-dog. No lo he estudiado. Si se trata de un perro guardián físico dentro del Atmel, probablemente será de utilidad. Si es solo una implementación de software, puede ser útil.

Añadido más tarde ...

Encontré esta página web sobre la detección de Arduino cárcel. Se discute un perro guardián.

    
respondido por el st2000
0

Si el silicio está diseñado para él y toda la lógica de la placa está diseñada para él y la placa está diseñada para él, entonces debería poder reiniciarlo. Un avr definitivamente no está en esa clase de partes, ya que específicamente tiene lógica que solo funciona cuando se reinicia. por lo tanto, resetear no es una solución para un avr confundido por esd. necesita restablecer el control de potencia y hacer que se apague y vuelva a encender el AVR, el tiempo suficiente para volver a ponerlo en un estado conocido.

    
respondido por el old_timer

Lea otras preguntas en las etiquetas