27 stycznia, 2022

Jak zbudować kontroler wentylatora PWM O Zmiennej Prędkości

w tym artykule pokażę, jak zbudować kontroler wentylatora pwm (DC) za pomocą krótkiego programu C i kilku części, w tym zestawu programistycznego mikrokontrolera Launchpad rm57l. Umożliwia użytkownikom efektywne zmienianie prędkości wentylatorów PWM w celu zmniejszenia poziomu hałasu i zużycia energii. Projekt ten automatycznie monitoruje temperaturę obiektu, do którego dołączony jest czujnik temperatury (w tym przypadku radiator procesora używany do chłodzenia małego modułu termoelektrycznego) i odpowiednio kontroluje prędkość wentylatora, aby zminimalizować hałas, a także zużycie energii. Poniżej znajduje się demo kontrolera wentylatora używanego na pulpicie CPU cooler.

Wideo: Kompulsa.

Zanim dowiesz się, jak zbudować Kontroler Prędkości wentylatora, pomaga dowiedzieć się, jak działają różne metody kontroli prędkości. Wyjaśnię dwie kluczowe technologie: rezystancyjne regulatory prędkości i regulatory wentylatorów PWM.

rezystancyjne regulatory prędkości

rezystancyjne regulatory prędkości kontrolują prędkość danego silnika wentylatora, opierając się przepływowi prądu ze źródła zasilania do silnika. Można to zrobić za pomocą kombinacji potencjometru i tranzystora lub innego obwodu warystora. Ta pierwsza technologia jest niezwykle łatwa do zbudowania, ale powoduje, że tranzystor spala sporo prądu przepływającego przez niego. Dlatego jest nieefektywny. PWM z drugiej strony, impulsy pełnego prądu włącza i wyłącza wiele razy na sekundę. Tranzystor nadal będzie marnować trochę energii elektrycznej, ale nie tak dużo.

regulatory prędkości PWM

modulacja szerokości impulsu jest znacznie bardziej złożoną, lepszą i coraz bardziej powszechną metodą sterowania prądem, która ułatwia kontrolę prędkości silnika, jasności lampy, między innymi w sposób energooszczędny. Główne powody, dla których sterowniki silników PWM zwiększają wydajność urządzeń, a także zmniejszają poziom hałasu poprzez ich obsługę przy niskich prędkościach, gdy jest to możliwe.

do skonstruowania tego kontrolera wentylatora użyłem zestawu programistycznego MCU TI Launchpad Rm57l (dzięki ti za wysłanie go), ale ten kod można łatwo zmodyfikować, aby działał również na tańszych Launchpadach Tms57012 lub Launchpadach Tms57004.

ucząc się, jak skonstruować kontroler wentylatora pwm, pomaga zrozumieć lub nauczyć się wykonywać różne technologie/metody, a także ich zalety i wady. W ten sposób będziesz dokładnie wiedział, którego użyć i kiedy.

ten artykuł zakłada, że masz pewne doświadczenie w elektrotechnice i wiesz, jak bezpiecznie podłączyć tranzystor, czujnik i wszystkie inne wymienione urządzenia. Wypróbuj ten projekt na własne ryzyko.

Spis Treści

  1. Lista Części.
  2. Przygotowanie Środowiska Programistycznego.
  3. zacznijmy kodować!

ten pokaz slajdów wymaga JavaScript.

Lista części

