- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: 2 Servos gleichzeitig ansteuern geht das nur mit Stopwatches

  1. #11
    Erfahrener Benutzer Begeisterter Techniker Avatar von RobbyMartin
    Registriert seit
    31.12.2009
    Ort
    Leverkusen
    Alter
    30
    Beiträge
    206
    Anzeige

    Powerstation Test
    Eine frage @ Radbruch

    in deinem Programm verstehe ich leider nur den ersten teil den komplexeren teil verstehe ich nicht, da die demo mit meinen roboterarm wesentlich besser lief würde ich gerne wissen wie ich es anpassen könnte

    mfg
    martin

  2. #12
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Code:
    // Die schon gestarteten Stoppuhren werden auf null gesetzt, alle Demos bei 0 starten
          setStopwatch1(0);
          setStopwatch2(0);
          setStopwatch3(0);
          
    // Nach "for(c=0;c<6;c++)" hat c den Wert 6. Die folgende Schleife wird solange
    // ausgeführt wie c einen Wert != 0 enthält.
          while(c)
          {
    // Der Wert in c wird mit Hilfe der LEDs dargestellt.
             setLEDs(1<<c);
    
    // Sind seit dem letzten reseten der Stopwatch1 mehr als 1000ms vergangen?
             if(getStopwatch1()>1000)
             {
    // Wenn ja, dann Stopwatch1 wieder auf null setzen und Demo für Servo1 ausführen
                setStopwatch1(0);
    // Unter Berücksichtigung der letzten Servoposition die nächste Position laden
               switch(servo1)
                {
                   case 38: servo1=30; break;
                   case 30: servo1=20; break;
                   case 20: servo1=14; break;
                   case 14: servo1=21; break;
                   case 21: servo1=31; break;
                   case 31: servo1=38; break;
                }
             }
    
    // Alle 100ms wird das Demo für Servo2 weitergetaktet
             if(getStopwatch2()>100)
             {
                setStopwatch2(0);
    // Servo2 weiterdrehen, wenn Ende Schwenkbereich erreicht ist, wieder neu starten
    // Nach jedem Schwenk wird hier c um eins verkleinert bis schlieslich "while(c)"
    // nicht mehr erfüült ist und die Demoschleife abgebrochen wird.
                servo2++;
                if (servo2 > 38) { servo2=14; c--; }
             }
    
             if(getStopwatch3()>300)
             {
                setStopwatch3(0);
    // Alle 300ms soll das Servo3 eine Endlage anfahren. Das ist im Video de Beeper
                if (servo3 == 10) servo3=50; else servo3=10;
             }
             task_RP6System(); // Verträglichkeitstest ;)
          }
    Verständlicher? Ich befürchte nein
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #13
    Erfahrener Benutzer Begeisterter Techniker Avatar von RobbyMartin
    Registriert seit
    31.12.2009
    Ort
    Leverkusen
    Alter
    30
    Beiträge
    206
    So nachdem ich wieder zeit hatte etwas herumzubasteln und programmieren stoße ich auf das nächste problem das demoprogramm von radbruch bewegt im zweiten teil den arm ganz langsam in eine position und schlägt danach ruckartig in die ausgangsposition

    siehe hier=> http://www.youtube.com/user/maddingo.../1/QuIyrsbIIHs

    wie kann man dies vermeiden , sodass der arm sich die ganze zeit langsam und sanft bewegt??

    lg
    martin

  4. #14
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2009
    Ort
    NRW
    Beiträge
    562
    Hallo

    Du könntest zwischen die Ansteuerung der Servos Pausen machen.

    ...
    for(i=0;i<50;i++)
    {
    Servo(23);
    mSleep(40);
    }
    ...

    Je größer die Zeit bei mSleep ist desto langsamer bewegt sich der Servo. Allerdings wird bei zu hoher Sleeptime die Bewegung etwas abgehackt aussehen also immer mit kleinem mSleep arbeiten.

    Gruß Thund3r

  5. #15
    Erfahrener Benutzer Begeisterter Techniker Avatar von RobbyMartin
    Registriert seit
    31.12.2009
    Ort
    Leverkusen
    Alter
    30
    Beiträge
    206
    das verstehe ich ja nur guck mal in den text von radbruch und mein video an die bewegung nach oben klappt langsam nur nach unten haut der arm

  6. #16
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2009
    Ort
    NRW
    Beiträge
    562
    Hallo

    Ah jezt ich glaub ich weiß was du meinst.
    Ähnliches Prob hatte ich bei meinem Arm genauso.
    Bei mir lag es schlicht und einfach an der Schwerkraft. Die Servos schafften es mit Kraft den Arm hoch zu hieven und wenn es dann runterging saußte dieser nach unten da kein Widerstand da war und sich der verhältnismäßig schwere Arm nach unten drückte (Schwerkraft).
    Ich hab das mit folgender Methode versucht zu kompensieren:

    ...
    int c;
    for(c=0;c<=50;c++)
    {
    Servo3(10);
    mSleep(50-c);
    }
    ...
    Hier im Video von 0:10 bis 0:12 zu erkennen.
    Ich hoffe das ist das was du meintest

    Gruß Thund3r

  7. #17
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Ich habe das nun noch nicht getestet, aber es sollte funktionieren:
    Code:
    int8_t drehrichtung=1;
    
             if(getStopwatch2()>100)
             {
                setStopwatch2(0);
                servo2 += drehrichtung;
                if (servo2 > 38) { drehrichtung= -1; c--; }
                if (servo2 < 14) { drehrichtung= +1; }
             }
    Für eine schnellere Bewegung könnte man die Aufrufe häufiger machen, z.B.:
    if(getStopwatch2()>50)

    oder die Schrittweite erhöhen:
    drehrichtung = +2; bzw. drehrichtung = -2;

    @Thund3r:
    Hier geht es um die nichtblockierende Ansteuerung der Servos mit Timer1-Interrupt und den Stopwatches...

    Gruß

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

  8. #18
    Erfahrener Benutzer Begeisterter Techniker Avatar von RobbyMartin
    Registriert seit
    31.12.2009
    Ort
    Leverkusen
    Alter
    30
    Beiträge
    206
    an welche stelle sollte ich den text jetz einfügen ??

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress