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):
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:
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:
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:
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:
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:
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)