¿Cómo evitar que un microcontrolador se reinicie debido a las fluctuaciones de Vcc?

Caso #1: Tengo una estación de bombeo con un motor de bomba autónomo de 240V conmutado por un interruptor de presión de 240V, alimentando un tanque de presión a un máx. presión. Tras dicho depósito se encuentran cuatro electroválvulas de 24V (250mA inrush, 180mA holding), controladas por una placa de relés alimentada a 5V (Sainsmart). Esta placa de relés está conectada a las salidas del microcontrolador (Arduino UNO) a través de un optoacoplador.

Los relés se encienden y apagan en serie. Una vez que el último se apaga, el motor de la bomba sigue funcionando debido a que aún no se ha alcanzado la presión de apagado. Unos segundos más tarde, la presión aumenta, la bomba se apaga, y aquí viene el problema: el microcontrolador se reinicia (cuando el motor se apaga).

Para todo ello hay alimentación monofásica de 240V. Las electroválvulas obtienen su alimentación de un transformador de núcleo anular de 50VA. El microcontrolador tiene una fuente de alimentación enchufable conmutada de 240 V/5 V con 2 A (se requieren <200 mA).


Caso n.º 2: otro escenario: el microcontrolador conectado a 240 V/5 V controla un pequeño relé (5 A), que cambia 240 V (con amortiguador) por un relé (contactor) montado en DIN de 25 A más grande, que cambia un elemento calefactor resistivo de 3 kW por un calor sistema de agua. En ocasiones, el microcontrolador se reinicia cuando enciende la carga.

Veo el mismo problema en ambos casos. Pero, ¿cuál podría ser el problema/solución?

100uF con 0.1uF en paralelo a 5V Vcc/GND?


Caso #1: las pruebas...
1. Use un 4k7 y 100nF en paralelo desde +5V Vcc para RESET. Ningún cambio.
2. use un capacitor de 1,000uF paralelo a +5V Vcc y GND. Ningún cambio.

Caso #1: la solución...
3. Agregue un amortiguador (104 en serie con 100R) paralelo a los contactos del relé.
¡No más problemas de reinicio! :)

Gracias por todos los aportes; desencadenó mucha investigación y validación, lo que resultó en algo de aprendizaje... más aún para crear circuitos más robustos, cuando se trata de entradas en dispositivos uC.

Respuestas (4)

Usando Q = C * V, y tomando la derivada, obtenemos

dQ/dt = dC/dT * V + C * dV/dT

Ahora mantenemos el capacitor constante, dejando dQ/dT = C * dV/dT

Reemplace dQ/dT con I, y tenemos el útil I = C * dV/dT

Ahora suponga que I = 0,2 amperios, dV = 0,5 voltios, dT = 5 segundos y vuelva a organizar para encontrar C.

C = I /(dV/dT) = I * dT / dV = 0,2 * 5 / 0,5 = 2 Faradios de capacidad.

¿Ha considerado un supercondensador, aislado por un diodo schottky del pin MCU VDD? con 100 ohmios en el diodo para mantener cargada la súper tapa?

=========================================

Echemos un vistazo (suposición científica) a las matemáticas para los problemas de campo magnético en las PCB. Usa la fórmula

Vinduce = MUo * MUr * Área/Distancia * dI/dT.

Nuestra primera suposición es la dI/dT: suponga sus 10 amperios en 100 nanosegundos, con los 100 nanosegundos definidos por la capacitancia parásita en los devanados del motor de la bomba. De nuevo, esto es un SWAG.

Suponga que la PCB, en el pin de reinicio de MCU, tiene un área de 1 cm por 1 cm. O si el rastro de reinicio corre por todas partes, asuma 1 cm por 10 cm. Y suponga que el cableado de la bomba/relé está a 1 cm de este circuito de reinicio.

¿Qué voltaje inducido podemos predecir usando nuestras suposiciones? La primera tarea es insertar valores para MUo (4*pi*1e-7) y para MUr (1, para aire, vacío, cobre, FR-4, etc.) y la ecuación se convierte en

Vinduce = 2e-7 * Área/Distancia * dT/dT

Vinduce = 2e-7 * 0,01 metros * 0,01 metros/0,01 metros * 10 amperios/100 nanosegundos

Vinduce = [aquí ponemos un número que indica que existe un gran problema: 1voltio; y estamos de acuerdo si nuestras matemáticas predicen que es probable que 1v, entonces probablemente tengamos un problema]

Vinduce = 2e-7 * 0.01 * 10amp * 1e+7

Vinduce = 2e^(-7 -2 +1 +7) = 2e^(-1) = 0,2 voltios.

OK, podemos o no tener un problema de EMI. Examine el área del bucle en el pin de reinicio. Tal vez traer a la gente de StackExchange a pensar, publicando esa parte del diseño de PCB (las capas y la capa de componentes).

Ha habido al menos 3 buenas respuestas en EMI. Una vez que encuentre el área del bucle en el pin de reinicio, haga un bucle de ese tamaño, en un cable aislado, y péguelo con cinta adhesiva a la PCB para que lo controle una sonda de alcance; obtener una conexión GND de área cero a la sonda puede ser un desafío. Luego encienda y apague y encienda y apague la bomba. Y por favor informe lo que encuentre.

Ouch... matemáticas, siempre es algo bueno... Sabía que no eran más de 200 mA (y conecté este número), pero mejor ve y mide, ya que reducirá C.
188mA es :) ¿Es correcto suponer que 0.5V es la ondulación V? Construiré el circuito sugerido... gracias.
Con respecto a los 0.5 voltios, supongo que esa es la tolerancia que tiene la MCU para VDD_sag; especificaciones tales como 5v +- 0.5v es lo que tenía en mente.

Estoy de acuerdo con Lucky Bot en que el "remanente" de PSU no es un problema aquí, y estoy de acuerdo con Spehro Pefhany y Lucky Bot en que esto parece un problema de EMC.

Lo que sucede cuando el interruptor de presión se apaga es que una carga inductiva se apaga abruptamente. La "inercia magnética" de la inductancia trata de mantener el flujo de corriente, pero ha bloqueado el camino con una resistencia muy alta... lo que da como resultado un pico de voltaje poderoso e inmediato a través de las terminales del inductor, típicamente generando un arco a través de la parte mecánica. contactos del interruptor, excitados por el devanado del motor. El arco en sí es ruidoso y el interruptor puede rebotar. Además del pico de voltaje, el breve pero poderoso dI/dT también produce un pulso EM que se propaga a través del "éter" de los inductores, posiblemente induciendo algunos fallos/ruido en las diversas trazas de PCB alrededor de su Arduino.

Existe un problema similar con las bobinas de los relés, por ejemplo, impulsadas por un transistor. A medida que el transistor se abre en circuito, su colector sufre un pico de la bobina del relé, razón por la cual el transe siempre debe estar protegido por un "diodo de retorno" antiparalelo.

Bloquear adecuadamente el riel de alimentación a su Arduino MCU es una contramedida parcial. Desafortunadamente, la atención al diseño de PCB es otra. En el motor, puede intentar insertar un filtro EMC en el cableado de alimentación y/o colocar una perla/anillo/manguito de ferrita sobre los cables, o algo similar.

¿Tiene un 'alcance para tal vez ver algunos puntos interesantes alrededor de la MCU? ¿Por ejemplo, la entrada de la fuente de alimentación y la entrada de reinicio?

Dicho esto, los circuitos digitales pueden ser difíciles de depurar con este síntoma, incluso con un 'visor a mano'. Su ventaja es que Arduino es una placa simple y bien documentada. No he estudiado el PCB yo mismo. Generalmente, en las computadoras, la línea de reinicio no es un solo rastro que va desde algún interruptor o encabezado a la MCU, puede ser una red más compleja en sí misma, con varias "fuentes" de la señal de reinicio. Un buen lugar (punto de partida) para buscar errores de reinicio es el pin de entrada RESET de la CPU. Y es posible que se enfrente a una incertidumbre interesante: los fallos que ve en un osciloscopio, ¿provienen del rastro o "nodo" que está observando, o posiblemente son inducidos en el "bucle" entre la punta de la sonda y la correa de tierra de la sonda? A modo de comparación, intente acortar la punta de la sonda a la sonda.

