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

Szukam pomysłu na sterowanie dwoma serwo mechanizmami.

24 Lis 2007 04:22 1454 4
  • Poziom 14  
    Witam
    Mam problem tego typu ,że nie mogę znaleźć pomysłu jak serwować dwoma "serwo" mechanizmami, za pomocą dwóch czujników ultradźwiękowych.
    Pytanie może nie dokładnie skonkretyzowane , wiec postaram się je opisać:
    Silniki sterowane są szerokością impulsu co przedstawia rysunek nieżej:

    ___
    .......|_______________________ lewo
    1ms...............20ms (konieczne i nie do zmiany)
    __________________
    .....................................|_________________________ prawo
    2ms ......................................20ms (konieczne i nie do zmiany)


    Czujniki ultradźwiękowe będą podawały co ok. 20ms odległość od przeszkody.
    Każdy z czujników steruje oddzielnym silnikiem. Dwa czujniki oraz dwa silniki 
    Regulacja silników ma być płynna – to jest ten szkopuł który musze rozgryźć.
    Sterowanie silnikami nie jest po PWM , gdyż 20ms to wymagana na sztywno ( nie do zmiany) wartość. Przykładowo jeżeli będę chciał ustawić się na godzine 12.00 –długość impulsu jaką musze podać to 1.5ms , godz. 11.00 to 1.4ms itd…. Ważne jest aby zachowana była tez płynność silnika.
    Do problemu tego skorzystałem z LPC2142, programowo to chodzi- ale brak płynności.
    Próbowałem zastosować timery - niestety w peryferiach są tylko 2 (timer0/1) które widze jedynie do generowania czasów do sterowania jednego silnika. PWM odpada gdyż to nie jest przebieg okresowy.

    Szukam idei , albo dobrego pomysłu jak na tym układzie można to najlepiej zrobić.
    Z góry dzięki
    pozd
  • Poziom 33  
    Cześć
    W Bascomie masz efektywną instrukcję do sterowania serwami, ale działa ona efektywnie przy kwarcu ponad 8MHz.
    Pozdrawiam

    Edit
    Zauważyłem dopiero teraz że nie robisz na AVR :cry:
    Zostaje Ci tylko to zrobić na przerwaniu, wystawiasz jedynkę na pin portu, ładujesz czas do zmiennej i w przerwaniu ją zmniejszasz, po osiągnięciu zera wystawiasz logiczne zero na pin.
    Przerwania co 10µs powinny dać w miarę płynny ruch.
    Serwa sterowane są sekwencyjnie ( zobacz na jakieś strony modelarskie ), jak wyślesz impuls do jednego i się skończy, to możesz wysyłać do następnego po przeładowaniu zmiennej, nie trzeba do tego zużywać dwu zegarów.
  • Poziom 14  
    Nie bardzo rozumiem twego pomysłu. Czas 20ms po impulsie jest wstawiony na sztywno. Jeżeli skrócimy - silnik będzie się zacinał, gdy wydłużymy będzie stawał i robił kroki -brak płynności.
  • Poziom 33  
    Cześć
    To nie jest tak jak kombinujesz.
    Sterownie typu PPM do serw może przenieść kilka kanałów, 20ms to nie przerwa miedzy impulsami tylko okres powtarzania.
    Transmitowane sygnały od nadajnika PPM nie zawierają szerokich na 1,5ms impulsów tylko szpilki i szerokości około 300µs, pierwsza szpilka wyznacza początek impulsu do serwa, druga koniec, a jednocześnie początek impulsu do drugiego serwa i tak dalej, tych kanałów może być 6 i więcej.
    Po serii impulsów następuje przerwa synchronizująca.
    W odbiorniku modelarskim impulsy wrzucamy do licznika, dzięki niemu odtwarzamy sygnały do serwa, a po przekroczeniu założonego czasu, czyli po dojściu przerwy synchronizującej zerujemy licznik i zaczynamy zabawę w odtwarzanie od początku.
    Serwo reaguje na szerokość impulsu a nie współczynnik wypełnienia, czy to będzie 15ms czy 25ms dla dobrego serwa nie ma znaczenia, jedynie pierwszy impuls jest powtarzany regularnie, a okres powtarzania następnych się zmienia w niewielkich granicach.
    Rozrysuj to sobie albo pogooglaj z hasłem PPM.
    Jeśli masz kłopot to wstaw osobny procesor do sterowania serwami, 8 dodatkowych nóżek i kilka złotych Cię nie zbawi a na Attiny w Bascomie zrobisz to w kilku linijkach, transmisja wartości sterujących szeregowo nie powinna być kłopotliwa.
    Piotr