Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

System kontroli temperatury LM 35 - ATmega8 [Fan Controller]

regrom 13 Lut 2010 21:39 7053 0
  • Witam.

    Chciałem przedstawić projekt mikroprocesorowego systemu kontroli temperatury. Zamieszczam go w tym dziale, gdyż jest w nim pełno niedociągnięć, głównie programowych.

    :arrow:Inspiracja:
    Inspiracją była dla mnie nauka, wykonanie projektu na studia, oraz ceny taki sterowników. Pomocne były materiały znalezione w sieci, zdecydowałem się wzorować na takim rozwiązaniu:
    http://jos.vaneijndhoven.net/fancntl/index.html
    oraz:
    http://www.cytron.com.my/viewProduct.php?pid=...cuBQYqEzcVLgYwAbOSlLxR7Od76inxjbbGEjQ=&store=
    System kontroli temperatury LM 35 - ATmega8 [Fan Controller]


    :arrow:Cel projektu:
    Sterownik ma za zadanie kontrolować temperaturę urządzeń peryferyjnych różnych układów elektronicznych, np. komputera PC.

    Sterownik dedykowany jest dla tzw. „overclocker-ów„ – czyli osób, które zajmują się zmianą ustawień fabrycznych podzespołów w celu uzyskania lepszej wydajności sprzętowej. Efektem ubocznym takich działań jest nadmierne wydzielanie się ciepła oraz problem z jego odprowadzeniem.

    :arrow:Założenia
    Pomiar temperatury w 3-ech miejscach
    Płynna regulacja obrotów 3 wentylatorów – modulacja PWM
    Wyświetlenie temperatur oraz wartości PWM (procentowo)
    Tryb pracy automatycznej – obroty wentylatora zależne od temperatur
    Tryb pracy ręcznej – sterowanie niezależne od temperatury
    Uniwersalność – praca z różnymi urządzeniami, nie tylko PC
    Możliwość podłączenia różnych wentylatorów
    Możliwość szybkiego przeprogramowania układu
    Praca w zakresie temperatur
    Ograniczenie maksymalnych i minimalnych obrotów wentylatorów

    :arrow:Hardware:




    Mikrokontroler:
    ATmega8 16-PU w obudowie dip28:
    • 3 kanały PWM
    • Przetwornik analogowo-cyfrowy 6 wejść
    • Programowanie w układzie – ISP

    Czujnik temperatury:
    LM 35 DZ
    • Zakres 2 ÷ 150 ˚C
    • Wyjście analogowe 10 mV/˚C

    Pozostałe elementy:
    • Tranzystory sterujące MOSFET-N – BUZ 10
    • Rezystory 0,25 W
    • Wyświetlacz LED – 7 segmentów
    • Przyciski – switch-e
    • Kondensatory ceramiczne
    • Złącza molex oraz złącza taśmowe

    :arrow:Software:

    Ta część sprawiła mi najwięcej problemów. Program napisany jest w języku C, użyłem AVR Studio. Podczas projektu wiele się nauczyłem, głównie obsługi peryferiów mikrokontrolera .

    W programie jest pełno niedociągnięć, kod można i trzeba zoptymalizować. Na pierwszy rzut oka, niepotrzebny tryb pracy "inverted mode" PWM. Pewne rzeczy można umieścić w funkcjach gdyż się powtarzają.

    Głównym problemem w projekcie był/jest przetwornik ADC. Pracuje on w trybie free running, dokonywany jest pomiar z trzech czujników LM35, (jeden zastąpiony dzielnikiem napięcia). Następnie na podstawie temperatury, zostają wysterowane odpowiednie kanały PWM. Układ czasem jest nie stabilny i raz na jakiś czas na ułamek sekundy przypisana zostaje do danego PWM wartość z tego czujnika co nie powinna, tak jakby mieszały się kanały ADC.
    System kontroli temperatury LM 35 - ATmega8 [Fan Controller]


    Jak to wygląda programowo. Każdy wentylator posiada inną charakterystykę, to znaczy pracuje w innym zakresie napięć, dolna i górna granica ograniczone są programowo. Wartość obrotów przeliczana jest na podstawie temperatury:
    System kontroli temperatury LM 35 - ATmega8 [Fan Controller]

    Sterownik posiada 2 tryby pracy, ręczny i automatyczny, ręczny działa bez zarzutu. Sterowanie polega na ustawieniu wartości PWM, można także wybrać temperaturę do wyświetlenia z danego czujnika. W dalszej wizji chcę użyć pamięci eeprom do ustawienia zakresu pracy(temperatura i obroty).

    W załączniku zamieszczam cały kod źródłowy

    :arrow:Wykonanie
    Schemat ideowy w załączniku, rysowany w Protelu oraz w Eaglu, Protel z względu na estetykę czytelność schematu, Eagle - mnogość bibliotek, i łatwość stworzenia płytki PCB, oraz wizualizacji 3D.

    Płytka która powstała jest płytką prototypową, posiada złącze ISP do przeprogramowania. Nie obyło się bez zworek jak ich błędów ale ostatecznie wszytko działa poprawnie(od strony fizycznej).
    Estetyka pozostawia wiele do życzenia, lecz się tym nie przejmowałem gdyż z założenia miał to być tylko prototyp testowy oraz nie miałem zbyt dużo czasu na jej wykonanie(termotransfer, wiercenie itp)

    System kontroli temperatury LM 35 - ATmega8 [Fan Controller] System kontroli temperatury LM 35 - ATmega8 [Fan Controller]
    System kontroli temperatury LM 35 - ATmega8 [Fan Controller]

    :arrow:Uwagi
    W następnych wersjach sterownik może zostać rozbudowany w celu usprawnienia jego
    funkcjonalności oraz zwiększenia możliwości sprzętowych.

    Założenia rozbudowy:
    • Zwiększenie liczby czujników pomiarowych
    • Zwiększenie liczby sterowanych wentylatorów
    • Zmiana mikroprocesora na posiadający interfejs JTAG
    • Zmiana wyświetlacza LED na LCD
    • Dodanie systemu alarmowego, buzzer, diody sygnalizacyjne
    • Możliwość pomiaru obrotów poszczególnych wentylatorów – sprzężenie zwrotne
    • Minimalizacja ilości połączeń
    • Układ wykonany na jednej dwustronnej płytce
    • Użycie interfejsu 1-wire dla czujników pomiarowych
    • Możliwość programowania przyciskami i zapisu danych do pamięci EEprom

    Optymalizacja kodu

    Założenia:
    • Skrócenie kodu źródłowego
    • Stworzenie własnych bibliotek
    • Stworzenie funkcji dla powtarzających się elementów programowych
    • Lepsze wykorzystanie możliwości programowych języka C

    Pomoc forumowiczów:
    Największe podziękowania należą się użytkownikowi Zuk z forum dioda.com.pl , to on pomógł mi najwięcej, pomimo zwracania się z prośbą o pomoc na forum elektrody.

    Problemy związane z tym projektem były omawiane w wątkach:
    [C] Atmega8 ADC - przerwanie - LM35
    [ATmega8][C] System kontroli temp na LM35
    [ATmega8][C] ADC - wartość, krótkie pytanie.

    :arrow:Zakończenie
    Zachęcam do komentowania, ale też zwracam się z prośbą o pomoc w problemach które zostały opisane, będę wdzięczny za pomoc w optymalizacji kodu, pomysłach na rozwiązanie "inaczej". Chcę dalej rozwijać projekt, a przy tym wiele się nauczyć. Po głowie chodzi mi histereza, lecz na razie nie mam pomysłu na to jak ją uwzględnić w kodzie. Chwilowo nie mam filmu z pracy układu, gdyż większość materiałów zostawiłem w akademiku.

    Zamieszczam, dokładny opis w pdf, schemat ideowy, kod źródłowy w C.

    Kod dodatkowo: http://pastebin.pl/18678


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.