Puede encontrar que la amplitud del pulso/pico EM es algo aleatoria o muy aleatoria. Además de otras influencias aleatorias misceláneas (como el patrón único y preciso del "rebote" de un contacto de relé mecánico), la forma sinusoidal de la corriente a través del motor también puede ser un factor en las cargas inductivas impulsadas por CA. Lo que es aleatorio aquí es el instante en el tiempo frente a la fase instantánea de la onda sinusoidal, donde se abren los contactos del relé. Algunos interruptores de estado sólido (basados ​​en transistores, es decir, PhotoMOS o IGBT) también pueden causar EMI, por el mismo mecanismo. No exhiben "rebote" mecánico, pero el apagado abrupto (dI/dt) todavía está allí. Los interruptores de estado sólido basados ​​en un triac o tiristor deberían ser más educados: se apagan durante una transición a cero. Por eso solo funcionan para AC.

En cuanto a algunas referencias... hablando de bloquear la potencia de los circuitos integrados mediante condensadores, intente leer este tema y siga los enlaces a Kemet KSIM y a la nota de Murata C39E. Esas dos fuentes diseccionan la "elección de los condensadores de bloqueo" con meticuloso detalle :-) Y, tal vez, eche un vistazo a este video sobre picos causados ​​​​por cargas inductivas en el apagado (y el propósito de los diodos de retorno, aunque un diodo de retorno solo proteger el transistor de conmutación y no evitará que el pulso EM se propague a través del éter). Parece que le gusta el bricolaje... Las fundas de ferrita para el filtrado de energía se pueden encontrar en fuentes de alimentación de PC desechadas o en varios cables e incluso en cables de interconexión de datos. Un filtro de línea de alimentación adecuadopara su motor (LC PI o lo que sea) puede costar fácilmente más que el Arduino, pero puede valer la pena la inversión.

Si pruebas algunas mangas o anillos de ferrita, puedes poner varios en serie, o enrollar un par de vueltas alrededor de uno, puedes hacer un estrangulador de modo común insertando o enrollando el vivo y regresan uno al lado del otro a través de un anillo compartido... Y ya sea que pruebe con manguitos/anillos de ferrita o un filtro LC (o ambos), puede marcar la diferencia si coloca el filtro cerca del motor o cerca del interruptor. Diría que cerca del motor sería mejor, ya que haría que la "antena parásita" fuera más corta para la energía de radiofrecuencia radiada ... entonces, nuevamente, mi opinión puede ser ingenua.

Esto explica por qué el ingeniero de suministro de energía es el superhéroe :) Publicación muy útil; Fui a través de los enlaces proporcionados. Aprendió mucho. También encontré esta publicación < electronics.stackexchange.com/questions/256622/… > ... debe ser el motor de la bomba en mi caso; Hará el reinicio a Vcc con 4k7 y 100nF, luego usará un súper límite en Vcc; configure los pines no utilizados para la entrada y los pull-ups... y vea cómo va eso.

Parece que el problema es la EMI de la conmutación, y esta es una de las razones por las que las placas de hobbist como Arduino no se usan a menudo industrialmente, y los PLC relativamente caros son comunes.

La solución es un mejor diseño y diseño de EMC, o comprar un producto con esas características diseñadas desde el principio. Evitar los relés mecánicos ayuda, pero a menudo es menos apropiado.

¿Pero el PLC no usaría potencialmente el mismo uC (por ejemplo, ATMEL328P) en su solución? Esto significa que el uC no es el problema, sino la fuente de alimentación (suministro) como se sospecha.
Sí, usarán una MCU estándar, pero estará rodeada de circuitos de protección y blindaje adecuado para endurecerla frente a EMI.

Cualquiera que sea la mísera capacitancia de entrada que haya dentro del convertidor de modo de conmutación, probablemente sea suficiente para hacer funcionar la MCU a través de este evento, considerando que estos límites están cargados al voltaje de línea de CA completo. Es probable que Spehro esté en lo correcto y que el pin RESET en la MCU esté desconectado de EMI. Intente conectar este pin directamente al suministro de MCU o coloque la tapa SMD más grande que se ajuste fácilmente a cualquier tapa pequeña que normalmente esté presente en este pin.