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):
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:
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:
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:
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:
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:
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)
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.
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.
Tony Estuardo EE75
wesley lee
comprador
comprador
Tony Estuardo EE75
comprador
Tony Estuardo EE75
usuario253751
comprador
comprador
usuario253751
usuario253751
comprador