Wszystkie ceny podane są w USD.

  1. Tranzystor 2N6284G NPN Darlington BJT. BJT oznacza tranzystor dwubiegunowy (wygodny, ponieważ ma wzmocnienie PRĄDU STAŁEGO 750).
  2. trzy Rezystory 12 kOhm 1/2 watt.
  3. Skrzynka Przyłączeniowa z zaciskami śrubowymi lub złączem prętowym.
  4. zestaw rozwojowy Texas Instruments Launchpad RM57L MCU (RM57L843).
  5. 10 Kohm termistora NTC o wartości B 3435. „NTC” oznacza, że jego opór maleje, gdy wzrasta jego temperatura.
  6. 40mm x 40mm (lub większy, jeśli nie możesz znaleźć tego rozmiaru) radiator dla tranzystora.
  7. przewody połączeniowe/wtyczki pin do podłączenia pinów zestawu rozwojowego do tranzystora i do podłączenia tranzystora do źródła zasilania (chyba że używasz płyty tartej). Są one zwykle w zakresie $3-6.
  8. źródło zasilania 12 lub 5 V.
  9. 12-woltowy Wentylator PROCESORA lub 5-woltowy wentylator laptopa (ten projekt jest przeznaczony dla wentylatorów trzy-lub czteroprzewodowych, które obsługują PWM). Są one zazwyczaj w zakresie $10-$20.
  10. chłodzenie procesora (z radiatorem i wentylatorem w zestawie) lub dowolną inną kombinacją wentylatora i gorącego obiektu, który można za jego pomocą schłodzić. Dzięki temu kontroler wentylatora automatycznie się chłodzi i wyłącza. Użyłem chłodnicy procesora z wbudowanym wentylatorem. To ostateczny test!

polecam podłączenie radiatora do tranzystora, jeśli zamierzasz zasilać duże wentylatory (większe niż małe wentylatory 80 mm, które są zwykle używane do chłodzenia procesora stacjonarnego). Wytworzy znaczną ilość ciepła.

przygotuj środowisko programistyczne

zestaw rozwojowy RM57L843 jest sercem tego kontrolera wentylatora PWM (sposób działania tych mikrokontrolerów nie różni się zbytnio od Arduino, więc nie daj się zastraszyć!). Naszym pierwszym krokiem do budowy tego kontrolera wentylatora pwm jest skonfigurowanie naszego środowiska programistycznego, którego będziemy używać do programowania / flashowania MCU.

Podłącz Zestaw programistyczny Launchpad Rm57l do portu USB komputera za pomocą dostarczonego kabla, a następnie utwórz konto Texas Instruments, aby móc pobrać CCS IDE. Do tego ćwiczenia użyjemy również Halkogenu. HALCoGen to generator kodów HAL, który umożliwia łatwą konfigurację MCU za pomocą GUI. W tym przypadku użyjemy go do skonfigurowania konwertera analogowo-cyfrowego (mibadc) oraz modułu timera HET.

Pobierz HALCoGen i CCS (upewnij się, że jesteś zalogowany na swoje konto TI dla CCS), a następnie postępuj zgodnie z poniższymi instrukcjami, aby utworzyć projekt HALCoGen.

najpierw Utwórz nowy projekt w HALCoGen, wybierz zestaw rozwojowy „RM57Lx”, a następnie zobaczysz listę jego wariantów po prawej stronie ekranu. W tym przypadku istnieje tylko jeden wariant: RM57L843ZWT. Wybierz i nazwij swój projekt „PWM”, jak pokazano poniżej. Wprowadź ścieżkę projektu w polu „Lokalizacja”, zanotuj ją i kliknij OK. Będziemy przechowywać nasz projekt CCS w tym samym katalogu. Twój projekt PWM powinien znajdować się w folderze o nazwie PWM, w Twoim katalogu roboczym, który nazwiemy RM57L.

zrzut ekranu ekranu

Utwórz nowy projekt o nazwie ” PWM ” w HALCoGen. Tutaj konfigurujesz Moduły ADC i HET.

aby zbudować kontroler wentylatora PWM, musisz skonfigurować timery, które będą oscylować w małym elektrycznym włączaniu i wyłączaniu, i ustawić ich częstotliwość.

następnie włącz sterowniki ADC1 i HET1, wybierając kartę „Włącz sterownik” i zaznaczając pola, jak pokazano poniżej. Konwerter analogowo-cyfrowy (ADC) zostanie użyty do konwersji analogowego odczytu czujnika temperatury na wartość cyfrową, której możemy użyć do określenia temperatury, umożliwiając regulatorowi wentylatora odpowiednie dostosowanie prędkości wentylatora. High-end timer (HET) zostanie użyty do wygenerowania naszego sygnału PWM, który posłuży do sterowania prostym tranzystorem BJT.

polecam odznaczenie reszty sterowników, aby oszczędzać zasoby systemowe (na przykład: pamięć RAM i pamięć flash).

enable-ADC-and-het-drivers

Enable the HET1 and ADC1 drivers in HALCoGen.

nadszedł czas, aby skonfigurować Konwerter analogowo-cyfrowy kontrolera pwm (który jest wbudowany w MCU Launchpad RM57L). Przejdź do zakładki ADC1 i ustaw rozmiar FiFo na 1, ponieważ to wszystko, czego potrzebujemy do tego projektu. Wybierz również Enable Pin 7, ponieważ do tego podłączymy czujnik temperatury. Pin 7 jest oznaczony 'AI1_7’Na spodzie zestawu programistycznego Launchpad.

jak działa konwersja analogowo-cyfrowa

zrzut ekranu konfiguracji ADC1

przejdź do zakładki HET1, gdzie skonfigurujesz timer PWM naszego kontrolera wentylatora (wbudowany w zestaw rozwojowy RM57L) oraz pin HET, który steruje tranzystorem zasilającym wentylator i wykonaj następujące czynności, jak pokazano na następnym zrzucie ekranu.

wybierz kartę Pwm 0-7, ustaw pole pracy dla PWM 0 Na 0. To ustawia cykl pracy sygnału PWM na 0, a tym samym ustawia cykl pracy kontrolowanego wentylatora na 0. Cykl pracy równy 0 oznacza po prostu, że wentylator będzie wyłączony. Innym sposobem na to jest: procent czasu, w którym moc będzie włączona, wynosi 0.

w tym projekcie zaczniemy od cyklu pracy wynoszącego 0, ponieważ programowo dostosujemy cykl pracy (a tym samym prędkość wentylatora) w taki sposób, aby podążał za temperaturą radiatora, do którego przymocowany jest czujnik temperatury. Gdy cykl pracy jest ustawiony na 0, sterownik wentylatora wyłączy wentylator (0 odpowiada 0%). Następnie zaznacz parę pól wyboru „Włącz” po lewej stronie pola „Pin”. Który włącza sygnał PWM. Wprowadź 2 w polu 'Pin’, które jest portem HET 1, Pin 2, oznaczonym’ HET1_2 ’ Na spodzie Launchpada. Na koniec: wprowadź 10 000 (bez przecinka) w polu Period.

jednostką używaną w tym polu jest mikrosekunda. Mikrosekunda to milionowa część sekundy. Ustawienie tego pola na 10 000 spowoduje, że cykl het timer włącza i wyłącza zasilanie co 10 000 mikrosekund (Co 0.01 sekund). Dzięki tak szybkiemu przełączaniu nie zauważysz, że zasilanie jest włączane i wyłączane, co skutkuje płynną, ciągłą pracą wentylatora.

 ekran konfiguracji PWM.

Włącz timer „PWM 0”.

aby zakończyć konfigurację Halkogenu, wybierz kartę Pin 0-7. Tutaj skonfigurujesz pin RM57L, do którego będzie podłączona podstawa tranzystora (oczywiście przez rezystor 12 kOhm). Zaznacz pole wyboru DIR w sekcji 'Bit 2′, Jak pokazano poniżej, aby ustawić bit 2 na kierunek wyjścia. Dzięki temu możemy włączyć wentylator. Pin może być określany jako bit, więc „Bit 2” w tym przypadku oznacza het Pin 2.

Co To Jest Rezystor?

wartość wyjściowa (oznaczona DOUT na zrzucie ekranu poniżej) to stan pinu, który może być włączony (1) lub wyłączony (0). Upewnij się, że jest ustawiony na 0, więc jest wyłączony po początkowym uruchomieniu MCU.

ekran konfiguracji timera HET

Ustawia HET1, Pin 2 na kierunek wyjściowy.

