-         

Ergebnis 1 bis 5 von 5

Thema: Greifarmsteuerung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.06.2013
    Beiträge
    9
    Blog-Einträge
    1

    Greifarmsteuerung

    Anzeige

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

    Habe den RP6 mit einem Greifarm erweitert. Zusätzlich habe ich das W-LAN-Modul M256 (Master), das über I2C mit dem Servoboard SD21 verbunden ist.

    Den Greifarm hab ich soweit über I2C des Servoboards angesteuert.


    Code:
    #define SD21_Servoboard_I2C_ADR 0xC2	
    
    
    void I2C_SD21(uint8_t servo, uint8_t servo_speed, uint16_t servo_position)
    
    {
    uint8_t transmitBuf[4];
    transmitBuf[0] = (servo -1)*3; 	                    // Register 0-2 = Servo1, 3-5 = Servo2, ...
    transmitBuf[1] = servo_speed; 	                    // Geschwindigkeit 0...255
    transmitBuf[2] = (servo_position & 0xff);	      // Low Byte Position
    transmitBuf[3] = ((servo_position >> 8) & 0xff);     // High Byte Position
    
    I2CTWI_transmitBytes(SD21_Servoboard_I2C_ADR,&transmitBuf[0],4);
    }
    
    // STOP Servo
    
    void I2C_SD21_STOP(uint8_t servo, uint8_t servo_speed)  
    
    {
    I2CTWI_transmit2Bytes(SD21_Servoboard_I2C_ADR,1,0);
    }
    Meine frage ist, wie ich einen Servo anhalten (Stoppen) kann. Habe bei der Funktion I2C_SD21_STOP,

    den servo 1 anhalten wollen, indem ich die servo_speed auf 0 setze. Klappt aber nicht wie ich es will.

    Ich möchte gerne das der Servo während er verfährt, nach einem bestimmten Eingabebefehl stoppt und

    auf der Position bleibt, wo er sich gerade befindet.

    Wenn Ihr noch Informationen braucht fragt mich.

    Gruß

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    28
    Beiträge
    116
    Hallo Transformer,
    ich kenne das Board nicht. So wie ich das aus der Doku zum SD21-Print entnehme, kannst du nur die geschriebenen Register auslesen. Die aktuelle Position auszulesen scheint nicht zu funktionieren. Da bleibt dir wohl nichts anderes übrig, als die Ziel-Position anzupassen. Eventuell musst du auf der M256 dazu mitrechnen, wie die aktuelle Position ist.
    Hoffe, das nützt dir was.

    Gruss
    Filou

    [Edit]
    Dank dem Hinweis von Rabenauge ergänze ich:
    Mit aktuelle Position auslesen, wollte ich sagen, der Aktuelle Wert des PWM-Signals (also die Soll-Position) übernehmen und als Zielposition einsetzen. Bei schnellen Geschwindigkeiten ist aber nicht sichergestellt, dass der Servo der Soll-Position folgen kann. Ein Poti, das ein Feedback liefert, wäre wohl die einfachste Variante.
    Geändert von Filou89 (21.06.2014 um 13:18 Uhr)

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    49
    Beiträge
    1.245
    Aktuelle Servopositionen kann man, ohne Umbau, nie auslesen.
    Modellbauservos haben keinerlei Feedback.
    Wenn du jetzt dem Servo eine Sollposition übergibst, wird es versuchen, diese anzufahren und auch zu halten.
    Da Software schneller ist als Hardware, wird ein einfacher Stopp-Befehl nicht funktionieren, da der Rechner gar nicht weiss, wo das Servo sich aktuell befindet.
    Das kann man nur umgehen (ohne das Servo umzubauen), indem man es Stück für Stück verstellt und zwischen den Schritten immer wieder nachguckt, ob der Stopp-Befehl auftaucht.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    12.06.2013
    Beiträge
    9
    Blog-Einträge
    1
    Danke erstmal für eure Hilfe. Habe die Servos so angesteuert, dass diese verschiedene Positionen anfahren.

    Doch leider habe ich jetzt gemerkt dass manche Servos ruckeln, wenn Sie eine bestimmte Position anfahren und diese halten. ( Da wackelt der ganze Arm )

    Was kann man da machen , sodass die Servos nicht mehr Ruckeln? Habe im Programm ausprobiert die Servogeschwindigkeit zu erhöhen/reduzieren, verschiedene

    Positionen anzufahren, doch leider bleibt das Ruckeln.

    Infos:

    ModellbauServos(Bluebird Standard-Servo BMS-620 DMG;Bluebird (BMS-396V) Mini-Servo BMS-396V) an Servoboard SD21(6V Versorgungsspannung) angeschlossen

    Gruß

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Das Ruckeln der Servos kann verschiedenen Gründe haben.
    Letztlich befindet sich im Servo ein Regelkreis der Soll und Ist Wert an Hand eines Potis vergleicht. Ist das Poti oxydiert - wie man es manchmal von hifi-Anlagen kennt - kann es zu "kratzen" und damit zu Fehlstellungen und Geruckel kommen. Es kann aber auch sein, das der Arm für die Servos nicht gebaut bzw. zu schwer sind und er schlicht und einfach seine Regekurve nicht einhalten kann... und je nach dem was für Regelglieder dort arbeiten, wirken sich Fehlstellungen z.B. dann in Ruckeln aus. Servos sind eigentlich für Kräfte ausgelegt, wie die Steuerung einer Flugklappe/Ruder... nicht um zig bis hunderte Gramm zu heben/bewegen.
    Es mag noch mehr Gründe geben.. incl. fehlerhafter Ansteuerung im Timing aber grundsätzlich fehlen mal wieder ein Haufen Angaben zum Problem in deiner Frage damit man das zumindest eingrenzen könnte.

    Machen denn die Servos das auch ohne das Gewicht also wenn sie unverbaut sind? Wenn nein, weisst du zumindest das mit dem Gewicht zuzsammenhängt. Wenn doch... versuchs mal mit Kontaktspray am Poti... oder kauf dir gleich vernünftige Servos die für Last ausgelegt bzw. entsprechende Drehmomente ausgelegt sind. Und ich hoffe deine Spannungsversorgung leistet den nötigen Anlaufstrom für alle Servos... auch was, was man wieder nicht weiss.
    Gruß
    Geändert von RolfD (02.07.2014 um 21:42 Uhr)
    Sind Sie auch ambivalent?

Berechtigungen

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