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

atmega8 sterowanie dwoma silnikami DC (bascom)

ziguś 04 Lis 2011 12:17 2070 3
REKLAMA
  • #1 10099739
    ziguś
    Poziom 23  
    Witam.
    Mam takie pytanie do mądrzejszych od siebie. Strasznie szarpie mi bramą przy ruszaniu, więc zastosowałem sterowanie PWM. Silnik rozpędza się 10 sekund - wtedy jest ok. Ale jak to zrobić żeby jak pierwszy silnik jest w połowie rozpędzania a atmega dostanie impuls z krańcówki, żeby zaczęła rozpędzać silnik drugiego skrzydła a pierwszy nadal kontynuował rozpęd. Próbowałem to zrobić za pomocą podprogramów ale chyba nie tędy droga. Czy mogę prosić o jakąś podpowiedź dla początkującego ?
  • REKLAMA
  • #2 10099826
    daniel6662
    Poziom 21  
    Najprościej chyba to zrobić w przerwaniu od jakiegoś timera. W każdym wywołaniu sprawdzasz warunki dla każdego silnika:
    "jeżeli prędkość_aktualna>prędkość_zadana to prędkość_aktualna+1"
    "jeżeli prędkość_aktualna<prędkość_zadana to prędkość_aktualna=prędkość_zadana"
    Potem w tym przerwaniu zamieniasz "Prędkość_aktualna" na odpowiednią wartość PWM
    I gdy w dowolnym momencie będziesz chciał przyspieszyć silnik wpisujesz do zmiennej "prędkość_zadana" odpowiednią wartość po czym przyspieszaniem zajmie się już przerwanie.
    Szybkość przyspieszenia regulujesz po przez zmianę częstotliwości wywoływania przerwania.
    Mam nadzieje że rozumiesz o co mi chodzi:)
    Nie podałem konkretnego przykładu w bascomie, ponieważ dawno się z nim pożegnałem i prawie już go nie pamiętam:)
    Pozdrawiam
  • REKLAMA
  • #3 10099847
    ziguś
    Poziom 23  
    OK, będę próbował tą drogą. Jak coś wymyślę dam znać.
  • Pomocny post
    #4 10102364
    arktik1
    Poziom 27  
    Chyba można to zrobić jeszcze prościej.
    Uruchomić zwiększanie 1 PWM, a gdy dojdzie np do połowy to zacząć zwiększać 2 PWM.
    Można to zrobić w jednej pętli.
    
    Do
    if PWM1 < 255 then 
    Incr PWM1
    endif
    
    if PWM1 => 120 and PWM2 < 255 then 
    incr PWM2
    endif
    loop
    
REKLAMA