Cómo construir un Controlador de Ventilador PWM de Velocidad Variable
En este artículo, le mostraré cómo construir un controlador de ventilador PWM (DC) utilizando un breve programa en C y algunas partes, incluido el kit de desarrollo de microcontroladores Launchpad RM57L. Permite a los usuarios variar de manera eficiente la velocidad de los ventiladores PWM para reducir los niveles de ruido y el consumo de energía. Este proyecto monitoriza automáticamente la temperatura del objeto al que está conectado el sensor de temperatura (en este caso, un disipador de calor de la CPU utilizado para enfriar un pequeño módulo termoeléctrico) y controla la velocidad del ventilador en consecuencia para minimizar la salida de ruido, así como el consumo de energía. A continuación se muestra una demostración del controlador de ventilador en uso en un enfriador de CPU de escritorio.
Video: Kompulsa.
Antes de aprender a construir un controlador de velocidad del ventilador, ayuda a aprender cómo funcionan los diversos métodos de control de velocidad. Explicaré dos tecnologías clave: Controladores de velocidad resistivos y controladores de ventilador PWM.
Controladores de velocidad resistivos
Los controladores de velocidad resistivos controlan la velocidad de un motor de ventilador dado resistiendo el flujo de corriente de la fuente de alimentación al motor. Esto se puede hacer usando una combinación de un potenciómetro y un transistor, u otro circuito de varistores. La tecnología anterior es extremadamente fácil de construir, pero hace que el transistor queme bastante de la corriente que pasa a través de él. Por lo tanto es ineficiente. PWM, por otro lado, activa y desactiva la corriente completa muchas veces por segundo. El transistor seguirá desperdiciando algo de electricidad, pero no tanto.
Controladores de velocidad PWM
La modulación de ancho de pulso es un método de control de corriente mucho más complejo, superior y cada vez más común que facilita el control de las velocidades del motor, el brillo de la lámpara, entre otras cosas de una manera energéticamente eficiente. Las razones clave para los controladores de motor PWM incluyen mejorar la eficiencia de los aparatos, así como reducir los niveles de ruido al operarlos a bajas velocidades siempre que sea posible.
Utilicé el kit de desarrollo de TI Launchpad RM57L MCU para construir este controlador de ventilador (gracias a TI por enviarlo), pero este código también se puede modificar fácilmente para ejecutarse en el Launchpad TMS57012, más barato, o en los Launchpad TMS57004.
Al aprender a construir un controlador de ventilador pwm, ayuda a comprender o aprender a ejecutar las diversas tecnologías / métodos, así como sus méritos y desventajas. De esta manera, sabrás exactamente qué usar y cuándo.
Este artículo asume que tiene cierta experiencia en ingeniería eléctrica y sabe cómo conectar de forma segura el transistor, el sensor y todos los demás equipos mencionados. Prueba este proyecto bajo tu propio riesgo.
Índice
- Lista De piezas.
- Preparación del Entorno de Desarrollo.
- ¡Empecemos a Codificar!
Esta presentación de diapositivas requiere JavaScript.
Lista de piezas
Todos los precios están en USD.
- 2n6284g NPN Transistor Darlington BJT. BJT significa transistor de unión bipolar (conveniente porque tiene una ganancia de corriente continua de 750).
- Tres resistencias de 1/2 vatio de 12 kohmios.
- Caja de conexiones con terminales de tornillo o conector de barra.
- Kit de desarrollo de la plataforma de lanzamiento RM57L MCU (RM57L843) de Texas Instruments.
- Termistor NTC de 10 kOhm con un valor B de 3435. ‘NTC’ significa que su resistencia disminuye cuando su temperatura aumenta.
- disipador de calor de 40 mm x 40 mm (o más grande, si no puede encontrar ese tamaño) para el transistor.
- Cables de puente / clavijas para conectar los pines del kit de desarrollo al transistor y para conectar el transistor a la fuente de alimentación (a menos que esté utilizando una tabla de cortar el pan). Estos generalmente están en el rango de 3 3-6.
- fuente de alimentación de 12 o 5 voltios.
- ventilador de CPU de 12 voltios, o un ventilador de computadora portátil de 5 voltios (este proyecto está diseñado para ventiladores de tres o cuatro cables que admiten PWM). Estos suelen estar en el rango de 1 10 a 2 20.
- Enfriador de CPU (con disipador de calor y ventilador incluidos) o cualquier otra combinación de ventilador y objeto caliente que se pueda enfriar con él. Esto le permite ver cómo el controlador del ventilador se enfría automáticamente y apaga el ventilador. Usé un enfriador de CPU con un ventilador incorporado. Es la prueba definitiva!
Recomendaría conectar un disipador de calor al transistor si va a alimentar ventiladores grandes (más grandes que los pequeños ventiladores de 80 mm que se usan normalmente para la refrigeración de la CPU de escritorio). Generará una cantidad significativa de calor.
Prepare su entorno de desarrollo
El kit de desarrollo RM57L843 es el corazón de este controlador de ventilador PWM (la forma en que funcionan estos microcontroladores no es muy diferente de un Arduino, ¡así que no se deje intimidar!). Nuestro primer paso para construir este controlador de ventilador pwm es configurar nuestro entorno de desarrollo que usaremos para programar/flashear la MCU.
Conecte el kit de desarrollo RM57L de Launchpad al puerto USB de su computadora con el cable proporcionado y, a continuación, cree una cuenta de Texas Instruments para que pueda descargar el IDE de CCS. También usaremos HALCoGen para este ejercicio. HALCoGen es un generador de código HAL que le permite configurar fácilmente su MCU utilizando una interfaz gráfica de usuario. En este caso, lo utilizaremos para configurar el convertidor analógico a digital (el MibADC) y el módulo de temporizador HET.
Descargue HALCoGen y CCS (asegúrese de haber iniciado sesión en su cuenta de TI para CCS) y, a continuación, siga las instrucciones a continuación para crear su proyecto HALCoGen.
Primero, cree un nuevo proyecto en HALCoGen, seleccione el kit de desarrollo’ RM57Lx ‘ y luego verá una lista de sus variantes a la derecha de la pantalla. En este caso, solo hay una variante: el RM57L843ZWT. Seleccione eso y nombre su proyecto ‘PWM’ como se muestra a continuación. Introduzca la ruta del proyecto en el campo «Ubicación», anote la ruta y haga clic en Aceptar. Almacenaremos nuestro proyecto CCS en el mismo directorio. Su proyecto PWM debe estar ubicado en una carpeta llamada PWM, bajo su directorio de trabajo, al que llamaremos RM57L.
Crea un nuevo proyecto llamado’ PWM ‘ en HALCoGen. Aquí es donde se configuran los módulos ADC y HET.
Para construir un controlador de ventilador PWM, debe configurar temporizadores que oscilen un pequeño encendido y apagado eléctrico y establecer su frecuencia.
A continuación, habilite los controladores ADC1 y HET1 seleccionando la pestaña ‘Driver Enable’ y marcando las casillas como se muestra a continuación. El convertidor analógico a digital (ADC) se utilizará para convertir la lectura del sensor de temperatura analógico a un valor digital que podamos usar para determinar la temperatura, permitiendo que el controlador del ventilador ajuste la velocidad del ventilador en consecuencia. El temporizador de gama alta (HET) se utilizará para generar nuestra señal PWM, que se utilizará para controlar un transistor BJT simple.
Recomiendo desmarcar el resto de los controladores para conservar los recursos del sistema (por ejemplo: RAM y memoria flash).
Habilitar los controladores HET1 y ADC1 en HALCoGen.
Ahora es el momento de configurar el convertidor analógico a digital de nuestro controlador de ventilador pwm (que está integrado en la UCM RM57L de Launchpad). Ve a la pestaña ADC1 y establece el tamaño FiFo en 1, ya que eso es todo lo que necesitaremos para este proyecto. También seleccione Activar Pin 7, ya que es a eso a lo que conectaremos el sensor de temperatura. El pin 7 está marcado como ‘AI1_7’ en la parte inferior del kit de desarrollo de la plataforma de lanzamiento.
Cómo funciona la conversión analógica a Digital
Vaya a la pestaña HET1 donde configurará el temporizador PWM de nuestro controlador de ventilador (integrado en el kit de desarrollo RM57L) y el pin HET que controla el transistor que alimenta el ventilador y haga lo siguiente como se muestra en la siguiente captura de pantalla.
Seleccione la pestaña Pwm 0-7, establezca el campo de trabajo para PWM 0 a 0. Eso establece el ciclo de trabajo de la señal PWM en 0, por lo tanto, establece el ciclo de trabajo del ventilador que está controlando en 0. Un ciclo de trabajo de 0 simplemente significa que el ventilador estará apagado. Otra forma de decirlo es: El porcentaje de tiempo que el poder estará en es 0.
Comenzaremos con un ciclo de trabajo de 0 en este proyecto porque vamos a ajustar programáticamente el ciclo de trabajo (y, por lo tanto, la velocidad del ventilador) de tal manera que siga la temperatura del disipador de calor al que está conectado el sensor de temperatura. Cuando el ciclo de trabajo se establece en 0, el controlador del ventilador apagará el ventilador (0 corresponde al 0%). A continuación, marque el par de casillas de verificación ‘Habilitar’ justo a la izquierda del campo ‘Pin’. Eso habilita la señal PWM. Ingrese 2 en el campo ‘Pin’, que es el puerto HET 1, Pin 2, marcado’ HET1_2 ‘ en la parte inferior de su plataforma de lanzamiento. Finalmente: ingrese 10,000 (sin la coma) en el campo Punto.
La unidad utilizada en este campo es el microsegundo. Un microsegundo es una millonésima de segundo. Si se establece este campo en 10.000, el temporizador HET se encenderá y apagará cada 10.000 microsegundos (cada 0).01 segundos). Debido a esta conmutación rápida, no notará que la alimentación se está encendiendo y apagando, lo que resulta en un funcionamiento suave y continuo del ventilador.
Habilite el temporizador ‘PWM 0’.
Para finalizar la configuración de HALCoGen, seleccione la pestaña Pin 0-7. Aquí es donde configurará el pin RM57L al que se conectará la base del transistor (a través de la resistencia de 12 kOhm, por supuesto). Marque la casilla de verificación DIR en la sección «Bit 2» como se muestra a continuación para establecer el bit 2 en la dirección de salida. Esto nos permite encender el ventilador. Un pin puede ser referido como un bit, por lo que’ Bit 2 ‘ en este caso significa HET Pin 2.
¿Qué Es Una Resistencia?
El valor de salida (marcado DOUT en la imagen siguiente) es el estado del pin, que puede estar activado (1) o desactivado (0). Asegúrese de que esté configurado en 0, de modo que esté desactivado cuando se inicie la MCU inicialmente.
Ajuste HET1, Pin 2 a la dirección de salida.
Seleccione Archivo > Guardar proyecto y, a continuación, Archivo > Generar código (o pulse F5). Observe el panel ‘Salida’ en la parte inferior hasta que diga que la generación de código se ha completado. Ahora puede pasar a la configuración de CCS, y cuando haya terminado, finalmente puede reunir las piezas y construir el controlador del ventilador.
¡Codifiquemos!
Inicie CC y seleccione / cree un directorio llamado RM57L como su espacio de trabajo, como se muestra a continuación. Cree un nuevo proyecto en Code Composer Studio llamado PWM, que se guardará en la raíz del directorio PWM donde verá el PWM.archivo hcg. PWM.hcg es tu archivo de proyecto HALCoGen. Como dije anteriormente, los archivos de proyectos CCS y HALCoGen deben estar en el mismo directorio para este ejercicio.
Conecte el kit de desarrollo de Launchpad RM57L con el cable USB suministrado.
A su derecha, seleccione ‘RM57L8x’ en el cuadro desplegable, ya que eso es lo que usaremos. A continuación, seleccione la sonda de depuración USB XDS110 en el cuadro desplegable que se encuentra debajo. Finalmente, seleccione ‘Proyecto vacío’ y haga clic en Finalizar.
Haga clic con el botón derecho en el proyecto PWM en el panel Explorador de proyectos (está en el lado izquierdo de la pantalla), luego agregue la carpeta HALCoGen /includes de su directorio de proyectos PWM a su proyecto CCS haciendo clic en el botón que aparece en el círculo a continuación. Estos archivos RM57L incluyen bibliotecas y controladores que facilitan mucho la escritura de programas para la MCU.
Vaya a HL_sys_main.archivo c en el panel Explorador de proyectos a la izquierda en / PWM / source/. En ese archivo, pegue el ejemplo de código RM57L a continuación.
El Código fuente (Ejemplo de código Hercules RM57L)
El siguiente código de ejemplo RM57L se puede cargar en su Launchpad a través de USB utilizando Code Composer Studio. Así es como debería verse su archivo de origen:
Las lecturas de temperatura están en °C.
HL_sys_main.c
/* USER CODE BEGIN (1) */#include "HL_het.h" //The HET library we'll use for PWM.#include "HL_adc.h" //The ADC library we'll use to read the sensor./* USER CODE END */void main(void){/* USER CODE BEGIN (3) */adcData_t adc_data; //ADC Data Structure.adcData_t *adc_data_ptr = &adc_data; //ADC Data Pointer.unsigned int value; //The ADC value is stored in this variable.float resistance; //The resistance of the thermistor at the current temperature reading;float degperohm = 0.003267974; //Degrees per ohm of resistance.unsigned int temperature; //The temperature in degrees Celsius.hetInit(); //Initialize the HET module.adcInit(); //Initialize the ADC module.while(1) //ADC conversion loop.{ adcStartConversion(adcREG1, 1U); //Start conversion on ADC 1. while(!adcIsConversionComplete(adcREG1, 1U)); //Keep looping until the conversion is complete. adcGetData(adcREG1, 1U, adc_data_ptr); //Store conversion into ADC pointer value = (unsigned int)adc_data_ptr->value; resistance = 1000 * (4096 / value); temperature = degperohm * resistance;//Adjust the fan speed based on the temperature readings obtained above. pwmStart(hetRAM1, pwm0); if (temperature < 40) { pwmSetDuty(hetRAM1, pwm0, 0U); //0% duty cycle. Fan is switched off. } else if (temperature >= 40 && temperature <= 42) { //If the temp is between 40°C and 42°C, set the fan to 20%. pwmSetDuty(hetRAM1, pwm0, 20U); //20% duty cycle. Fan Speed 1. } else if (temperature >= 42 && temperature <= 44) { pwmSetDuty(hetRAM1, pwm0, 30U); //30% duty cycle. Fan Speed 2. } else if (temperature >= 44 && temperature <= 46) { pwmSetDuty(hetRAM1, pwm0, 40U); //40% duty cycle. Fan Speed 3. } else if (temperature >= 46 && temperature <= 48) { pwmSetDuty(hetRAM1, pwm0, 50U); //50% duty cycle. Fan Speed 4. } else if (temperature >= 48 && temperature <= 50) { pwmSetDuty(hetRAM1, pwm0, 60U); //60% duty cycle. Fan Speed 5. } else if (temperature >= 50 && temperature <= 52) { pwmSetDuty(hetRAM1, pwm0, 70U); //70% duty cycle. Fan Speed 6. } else if (temperature >= 52 && temperature <= 54) { pwmSetDuty(hetRAM1, pwm0, 80U); //80% duty cycle. Fan Speed 7. } else if (temperature >= 54 && temperature <= 56) { pwmSetDuty(hetRAM1, pwm0, 90U); //90% duty cycle. Fan Speed 8. } else if (temperature >= 56 && temperature <= 58) { pwmSetDuty(hetRAM1, pwm0, 100U); //100% duty cycle. Fan Speed 9 (full speed). } else if (temperature > 65) { //65 //Code to display a temperature warning. 65 °C is a bit hot, warn the user. } else if (temperature > 70) { //Code to shut the device down (70 °C just won't do, shut it off). }} //End of ADC conversion loop./* USER CODE END */}
Le invitamos a redistribuir este código RM57L, siempre que incluya un enlace a esta página.
Siempre coloque su código entre los comentarios / * USER CODE BEGIN * / y / * USER CODE END*/, para que HALCoGen no lo elimine después de realizar cambios en su proyecto.
Recuerde siempre que la temperatura del disipador de calor será inferior a la temperatura de la CPU o del dispositivo que esté enfriando. Esto significa que si el disipador de calor está a 70 ° C, entonces la CPU está aún más caliente que eso. También puede diseñar este controlador de ventilador pwm para medir directamente la temperatura de la CPU y colocar el termistor en él. Esto es más preciso, ya que la temperatura del disipador de calor se queda lentamente por detrás de la temperatura de la CPU.
Cada uno de los valores de ADC son representaciones digitales de las lecturas de temperatura del controlador del ventilador, y cada rango de valores representa un rango de temperatura que requiere una cierta cantidad de flujo de aire para enfriarlo. En el caso de este termistor, un valor de ADC más bajo corresponde a una temperatura más alta, y viceversa. El código se ha actualizado para convertir los valores del convertidor analógico a digital en lecturas de temperatura en grados Celsius.
Escenario de ejemplo: Un rango de valor de ADC de 310 a 320 puede ser lo suficientemente alto como para justificar el arranque del ventilador hasta el 80%, ya que indica que nuestro sujeto de prueba (el disipador de calor y, por lo tanto, la CPU) se está calentando. Sin embargo, si el disipador de calor/ventilador es lo suficientemente grande, esta velocidad no debería ser necesaria la mayor parte del tiempo. Este es un caso en el que es posible que desee capitalizar un disipador de calor más grande.
Por otro lado, un rango de valores ADC de 340 a 350 puede indicar que el disipador de calor está un poco caliente, y solo requiere que el ventilador funcione a un ajuste muy bajo (20%), por lo que será mucho más silencioso en este ajuste. Establezco el ciclo de trabajo en función de los rangos de valores de ADC, en lugar de los valores exactos de ADC para evitar fluctuaciones frecuentes de velocidad. Recomiendo encarecidamente implementar una rutina UART que transmita las lecturas del convertidor analógico a digital a su computadora para que pueda ver todo lo que sucede en tiempo real. Facilita la depuración y también es informativo.
Las aplicaciones útiles para PWM incluyen, entre otras,:
- Control de velocidad del compresor del aire acondicionado y el refrigerador para mejorar la eficiencia y reducir los niveles de ruido.
- Atenuación de lámpara LED.
- HEV/control de velocidad del vehículo eléctrico.
- Controladores de ventiladores de ventilación.
- Controladores de ventilador de radiador, que pueden ahorrar electricidad, gas y reducir la contaminación acústica causada por los automóviles en las carreteras. La reducción de ruido podría incluso ayudar a las personas a dormir mejor por la noche en algunos casos.
Tenga en cuenta que todas las aplicaciones anteriores requieren un ventilador que admita PWM. Desafortunadamente, no todos los fans están hechos para esto.
Configuración de hardware
Como dije al principio, este artículo se escribió con la suposición de que sabe cómo usar un transistor y cómo conectar el sensor a la plataforma de lanzamiento de forma segura.
Conecte el termistor al puerto ADC 1 pin 7, y el transistor al puerto HET 1 pin 2 en su kit de desarrollo RM57L, utilizando las tres resistencias en la lista de piezas en consecuencia. Si está utilizando un enfriador de CPU (disipador de calor + combo de ventilador incorporado), inserte el sensor de temperatura en el disipador de calor (asegúrese de no permitir que ninguno de los terminales del sensor entre en contacto con el disipador de calor, que puede ser conductor de electricidad). Conecte el ventilador del disipador de calor al controlador. Los tutoriales vinculados a continuación le ayudarán a aprender a configurar el ventilador, el pin ADC y el transistor.
Sparkfun explica la conversión analógica a digital, y un ejemplo básico de una conexión de sensor ADC aquí (que es lo que usé para este proyecto, excepto que mi sensor tiene dos cables, en lugar de los tres que tiene su potenciómetro). También explican los transistores aquí.
Una vez que haya dominado eso, ¡puede tener su controlador de ventilador en funcionamiento en poco tiempo!
Sensor
El ADC del kit de desarrollo MCU RM57L convierte las fluctuaciones de voltaje analógicas causadas por el termistor (o el sensor de temperatura que esté utilizando) en valores digitales almacenados en la variable de valor anterior. Debido al hecho de que los valores de ADC dependen del sensor que esté utilizando, debe usar las especificaciones de la documentación de su sensor para convertir las lecturas de temperatura a grados.
El sensor utilizado para este proyecto fue un termistor uxcell 3435B 10 kOhm. Un termistor es una resistencia diseñada para variar su resistencia con la temperatura (mucho más que una resistencia ordinaria). Si un termistor está clasificado a 10 kOhm, eso significa que su resistencia es de 10 kOhm a 25 °C.
NB: La resistencia de un termistor dado no variará linealmente con la temperatura, por lo que los fabricantes de termistores proporcionarán una tabla de temperatura vs resistencia, y (a veces) los valores A, B y C para su uso en la ecuación de Steinhart-Hart, que aborda este problema.
Código probado con éxito con versiones CCS: