logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak skonfigurować dwa niezależne PWM w ATmega8 do sterowania mostkiem H?

kolanopan 09 Wrz 2005 13:20 2197 5
REKLAMA
  • #1 1803968
    kolanopan
    Poziom 12  
    Posty: 82
    Pomógł: 5
    Witam przeszukałem całe forum i znalazłem dwa posty:

    https://www.elektroda.pl/rtvforum/topic304115.html

    https://www.elektroda.pl/rtvforum/topic262123.html

    Mam następujący problem, chcąc sterować prędkością silnika elektrycznego DC napotkałem trudność w postaci wymaganego sygnału PWM na dwóch nóżkach, by wysterować mostek H z mosfettow potrzebuje 2 sygnałów. Programowe sterowanie wypełnieniem działa na 89S52 jednak chciałbym to zrealizować na sprzętowym PWM i wybrałem do tego ATmega8 ze względu na jego popularność i cenę (8zł).

    Prosze o podanie czesci programu w C, jak i które rejestry trzeba ustawić aby odpalić 2 PWM-y, z tego co w datasheet wyczytałem to ma on 3 PWM-y z czego 2 mogą chodzić z taką samą częstotliwością a 3 może mieć inną, jak dla mnie to najlepiej by chodziły na tej samej częstotliwości, a zmienne wypełnienie będzie sterowało: jedna lub druga strona, oczywiscie niemogą wystąpić przebiegi PWM na obu nóżkach jednocześnie bo nastąpi zwarcie (chyba ze diody na sterowaniu jakieś)

    Widzę ze sie troszke rozpisałem ale liczę na to ze znajdzie sie jakiś "GURU" który ma większe ode mnie doświadczenie w programowaniu, i pomoże.

    Z góry dzieks, pozdrawiam :D
  • REKLAMA
  • #2 1804145
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 139
    Ocena: 32
    Witam...
    "Guru" nie jestem ale powiem ci, że nie musisz wykożystywać dwóch niezależnych timerów...
    Można ustawić jeden timer i dwa wyjścia (OC1A i OC1B)...
    Każde wyjście może być odmiennie skonfigurowane w obrębie jednego timera...
    Tzn. jeden np OC1B może być odwrócony względem OC1A albo oba jednakowe...
  • REKLAMA
  • #3 1804226
    kolanopan
    Poziom 12  
    Posty: 82
    Pomógł: 5
    Wiem, najchetniej bym użył 16 bitowego timera, i przy tej samej czestotliwosci sterował wypełnieniem PWM na obu nóżkach, to czego niewiem to jak skonfigurowac rejestry :cry:
  • REKLAMA
  • Pomocny post
    #4 1804671
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 139
    Ocena: 32
    Wszystko jest w dokumętacji...
    http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf...
    PDF strona 74 wszystko o 16-bit Timer...
    Poczytaj o dostępie do Rejestrów 16 bitowych...
    PDF str. 95 opis rejestrów...
    I tak na wszelki wypadek przykład konfiguracji PWM...
    
    volatile uint16_t pwm=10;
    
    void PWM_Init (void)
    {
     TCCR1A = 0b10110010;
     TCCR1B = 0b00011011;
     ICR1H = 0b00000011;
     ICR1L = 0b11000000;
     OCR1A = pwm;
     OCR1B = pwm;
     TIMSK |= (1 << TOIE1);
     sei();
    }
    


    PWM z dwoama wyjściami z tym, że OC1B jest odwrócone względem OC1A...
    A poniżej obsługa przerwania i zmaina wypełnienia...
    
    SIGNAL (SIG_OVERFLOW1)
    {
     if(bit_is_set(PINA, PA0))
      {
       delayms(50);
       if(bit_is_set(PINA, PA0))
       {if(pwm < 960) {pwm+=2; OCR1A = pwm; OCR1B = pwm;}}
      }
      
      if(bit_is_set(PINA, PA1))
      {
       delayms(50);
       if(bit_is_set(PINA, PA1))
       {if(pwm > 2) {pwm-=2; OCR1A = pwm; OCR1B = pwm;}}
      }
    }
    


    Co do reszty to trzeba samemu też ruszyć głową...

    Powodzenia...
  • REKLAMA
  • #5 1804831
    kolanopan
    Poziom 12  
    Posty: 82
    Pomógł: 5
    Wielkie dzieki "pubus" w szczegolnosci pierwszy kod mi pomół, teraz wiem ktore rejestry trzeba ustawiać, teraz sklece program w całość i zobaczymy coi bedzie, o ewentualnych efektach napisze na forum.

    Mam nadzieje ze nie tyle mi co innym forumowiczpom też sie przydadzą te dane :D
  • #6 1807448
    hunterhouse
    Poziom 26  
    Posty: 893
    Pomógł: 84
    Ocena: 3
    można też zrobić inaczej używać tylko jednego PWM i zastosować układ logiczny np 4066 lub 4053 do przełączania która para ma działać.
    rozwiązanie to zwalnia ci PWM (bo potrzebujesz tylko 1) ale konsumuje inny pin lub nawat dwa zależy od rozwiązania .
    no i potrzebujesz dodatkowego układu.
    rozwiązanie to będzie pomocne gdy masz dwa lub więcej silników.

    jeżeli potrzebujesz tylko 1 silnik to lepiej sterowanie zostawić softowi i nierobić sobie dodatkowej roboty :)
REKLAMA