Wybierz plik > Zapisz projekt, a następnie plik > Wygeneruj kod (lub naciśnij F5). Obserwuj okienko „wyjście” na dole, aż pojawi się komunikat, że generowanie kodu jest zakończone. Teraz możesz przejść do konfiguracji CCS, a kiedy skończysz, możesz wreszcie zebrać części i zbudować kontroler wentylatora.

Zakodujmy!

Uruchom CCS i wybierz / Utwórz katalog o nazwie RM57L jako obszar roboczy, jak pokazano poniżej. Utwórz nowy projekt w Code Composer Studio o nazwie PWM, który zostanie zapisany w katalogu głównym katalogu PWM, w którym zobaczysz PWM.plik hcg. PWM.hcg to plik projektu HALCoGen. Jak powiedziałem powyżej, pliki projektów CCS i HALCoGen mają być w tym samym katalogu dla tego ćwiczenia.

Podłącz zestaw programistyczny Launchpad Rm57l za pomocą dostarczonego kabla USB.

po prawej stronie wybierz „RM57L8x” z rozwijanej listy, ponieważ tego będziemy używać. Następnie wybierz sondę debugowania USB XDS110 z rozwijanej listy poniżej. Na koniec wybierz „pusty projekt” i kliknij Zakończ.

Utwórz projekt CCS

kliknij prawym przyciskiem myszy projekt PWM w okienku Project Explorer (znajduje się po lewej stronie ekranu), a następnie Dodaj folder HALCoGen /includes z katalogu projektu PWM do projektu CCS, klikając przycisk zakreślony poniżej. Te RM57L zawierają pliki składają się z bibliotek i sterowników, które znacznie ułatwiają pisanie programów dla MCU.

Dodaj Dołącz Katalog

przejdź do HL_sys_main.plik c w Panelu Eksploratora projektu po lewej stronie pod /PWM / source/. W tym pliku wklej poniższy przykład kodu RM57L.

kod źródłowy (próbka kodu Hercules RM57L)

poniższy przykładowy kod RM57L można przesłać do Launchpada przez USB za pomocą Code Composer Studio. Tak powinien wyglądać Twój plik źródłowy:

odczyty temperatury są w °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 */}

zapraszamy do redystrybucji tego kodu RM57L, pod warunkiem, że umieścisz link do tej strony.

zawsze umieszczaj swój kod między /* kod użytkownika BEGIN */ i /* Kod użytkownika END */ komentarze, tak aby HALCoGen nie usunął go po wprowadzeniu zmian w projekcie.

zawsze pamiętaj, że temperatura radiatora będzie niższa niż temperatura PROCESORA lub dowolnego urządzenia, które chłodzi. Oznacza to, że jeśli radiator ma temperaturę 70 °C, procesor jest jeszcze gorętszy. Możesz również zaprojektować ten kontroler wentylatora pwm, aby bezpośrednio zmierzyć temperaturę procesora i umieścić na nim termistor. Jest to dokładniejsze, ponieważ temperatura radiatora powoli pozostaje w tyle za temperaturą procesora.

każda z wartości ADC jest cyfrową reprezentacją odczytów temperatury kontrolera wentylatora, a każdy zakres wartości reprezentuje zakres temperatury, który wymaga pewnej ilości przepływu powietrza do jego schłodzenia. W przypadku tego termistora niższa wartość ADC odpowiada wyższej temperaturze i odwrotnie. Kod został zaktualizowany, aby przekonwertować wartości konwertera analogowo-cyfrowego na odczyty temperatury w stopniach Celsjusza.

przykładowy scenariusz: Zakres wartości ADC od 310 do 320 może być wystarczająco wysoki, aby uzasadnić uruchomienie wentylatora aż do 80%, ponieważ wskazuje, że nasz obiekt testowy (radiator, a tym samym procesor) robi się gorący. Jeśli jednak Radiator/Wentylator są wystarczająco duże, prędkość ta nie powinna być potrzebna przez większość czasu. Jest to jeden przypadek, w którym możesz chcieć wykorzystać większy radiator.

