Arduino se congela debido a la fuente de alimentación - sin opciones

Esta va a ser una pregunta larga, pero no quiero dejar cabos sueltos.

Estoy desarrollando una incubadora que incluye una bomba de aire caliente para conducir aire caliente a través de una manguera a una cámara cerrada (~100 ml de volumen).

El módulo calefactor está compuesto por dos resistencias de impresora 3D de 40 W-12 V y una resistencia bobinada de 15 W-10 ohmios (más tarde llamada Rparallel) que se controla mediante un sistema PID con un Arduino UNO (biblioteca de Brett Beauregard).

El flujo de aire es generado por un enfriador de PC de 12V-2.9W (SUNON MagLev KDE1206PKVX) que está controlado por un pin Arduino (ajustado a 5V cuando el usuario inicia el ensayo) con el siguiente circuito (resistencia de 220 ohm en lugar de 1k):

Control de ventilador de flujo de aire.  Resistencia de 220 ohmios en lugar de 1k

Además de estos, tengo una pantalla LCD de 20x4 (con módulo I2C), un codificador rotatorio, un sensor de temperatura (LM35DZ) al lado del módulo del calentador (para evitar el sobrecalentamiento), un sensor de temperatura (Si7021 con módulo I2C) en el cerrado cámara y un enfriador de PC adicional (2W-12V) para enfriar la placa PCB. Estoy usando una fuente de alimentación conmutada de 12V-10A.

Cuando el PID está al 100%, se supone que el voltaje en la resistencia (Rparalelo = 1,5 ohmios) es de 12 V, pero debido a la caída de los cables y el transistor ( IRF540N ), el voltaje máximo es de alrededor de 10 V. Con todo, en comportamiento máximo, estaría sacando 66,6 W + 5 W (de los refrigeradores) = 71,6 W. El circuito PID es el siguiente:

Circuito PID

No se muestra en la imagen anterior, hay capacitores de 0.1 uF, 10 uF y 100 uF entre el Cable 2 (1) y el Cable 2 (2) en la placa PCB .

La pantalla y el codificador trabajan juntos para crear una interfaz de usuario en la que puede establecer la temperatura de referencia deseada en la cámara; iniciar/detener el sistema PID y verificar las diferentes temperaturas a través del ensayo; compruebe la temperatura de la cámara (Si7021) antes del ensayo. Tengo un condensador de 100 nF en ambos extremos de la pantalla LCD I2C entre VCC y GND (conectado a la placa con un cable de 7 mm). Tengo un condensador de 100 nF entre el pin A/GND y entre el pin B/GND del rotativo. codificador

Vale la pena mencionar también que el sensor Si7021 está conectado a la PCB con un cable plano de 80 cm de 4 pines (creo que así se llama) con un capacitor de 100nF en ambos extremos; el enfriador de la bomba de aire y el LM35DZ están conectados a la placa PCB con un cable blindado de 5 pines - 1 m; el módulo calentador (solo Rparalelo, el circuito PID está en la placa) se conecta a la PCB con un cable de 30 cm (el que viene con la resistencia de la impresora 3D, uno encerado). Los datos de los sensores se envían a una PC a través de un puerto serie.

La fuente de alimentación se conecta a la placa de circuito impreso a través de un conector MOLEX y al lado hay una serie de condensadores de desacoplamiento:

Condensadores de desacoplamiento

Profundizando en el problema. A VECES, cuando uso el dispositivo en mi casa, funciona perfectamente bien, sin retrasos, sobrecalentamiento ni nada. Pero cuando llevo el dispositivo al laboratorio donde trabajo, el ensayo comienza (la bomba de aire comienza, Arduino PID comienza, la pantalla LCD y el codificador rotatorio funcionan bien, los sensores de temperatura funcionan bien) durante unos minutos y luego todo se congela repentinamente. La pantalla LCD está congelada, los leds seriales TX y RX de Arduino dejan de funcionar, las salidas de pin para PID y la bomba de aire se congelan al valor que estaban funcionando. Cuando desconecto la fuente de alimentación y reinicio Arduino, el código parece estar dañado o Arduino se comporta de manera tonta. Es posible que tenga que volver a cargar el código para que todo vuelva a funcionar.

Al principio pensé que eran los módulos I2C los causantes de estos problemas (investigué un poco y descubrí que son bastante sensibles a las interferencias), pero anoche dejé el sistema funcionando sin la fuente de alimentación de 12 V (esto significa que solo LCD ,codificador rotatorio, Si7021) funcionando durante 12 horas y no se produjo la congelación.

Entonces decidí hacer una nueva prueba, todo conectado menos el Rparalelo. Esto significa que el circuito PID encuentra un circuito abierto, por lo que no se produjo el consumo de ~7 A. Debo recalcar que el enfriador de la bomba de aire estaba encendido y funcionando perfectamente. Con esta prueba, el Arduino no se congeló (descarta la interferencia de la bomba de aire).

El problema parece ser la fuente de alimentación cuando la carga está presente en el MOSFET. Supongo que cuando la fuente de alimentación tiene que entregar toda esa potencia, aparecen picos o algo que el microcontrolador no puede soportar. Supongo que la razón por la que funciona durante un largo período de tiempo es el voltaje constante en la toma de CA o algo así (solo adivinando). No es una fuente de alimentación barata . Después de pasar toda la tarde agregando capacitores por todos lados (los mencionados en el circuito PID y módulos I2C) se me acabaron las ideas. No tengo un osciloscopio o una fuente de alimentación de laboratorio regulada. Tengo un multímetro elegante.

Antes de sugerir desechar la fuente de alimentación y reemplazarla por una batería de gel, por ejemplo, los ensayos que necesito ejecutar con el dispositivo (~7A en comportamiento máximo) deben durar al menos 16 horas. ¿Hay alguna manera de seguir usando esta fuente de alimentación sin riesgo de freír el chip de Arduino al filtrar de alguna manera?

Nota: De donde soy, todavía estamos en cuarentena, por lo que comprar cosas lujosas no es una opción.

Espero haber sido lo suficientemente completo con mi explicación. No considero necesario añadir el código de Arduino, ya lo he comprobado quíntuple.

Esquemas completos, sé que no es lo mejor que has visto pero es lo mejor que pude hacer:

Esquemas de todo

En este momento, el Arduino no está siendo alimentado por la fuente de alimentación de 12 V, sino por la recopilación de datos de la PC (podría haber volado el regulador de voltaje).

Algunas imágenes reales de la PCB:

Foto 1 Imagen 2

EDITAR: Así que cambié ambos transistores en el circuito por el recomendado en los comentarios: IRFZ44. Esto mejoró enormemente la eficiencia del sistema de calefacción. Por otro lado agregué 2 optoacopladores (4N25) de la siguiente manera:

Modificación de ventilador y circuito PID

Obviamente, aislé ambos circuitos ( desconecté la tierra del Arduino y el Vcc de la fuente de alimentación de 12 V ) y encendí el Arduino UNO con un cargador de teléfono móvil//PC.

El Arduino no parece congelarse (no lo he probado en el laboratorio donde apareció el problema), sin embargo, al recopilar datos a través del puerto USB ocurre algo extraño (también sucedió antes de las modificaciones): cuando el sistema PID se inicia y la fuente de alimentación conmutada tiene que entregar ~7A el cursor de mi PC comienza a moverse de manera errática cuando toco el mousepad. Si apago el PID, el movimiento se detiene. Vídeo aquí

Es obvio que tiene que ver con el ruido de conmutación de la fuente de alimentación / MOSFET ... pero, si no hay una conexión física entre Arduino y el circuito de alimentación (gracias a los optoacopladores), ¿por qué sucede esto? ¿Podría EMI ser tan fuerte como para alterar el comportamiento del cursor a través de USB? En caso afirmativo, ¿podría ser la misma razón por la que mi Arduino se congeló antes? ¿Hay alguna manera de resolver esto de una manera que no necesite cambiar todo?

(Intenté alimentar el Arduino con un cargador de teléfono celular y usar un HC-05 para recopilar los datos y parece funcionar bien, pero a veces el módulo se congela)

Sería útil mostrar un esquema completo. Es posible que no tenga Vgs adecuados en D3 que necesita alrededor de 10V+. Los problemas de EMI son probables pero sin detalles. No puedo ayudar
Esa es una enorme pared de texto. ¿Has intentado encender el Arduino por separado? es decir, usar la fuente de alimentación de alta potencia para las cosas de alta potencia y una fuente de alimentación más pequeña de 12 V o 5 V para Arduino y otras interfaces y sensores de baja potencia. (Ate ambos terrenos juntos...) (Además, no use GND apuntando hacia arriba, etc., hay recursos en línea sobre cómo dibujar esquemas).
@TonyStewartSunnyskyguyEE75 D3 es la salida de un pin Arduino PWM. Su estado es controlado por el sistema PID (máx. 5V). Puedo ver que el transistor está siendo polarizado porque mido alrededor de 10 V en Rparallel.
@WesleyLee En este momento estoy alimentando el arduino con la PC (accidentalmente voló su regulador de voltaje) y las cosas de alta potencia con la fuente de alimentación de 12V. Los terrenos están unidos)
Si desea que se carguen 12 V, debe cambiar el voltaje de la puerta de 5 V a 12 V con una unidad de emisor de transistor de base común a Colector a puerta y> = 10k Base a 5V y Colector a Vgs y 10k a 12V. pero para sus fallas se necesita un esquema completo. Se necesita una tierra sólida con diodos para evitar cualquier voltaje de retorno inductivo a los controladores.
@TonyStewartSunnyskyguyEE75 me perdiste allí. ¿Por qué necesitaría cambiar el voltaje de la puerta a 12V? De acuerdo con la hoja de datos a un voltaje Vgs de 5V, podría obtener hasta 15A a través de la fuente de drenaje. ¿Diría que este transistor es adecuado para la lógica Arduino 5V?
No, eso es solo para un pulso de 20uS y no cuenta para la caída de voltaje y el sobrecalentamiento.
Puede medir la ondulación de la fuente de alimentación con un osciloscopio.
@ user253751 Pude usar un osciloscopio prestado y vi que la ondulación se volvió realmente desagradable al encender el PID. Pueden ver las modificaciones que le hice al sistema, sin embargo creo que no es lo suficientemente robusto
@TonyStewartSunnyskyguyEE75 He estado trabajando con los comentarios que recibí (puedes ver las ediciones de la publicación) pero creo que el sistema no es lo suficientemente robusto... Me pregunto qué quisiste decir con 'Una tierra sólida con diodos es necesario para evitar cualquier voltaje de retorno inductivo a los controladores
No hay solución, pero algunos comentarios: 1. Mantenga los bucles de corriente de alta frecuencia lo más pequeños posible: piense dónde comienza y deja de fluir la corriente cuando el MOSFET se enciende y apaga, y mantenga esa área lo más pequeña posible. 2. Mantenga los condensadores de desacoplamiento más pequeños lo más cerca posible de lo que están desacoplando. La corriente de alta frecuencia fluye a través de los capacitores de desacoplamiento y las frecuencias más altas fluyen a través de los capacitores más pequeños. La fuente de alimentación principal recarga los condensadores de desacoplamiento a un ritmo más constante.
3. Tanto los inductores como los condensadores se pueden usar para suavizar. Idea loca: poner un gran inductor en serie con el calentador y un diodo de retorno en paralelo inverso con el inductor + calentador. Nunca he visto a nadie más hacer esto, por eso lo etiqueté como una idea loca. Teóricamente, esto lo convierte en un convertidor de dinero.
Pensé que la inductancia podría reducirse con planos de tierra, por lo que mi PCB para el transistor PID tiene un plano de 3 cm ^ 2 en el colector... ¿entonces no es una buena idea? Tengo capacitores de 10uF, 0.1 uF y 0.01uF justo entre los lados Rparallel en el tablero (ver la primera imagen real) ¿diría que esta no es una buena opción? @usuario253751

Respuestas (2)

Su IRF540 no es realmente lo correcto para la unidad de 5V. Además, el LM35 debería tener una resistencia en serie como se muestra en la hoja de datos (tal vez la tenga). Ninguna de esas cosas está causando su problema.

Probablemente esté relacionado con el diseño. Una posible solución es, cuando reemplaza ese IRF540 con un MOSFET de nivel lógico, ralentizar significativamente la conmutación agregando resistencia en serie como 10K o 20K (y aumentar la resistencia desplegable a 100K o 200K). Una conmutación más lenta significa que habrá picos más pequeños de inductancia y menos EMI que causen problemas.

¡Gracias por la respuesta! ¿Conoces un buen MOSFET que podría usar en este caso? Al comienzo del proyecto, estaba usando un transistor TIP122 (darlington), pero no se ocupaba de la potencia que manejaba tan bien... ¿Hay alguna forma de ralentizar la conmutación de este transistor? ¿Es un MOSFET la mejor alternativa en este caso? Los picos que menciona provienen de la fuente de alimentación del propio transistor (pregunta tonta).
Los picos pueden provenir del cambio rápido en sí mismo. El voltaje aumenta con el producto de la tasa de cambio de la corriente y la inductancia, por lo que reducir la inductancia (buen diseño) es tan efectivo como ralentizar la conmutación. Un MOSFET de nivel lógico común para uso de 5V es el IRLZ44, que está bien para su corriente. Los hay mucho mejores, especialmente en paquetes SMT, como CSD16327Q3.

Su sistema no está bien diseñado. El ventilador no es solo un enfriador, sino un dispositivo de transferencia de calor, así que manténgalo a una velocidad constante independiente del control de calor, pero solo a una velocidad mínima suficiente para elevar la temperatura un poco más rápido de lo que se enfría desde el aislamiento ambiental.

El controlador de control de calor es el gran problema de EMI que interfiere con la caída de voltaje conducida en V + o el aumento de Gnd por su enrutamiento y diseño. Use rutas directas a la PSU que no compartan su Arduino y Fan y, con suerte, pares trenzados en caso de oscilaciones.

Tal vez ya se mencionó que el controlador de su ventilador quemaría Q2 Vbe, así que lo reenruté. No veo una buena razón para R7, así que pasé por alto eso. El PID debe activarse y desactivarse para que no se caliente y no necesite nada más que el control proporcional para activarse y desactivarse. No tiene que ser rápido como 20kHz. Podría ser 1 Hz, pero si intenta regular linealmente 95 W, puede esperar que en algún punto medio el FET descargue 40 W, por lo que no es bueno. Así que aprenda a usar PID o simplemente P usando PWM.

ingrese la descripción de la imagen aquí