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

Sterowanie wentylatorem na podstawie odczytu z czujnika temperatury

10 Paź 2018 19:16 534 4
  • Poziom 2  
    Witam.

    Na wstępie - posiadam:
    Arduino Uno,
    czujnik temperatury DS18b20,
    4x wentylator 120mm, 12V, 0,2 mA, DC
    mostek H - L293D


    Podłączyłem tylko jeden wentylator.
    Planowałem oprzeć wszystko na L293D. Udało się, wszystko działa, ale niestety wentylator piszczy przez PWM...
    Dodałem do programu bibliotekę TimerOne, żeby zmienić częstotliwość PWM - niezależnie jakie ustawienie dam w " Timer1.initialize();",
    wentylator zachowuje się normalnie, nic nie słychać - jest okej.

    Mój układ wygląda prawie identycznie jak na filmiku na YouTube o nazwie:
    Cytat:
    [Arduino] #8 - Mostek H (sterownik silników DC)

    w minucie 5:46
    Jedyna różnica - podłączyłem płytkę prototypową pod zewnętrzny zasilacz 12V i połączyłem masy.

    Co chciałem zrobić:
    Wentylator 2-pin, 3-pin, który zależnie od temperatury pracuje wolniej lub szybciej.

    Podaję kod programu, jeszcze bez zaimplementowanej obsługi czujnika temperatury. Na razie tylko sterowanie wentylatorem "z palca".

    Spoiler:
    Code:
    #define LEFT     0
    
    #define RIGHT    1

    #include <TimerOne.h>


    void setup() {
        pinMode(9, OUTPUT);
        Timer1.initialize(10000);
        Timer1.pwm(9,1000);

      pinMode(6, OUTPUT);
      pinMode(7, OUTPUT);

    }

    void loop() {

    startMotor(LEFT,1);
    /*
      startMotor(LEFT, 10);
      delay(3000);
      startMotor(LEFT, 20);
      delay(30500);
      startMotor(LEFT, 250);
      delay(300000);


      stopMotor();
      delay(1000);
      */
    }


    void startMotor (boolean dir, uint8_t _speed) {

        if(dir) {
         
          digitalWrite(6, LOW);
          digitalWrite(7, HIGH);
          analogWrite(9, _speed);
         
          }
        else {

          digitalWrite(7, LOW);
          digitalWrite(6, HIGH);
          analogWrite(9, _speed);
         
          }
      }

    void stopMotor() {

          digitalWrite(6, LOW);
          digitalWrite(7, LOW);
          analogWrite(9, 0);
         
     
      }



    Moje pytania:
    1.Czy dany układ może działać w ten sposób zasilając dwa wentylatory?
    2.Czy zasilanie PWM nie zaszkodzi wentylatorom non-PWM 3-pin?
    3.Może lepiej zrobić jakiś prosty regulator napięcia, aby z tych 12V zrobić coś w stylu zasilania od 5V do 12V, zależnie od aktualnej temperatury?
  • PCBway
  • Poziom 38  
    Witam,
    jakie sa wymagania co do tych wentylatorow wzgledem temperatury?
    Nie widze problemu sterowania bezposredniego PWM kilku wentylatorow jednoczesnie na podstawie danych z DS1820. Mostek L293 to chyba przerost formy nad trescia. Poczynilem jakis czas temu podobny uklad na PICu.
    Pozdrawiam
  • PCBway
  • Poziom 2  
    Co do wymagań - zakładamy, że temperatura na czujniku wynosi 23 stopcie Celsjusza - wtedy wentylator powiedzmy działa sobie koło 5V. Natomiast co jeden stopień w górę - niech zwiększa napięcie, tym samym, niech pracuje szybciej, aż temperatura dotrze do tych 35 stopni, gdzie wentylator będzie działał z maksymalną mocą. Ich zadaniem będzie schłodzić / wywietrzyć obudowę.
    Martwi mnie też, czy wentylatory 3-pin wytrzymają sterowanie PWM.
    Jestem otwarty na różne propozycje - mostek L293 był pierwszą myślą, która jakby nie patrzeć - zadziałała.
  • Moderator Mikrokontrolery Projektowanie
    MaxiuX napisał:
    Martwi mnie też, czy wentylatory 3-pin wytrzymają sterowanie PWM.

    A dlaczego miałoby im to zaszkodzić? To rutynowy sposób sterowania tego typu wentylatorów komputerowych. L293 jest zupełnie ok, chociaż dwa tranzystory też rozwiązałyby sprawę, kwestia bardziej osobistych preferencji :)
    Uwzględnij jedynie, że o ile rozkręcony wentylator będzie się kręcił nawet przy małym wypełnieniu PWM, to już niekoniecznie przy danym wypełnieniu wystartuje.
  • Poziom 37  
    MaxiuX napisał:

    Co chciałem zrobić:
    Wentylator 2-pin, 3-pin, który zależnie od temperatury pracuje wolniej lub szybciej.

    A to ma czemuś służyć w realu?
    Do chłodzenia musisz implementować regulator PI - bo sam P słabo się sprawdza w regulacji. Regulacja P zmniejsza Ci chłodzenie jak "mierzona" zbliża się do nastawy i w praktyce nigdy do niej nie dąży - oznacza to że ustawiając na 22*C przy dużych dawkach ciepła to chłodzenie dojdzie do 24*C i niżej nie da rady, musisz wtedy ustawić na 20*C (osiągając oczekiwane 22*C), a jak zniknie źródło ciepła (układ się schłodzi z przyczyn zewnętrznych) to regulator dojdzie do 20*, a chcesz mieć 22*. Dlatego musisz dodać element adaptacji - w tym wypadku co najmniej integrację-całkowanie (PI - proportional + integration).