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

Serwo cyfrowe HSR 8498HB - tryb Serial Mode

albertas123 17 Lut 2010 12:02 777 0
  • #1
    albertas123
    Poziom 8  
    Witam!

    Pracuję na serwie cyfrowym HSR 8498HB i próbuje dostać się do trybu Serial Mode. Ciekaw jestem czy ktoś z was miał z tym do czynienia.

    Zgodnie z instrukcją do serwa należy wysłać następujący szereg bajtów (przykładowo aby ustawić prędkość serwa i odczytać pozycję):

    Byte 1 = Header = 0x080
    Byte 2 = Command = 0xE9
    Byte 3 = Data 1 = Servo ID (0x00 to 0x7F) : use 0x00
    Byte 4 = Data 2 = Speed (0x00 to 0xFF)
    Byte 5 = Checksum = 256 – (Byte 1+ Byte2 +Byte3+Byte4)
    Byte 6 = Received Byte 1 = Position High
    Byte 7 = Received Byte 2 = Position Low

    Wszystko to z prędkością 19200 b/s. Tak wygląda poprawna ramka w przypadku wysłania nagłówka 0x080:
    Serwo cyfrowe HSR 8498HB - tryb Serial Mode

    Cały pakiet ma składać się z: 7* (8+3) bitów = 4.03 ms.

    Wykonałem najprostszy z możliwych program na delayach, badam oscyloskopem sygnał wysyłany do serwa, ale niestety serwo a momencie wysyłania dwóch ostatnich 0x00 nic nie odpowiada. Nie potrafię dojść do tego co jest nie tak.

    Poniżej program:

    Code:

    // SET MOTOR SPEED AND READ POSITION//

          // HEADER //0x80// 1 1111 1110 00
          PORTC = 0xFF;
          _delay_us(8*52);
          PORTC = 0x00;
          _delay_us(3*52);
          
          // COMMAND // 0xE9 // 1 0110 1000 00
          PORTC = 0xFF;
          _delay_us(1*52);
          PORTC = 0x00;
          _delay_us(1*52);
          PORTC = 0xFF;
          _delay_us(2*52);
          PORTC = 0x00;
          _delay_us(1*52);
          PORTC = 0xFF;
          _delay_us(1*52);
          PORTC = 0x00;
          _delay_us(5*52);

          // DATA 1 = SERVO ID // 1 1111 1111 00

          PORTC = 0xFF;
          _delay_us(9*52);
          PORTC = 0x00;
          _delay_us(2*52);

          // DATA 2 = SPEED // 1 1111 1111 00

          PORTC = 0xFF;
          _delay_us(9*52);
          PORTC = 0x00;
          _delay_us(2*52);

          // CHECKSUM = 1 0110 1001 00

          PORTC = 0xFF;
          _delay_us(1*52);
          PORTC = 0x00;
          _delay_us(1*52);
          PORTC = 0xFF;
          _delay_us(2*52);
          PORTC = 0x00;
          _delay_us(1*52);
          PORTC = 0xFF;
          _delay_us(1*52);
          PORTC = 0x00;
          _delay_us(2*52);
          PORTC = 0xFF;
          _delay_us(1*52);
          PORTC = 0x00;
          _delay_us(2*52);

          // 00 // 1 1111 1111 00

          PORTC = 0xFF;
          _delay_us(9*52);
          PORTC = 0x00;
          DDRC = 0x00;
          _delay_us(2*52);
          DDRC = 0xFF;

          // 00 // 1 1111 1111 00

          PORTC = 0xFF;
          _delay_us(9*52);
          PORTC = 0x00;
          DDRC = 0x00;
          _delay_us(2*52);
          DDRC = 0xFF;


    Help!