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.

Okres PWM dla serwa inny niż 20ms - czy możliwe (Serwo modelarskie na OC2)

quinty 30 Lis 2012 17:51 1767 3
  • #1 30 Lis 2012 17:51
    quinty
    Poziom 28  

    Witajcie
    Konstruuję robota/samochodzik, którego sercem będzie atmega8A, napędem 2 przerobione serwa TowerPro SG 5010, a kamerą(telefonem) będzie obracało tanie mikroserwo.

    Serwa od napędu będą sterowane przez sprzętowy 16 bitowy timer , który ma dwa wyjścia (OC1A, OC1B). Tutaj nie ma żadnego problemu.

    Serwo kamery mógłbym obsługiwać przełączając na chwilę sygnał z OC1A lub OC1B z serwa napędowego na serwo kamery za pomocą przekaźnika. Jednak aby uprościć układ wolałbym Wykorzystać do tego timer 8-bitowy czyli OC2. Przy moich założeniach czyli taktowanie atmegi 8MHz nie da się uzyskać na OC2 okresu PWM 20ms / 50Hz. Zrobiłem kalkulator w excelu i dwie najbliższe wartości to:

    Okres PWM dla serwa inny niż 20ms - czy możliwe (Serwo modelarskie na OC2)
    Czyli 16ms lub 33ms.

    Można by też zrobić programowe PWM, jednak chciałbym jak najbardziej odciążyć procesor, który będzie obsługiwał komunikację przez UART, odczyty czujników itp.

    Serwo ma się uruchamiać tylko na chwilę gdy program główny dostanie informację po UARcie , ustawiać kamerę do wybranej pozycji i się wyłączać. Wiem, że przy 8-bitowm timerze będę mógł ustawić tylko kilka pozycji kamery, ale nie przeszkadza mi to.

    W skrócie:

    Czy mikroserwo modelarskie będzie działać przy okresie PWM 16ms lub 33ms


    Informacje czerpałem stąd:
    Link

    I tematy, w których nie znalazłem jednoznacznej odpowiedzi:
    Link
    Link
    Link
    Link

    0 3
  • #2 30 Lis 2012 18:26
    Piotr Piechota
    Poziom 21  

    O ile pamiętam to powinno działać przy okresie dłuższym niż 20ms. Będzie tylko nieco wolniej reagować ale jak to nie sterowanie śmigłowcem to nie powinno być problemu.
    Mam na myśli serwa analogowe - z cyfrowymi nie miałem doświadczeń.
    Zrób eksperyment na pewno go nie uszkodzisz.

    0
  • #3 30 Lis 2012 18:54
    GSM
    Poziom 25  

    Sterowałem serwo Hitec-a 61Hz i było zadowolone.
    Jeśli chcesz osiągnąć 50Hz a masz jeszcze te kilka cykli wolnych to w trybie FastPWM możesz w przerwaniu przepełnienia ustawiać inną wartość początkową TIMER-a, tak żeby okres wyszedł ~20ms.

    Pozdrawiam,
    GSM

    0
  • #4 30 Lis 2012 19:55
    perlon
    Poziom 19  

    To może tak :
    Timer2 w trybie FastPWM F_CPU=8MHz preskaler=1024, rejestr TCNT2=100, piny COM21:0=3 (invertedPWM)
    Przepełnienie licznika TCNT2 co 2ms (dokładnie to 19,968ms) (overflow) ustawia OC2 w stan niski
    Osiągnięcie licznika TCNT2 wartości z rejestru OCR2 (compare match) ustawia OC2 w stan wysoki
    W rejestrze OCR2 trzymamy wypełnienie PWM
    ( OCR2 = TCNT2 -> PWM=100% )
    ( OCR2 = 255 -> PWM=0% )

    0