- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 4 von 9 ErsteErste ... 23456 ... LetzteLetzte
Ergebnis 31 bis 40 von 85

Thema: RP6Control M32: Library für 8 Servos

  1. #31
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    Anzeige

    Powerstation Test
    die antwort habe ich jetzt selber: im namen der "RP6ControlServo.c" war durch copy und paste ein blank hinter dem "c", die datei wurde somit nicht als *.c erkannt.

    so weit so gut, die stromversorgung der Servos habe ich getrennt vom RP, einen wackler in meiner verdrahtung beseitigt.

    jetzt lässt sich die datei kompilieren, beim kontaktieren der Servos zu den pins PC7,PC5,PC3 (egal welches servo an welchem pin) fährt der servo zum linken anschlag (von vorne gesehen) und zuckt dann dort vor sich hin, als wollte er noch weiter.

    ein fortschritt, aber ganz richtig kanns ja noch nicht sein, oder?
    gruß inka

  2. #32
    Benutzer Stammmitglied
    Registriert seit
    30.12.2009
    Ort
    Koblenz
    Alter
    44
    Beiträge
    78
    Hast Du die Masse der externen Stromversorgung an die an des RP6 gekoppelt ? Dem sollte so sein. Steht irgendwo oben in diesem Thread
    Ich habe bereits bis Unendlich gezählt. Zweimal, und zurück

  3. #33
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    jetzt habe ich die massen von RP6 und der externen servoversorgung verbunden.

    servo 2 an pin 5 / PC3 tut das erwartete, auch die beiden anderen servos, wenn ich sie an diesem pin anschliesse. Am pin 3 / PC5 und pin 1 / PC7 fahren die Servos an einen anschlag und bleiben dort. sie zucken auch nicht.

    in der demodatei habe ich nur die initialisierung in

    initSERVO(SERVO2 | SERVO4 | SERVO6);

    geändert. Muss ich noch etwas ändern?

    Hat es schon jemand in der praxis mit drei oder mehr Servos getestet?

    Ein anderes programm, mit 3 servos, allerdings mit dieser funktion
    -----------------------------
    for(c=0; c<50; c++)
    {
    PORTC |= IO_PC7; // Impulsstart servo I
    sleep(12); // 1 = 0.1ms warten = Servoposition 1
    PORTC &= ~IO_PC7; // Impulsende
    sleep(150); //50ms warten
    }
    -------------------------------

    funktionieren alle drei servos!
    gruß inka

  4. #34
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Also ich benutze die Lib mit allen acht Servos ohne Probleme.
    Acht gleichzeitig ist halt auch mit externer Versorgung etwas kritisch, aber prinzipiell geht es.

  5. #35
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Am pin 3 / PC5 und pin 1 / PC7 fahren die Servos an einen anschlag und bleiben dort. sie zucken auch nicht.
    Wenn du die Servos 2, 4, 6 benutzt, must du natürlich auch die Variablen servo2_position, servo4_position, servo6_position in der Demo verwenden, um diese Servos anzusteuern.

    Es sieht so aus, als ob du servo4_position und servo6_position gar nicht änderst.

    Gruß Dirk

  6. #36
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hi Dirk,

    danke für den entscheidenden hinweis - es läuft!!!!
    gruß inka

  7. #37
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hi allerseits,

    ich versuche mit den drei Servos ein paar positionen nacheinander anzufahren, zunächst mal zwei. mit dem code (in Dirks democode eingesetzt)

    Code:
       while(true) 
       {
           servo2_position = 30;
           servo4_position = 50;
           servo6_position = 120;
    
          task_SERVO();
          mSleep(3);
      
    	    servo2_position = 80;
           servo4_position = 100;
           servo6_position = 20;
    
    	  task_SERVO();
    	  mSleep(3);
    
       }
    geht es nicht. Muss ich in die while-true schleibe noch einmal zwei zählschleifen einbauen, oder wird das nacheinander abarbeiten der zwei positionen auf eine andere art erreicht?


    danke...
    gruß inka

  8. #38
    Benutzer Stammmitglied
    Registriert seit
    30.12.2009
    Ort
    Koblenz
    Alter
    44
    Beiträge
    78
    Die Positionsveränderungen der jeweiligen Servos erfolgt sehr schnell hintereinader. Versuch es mal mit einem Timer, der die jeweiligen Positione alle 2 Sek. oder so Ändert. Sollte dann funktionieren. Ist Ähnlich, als wenn Du versuchen würdest Deinen Arm alle 10 Millisekunden zu strecken, zu beugen und wieder zu strecken. Das geht einfach nicht,
    Ich habe bereits bis Unendlich gezählt. Zweimal, und zurück

  9. #39
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @inka:
    Da gibt es einige Möglichkeiten.

    Am Einfachsten:
    In der while(1)-Schleife gibt es eine Stopwatch-Abfrage (a-la: if (getStopwatch2() > nnn) ...). Darin änderst du dann die 3 Servopositionen.
    Das kann man z.B. so machen, dass man die Positionen in einem Array ablegt. In deinem Fall wäre das z.B. ein Array mit 3 Werten je Position. Die Größe (Zahl der Positionen) hängt von der Länge der Bewegung ab, die du machen willst.
    Jedesmal, wenn die Stopwatch-Abfrage aufgerufen wird (also alle nnn ms) übergibst du die Werte aus dem Array an die Variablen servoX_position. Dann zählst du noch den Index des Array um 1 hoch.
    Dadurch kannst du jede komplexe Bewegung der 3 Servos abspulen.

    Wenn das alles in deinem Programm noch besser wird, gibt es mehrere Bewegungsabläufe als Funktionen in der while(1)-Schleife:
    Code:
    while(true)  
    {
    	task_SERVO();	// The main servo task
    	Bewegung1();
    	Bewegung2();
    }
    Jede Bewegung sieht so ähnlich aus:
    Code:
    void BewegungX(void)
    {
    	if (getStopwatchY() > nnn) {	// Change position every nnn ms
    		// Hole 3 Servopositionen aus dem Array
    		// Lege sie in 3 servoX_position ab
    		// Inkrementiere den Array-Index
    		setStopwatchY(0);
    	}
    }
    Gruß Dirk

  10. #40
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180

    servo II zittert

    hi allerseits,

    ich habe ein bischen mit dem beispielprogramm von proevofreak experimentiert und habe eine frage:

    Code:
    #include "RP6BaseServoLib.h"
    
    
    
    
    
    int main(void)
    {
       initRobotBase();
    
    
    
       /* Servo1 in die linke Stellung vordefiniert */
    
    
       initSERVO(SERVO1/* | SERVO2*/ );
    
    
    startStopwatch2();
    
    if (getStopwatch2() < 100)
        {servo1_position = 55;
    //     servo2_position = 180;
         writeString("Servopos: 55 \n");}
    
    
       while(true)
       {
    
    
     if (getStopwatch2() > 1000 && getStopwatch2() < 2000)
        {servo1_position = 0;
         writeString("Servopos: left \n");}
    
     if (getStopwatch2() > 3000 && getStopwatch2() < 4000)
       {servo1_position = RIGHT_TOUCH;
       writeString("Servopos: right \n");}
    
     if (getStopwatch2() > 5000 && getStopwatch2() < 6000)
       {servo1_position = MIDDLE_POSITION;
       writeString("Servopos: middl_pos \n");}
    
     if (getStopwatch2() > 7000)
          {setStopwatch2(0);}
    
        task_SERVO();
         mSleep(3);
       }
       return 0;
    }
    so, wie es ist, funktioniert es für sevo I. Wenn ich servo 2 initialisiere und in position "180" fahren lasse (ist noch for der whileschleife) tut servo 2 das, die ganze mimik fängt aber bei weiteren bewegungen von servo 1 zu zittern und wackeln. servo 2 verharrt in der zugewiesenen position...

    die Servos werden extern versorgt, die massen sind verbunden...

    wieso das so ist - ich komme einfach nicht drauf...
    gruß inka

Seite 4 von 9 ErsteErste ... 23456 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen