1 votos

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

Esta va a ser una pregunta larga pero no quiero dejar ningún cabo suelto.

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

El módulo calefactor está formado por dos resistencias de impresora 3D de 40W-12V y una resistencia de hilo de 15W-10 Ohm (todo ello llamado posteriormente Rparallel) que se controla mediante un sistema PID con un Arduino UNO (librería de Brett Beauregard).

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

Air flow fan control. 220 ohm resistor instead of 1k

Además de esto, tengo una pantalla LCD de 20x4 (con módulo I2C), un codificador rotativo, un sensor de temperatura (LM35DZ) junto al módulo de calentamiento (para evitar el sobrecalentamiento), un sensor de temperatura (Si7021 con módulo I2C) en la cámara cerrada, y un refrigerador de PC extra (2W-12V) para enfriar la placa de circuito impreso. Estoy usando una fuente de alimentación conmutada de 12V-10A.

Cuando el PID está al 100% el voltaje en la resistencia (Rparallel= 1.5 Ohm) se supone que es de 12V, pero debido a los cables y al transistor ( IRF540N ), la tensión máxima es de unos 10V. En total, en el comportamiento máximo estaría consumiendo 66,6 W + 5W (de los refrigeradores)= 71,6W. El circuito PID es el siguiente:

PID Circuit

Entre el cable 2 (1) y el cable 2 (2) hay condensadores de 0,1 uF, 10 uF y 100 uF que no aparecen en la imagen anterior en la placa de circuito impreso .

La pantalla y el codificador trabajan juntos para construir una interfaz de usuario donde se puede establecer la temperatura de consigna deseada en la cámara; iniciar / detener el sistema PID y comprobar las diferentes temperaturas a través del ensayo; comprobar 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 codificador rotativo.

Cabe mencionar también que el sensor Si7021 está conectado a la PCB con un cable plano de 4 pines-80 cm (creo que así se llama) con un condensador de 100nF en ambos extremos; el refrigerador de la bomba de aire y el LM35DZ están conectados a la placa PCB con un cable de 5 pines - 1m blindado cable; el módulo del calentador (sólo Rparallel, el circuito PID está en la placa) se conecta a la PCB con un cable de 30 cm (el que viene con el resisor de la impresora 3D, uno encerado.) Los datos de los sensores se envían a un 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 junto a ella hay una serie de condensadores de desacoplamiento:

Decoupling capacitors

Profundizar en el problema. A veces, cuando utilizo el dispositivo en mi casa, la cosa funciona perfectamente bien, sin retraso, sobrecalentamiento, ni nada. Pero cuando me llevo el aparato al laboratorio donde trabajo el ensayo arranca (la bomba de aire arranca, el Arduino PID arranca, el LCD y el codificador rotativo funcionan bien, los sensores de temperatura funcionan bien) durante unos minutos y luego todo se congela de repente. La pantalla LCD se congela, los leds TX y RX de serie de Arduino dejan de funcionar, las salidas de los pines para el PID y la bomba de aire se congelan en el valor que estaban trabajando. Cuando desconecto la fuente de alimentación y reinicio el Arduino el código parece estar corrupto o el Arduino se comporta de una manera tonta. Puede que tenga que volver a subir el código para que la cosa 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 12V (esto significa sólo LCD, codificador rotatorio, Si7021) trabajando durante 12 horas y la congelación no se produjo.

Entonces decidí hacer una nueva prueba, todo conectado pero el Rparalelo. Esto significa que el circuito PID se encuentra con un circuito abierto por lo que el consumo de ~7 A no se produjo. Tengo que destacar que el refrigerador de la bomba de aire estaba encendido y funcionando perfectamente. Con esta prueba, el Arduino no lo hizo congelación (descarta las interferencias de la bomba de aire.)

El problema parece ser la fuente de alimentación cuando la carga está presente a través del MOSFET. Supongo que cuando la fuente de alimentación tiene que entregar toda esa potencia, aparecen picos o algo que el micrcontrolador no puede soportar. Supongo que la razón para que la cosa funcione durante un largo período de tiempo es la tensión constante en la toma de corriente de CA o algo así (sólo una suposición). No es una fuente de alimentación barata . Después de pasar toda la tarde añadiendo condensadores por todas partes (los mencionados en el circuito PID y los módulos I2C) me he quedado sin ideas. No tengo un osciloscopio ni una fuente de alimentación regulada de laboratorio. Sí tengo un multímetro de lujo.

