-         

Ergebnis 1 bis 4 von 4

Thema: RP6 mit Servo Modul SD21

  1. #1

    RP6 mit Servo Modul SD21

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo!

    Vorweg ich bin *Newbe* was das programmieren von Robotern angeht.
    Ich bin gerade dabei das Servo Driver Modul SD21 an meinem RP6 zu testen. Zuerst möchte ich den Servo nur mal in eine gewünschte Position Rechts und Links drehen. Sollte normalerweise über I2C kein Problem sein. Bis jetzt dreht der Servo irgendwo hin und bleibt da auch.

    In der Anleitung hab ich gelesen ich muß mit einem Register arbeiten. Das so aus sieht:
    Register 0, Servo 1, Speed
    Register 1, Servo 1, Low byte
    Register 2, Servo 1, High byte
    Register 3, Servo 2, Speed
    usw... bis Servo 21 und noch zus. Funktionen.

    Hier stellt sich mir schon mal die erste Frage. Was sind Low byte und High byte? Wie verwende ich die?

    Das diese für die Servo Position zuständig sind ist mir klar, aber was bedeuten die 2 Werte?

    Hier noch mein derzeitiger Code:

    Code:
     
    #include "RP6RobotBaseLib.h"
    #include "RP6I2CmasterTWI.h"
    
    uint8_t servo1a;
    uint8_t servo1b;
    uint8_t servo1c;
    
    char buffer1[1];
    
    #define servoboard 0xC2
    
    void servo(void)
    	{
    	I2CTWI_initMaster(100);
    	powerON();
    	
    	while(true)
    	{
    		
    	receiveBytes(5);
    	waitUntilReceptionComplete();
    	copyReceivedBytesToBuffer(&buffer1[0]);
    		
    	I2CTWI_transmit2Bytes(servoboard, 7, buffer[0]);
    		
    	
    	}
    	
    	}
    
    int main(void)
    
    {
    	initRobotBase();
    	
    	servo(); 
    	
    	return 0;
    }
    Für Hilfe an nen *Newbe*, der sein Wissen wieder um ein kleines Stückchen erweitern kann, währe ich Dankbar.

    Es grüßt

    MeX

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Hallo Mex78,

    ich kenne nicht das genaue Protokoll des Servotreibers.
    Ich gehe aber davon aus, dass einzelne Bytes nacheinander (wohl 3 pro Servo) übertragen werden.

    Die Servoposition ist dabei eine 16-Bit-Zahl (z.B. Integer), deren Low-Byte zuerst, danach das High-Byte übertragen wird.
    Das wäre dann:
    Lowbyte1 = Servoposition1 & 0x0f;
    Highbyte1 = Servoposition1 >> 8;

    Gruß Dirk

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Willkommen im RN-Forum. Ein nettes Board hast du da. *grins*

    Aus dem SD21-Datenblatt:
    Servo Position
    The position (low byte/high byte) is a 16 bit number which directly sets the output pulse
    width in uS. Setting the position to 1500 (1500uS or 1.5mS) will set most servo's to their
    center position. The range of pulse widths that are normally supported are from 1000uS
    (1mS) to 2000uS (2mS). It is usually possible to go beyond these limits though. On a Hitec
    HS311 servo, we can set the position from 800 to 2200 to give a nice wide range of
    movement. Take care though as its easy to make the servo run into its internal stops if
    you give it pulse widths at the upper or lower extremes. The registers can also be read
    back. The position will be the current position of the servo during a speed controlled
    movement, so you can track its progress towards the requested position.
    Das bedeutet, die Position wird in Mikrosekunden angegeben, Werte von ca. 1000 bis 2000 (je nach Servo etwas unterschiedlich). Da die SD21-Register aber nur 8Bit groß sind (0-255) werden die Werte auf zwei Register verteilt (16 Bit). Dabei unterscheidet man zwischen Low-Byte(das niederwertige Byte) und High-Byte(das hochwertige Byte). Die Position errechnet sich dann so:

    Position=256*highbyte+lowbyte

    bzw

    Position mod 256=lowbyte und Position div 256=highbyte.

    (mod(%) ist der ganzzahlige Rest und div(\) ist der ganzzahlige Teiler oder so ähnlich)

    Das kann man übrigens auch googlen...

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Danke für die schnellen Antworten. Bei mir ist jetzt der Groschen gefallen. Das muß ich jetzt gleich mal testen.

    Danke!

    Es grüßt

    MeX

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •