So erstellen Sie eine PWM-Lüftersteuerung mit variabler Geschwindigkeit
In diesem Artikel zeige ich Ihnen, wie Sie eine PWM-Lüftersteuerung (DC) mit einem kurzen C-Programm und einigen Teilen einschließlich des Launchpad RM57L-Mikrocontroller-Entwicklungskits erstellen. Es ermöglicht Benutzern, die Geschwindigkeit von PWM-Lüftern effizient zu variieren, um den Geräuschpegel und den Stromverbrauch zu reduzieren. Dieses Projekt überwacht automatisch die Temperatur des Objekts, an das der Temperatursensor angeschlossen ist (in diesem Fall ein CPU-Kühlkörper, der zur Kühlung eines kleinen thermoelektrischen Moduls verwendet wird), und steuert die Lüftergeschwindigkeit entsprechend, um die Geräuschentwicklung sowie den Stromverbrauch zu minimieren. Nachfolgend finden Sie eine Demo des Lüftercontrollers, der auf einem Desktop-CPU-Kühler verwendet wird.
Video: Ich liebe dich.
Bevor Sie lernen, wie man einen Lüfterdrehzahlregler baut, sollten Sie lernen, wie die verschiedenen Methoden zur Drehzahlregelung funktionieren. Ich werde zwei Schlüsseltechnologien erläutern: Resistive Drehzahlregler und PWM-Lüfterregler.
Resistive Drehzahlregler
Resistive Drehzahlregler steuern die Drehzahl eines bestimmten Lüftermotors, indem sie dem Stromfluss von der Stromquelle zum Motor widerstehen. Dies kann mit einer Kombination aus Potentiometer und Transistor oder einer anderen Varistorschaltung erfolgen. Die erstere Technologie ist extrem einfach zu bauen, bewirkt jedoch, dass der Transistor einen erheblichen Teil des durch ihn fließenden Stroms abbrennt. Daher ist es ineffizient. PWM auf der anderen Seite pulsiert der volle Strom viele Male pro Sekunde ein und aus. Der Transistor wird immer noch etwas Strom verschwenden, aber nicht so viel.
PWM-Drehzahlregler
Die Pulsweitenmodulation ist ein weitaus komplexeres, überlegenes und zunehmend verbreitetes Stromsteuerungsverfahren, das die Steuerung von Motordrehzahlen, Lampenhelligkeit usw. auf energieeffiziente Weise erleichtert. Zu den Hauptgründen für PWM-Motorsteuerungen gehören die Verbesserung der Effizienz von Geräten sowie die Reduzierung des Geräuschpegels durch den Betrieb bei niedrigen Drehzahlen, wann immer dies möglich ist.
Ich habe das TI Launchpad RM57L MCU Development Kit verwendet, um diese Lüftersteuerung zu konstruieren (danke an TI für das Senden), aber dieser Code kann leicht geändert werden, um auf dem billigeren Launchpad TMS57012 oder den Launchpad TMS57004 Launchpads zu laufen.
Wenn Sie lernen, wie man eine PWM-Lüftersteuerung konstruiert, ist es hilfreich, die verschiedenen Technologien / Methoden sowie deren Vor- und Nachteile zu verstehen oder zu lernen. Auf diese Weise wissen Sie genau, was Sie wann verwenden müssen.
In diesem Artikel wird davon ausgegangen, dass Sie über Erfahrung in der Elektrotechnik verfügen und wissen, wie Sie den Transistor, den Sensor und alle anderen genannten Geräte sicher anschließen. Probieren Sie dieses Projekt auf eigenes Risiko aus.
Inhaltsverzeichnis
- Teileliste.
- Vorbereitung der Entwicklungsumgebung.
- Fangen wir an zu programmieren!
Diese Slideshow benötigt JavaScript.
Teileliste
Alle Preise sind in USD.
- 2n6284G NPN Darlington BJT Transistor. BJT bedeutet bipolar junction transistor (bequem, weil es hat eine DC strom verstärkung von 750).
- Drei 12 kOhm 1/2 Watt Widerstände.
- Anschlussdose mit Schraubklemmen oder Stabverbinder.
- Texas Instruments Launchpad RM57L MCU (RM57L843) entwicklung kit.
- 10 kOhm NTC-Thermistor mit einem B-Wert von 3435. ‚NTC‘ bedeutet, dass der Widerstand abnimmt, wenn die Temperatur ansteigt.
- 40mm x 40mm (oder größer, wenn Sie diese Größe nicht finden können) Kühlkörper für den Transistor.
- Jumper drähte/pin stecker zu verbinden die entwicklung kit der pins zu die transistor, und zu verbinden die transistor an die stromquelle (es sei denn, sie sind mit einem breadboard). Diese liegen normalerweise im Bereich von 3 bis 6 US-Dollar.
- 12 oder 5 Volt Stromquelle.
- 12-Volt-CPU-Lüfter oder ein 5-Volt-Laptop-Lüfter (dieses Projekt ist für Drei- oder Vierdraht-Lüfter vorgesehen, die PWM unterstützen). Diese liegen normalerweise im Bereich von 10 bis 20 US-Dollar.
- CPU-Kühler (mit Kühlkörper und Lüfter) oder jede andere Kombination aus Lüfter und heißem Gegenstand, die damit gekühlt werden kann. Auf diese Weise können Sie beobachten, wie sich die Lüftersteuerung automatisch abkühlt und den Lüfter ausschaltet. Ich habe einen CPU-Kühler mit eingebautem Lüfter verwendet. Es ist der ultimative Test!
Ich würde empfehlen, einen Kühlkörper an den Transistor anzuschließen, wenn Sie große Lüfter mit Strom versorgen möchten (größer als die winzigen 80-mm-Lüfter, die normalerweise für die Desktop-CPU-Kühlung verwendet werden). Es wird eine erhebliche Menge an Wärme erzeugen.
Bereiten Ihre Entwicklung Umwelt
Die RM57L843 entwicklung kit ist das herz dieser PWM fan controller (die weg diese mikrocontroller arbeit ist nicht viel anders von einem Arduino, so nicht eingeschüchtert werden!). Unser erster Schritt zum Aufbau dieses PWM-Lüftercontrollers besteht darin, unsere Entwicklungsumgebung einzurichten, mit der wir die MCU programmieren / flashen.
Schließen Sie das Launchpad RM57L Development Kit mit dem mitgelieferten Kabel an den USB-Anschluss Ihres Computers an und erstellen Sie dann ein Texas Instruments-Konto, damit Sie die CCS IDE herunterladen können. Wir werden auch HALCoGen für diese Übung verwenden. HALCoGen ist ein HAL-Code-Generator, mit dem Sie Ihre MCU einfach über eine GUI konfigurieren können. In diesem Fall konfigurieren wir damit den Analog-Digital-Wandler (MibADC) und das HET-Timer-Modul.
Laden Sie HALCoGen und CCS herunter (stellen Sie sicher, dass Sie in Ihrem TI-Konto für CCS angemeldet sind), und befolgen Sie dann die nachstehenden Anweisungen, um Ihr HALCoGen-Projekt zu erstellen.
Erstellen Sie zuerst ein neues Projekt in HALCoGen, wählen Sie das Entwicklungskit ‚RM57Lx‘ aus, und dann sehen Sie rechts auf dem Bildschirm eine Liste seiner Varianten. In diesem Fall gibt es nur eine Variante: Den RM57L843ZWT. Wählen Sie das aus und nennen Sie Ihr Projekt ‚PWM‘ wie unten gezeigt. Geben Sie den Pfad des Projekts in das Feld ‚Speicherort‘ ein, notieren Sie ihn und klicken Sie auf OK. Wir werden unser CCS-Projekt im selben Verzeichnis speichern. Ihr PWM-Projekt sollte sich in einem Ordner namens PWM unter Ihrem Arbeitsverzeichnis befinden, das wir RM57L nennen.
Erstellen Sie ein neues Projekt namens ‚PWM‘ in HALCoGen. Hier konfigurieren Sie die ADC- und HET-Module.
Um eine PWM-Lüftersteuerung zu erstellen, müssen Sie Timer einrichten, die ein kleines elektrisches Ein- und Ausschalten und deren Frequenz einstellen.
Aktivieren Sie als Nächstes die ADC1- und HET1-Treiber, indem Sie die Registerkarte ‚Treiberaktivierung‘ auswählen und die Kontrollkästchen wie unten gezeigt aktivieren. Der Analog-Digital-Wandler (ADC) wird verwendet, um den analogen Temperatursensorwert in einen digitalen Wert umzuwandeln, mit dem wir die Temperatur bestimmen können, sodass die Lüftersteuerung die Lüfterdrehzahl entsprechend anpassen kann. Der High-End-Timer (HET) wird verwendet, um unser PWM-Signal zu erzeugen, das zur Steuerung eines einfachen BJT-Transistors verwendet wird.
Ich empfehle, die restlichen Treiber zu deaktivieren, um Systemressourcen zu schonen (z. B. RAM und Flash-Speicher).
Aktivieren Sie die Treiber HET1 und ADC1 in HALCoGen.
Jetzt ist es an der Zeit, den Analog-Digital-Wandler unserer PWM-Lüftersteuerung (der in die Launchpad RM57L MCU integriert ist) zu konfigurieren. Gehen Sie zur Registerkarte ADC1 und stellen Sie die FiFo-Größe auf 1 ein, da dies alles ist, was wir für dieses Projekt benötigen. Wählen Sie auch Pin 7 aktivieren, da wir den Temperatursensor daran anschließen werden. Pin 7 ist auf der Unterseite Ihres Launchpad Development Kits mit ‚AI1_7‘ gekennzeichnet.
Funktionsweise der Analog-Digital-Konvertierung
Fahren Sie mit der Registerkarte HET1 fort, auf der Sie den PWM-Timer unserer Lüftersteuerung (integriert in das RM57L-Entwicklungskit) und den HET-Pin konfigurieren, der den Transistor steuert, der den Lüfter mit Strom versorgt, und führen Sie die folgenden Schritte aus, wie im nächsten Screenshot gezeigt.
Wählen Sie die Registerkarte Pwm 0-7 und stellen Sie das Tastfeld für PWM 0 auf 0. Dadurch wird das Tastverhältnis des PWM-Signals auf 0 und damit das Tastverhältnis des von Ihnen gesteuerten Lüfters auf 0 eingestellt. Ein Tastverhältnis von 0 bedeutet einfach, dass der Lüfter ausgeschaltet ist. Eine andere Möglichkeit, es auszudrücken, ist: Der Prozentsatz der Zeit, in der der Strom eingeschaltet wird, ist 0.
Wir werden in diesem Projekt mit einem Tastverhältnis von 0 beginnen, da wir das Tastverhältnis (und damit die Lüftergeschwindigkeit) programmgesteuert so einstellen, dass es der Temperatur des Kühlkörpers folgt, an dem der Temperatursensor angeschlossen ist. Wenn das Tastverhältnis auf 0 eingestellt ist, schaltet die Lüftersteuerung den Lüfter aus (0 entspricht 0%). Aktivieren Sie als Nächstes die Kontrollkästchen ‚Aktivieren‘ links neben dem Feld ‚Pin‘. Das ermöglicht das PWM-Signal. Geben Sie 2 in das Feld ‚Pin‘ ein, d. H. HET Port 1, Pin 2, markiert mit ‚HET1_2‘ auf der Unterseite Ihres Launchpads. Schließlich: Geben Sie 10.000 (ohne Komma) in das Feld Zeitraum ein.
Die in diesem Feld verwendete Einheit ist die Mikrosekunde. Eine Mikrosekunde ist eine Millionstel Sekunde. Wenn Sie dieses Feld auf 10.000 setzen, schaltet der HET-Timer das Gerät alle 10.000 Mikrosekunden ein und aus (alle 0.01 sekunden). Aufgrund dieses schnellen Schaltens werden Sie nicht bemerken, dass die Stromversorgung ein- und ausgeschaltet wird, was zu einem reibungslosen, kontinuierlichen Betrieb des Lüfters führt.
Aktivieren Sie den Timer ‚PWM 0‘.
Um die HALCoGen-Konfiguration abzuschließen, wählen Sie die Registerkarte Pin 0-7. Hier konfigurieren Sie den RM57L-Pin, an den die Basis des Transistors angeschlossen wird (natürlich über den 12-kOhm-Widerstand). Aktivieren Sie das Kontrollkästchen DIR im Abschnitt ‚Bit 2‘ wie unten gezeigt, um Bit 2 auf die Ausgaberichtung einzustellen. Dadurch können wir den Lüfter einschalten. Ein Pin kann als Bit bezeichnet werden, so dass ‚Bit 2‘ in diesem Fall den Pin 2 bedeutet.
Was ist ein Widerstand?
Der Ausgangswert (in der Abbildung unten mit DOUT gekennzeichnet) ist der Zustand des Pins, der entweder ein (1) oder aus (0) sein kann. Stellen Sie sicher, dass es auf 0 gesetzt ist, damit es ausgeschaltet ist, wenn die MCU anfänglich startet.
Stellen Sie HET1, Pin 2 auf die Ausgaberichtung.
Wählen Sie Datei > Projekt speichern und dann Datei > Code generieren (oder drücken Sie F5). Beobachten Sie den Bereich ‚Ausgabe‘ unten, bis angezeigt wird, dass die Codegenerierung abgeschlossen ist. Jetzt können Sie mit der CCS-Konfiguration fortfahren, und wenn Sie fertig sind, können Sie endlich die Teile sammeln und die Lüftersteuerung bauen.
Lassen Sie uns Code!
Starten Sie CCS und wählen/erstellen Sie ein Verzeichnis mit dem Namen RM57L als Arbeitsbereich, wie unten gezeigt. Erstellen Sie in Code Composer Studio ein neues Projekt namens PWM, das im Stammverzeichnis des PWM-Verzeichnisses gespeichert wird, in dem Sie die PWM sehen.hcg-Datei. PWM.hcg ist Ihre HALCoGen-Projektdatei. Wie oben erwähnt, müssen sich die CCS- und HALCoGen-Projektdateien für diese Übung im selben Verzeichnis befinden.
Schließen Sie Ihr Launchpad RM57L Development Kit mit dem mitgelieferten USB-Kabel an.
Auf der rechten Seite, wählen Sie ‚RM57L8x‘ aus der Dropdown-Box, wie das ist, was wir verwenden werden. Wählen Sie als Nächstes die XDS110 USB Debug Probe aus dem Dropdown-Feld darunter aus. Wählen Sie abschließend ‚Leeres Projekt‘ und klicken Sie auf Fertig stellen.
Klicken Sie mit der rechten Maustaste auf das PWM-Projekt im Projekt-Explorer-Bereich (es befindet sich auf der linken Seite des Bildschirms) und fügen Sie dann den Ordner HALCoGen /includes aus Ihrem PWM-Projektverzeichnis zu Ihrem CCS-Projekt hinzu, indem Sie auf die Schaltfläche klicken unten eingekreist. Diese RM57L Include-Dateien bestehen aus Bibliotheken und Treibern, die es viel einfacher machen, Programme für die MCU zu schreiben.
Navigieren Sie zu HL_sys_main.c-Datei im Projekt-Explorer-Bereich links unter /PWM/source/. Fügen Sie in diese Datei das folgende RM57L-Codebeispiel ein.
Der Quellcode (Hercules RM57L-Codebeispiel)
Der folgende RM57L-Beispielcode kann mit Code Composer Studio über USB auf Ihr Launchpad hochgeladen werden. So sollte Ihre Quelldatei aussehen:
Die Temperaturwerte sind in °C angegeben.
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 */}
Sie können diesen RM57L-Code gerne weiterverbreiten, vorausgesetzt, Sie fügen einen Link zu dieser Seite hinzu.
Platzieren Sie Ihren Code immer zwischen den Kommentaren /* USER CODE BEGIN */ und /* USER CODE END */ , damit HALCoGen ihn nach Änderungen an Ihrem Projekt nicht löscht.
Denken Sie immer daran, dass die Kühlkörpertemperatur niedriger sein wird als die Temperatur der CPU oder des Geräts, das sie kühlt. Dies bedeutet, dass, wenn der Kühlkörper 70 ° C ist, die CPU noch heißer ist. Sie können auch design diese pwm fan controller zu direkt messen die CPU temperatur und ort die thermistor auf es. Dies ist genauer, da die Kühlkörpertemperatur langsam hinter der CPU-Temperatur zurückbleibt.
Jeder der ADC-Werte sind digitale Darstellungen der Temperaturmesswerte der Lüftersteuerung, und jeder Wertebereich stellt einen Temperaturbereich dar, der eine bestimmte Menge an Luftstrom benötigt, um ihn zu kühlen. Bei diesem Thermistor entspricht ein niedrigerer ADC-Wert einer höheren Temperatur und umgekehrt. Der Code wurde nun aktualisiert, um die Werte des Analog-Digital-Wandlers in Temperaturwerte in Grad Celsius umzuwandeln.
Beispielszenario: Ein ADC-Wertebereich von 310 bis 320 kann hoch genug sein, um den Lüfter bis zu 80% anzukurbeln, da dies anzeigt, dass unser Testobjekt (der Kühlkörper und damit die CPU) heiß wird. Wenn der Kühlkörper / Lüfter jedoch groß genug ist, sollte diese Geschwindigkeit die meiste Zeit nicht erforderlich sein. Dies ist ein Fall, in dem Sie möglicherweise von einem größeren Kühlkörper profitieren möchten.
Andererseits kann ein ADC-Wertebereich von 340 bis 350 darauf hinweisen, dass der Kühlkörper nur ein wenig warm ist und der Lüfter nur mit einer sehr niedrigen Einstellung (20%) betrieben werden muss. Ich habe das Tastverhältnis basierend auf den ADC-Wertebereichen anstelle der genauen ADC-Werte eingestellt, um häufige Drehzahlschwankungen zu vermeiden. Ich würde dringend empfehlen, eine UART-Routine zu implementieren, die die Messwerte des Analog-Digital-Wandlers an Ihren Computer überträgt, damit Sie alles in Echtzeit sehen können. Es erleichtert das Debuggen und ist auch informativ.
Nützliche Anwendungen für PWM umfassen, sind aber nicht beschränkt auf:
- Klimaanlage und kühlschrank kompressor drehzahlregelung für verbesserte effizienz und reduziert geräuschpegel.
- LED lampe dimmen.
- HEV/elektrische fahrzeug geschwindigkeit control.
- Lüftungsventilatorsteuerungen.
- Kühler fan controller, die sparen können strom, gas, und reduzieren lärm verschmutzung verursacht durch autos auf den straßen. Die Geräuschreduzierung könnte sogar dazu beitragen, dass Menschen nachts in einigen Fällen besser schlafen.
Bitte beachten Sie, dass für alle oben genannten Anwendungen ein Lüfter erforderlich ist, der PWM unterstützt. Leider sind nicht alle Fans dafür gebaut.
Hardware-Setup
Wie ich eingangs sagte, wurde dieser Artikel unter der Annahme geschrieben, dass Sie wissen, wie man einen Transistor verwendet und wie man den Sensor sicher mit dem Launchpad verbindet.
Verbinden die thermistor zu ADC port 1 pin 7, und die transistor zu ADC port 1 pin 2 auf ihre RM57L entwicklung kit, mit die drei widerstände in die teile liste entsprechend. Wenn Sie einen CPU-Kühler verwenden (Kühlkörper + eingebauter Lüfter-Kombination), setzen Sie den Temperatursensor in den Kühlkörper ein (achten Sie darauf, dass keiner der Sensoranschlüsse mit dem Kühlkörper in Kontakt kommt, der möglicherweise elektrisch leitfähig ist). Schließen Sie den Kühlkörperlüfter an den Controller an. In den unten verlinkten Tutorials erfahren Sie, wie Sie den Lüfter, den ADC-Pin und den Transistor einrichten.
Sparkfun erklärt hier die Analog-Digital-Konvertierung und ein grundlegendes Beispiel für eine ADC-Sensorverbindung (was ich für dieses Projekt verwendet habe, außer dass mein Sensor zwei Leitungen hat und nicht die drei, die ihr Potentiometer hat). Sie erklären hier auch Transistoren.
Sobald Sie das gemeistert haben, können Sie Ihre Lüftersteuerung in kürzester Zeit in Betrieb nehmen!
Sensor
Der ADC im RM57L MCU Development Kit wandelt die analogen Spannungsschwankungen, die durch den Thermistor (oder den von Ihnen verwendeten Temperatursensor) verursacht werden, in digitale Werte um, die in der obigen Wertvariablen gespeichert sind. Da die ADC-Werte vom verwendeten Sensor abhängen, müssen Sie die Spezifikationen in der Dokumentation Ihres Sensors verwenden, um die Temperaturwerte in Grad umzurechnen.
Der für dieses Projekt verwendete Sensor war ein uxcell 3435B 10 kOhm Thermistor. Ein Thermistor ist ein Widerstand, der seinen Widerstand mit der Temperatur variiert (viel mehr als ein gewöhnlicher Widerstand). Wenn ein Thermistor mit 10 kOhm bewertet wird, bedeutet dies, dass sein Widerstand 10 kOhm bei 25 ° C beträgt.
HINWEIS: Der Widerstand eines gegebenen Thermistors variiert nicht linear mit der Temperatur, weshalb Thermistorhersteller ein Temperatur-Widerstand-Diagramm und (manchmal) die A-, B- und C-Werte für die Verwendung in der Steinhart-Hart-Gleichung bereitstellen, die dieses Problem anspricht.
Code erfolgreich getestet mit CCS-Versionen: