- 12V Akku mit 280 Ah bauen         
Seite 5 von 9 ErsteErste ... 34567 ... LetzteLetzte
Ergebnis 41 bis 50 von 85

Thema: RP6Control M32: Library für 8 Servos

  1. #41
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    also ich hab nun auch mal die 8 ServoLib von Dirk ausprobiert und bin auf einige Probleme gestossen.
    1. Wie kann ich denn den Servo anpassen ? . Ich habe den Servo am linken Anschlag. Wenn ich das Demo starte, springt das Horn ein Stück nach vorn und dann lüft es ruhig zum rechten Anschlag (162) =180 Grad. Die Position 0 sind aber bei mir 20-30 Grad und nicht 0 Grad
    In der Header Datei habe ich schon alles möglich versucht (wenig davon verstanden) aber ich komme nicht auf 0 Grad. Mit der Hand ist das kein Problem.
    2. Ich lasse beim Start meines Programm die Servos einmalig ausrichten, um sie dann später neu zu positionieren. Die Servos summen dann die ganze Zeit leise vor sich hin und bei den Versuch mal mit der Hand zu Drehen merkt man das da ein Wiederstand ist. Wie kann ich das denn abschalten ? Also so das nach einer Neupositionierung die Servos "lose" sind.

  2. #42
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @TrainMen:
    Die Position 0 sind aber bei mir 20-30 Grad und nicht 0 Grad
    Den linken Anschlag kann man mit LEFT_TOUCH einstellen. Je kleiner man die Konstante macht, umso weiter geht der Servoarm zum linken Anschlag. Ich würde mal die Werte 65, 60, 55 ... probieren.

    Wie kann ich das denn abschalten ? Also so das nach einer Neupositionierung die Servos "lose" sind.
    Die Servoansteuerung kann man mit stopSERVO() anhalten.

    Gruß Dirk

  3. #43
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    @Dirk:
    LEFT_TOUCH einstellen. ......die Werte 65, 60, 55 ... probieren.
    ja genau, so dachte ich es mir auch, ich war bis auf 10 runter, da passiert nichts. Wenn ich an RIGHT_TOUCH spiele merke ich das sofort, und nun ?
    mit stopSERVO() anhalten.
    ja hatte ich auch probiert, sie sind dann zwar "lose" aber ich kann sie dann nicht mehr aktivieren. initSERVO habe ich dann erneut versucht aber da passiert dann nichts.
    mfg TrainMen

  4. #44
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @TrainMen:
    ...da passiert nichts. ..., und nun ?
    Wenn du LEFT_TOUCH in der RP6ControlServoLib.h geändert hast, kompilierst du ja alles neu. Nach meiner Erfahrung wird dabei manchmal die Lib nicht neu kompiliert. Ich lösche dann immer im Projekt den Unterordner .dep und alle Dateien mit .elf, .lss, .lst, .map, .o, .sym vor dem nächsten Kompilieren der Demo. Zur Sicherheit lösche ich auch .lst und .o im RP6Lib\RP6control Verzeichnis.
    Wenn es das bei dir nicht ist, dann hier noch 2 geänderte Demos. Bei Version 1 fährt das Servo umgekehrt, d.h. langsam an den linken Anschlag. Dadurch kann man es besser einstellen. In Version 2 werden die beiden Endpositionen und die Mittelstellung nacheinander angefahren. Das hilft auch etwas bei der Einstellung:
    Code:
    VERSION 1:
    ==========
    
    /*****************************************************************************/
    // Variables:
    
    uint16_t pos = RIGHT_TOUCH;
    
    
    
    // ............
    
    
    
    // ---------------------------------------------------------------------
    // The demo code for positioning Servos 1 and 2:
    		if (getStopwatch2() > 48) {	// Change position every ~50ms
    			servo1_position = pos;		// Position of servo 1
    			servo2_position = pos;		// Position of servo 2
    			setCursorPosLCD(0, 0);
    			writeStringLCD_P("Servopos.: ");
    			writeIntegerLCD(pos, DEC);
    			writeStringLCD_P("   ");
    
    			pos--;						// Next position to the left
    			if (pos > RIGHT_TOUCH) {pos = RIGHT_TOUCH;} // pos: RIGHT_TOUCH..0
    			setStopwatch2(0);
    		}
    // ---------------------------------------------------------------------
    
    
    
    
    
    VERSION 2:
    ==========
    
    // ---------------------------------------------------------------------
    // The demo code for positioning Servos 1 and 2:
    		if (getStopwatch2() > 5000) {	// Change position every ~5s
    			if (pos == 0) {
    			servo1_position = 0;		// Position of servo 1
    			servo2_position = 0;}		// Position of servo 2
    			if (pos == 1) {
    			servo1_position = MIDDLE_POSITION;
    			servo2_position = MIDDLE_POSITION;}
    			if (pos == 2) {
    			servo1_position = RIGHT_TOUCH;
    			servo2_position = RIGHT_TOUCH;}
    			if (pos == 3) {
    			servo1_position = MIDDLE_POSITION;
    			servo2_position = MIDDLE_POSITION;}
    			setCursorPosLCD(0, 0);
    			writeStringLCD_P("Servopos.: ");
    			writeIntegerLCD(servo1_position, DEC);
    			writeStringLCD_P("  ");
    			
    			pos++;
    			if (pos > 3) {pos = 0;}
    			setStopwatch2(0);
    		}
    // ---------------------------------------------------------------------
    ich kann sie dann nicht mehr aktivieren. initSERVO habe ich dann erneut versucht aber da passiert dann nichts.
    Die Servos starten wieder mit startSERVO().

    Gruß Dirk

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

    left_touch und right_touch

    hi Dirk,

    wahrscheinlich steht es schon irgendwo: ist der linker anschlag (LEFT_TOUCH) auf der linken seite, wenn ich auf den servo von vorne schaue (auf die achse) oder bezieht sich das auf die sicht von hinten (auf den gehäusedeckel?

    gruß & dank
    gruß inka

  6. #46
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @inka:
    Linker Anschlag wäre auf die Achse (auf den Hebel) geschaut der Anschlag, an den der Hebel bei Linksdrehung (Drehung gegen den Uhrzeigersinn) stößt.

    Gruß Dirk

  7. #47
    Benutzer Stammmitglied
    Registriert seit
    28.10.2009
    Ort
    Ratingen
    Alter
    66
    Beiträge
    60
    Hallo,

    ich versuche gerade die Programme nach zu vollziehen. Es ist das erste Mal, daß ich eine neue Lib benutze. kann mir jemand sagen, wie ich mit dem Programmers Notepad die Lib übersetzt bekomme, dh. die entspr. .lst und -o Datei erstellen kann?

    Gruß

    Klaus

  8. #48
    Benutzer Stammmitglied
    Registriert seit
    28.10.2009
    Ort
    Ratingen
    Alter
    66
    Beiträge
    60
    Hallo,

    habe meinen Fehler gefunden, hatte eine Zeile im Makefile vergessen

    Gruß

    Klaus

  9. #49
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    @Dirk
    manchmal die Lib nicht neu kompiliert
    das war auch mein Verdacht und so hatte ich ja auch RIGHT_Touch verändert und bildete mir ein eine Veränderung zu sehen und war mir so sicher das sie neu eingebunden wurden.
    Völliger Quatsch, ich muss mich getäuscht haben, denn genau daran lag es, nach dem löschen der Dateien, funktioniert jede Änderung und die Anschläge werden auf beiden Seiten erreicht. Danke
    starten wieder mit startSERVO().
    MAN... bin ich blöd
    mfg TrainMen

  10. #50
    Erfahrener Benutzer Fleißiges Mitglied Avatar von I♥ROBOTIC
    Registriert seit
    15.03.2010
    Ort
    Fürstenstein
    Alter
    26
    Beiträge
    112
    könnt ihr mir helfen, bei mir will ein programm nicht laufen:


    Code:
    #include "RP6ControlServoLib.h" 
      
    int main(void) 
    { 
       initRP6Control(); 
       initLCD();
    
       initSERVO(SERVO1); 
    	startStopwatch1();
    	setStopwatch1(0);
       
       while(1) 
       {
        
        if (getStopwatch1() > 1000 && getStopwatch1() < 2000) 
        {
    	clearLCD();
    	servo1_position = MIDDLE_POSITION; 
        showScreenLCD("    MITTLERE    ", "    POSITION    ");
    	setLEDs(0b0110);
    	} 
    
    	if (getStopwatch1() > 2000 && getStopwatch1() < 3000) 
    	{
    	clearLCD();
    	servo1_position = LEFT_TOUCH; 
    	showScreenLCD("     LINKE      ", "    POSITION    ");
    	setLEDs(0b1000);
    	} 
    
    	if (getStopwatch1() > 3000 && getStopwatch1() < 4000) 
    	{
    	clearLCD();
    	servo1_position = RIGHT_TOUCH; 
    	showScreenLCD("     RECHTE     ", "    POSITION    ");
    	setLEDs(0b0001);
    	} 
    
    	if (getStopwatch1() > 4000) 
        {
    	setStopwatch1(0);
    	} 
    
        task_SERVO(); 
       } 
       return 0; 
    }

    ich hab schon imma wieda ein paar sachen verändert (das programm läuft dann auch anders, aber nie so wie es sollte)


    MfG Julian

Seite 5 von 9 ErsteErste ... 34567 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen