Tengo un circuito que contiene un circuito SMPS de conmutación fuera de línea (basado en viper22a) que convierte 220V a 5V regulados hasta 3.3V usando el regulador lineal IC. Esto enciende un módulo wifi ESP y un chip Atmega328p. El microcontrolador se usa para controlar aparatos de CA como luces traseras, bombillas, ventiladores, etc. (utilizando triacs aislados ópticamente). El circuito va detrás del tablero, muy cerca del cable de alimentación de CA.
Todo funciona bien, excepto una o dos veces a la semana cuando mi atmega se congela y los pines GPIO se bloquean en un estado aleatorio : alto, bajo o mixto (pocos pines altos, pocos pines bajos). Dado que el circuito está dentro de la placa de interruptores, el único medio para volver a su funcionamiento normal es cortar la alimentación de esa centralita.
Después de leer un poco, llegué a la conclusión de que podría deberse a transitorios en la línea de CA (generados por el cambio de cargas inductivas / capacitivas como la CA, el refrigerador, etc.) que de alguna manera llegan al microcontrolador. ¿Estoy en lo correcto?
Me encontré con dos posibles soluciones:
(1) Implementando el temporizador del perro guardián en el lado del código (sí, no lo hice antes)
(2) Uso de 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 de TVS para la línea de 3.3 V que va al Atmega328. He seleccionado algunos que tienen un voltaje de ruptura en el rango de 4.1 - 6.8 V.
Además de esto, estoy planeando colocar otra capa de protección en el punto de entrada de CA (en el circuito de la fuente de alimentación).
Fuera del diodo de TVS y MOV, ¿cuál será la mejor opción? ¿O debería agregar ambos en paralelo?
Estoy más inclinado hacia los diodos TVS porque es más confiable y tiene 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