Comment Construire Un Contrôleur de Ventilateur PWM à Vitesse Variable
Dans cet article, je vais vous montrer comment construire un contrôleur de ventilateur pwm (DC) à l’aide d’un bref programme C, et quelques pièces dont le kit de développement de microcontrôleur Launchpad RM57L. Il permet aux utilisateurs de varier efficacement la vitesse des ventilateurs PWM pour réduire les niveaux de bruit et la consommation d’énergie. Ce projet surveille automatiquement la température de l’objet auquel le capteur de température est connecté (dans ce cas, un dissipateur de chaleur CPU utilisé pour refroidir un petit module thermoélectrique) et contrôle la vitesse du ventilateur en conséquence pour minimiser le bruit, ainsi que la consommation d’énergie. Vous trouverez ci-dessous une démonstration du contrôleur de ventilateur utilisé sur un refroidisseur de processeur de bureau.
Vidéo: Kompulsa.
Avant d’apprendre à construire un contrôleur de vitesse de ventilateur, il est utile d’apprendre comment fonctionnent les différentes méthodes de contrôle de vitesse. Je vais vous expliquer deux technologies clés: les contrôleurs de vitesse résistifs et les contrôleurs de ventilateur PWM.
Régulateurs de vitesse résistifs
Les régulateurs de vitesse résistifs contrôlent la vitesse d’un moteur de ventilateur donné en résistant au flux de courant de la source d’alimentation vers le moteur. Cela peut être fait en utilisant une combinaison d’un potentiomètre et d’un transistor, ou d’un autre circuit de varistance. La première technologie est extrêmement facile à construire, mais fait brûler au transistor une bonne partie du courant qui le traverse. Par conséquent, il est inefficace. PWM d’autre part, active et éteint le courant complet plusieurs fois par seconde. Le transistor gaspillera encore de l’électricité, mais pas autant.
Contrôleurs de vitesse PWM
La modulation de largeur d’impulsion est une méthode de commande de courant beaucoup plus complexe, supérieure et de plus en plus courante qui facilite le contrôle des vitesses du moteur, de la luminosité de la lampe, entre autres d’une manière économe en énergie. Les principales raisons des contrôleurs de moteur PWM incluent l’amélioration de l’efficacité des appareils, ainsi que la réduction des niveaux de bruit en les actionnant à basse vitesse chaque fois que cela est possible.
J’ai utilisé le kit de développement MCU TI Launchpad RM57L pour construire ce contrôleur de ventilateur (merci à TI de l’avoir envoyé), mais ce code peut être facilement modifié pour fonctionner sur le Launchpad TMS57012 moins cher, ou les Launchpad TMS57004.
Lors de l’apprentissage de la construction d’un contrôleur de ventilateur pwm, il est utile de comprendre ou d’apprendre à exécuter les différentes technologies / méthodes ainsi que leurs mérites et leurs inconvénients. De cette façon, vous saurez exactement lequel utiliser et quand.
Cet article suppose que vous avez une certaine expérience en génie électrique et que vous savez connecter en toute sécurité le transistor, le capteur et tous les autres équipements mentionnés. Essayez ce projet à vos risques et périls.
Table Des matières
- Liste Des pièces.
- Préparation de l’environnement de développement.
- Commençons à Coder !
Ce diaporama nécessite JavaScript.
Liste des pièces
Tous les prix sont en USD.
- Transistor 2n6284G NPN Darlington BJT. BJT signifie transistor à jonction bipolaire (pratique car il a un gain de courant continu de 750).
- Trois résistances 12 kOhm 1/2 watt.
- Boîte de jonction avec bornes à vis ou connecteur de barre.
- Kit de développement du bloc de lancement RM57L MCU (RM57L843) de Texas Instruments.
- Thermistance NTC 10 kOhm avec une valeur B de 3435. « NTC » signifie que sa résistance diminue chaque fois que sa température augmente.
- dissipateur thermique de 40 mm x 40 mm (ou plus, si vous ne trouvez pas cette taille) pour le transistor.
- Fils de connexion / fiches pour connecter les broches du kit de développement au transistor et pour connecter le transistor à la source d’alimentation (sauf si vous utilisez une platine de prototypage). Ceux-ci sont généralement compris entre 3 et 6 $.
- Source d’alimentation 12 ou 5 volts.
- ventilateur CPU de 12 volts, ou un ventilateur pour ordinateur portable de 5 volts (ce projet est destiné aux ventilateurs à trois ou quatre fils prenant en charge PWM). Ceux-ci sont généralement compris entre 10 $ et 20 range.
- Refroidisseur de processeur (avec dissipateur de chaleur et ventilateur inclus) ou toute autre combinaison d’un ventilateur et d’un objet chaud pouvant être refroidi avec celui-ci. Cela vous permet de regarder le contrôleur de ventilateur se refroidir automatiquement et d’éteindre le ventilateur. J’ai utilisé un refroidisseur de processeur avec un ventilateur intégré. C’est le test ultime !
Je recommanderais de fixer un dissipateur de chaleur au transistor si vous souhaitez alimenter de grands ventilateurs (plus grands que les minuscules ventilateurs de 80 mm généralement utilisés pour le refroidissement du processeur de bureau). Il générera une quantité importante de chaleur.
Préparez votre Environnement de développement
Le kit de développement RM57L843 est le cœur de ce contrôleur de ventilateur PWM (le fonctionnement de ces microcontrôleurs n’est pas très différent d’un Arduino, alors ne vous laissez pas intimider!). Notre première étape pour construire ce contrôleur de ventilateur pwm consiste à configurer notre environnement de développement que nous utiliserons pour programmer / flasher le MCU.
Branchez le kit de développement Launchpad RM57L sur le port USB de votre ordinateur à l’aide du câble fourni, puis créez un compte Texas Instruments pour pouvoir télécharger l’E CCS. Nous utiliserons également HALCoGen pour cet exercice. HALCoGen est un générateur de code HAL qui vous permet de configurer facilement votre MCU à l’aide d’une interface graphique. Dans ce cas, nous l’utiliserons pour configurer le convertisseur analogique-numérique (le MibADC) et le module HET timer.
Téléchargez HALCoGen et CCS (assurez-vous d’être connecté à votre compte TI pour CCS), puis suivez les instructions ci-dessous pour créer votre projet HALCoGen.
Tout d’abord, créez un nouveau projet dans HALCoGen, sélectionnez le kit de développement ‘RM57Lx’, puis vous verrez une liste de ses variantes à droite de l’écran. Dans ce cas, il n’y a qu’une seule variante: le RM57L843ZWT. Sélectionnez cela et nommez votre projet « PWM » comme indiqué ci-dessous. Entrez le chemin du projet dans le champ « Emplacement », notez-le et cliquez sur OK. Nous stockerons notre projet CCS dans le même répertoire. Votre projet PWM doit se trouver dans un dossier nommé PWM, sous votre répertoire de travail, que nous nommerons RM57L.
Crée un nouveau projet appelé « PWM » dans HALCoGen. C’est là que vous configurez les modules ADC et HET.
Afin de construire un contrôleur de ventilateur PWM, vous devez configurer des minuteries qui feront osciller une petite tension électrique, et régler leur fréquence.
Ensuite, activez les pilotes ADC1 et HET1 en sélectionnant l’onglet ‘Driver Enable’ et en cochant les cases comme indiqué ci-dessous. Le convertisseur analogique-numérique (ADC) sera utilisé pour convertir la lecture du capteur de température analogique en une valeur numérique que nous pouvons utiliser pour déterminer la température, permettant au contrôleur de ventilateur d’ajuster la vitesse du ventilateur en conséquence. La minuterie haut de gamme (HET) sera utilisée pour générer notre signal PWM, qui sera utilisé pour contrôler un simple transistor BJT.
Je recommande de décocher le reste des pilotes pour économiser les ressources système (par exemple: RAM et mémoire flash).
Activer les pilotes HET1 et ADC1 dans HALCoGen.
Il est maintenant temps de configurer le convertisseur analogique-numérique de notre contrôleur de ventilateur pwm (qui est intégré au MCU Launchpad RM57L). Allez dans l’onglet ADC1 et définissez la taille FiFo sur 1, car c’est tout ce dont nous aurons besoin pour ce projet. Sélectionnez également Activer la broche 7, car c’est à cela que nous connecterons le capteur de température. La broche 7 est marquée ‘AI1_7’ sur la face inférieure de votre kit de développement Launchpad.
Comment Fonctionne la conversion analogique-numérique
Passez à l’onglet HET1 où vous configurerez la minuterie PWM de notre contrôleur de ventilateur (intégrée au kit de développement RM57L) et la broche HET qui contrôle le transistor alimentant le ventilateur et procédez comme suit comme indiqué dans la capture d’écran suivante.
Sélectionnez l’onglet Pwm 0-7, définissez le champ de service pour PWM 0 à 0. Cela définit le rapport cyclique du signal PWM à 0, définissant ainsi le rapport cyclique du ventilateur que vous contrôlez à 0. Un rapport cyclique de 0 signifie simplement que le ventilateur sera éteint. Une autre façon de le dire est: Le pourcentage du temps pendant lequel l’alimentation sera allumée est 0.
Nous allons commencer par un rapport cyclique de 0 dans ce projet car nous allons ajuster par programme le rapport cyclique (et donc la vitesse du ventilateur) de manière à ce qu’il suive la température du dissipateur de chaleur auquel le capteur de température est attaché. Lorsque le rapport cyclique est réglé sur 0, le contrôleur de ventilateur éteint le ventilateur (0 correspond à 0%). Ensuite, cochez la paire de cases à cocher « Activer » juste à gauche du champ « Pin ». Cela active le signal PWM. Entrez 2 dans le champ ‘Pin’, qui est HET port 1, Pin 2, marqué ‘HET1_2’ sur la face inférieure de votre Launchpad. Enfin: entrez 10 000 (sans la virgule) dans le champ Période.
L’unité utilisée dans ce champ est la microseconde. Une microseconde est un millionième de seconde. Le réglage de ce champ sur 10 000 fera en sorte que le minuteur HET cycle la mise sous tension et hors tension toutes les 10 000 microsecondes (toutes les 0.01 secondes). En raison de cette commutation rapide, vous ne remarquerez pas que l’alimentation est allumée et éteinte, ce qui permet un fonctionnement continu et en douceur du ventilateur.
Activez le temporisateur ‘PWM 0’.
Pour terminer la configuration de HALCoGen, sélectionnez l’onglet Pin 0-7. C’est là que vous configurerez la broche RM57L à laquelle la base du transistor sera connectée (via la résistance de 12 kOhm, bien sûr). Cochez la case DIR dans la section ‘Bit 2’ comme indiqué ci-dessous pour définir le bit 2 dans le sens de sortie. Cela nous permet d’allumer le ventilateur. Une broche peut être appelée bit, donc « Bit 2 » signifie dans ce cas HET Pin 2.
Qu’Est-Ce Qu’Une Résistance ?
La valeur de sortie (marquée DOUT dans la capture d’écran ci-dessous) est l’état de la broche, qui peut être on(1) ou off(0). Assurez-vous qu’il est réglé sur 0, de sorte qu’il est désactivé lorsque le MCU démarre initialement.
Règle HET1, broche 2 dans le sens de sortie.
Sélectionnez Fichier > Enregistrer le projet, puis Fichier > Générer du code (ou appuyez sur F5). Regardez le volet « Sortie » en bas jusqu’à ce qu’il indique que la génération de code est terminée. Maintenant, vous pouvez passer à la configuration CCS, et lorsque vous avez terminé, vous pouvez enfin rassembler les pièces et construire le contrôleur de ventilateur.
Codons!
Lancez CCS et sélectionnez /créez un répertoire nommé RM57L comme espace de travail, comme indiqué ci-dessous. Créez un nouveau projet dans Code Composer Studio appelé PWM, qui sera enregistré à la racine du répertoire PWM où vous verrez le PWM.fichier hcg. MLLE.hcg est votre fichier de projet HALCoGen. Comme je l’ai dit plus haut, les fichiers de projets CCS et HALCoGen doivent être dans le même répertoire pour cet exercice.
Branchez votre kit de développement Launchpad RM57L à l’aide du câble USB fourni.
À votre droite, sélectionnez ‘RM57L8x’ dans la liste déroulante, car c’est ce que nous utiliserons. Ensuite, sélectionnez la sonde de débogage USB XDS110 dans la liste déroulante située en dessous. Enfin, sélectionnez « Projet vide » et cliquez sur Terminer.
Faites un clic droit sur le projet PWM dans le volet Explorateur de projets (il se trouve sur le côté gauche de l’écran), puis ajoutez le dossier HALCoGen / includes de votre répertoire de projet PWM à votre projet CCS en cliquant sur le bouton encerclé ci-dessous. Ces RM57L comprennent des fichiers constitués de bibliothèques et de pilotes qui facilitent l’écriture de programmes pour le MCU.
Accédez au HL_sys_main.fichier c dans le volet Explorateur de projet à gauche sous /PWM/source/. Dans ce fichier, collez l’exemple de code RM57L ci-dessous.
Le Code source (Exemple de code Hercules RM57L)
L’exemple de code RM57L suivant peut être téléchargé sur votre Launchpad via USB à l’aide de Code Composer Studio. Voici à quoi devrait ressembler votre fichier source:
Les lectures de température sont 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 */}
Vous êtes invités à redistribuer ce code RM57L, à condition d’inclure un lien vers cette page.
Placez toujours votre code entre les commentaires /*USER CODE BEGIN */ et /*USER CODE END */, afin que HALCoGen ne le supprime pas après avoir apporté des modifications à votre projet.
Rappelez-vous toujours que la température du dissipateur de chaleur sera inférieure à la température du processeur ou de l’appareil qu’il refroidit. Cela signifie que si le dissipateur de chaleur est à 70 ° C, le processeur est encore plus chaud que cela. Vous pouvez également concevoir ce contrôleur de ventilateur pwm pour mesurer directement la température du processeur et y placer la thermistance. Ceci est plus précis, car la température du dissipateur de chaleur est lentement en retard sur la température du processeur.
Chacune des valeurs de CAN sont des représentations numériques des lectures de température du contrôleur de ventilateur, et chaque plage de valeurs représente une plage de température qui nécessite une certaine quantité de flux d’air pour le refroidir. Dans le cas de cette thermistance, une valeur CAN plus faible correspond à une température plus élevée, et inversement. Le code a maintenant été mis à jour pour convertir les valeurs du convertisseur analogique-numérique en lectures de température en degrés Celsius.
Exemple de scénario: Une plage de valeurs de CAN de 310 à 320 peut être suffisamment élevée pour justifier un démarrage du ventilateur jusqu’à 80%, car cela indique que notre sujet de test (le dissipateur de chaleur, et donc le processeur) devient chaud. Cependant, si le dissipateur / ventilateur est suffisamment grand, cette vitesse ne devrait pas être nécessaire la plupart du temps. C’est un cas dans lequel vous voudrez peut-être capitaliser sur un dissipateur de chaleur plus grand.
D’autre part, une plage de valeurs CAN de 340 à 350 peut indiquer que le dissipateur de chaleur est juste un peu chaud et ne nécessite que le ventilateur pour fonctionner à un réglage très bas (20%), il sera donc beaucoup plus silencieux à ce réglage. J’ai défini le rapport cyclique en fonction des plages de valeurs ADC, au lieu des valeurs ADC exactes pour éviter les fluctuations de vitesse fréquentes. Je recommande fortement la mise en œuvre d’une routine UART qui transmet les lectures du convertisseur analogique-numérique à votre ordinateur afin que vous puissiez voir tout ce qui se passe en temps réel. Cela facilite le débogage et est également informatif.
Les applications utiles pour PWM incluent, mais ne sont pas limitées à:
- Contrôle de la vitesse du climatiseur et du compresseur du réfrigérateur pour une efficacité améliorée et des niveaux de bruit réduits.
- Gradation de la lampe à LED.
- Contrôle de vitesse HEV / véhicule électrique.
- Contrôleurs de ventilateur de ventilation.
- Contrôleurs de ventilateur de radiateur, qui peuvent économiser de l’électricité, du gaz et réduire la pollution sonore causée par les voitures sur les routes. La réduction du bruit pourrait même aider les gens à mieux dormir la nuit dans certains cas.
Veuillez garder à l’esprit que toutes les applications ci-dessus nécessitent un ventilateur prenant en charge PWM. Malheureusement, tous les fans ne sont pas conçus pour cela.
Configuration matérielle
Comme je l’ai dit au début, cet article a été écrit avec l’hypothèse que vous savez comment utiliser un transistor et comment connecter le capteur au Launchpad en toute sécurité.
Connectez la thermistance au port ADC 1 pin 7 et le transistor au port HET 1 pin 2 de votre kit de développement RM57L, en utilisant les trois résistances de la liste des pièces en conséquence. Si vous utilisez un refroidisseur de processeur (dissipateur thermique + ventilateur intégré), insérez le capteur de température dans le dissipateur de chaleur (assurez-vous de ne laisser aucune des bornes du capteur entrer en contact avec le dissipateur de chaleur, qui peut être électriquement conducteur). Connectez le ventilateur du dissipateur de chaleur au contrôleur. Les tutoriels liés ci-dessous vous aideront à apprendre à configurer le ventilateur, la broche ADC et le transistor.
Sparkfun explique la conversion analogique-numérique, et un exemple de base de connexion de capteur ADC ici (ce que j’ai utilisé pour ce projet, sauf que mon capteur a deux fils, plutôt que les trois que leur potentiomètre fait). Ils expliquent également les transistors ici.
Une fois que vous avez maîtrisé cela, vous pouvez faire fonctionner votre contrôleur de ventilateur en un rien de temps!
Capteur
Le CAN du kit de développement MCU RM57L convertit les fluctuations de tension analogiques causées par la thermistance (ou le capteur de température que vous utilisez) en valeurs numériques stockées dans la variable de valeur ci-dessus. Étant donné que les valeurs CAN dépendent du capteur que vous utilisez, vous devez utiliser les spécifications de la documentation de votre capteur pour convertir les lectures de température en degrés.
Le capteur utilisé pour ce projet était une thermistance uxcell 3435B de 10 kOhm. Une thermistance est une résistance conçue pour faire varier sa résistance avec la température (beaucoup plus qu’une résistance ordinaire). Si une thermistance est évaluée à 10 kOhm, cela signifie que sa résistance est de 10 kOhm à 25 ° C.
NB: La résistance d’une thermistance donnée ne variera pas linéairement avec la température, c’est pourquoi les fabricants de thermistance fourniront un tableau température / résistance, et (parfois) les valeurs A, B et C à utiliser dans l’équation de Steinhart-Hart, qui résout ce problème.
Code testé avec succès avec les versions CCS :