z drugiej strony, zakres wartości ADC od 340 do 350 może wskazywać, że radiator jest nieco ciepły i wymaga tylko, aby wentylator działał przy bardzo niskim ustawieniu (20%), więc będzie znacznie cichszy przy tym ustawieniu. Ustawiam cykl pracy na podstawie zakresów wartości ADC, zamiast dokładnych wartości ADC, aby uniknąć częstych wahań prędkości. Gorąco polecam wdrożenie procedury UART, która przesyła odczyty konwertera analogowo-cyfrowego do komputera, dzięki czemu można zobaczyć wszystko, co dzieje się w czasie rzeczywistym. Ułatwia to debugowanie, a także ma charakter informacyjny.

przydatne aplikacje dla PWM obejmują, ale nie są ograniczone do:

  1. regulacja prędkości sprężarki klimatyzatora i lodówki dla poprawy wydajności i zmniejszenia poziomu hałasu.
  2. ściemnianie lamp LED.
  3. HEV/regulacja prędkości pojazdu elektrycznego.
  4. sterowniki wentylatorów.
  5. sterowniki wentylatorów chłodnicy, które mogą oszczędzać energię elektryczną, gaz i zmniejszać hałas powodowany przez samochody na drogach. Redukcja hałasu może nawet pomóc ludziom lepiej spać w nocy w niektórych przypadkach.

pamiętaj, że wszystkie powyższe aplikacje wymagają wentylatora obsługującego PWM. Niestety nie wszystkie wentylatory są do tego zbudowane.

konfiguracja sprzętowa

jak powiedziałem na początku, Ten artykuł został napisany z założeniem, że wiesz, jak używać tranzystora i jak bezpiecznie podłączyć czujnik do Launchpada.

podłącz termistor do portu ADC 1 pin 7, a tranzystor do portu HET 1 pin 2 w zestawie rozwojowym RM57L, używając odpowiednio trzech rezystorów z Listy części. Jeśli używasz chłodnicy procesora (radiator + wbudowany wentylator), włóż czujnik temperatury do radiatora (pamiętaj, aby nie dopuścić do kontaktu któregokolwiek z zacisków czujnika z radiatorem, który może być przewodzący prąd elektryczny). Podłącz wentylator radiatora do sterownika. Tutoriale powiązane poniżej pomogą Ci dowiedzieć się, jak skonfigurować wentylator, pin ADC i tranzystor.

Sparkfun wyjaśnia konwersję analogową na cyfrową i podstawowy przykład połączenia czujnika ADC tutaj (co jest tym, czego użyłem do tego projektu, z wyjątkiem tego, że mój czujnik ma dwa przewody, a nie trzy, które robi ich potencjometr). Tutaj również wyjaśniają Tranzystory.

gdy już to opanujesz, możesz w mgnieniu oka uruchomić kontroler wentylatora!

Czujnik

ADC w zestawie rozwojowym MCU RM57L konwertuje analogowe wahania napięcia spowodowane przez termistor (lub jakikolwiek używany czujnik temperatury) na wartości cyfrowe zapisane w zmiennej wartości powyżej. Ze względu na fakt, że wartości ADC zależą od używanego czujnika, należy użyć specyfikacji zawartych w dokumentacji czujnika, aby przeliczyć odczyty temperatury na stopnie.

czujnikiem zastosowanym w tym projekcie był termistor uxcell 3435B 10 kOhm. Termistor jest rezystorem zaprojektowanym do zmiany jego rezystancji w zależności od temperatury (znacznie bardziej niż zwykły Rezystor). Jeśli termistor jest oceniany na 10 kOhm, oznacza to, że jego rezystancja wynosi 10 kOhm w temperaturze 25 °C.

Uwaga: rezystancja danego termistora nie będzie się liniowo różnić w zależności od temperatury, dlatego producenci termistorów dostarczą wykres temperatury vs rezystancji oraz (czasami) wartości A, B i C do zastosowania w równaniu Steinharta-Harta, które rozwiązuje ten problem.

kod przetestowany pomyślnie z wersjami CCS:

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.