-         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Problem mit Servos

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.10.2008
    Beiträge
    11

    Problem mit Servos

    Anzeige

    Hallo!

    Bin zwar schon länger im Forum angemeldet, kam aber noch nie zum schreiben...

    Und mein erster Post ist natürlich aufgrund eines für mich nicht lösbaren problems...

    Die Vorgeschichte:

    Ich habe mir bei Conrad 7 Servos bestellt, um einen kleinen roboterarm (oder greifer?) zu bauen.

    Hier mal ein paar Bilder für den Überblick:
    (das lezte Gelenk + Greifer sind nicht montiert, habs abgenommen um herumzuprobieren...)

    http://www.pictureupload.de/original...4_IMG_0273.JPG
    http://www.pictureupload.de/original...9_IMG_0274.JPG
    http://www.pictureupload.de/original...7_IMG_0275.JPG
    http://www.pictureupload.de/original...3_IMG_0276.JPG
    http://www.pictureupload.de/original...8_IMG_0277.JPG

    Soweit, sogut, mein Problem ist nun folgendes:

    da die Servos bei jedem gelenk gegenüber voneinander liegen, muss ichs sie ja auch genau gegengleich ansteuern...

    das funktioniert aber nur bei zb.: 2 Servos (servo1, servo2)

    Servo 1 = 0 Grad
    Servo 2 = 180 Grad

    ->

    Servo 1 = 180 Grad
    Servo 2 = 0 Grad


    Dann bewegen sie sich vom einen Anschlagpunkt zum anderen Anschlagpunkt.

    Wenn ich aber zum Beispiel 70 Grad bei einen Servo will, muss ich den anderen (rein theoretisch) auf 110 Grad stellen lassen.

    Nur funktioniert das überhaupt nicht. Die Servos bewegen sich nicht nebeneinander sondern einer der beiden ist dann immer etwas versetzt... so ca. 10 Grad.

    Was tun?

    Hat jemanden einen Tipp? Toll wäre es, wenn ich das ganze mit einer Formel lösen könnte...

    Oder geht das so einfach nicht? Vielleicht bin ich ja völlig auf dem Holzweg...
    Im WWW finde ich einfach nichts dazu....

    Hilfe

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    55
    Beiträge
    5.789
    Blog-Einträge
    8
    Hallo

    Ich befürchte, was jetzt kommt wird dir nicht gefallen: Der Drehbereich (speziell der billigen RS2-3€-Servos) ist nicht linear, die selbe Impulsänderung verursacht je nach Anschlagseite unterschiedliche Winkeländerungen.

    Plan A wäre dieses Verhalten über eine Umrechnungstabelle für jedes Servo zu kompensieren. In den Tabellen kannst du dann auch gleich die seitenverkehrten Impulslängen reinrechnen. Also einen Wert für ein Servo ausgeben und den Wert für das Andere solange ändern bis es passt. Dann beide Werte notieren. Je nach geplanter Schrittweite ergibt das mehr oder weniger umfangreiche Tabellen. Beachten mußt du noch, dass die Servos im kaltem Zustand anders drehen als im erwärmten Zustand, sie sollten also warmgelaufen sein bevor du die Werte ermittelst.

    Plan B halte ich für langfristig sinnvoller: Baue dir linke und rechte Servos indem du jeweils bei einem der Pärchen den Motor und das Poti umpolst. Das Umpolen ist bei diesen Servos recht einfach, erfordert aber Lötkenntnisse und etwas mechanisches Geschick. Dafür kannst du dann beide Servos mit dem selben Signal versorgen. Ob sie dann allerdings wirklich syncron laufen habe ich noch nicht getestet, kann ich aber nachholen. Vermutlich wird sich der Restfehler letztlich durch die mechanische Verbindung aufheben. Bilder vom geöffneten Servo mit mehr Details zum Umbau kann ich dir nachliefern, falls du diesen Weg gehen willst.

    Gruß

    mic

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

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    12.10.2008
    Beiträge
    11
    okay, mal vielen dank für die aufklärung... genau so etwas habe ich befürchtet...

    da mein Arm ja noch nicht ganz fertig aufgebaut ist werde ich mich eher für variante B eintscheiden...

    auch davon habe ich bereits im netz gelesen, allerdings war ich etwas gehemmt, an meinen Servos herumzulöten...

    Lötkenntnisse habe ich eigentlich ziemlich gute, also würde mir nur noch eine kleine anleitung mit bebilderung fehlen
    Wäre toll wenn du mir etwas dazu geben könntest

    Und wie sicher funktioniert das ganze dann? Oder funktioniert der Servo nach dem Umbau dann einfach nur genau Verkehrt rum?

    Danke für die rasche Antwort

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    55
    Beiträge
    5.789
    Blog-Einträge
    8
    Hallo

    Ich baue morgen mal eins um und mache ein paar Bilder. Das umgebaute Servo läuft dann spiegelverkehrt zum Orginal.

    Das Poti ist neben dem Anschlußkabel angelötet, nach dem Ablöten kann man den Motor an der Platine rausziehen. Zuvor aber unbedingt das Getriebe komplett wegbauen, auch das erste große Zahnrad direkt am Motor (Achse rausziehen wenn sie nicht im Deckel steckt) Das Ritzel auf der Motorwelle ist vorne dicker als hinten und könnte sonst beim Rausziehen des Motors das große Zahnrad beschädigen. Dann denn Motor aus der Platine auslöten (zuvor Einbaulage/Anschlüsse markieren!), alle fünf Lötstellen zinnfrei machen und den Motor verpolt wieder einlöten. Die äußeren zwei Drähte des Potis isolieren, überkreuzen und so hinbiegen dass die Lötaugen der Platine genau draufpassen (Mitteldraht als Zielhilfe beim Ausrichten der Drähtchen). Poti einlöten, dann alles wieder zusammenbauen und fertig

    Gruß

    mic

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

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    12.10.2008
    Beiträge
    11
    okay, danke... vielen dank

    das poti gehört also auch umgepolt?

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.602
    wenn man nur den motor umpolt, würde er in die, für die regelstrecke, entgegengesetzte richtung drehen und mit sicherheit das getriebe zerlegen, darum dreht man motor UND poti um, damit die vorzeichen wieder stimmen

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    12.10.2008
    Beiträge
    11
    also, gehört das poti völlig umgedreht, also ausgebaut und wieder verkehrtrum eingebaut, oder reicht es die beiden äußeren kontakte umzupolen?

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    30
    Beiträge
    4.674
    Die beiden äuseren Anschlüsse musst du umpolen. Wie willst du das Poti umdrehen?

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    12.10.2008
    Beiträge
    11
    genau das hab ich mich ja auch gefragt :P

    aber sicherheitshalber nachfragen schadet nie

  10. #10
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    55
    Beiträge
    5.789
    Blog-Einträge
    8
    Hallo

    Ein Bild sagt mehr als tausend Worte:


    Die Videos dazu:

    http://www.youtube.com/watch?v=uL_am_61jfU
    http://www.youtube.com/watch?v=KLWulyIWCak
    http://www.youtube.com/watch?v=IAP3Z-bAb-g


    Die Drähte der Potis sind leider zu kurz und müssen verlängert werden. Viel Spass beim Nachbau.

    Beide Servos erhalten das selbe Signal und können deshalb auch parallel angeschlossen werden:
    Code:
    #include <avr/io.h>			// I/O Port definitions
    #include <avr/interrupt.h>	// Interrupt macros
    
    uint8_t i, x, y, z;
    volatile uint8_t p;
    
    void init(void)
    {
    	TCCR0 = (0 << WGM00) | (1 << WGM01);					// CTC-Mode
    	TCCR0 |= (0 << COM00) | (0 << COM01);					// ohne OCR-Pin
    	TCCR0 |=	(0 << CS02)  | (0 << CS01) | (1 << CS00);	// kein prescaler
    	TIMSK = (1 << OCIE0); // Interrupt ein
    	OCR0  = 79; // 100kHz
    
    	DDRA |= 16;				// E_INT1 als Ausgang
    	DDRC |= 3;				// SCL und SDA als Ausgang
    
    	sei();
    }
    void pause(uint8_t dauer)
    {
    	p=dauer;
    	while(p);
    }
    int main(void)
    {
    	x=y=z=140;
    	init();
    	pause(200);
    
    	while(1)
    	{
    		x=y=z=60;
    		pause(100);
    		x=y=z=220;
    		pause(100);
    	}
    	return(0);
    }
    ISR(TIMER0_COMP_vect)
    {
    	static uint16_t count;
    	if(count>x) PORTA &= ~16; // E_INT1 (Pin8)
    		else PORTA |= 16;
    	if(count>y) PORTC &= ~1; // SCL (Pin10)
    		else PORTC |= 1;
    	if(count>z) PORTC &= ~2; // SDA (Pin12)
    		else PORTC |= 2;
    	if(count<2000)count++;
    		else { count=0; if(p) p--; }
    };
    (Für einen 8MHz-Mega32)

    Gruß

    mic

    [Edit]
    26.03.2016: Bilder neu verlinkt
    Geändert von radbruch (26.03.2016 um 20:36 Uhr)

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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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