Antes de sugerir que se deseche la fuente de alimentación y se sustituya por una batería de gel, por ejemplo, los ensayos que necesito realizar con el aparato (~7A en comportamiento máximo) tienen que durar al menos 16 horas. ¿Existe alguna forma de seguir utilizando esta fuente de alimentación sin riesgo de freír el chip del Arduino filtrando de alguna manera?

Nota: En el lugar de donde vengo todavía estamos en cuarentena, así que comprar cosas de lujo no es una opción.

Espero haber sido lo suficientemente exhaustivo con mi explicación. No considero necesario añadir el código de Arduino, ya lo he quintuplicado.

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

Schematics for the entire thing

En este momento el Arduino es no siendo alimentado por la fuente de alimentación de 12V sino por el PC que recoge los datos (puede que haya reventado el regulador de voltaje).

Algunas fotos reales del PCB:

Picture 1 Picture 2

EDITAR: Así que he cambiado los dos transistores del circuito por el recomendado en los comentarios: IRFZ44. Esto mejoró mucho la eficiencia del sistema de calefacción. Por otro lado He añadido 2 optoacopladores (4N25) de la siguiente manera:

Fan and PID circuit modification

Obviamente, he aislado ambos circuitos ( desconecté la tierra y el Vcc del Arduino de la fuente de alimentación de 12V ) y alimentar 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 recoger los datos a través del puerto USB ocurre algo raro (también ocurría antes de las modificaciones): Cuando el sistema PID arranca y la fuente de alimentación conmutada tiene que suministrar los ~7A el cursor de mi PC empieza a moverse erráticamente cuando toco la alfombrilla del ratón. Si apago el PID, el movimiento se detiene. Video aquí

Es obvio que tiene que ver con el ruido de conmutación de la fuente de alimentación/ MOSFET... pero, si no hay conexión física entre Arduino y el circuito de alimentación (gracias a los optoacopladores) ¿por qué ocurre esto? ¿Podría la EMI ser tan fuerte como para alterar el comportamiento del cursor a través del USB? Si es así, ¿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 necesita cambiar todo?

(He probado a alimentar el Arduino con un cargador de móvil y usar un HC-05 para recoger los datos y parece que funciona bien, pero a veces el módulo se congela)

2voto

Spehro Pefhany Puntos 90994

Tu IRF540 no es realmente lo más adecuado para un accionamiento de 5V. También el LM35 debería tener una resistencia en serie como se muestra en la hoja de datos (tal vez lo hace). Ninguna de esas cosas está causando su problema.

Probablemente esté relacionado con el diseño. Una posible solución es, cuando sustituyas el IRF540 por un MOSFET de nivel lógico, ralentizar la conmutación significativamente añadiendo alguna resistencia en serie como 10K o 20K (y aumentar la resistencia pull-down a 100K o 200K). Una conmutación más lenta significa que habrá menos picos de inductancia y menos EMI para causar problemas.

0voto

ozmank Puntos 127

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

El driver de control de calor es el gran problema de EMI que interfiere con la caída de tensión conducida en V+ o el aumento en Gnd por su enrutamiento y diseño. Utilice rutas directas a la fuente de alimentación no compartidas por su Arduino y el ventilador y, a ser posible, pares trenzados en caso de oscilaciones.

Tal vez ya se mencionó bt su conductor del ventilador se quemaría Q2 Vbe , por lo que lo redirigido. No veo una buena razón para R7, así que, lo he puenteado. El PID debe ser pulsado para que no se caliente y no necesitas nada más que un control proporcional. No tiene que ser rápido como 20kHz. Podría ser 1 Hz pero si tratas de regular linealmente 95W puedes esperar que en algún punto medio el FET descargue 40W, así que no es bueno. Así que aprende a usar PID o simplemente P usando PWM.

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X