Arduino se reinicia falsamente con consumo de energía

Tengo un circuito simple, que se muestra a continuación, que usa un Arduino para controlar dos grandes motores bidireccionales a través de relés de 12V. Normalmente esto funciona de maravilla, pero a veces el Arduino termina reiniciándose.

Creo que lo que sucede es que los motores consumen mucha energía al arrancar, lo que hace que el arduino tenga una pérdida momentánea de energía en la que se reinicia. Para remediar esto, agregué un capacitor electrolítico de 1000uF y un capacitor cerámico de 22uF. Además, "bloqueé" los planos de alimentación/tierra del arduino con diodos 1N4001 para que los motores no puedan robar la carga del arduino durante una caída de energía.

Mirando el VIN/GND al arduino, todavía veo la caída de energía ocasional, pero con los diodos/condensadores, los picos son muy cortos y agudos. Lo sorprendente es que estas caídas de energía no siempre preceden a un reinicio, por lo que puedo decir.

Mi teoría de trabajo actual es que las caídas de energía corrompen la memoria o simplemente precipitan la inestabilidad en el arduino, razón por la cual las caídas de energía generalmente no provocan un reinicio inmediato.

He pasado algunos días luchando con este problema y todavía estoy completamente perdido en cuanto a lo que debo hacer para solucionarlo. No entiendo por qué habría una pérdida repentina de energía en el arduino cuando está amurallado con diodos. Cualquier y toda ayuda sería apreciada.

capa superior de PCB Capa inferior de PCB caída de tensión

Edición 1 Aquí está el esquema para el control del motor. Los relés ambientales están en GND, solo uno está encendido durante un movimiento. Mirando el alcance, veo algunos picos en la puerta. Agregué capacitores cerámicos de 10uF a las líneas de la puerta, pero eso no solucionó completamente el problema de reinicio.Esquema del motor

Y aquí está el esquema de la energía que va al Arduino. Tengo un diodo en el lado alto y en el lado bajo. El diodo del lado alto es para evitar que los motores roben carga de los condensadores, y el condensador del lado bajo es para evitar que los motores muevan el plano de tierra. El problema persiste con o sin el diodo del lado bajo en su lugar.poder arduino

No creo que el problema sea del lado de la alimentación, puedo desconectar la alimentación y el arduino continúa funcionando durante aproximadamente dos segundos. He pasado varios días en esto y no he encontrado nada que haga que este circuito sea confiable. No sé qué probar.

Edición 2 Creo que el problema es que los relés a veces se arquean, lo que provoca EMI que interfiere con el arduino. Necesito un amortiguador RC para eliminar eso, pero ¿cómo conecto correctamente dicho amortiguador en mi circuito?

¿Tengo razón al entender que también pones diodos en el plano de tierra? No deberías necesitar eso. Probablemente cause más problemas.
Ciertamente suena como un problema de inmunidad al ruido, ya sea radiado o conducido. Muestre algunos datos para probarlo usando una sonda de diferencia muy corta o dos sondas 10:1 perfectamente combinadas en la misma señal ruidosa con una línea plana en modo AB usando la punta y el anillo de la sonda solo en 4 orificios de prueba con una sonda de resorte y está lista para usar para capturar diafonía, restablecer picos o radiación o cambio de tierra, fallas de suministro, etc. Tome medidas precisas. Pruebe los casquillos RF, los baluns y los cables STP.
DKNguyen, tienes razón en que tenía un diodo en el plano de tierra. Intenté sin ese diodo hace un momento, y todavía recibo reinicios. Creo que es más frecuente que antes, pero no estoy seguro
No se limite a mirar el consumo de energía del motor. ¡Mira esos relés también!
Abel, sí inicialmente pensé que era por los relés, pero el sistema es 100% estable cuando los motores están desconectados. Lo que parece que no puedo entender es: ¿por qué los diodos no evitan ese pico por completo? ¿Cómo se escapa la corriente?
Nada puede prevenir el pico por completo. Incluso los diodos se rompen. Piense en ello como un golpe de martillo: un material fuerte pero rígido (diodo) frente a una pieza de goma (condensador). Si los motores están en una fuente de alimentación aislada separada, entonces podría aplicarse su caso "100% estable". De lo contrario, es probable que su fuente de alimentación se vea afectada por los motores. Los diodos no pueden compensar la escasez actual. Las gorras solo pueden compensarlo temporalmente.
¿Puede dar las especificaciones de la fuente de alimentación, el motor y el relé? Específicamente los requisitos actuales y las clasificaciones actuales de la fuente de alimentación
@Abel, sé que las mayúsculas solo pueden cubrir temporalmente la caída actual, pero pensé que podrían cubrir el tiempo durante esa breve caída V. Cuando desconecto manualmente la alimentación, veo una disminución muy lenta en V, que es lo que espero. Mi fuente de alimentación es 12V 10A, estoy probando con un motor que es 4A sin carga y aparece como 12A con carga completa.
El diodo en la vida real no es perfecto, también conduce a la inversa, especialmente schottky. Si desea eliminar correctamente la energía de fuga de las bobinas del relé, debe usar el amortiguador RDC, no solo disipar la energía en el diodo. Por cierto, no mencionó qué fuente de alimentación está utilizando, 1000uF para motores más grandes no es mucho. Publique todos los esquemas para que podamos ver mejor el posible problema.
Lo primero que debe hacer sería reemplazar el diodo que está entre ambos "GND" con un cable. Luego, al volverse meta, publica los fragmentos del esquema que cree que ayudarán a resolver el problema, pero si hace la pregunta, significa que no sabe cuál es el problema, por lo que los fragmentos del esquema que publica no ayudan. ¿Puedes publicar el esquema completo?
Apuesto a que la solución depende del pin de los conectores del motor que está conectado directamente al arduino con un rastro. Es el pin superior en ambos conectores "MR". Sin embargo, no tengo idea de lo que hace.

Respuestas (3)

Sus N FET están al revés.

ingrese la descripción de la imagen aquí

Debiera ser:

esquemático

simular este circuito : esquema creado con CircuitLab

Creo que me equivoqué en mi esquema, en la pcb, la fuente está conectada a GND
Luego, publique un esquema preciso ... de lo contrario, es muy difícil solucionar el problema ...

Con el esquema veo que tienes diodos tanto en potencia como en tierra.

El que está en el lado de tierra no es necesario y probablemente esté complicando la forma en que mide cualquier perturbación porque su alcance también estará conectado a tierra. También sería mejor usar un diodo Shottky ya que tiene menos caída de voltaje.

Sería útil tener una traza de alcance que muestre tanto la potencia del motor como la potencia de Arduino simultáneamente. expanda la traza para que podamos ver el ancho de los pulsos para determinar la causa probable. (es mejor si es posible hacer una captura de pantalla usando el alcance en lugar de tomar una foto, será más claro).

Si el ancho de la caída es consistente con la constante de tiempo del capacitor grande y el drenaje del procesador, entonces está siendo causado por una caída de energía, si es muy corto (nanosegundos a microsegundos), entonces es probable que haya una interferencia en de alguna otra manera.

Puede valer la pena configurar el voltaje del detector de caída de tensión (BOD) a un valor más bajo de lo normal (por ejemplo, 2,7 V) para dar más margen si el voltaje cae.

Hace unos años diseñé un sistema similar. Para evitar las caídas de voltaje causadas por la gran carga del motor de arranque, aumenté el voltaje de la batería a 6 V con un convertidor elevador LT1949, almacené la energía en un límite grande de 2200 uF) y luego la regulé hasta los 5 V que necesita el procesador (ATMega128) . El 1 V adicional almacenado en el capacitor le permitió caer hasta un voltio sin afectar el suministro al procesador, y otros 500 mV más o menos antes de llegar al requisito de voltaje mínimo para el procesador. Esto es tres veces el margen que obtiene simplemente colocando un condensador grande en el suministro.

Ese sistema permitió que el voltaje de la batería cayera a aproximadamente 3 V sin problemas y podría sobrevivir 10 milisegundos con el voltaje aún más bajo.

Esto es muy útil. Para aclarar, D16 se enfrenta al suministro, pero está en el plano de tierra. Intenté quitar ese diodo, pero parece aumentar la inestabilidad. ¿Sigues sugiriendo que lo elimine?
@zeeman_effect: ¿puede proporcionar un esquema? Es muy ambiguo solo tratando de rastrear la PCB.
Agregué esquemas para el control del motor y la potencia de arduino.
Desafortunadamente, solo tengo un pequeño alcance de mano conmigo. Las gotas que veo son muy cortas, entonces creo que esto se debe a una interferencia. Si es así, ¿cómo recomendaría eliminar esa interferencia?

Agregué un amortiguador RC alrededor de cada lado Vcc / GND del relé, por lo que 4 amortiguadores RC en total. Esto pareció solucionar el problema.

Creo que lo que estaba sucediendo era que había un arco dentro del relé, lo que provocó una EMI que restablecería el IC.