Protección transitoria para evitar la congelación del microcontrolador: selección de diodos MOV y TVS

Tengo un circuito que contiene un circuito SMPS de conmutación fuera de línea (basado en viper22a) que convierte 220 V a 5 V regulado hasta 3,3 V usando un regulador lineal IC. Esto enciende un módulo wifi ESP y un chip Atmega328p. El microcontrolador se utiliza para controlar aparatos de corriente alterna como lámparas, bombillas, ventiladores, etc. (usando triacs aislados ópticamente). El circuito va detrás del tablero de distribución, muy cerca del cable de alimentación de CA.

Todo funciona bien, excepto una o dos veces por semana cuando mi atmega se congela y los pines GPIO se enganchan en un estado aleatorio : alto, bajo o mixto (pocos pines altos, pocos pines bajos). Dado que el circuito está dentro del tablero de interruptores, la única forma de devolverlo a la operación normal es cortando la energía a ese tablero de interruptores.

Después de leer un poco, concluí que podría deberse a transitorios en la línea de CA (generados por el cambio de cargas inductivas/capacitivas como CA, refrigerador, etc.) que de alguna manera llegan al microcontrolador. ¿Estoy en lo correcto?

Encontré dos posibles soluciones:

(1) Implementar el temporizador de vigilancia en el lado del código (sí, no lo hice antes)

(2) Usar algún hardware de supresión de transitorios como MOV o diodos TVS

(1) ha sido atendido. Para (2), necesito ayuda.

Estoy planeando poner un diodo TVS para la línea de 3.3V que va al Atmega328. He seleccionado algunos que tienen un voltaje de ruptura en el rango de 4,1 a 6,8 V.

Además de esto, planeo colocar otra capa de protección justo en el punto de entrada de CA (en el circuito de suministro de energía).

Fuera del diodo TVS y MOV, ¿cuál será una mejor opción? ¿O debo agregar ambos en paralelo?

Me inclino más por los diodos TVS porque son más confiables y tienen una larga vida útil.

¿Qué será más adecuado para este propósito? ¿Hay algo más que pueda hacer para mejorar el rendimiento de mi circuito?

Gracias

EDITAR: Agregar el esquema de la fuente de alimentación

Fuente de alimentación SMPS

Pondría un MOV en la entrada de línea de CA y TVS en cada entrada de MCU. También una serie resistor y de pequeña capitalización antes de TVS es una buena opción, limitará la tasa de cambio de la señal, por lo que TVS reaccionará siempre en el mismo punto de inflexión.
Gracias @Marko por la respuesta. Poner diodos TVS junto con RC parece un poco difícil debido a que hay menos espacio en la placa. Dado que el número total de GPIO es superior a 20, se necesitarán entre 80 y 100 componentes (2 diodos tvs + R + C por línea). Además, mis líneas IO ya están ópticamente aisladas. Entonces, ¿no sería una exageración?
Supongo que hay que rediseñar la fuente de alimentación, porque si tienes entradas optoaisladas no deberías tener esos problemas. Entonces, ¿cómo alimenta la MCU y cómo las entradas/salidas muestran los esquemas de la sección de la fuente de alimentación?

Respuestas (1)

Como se sospecha, está utilizando una sola fuente para alimentar la MCU y la entrada que están optoaisladas. Ahora, ¿cuál es el punto de usar opto si todo es el mismo Vcc? 2. ¿Qué hace un diodo zener en la entrada opto? ¿Por qué no es suficiente una simple resistencia? Tienes más posibilidades:
1. Hacer un segundo devanado secundario y una nueva fuente de alimentación para alimentar las entradas (la mejor)
2. Instalar un estrangulador de modo común, condensadores (filtro PI) y TVS para alimentar las entradas
3. punto 2. + quitar opto's e instale RC + TVS, ya que los optos no sirven si usa la misma fuente.

¿Qué está pasando? Su cable de 5V que va alrededor de su casa es una antena que capta el ruido y lo transfiere a la fuente de alimentación de MCU. Su fuente de alimentación adicional carece del estrangulador de modo común en la entrada. Ver ejemplo: http://www.st.com/web/en/resource/technical/document/data_brief/CD00177969.pdf

Gracias por la respuesta Marco, pero creo que hay un poco de confusión aquí. Todo este circuito está en el mismo PCB que la parte del microcontrolador. La parte SMPS ocupa aproximadamente 8 cm X 1,5 cm. Este circuito se ha derivado de lo que publicaste. Quité el filtro PI por falta de espacio y falta un devanado porque solo necesito una salida: 5V. Mi DC 5V está totalmente aislado. El Opto que ve se usa para dar retroalimentación a viper y zener se usa para establecer el umbral de retroalimentación para que obtenga 5V. (3,9 V+0,7 V = 4,6 V ~ 5 V). puede ver un circuito similar en la nota de la aplicación que publicó.
@Whiskeyjack Ya veo, el opto es una retroalimentación para la regulación de voltaje, no la entrada a MCU. Pero, de todos modos, ¿de dónde sacaste el ejemplo para esa retroalimentación? ¿No se supone que debe haber una referencia de voltaje y un par de resistencias y tapas, no solo un diodo zener? Aún persiste la pregunta ¿cómo se alimentan las entradas optoaisladas?
Hola Marko, perdón por llegar tarde. Estaba realizando algunos experimentos y este es el resultado: utilicé un circuito de suministro de energía casi similar en otra pcb para encender mi placa de microcontrolador y funciona bien hasta ahora. Ahora, esto sugiere dos casos posibles: (a) el circuito smps en la misma pcb está introduciendo demasiado ruido debido a la menor holgura. (b) Utilicé un transformador más pequeño en los smp integrados que podrían tener una inductancia de fuga más alta y de alguna manera estropear las líneas eléctricas en momentos aleatorios. ¿Qué dices?