-         

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

Thema: Ra1 Pro von Arexx

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2010
    Beiträge
    5

    Ra1 Pro von Arexx

    Anzeige

    Hi Leute

    Ich bastel zur zeit an meinem RA1 Pro herum und dabei ist mir folgendes aufgefallen:

    Wenn ich dem Arm vorgebe bei z.B. Servo 4 zu knicken, ich dabei den arm festhalte (so dass er sich nicht bewegen kann) und dann loslasse (nach ca 10 sek) dann fährt er trotzdem auf diese Position.
    Das geht doch nur wenn er eine Drehwinkelsteuerung oder etwas ähnliches hat, oder?
    allerdings habe ich keine Funktion in den Libarys oder den Beispielprogrammen dafür gefunden.
    Wie merkt der Arm nun dass er noch nicht auf der richtigen Stelle ist und noch ca 15° weiterfahren muss? Und wenn er solche drehwinkelgeber hat, wie kann ich diese ansteuern/verwenden?

    Hat sich da schonmal einer damit beschäftigt?

    Gruß,




  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    16.11.2011
    Beiträge
    13
    Hallo,

    Ich kenne mich mit dem Ra1 zwar nicht aus, aber ein bisschen mit Servos. Und hier liegt auch deine Entdeckung
    Der Servo hat innen ein Potentiometer, welches die aktuelle Stellung darstellen kann. Du gibtst nun dem Serve den Befehl auf die stellung 60° zu fahren.
    Der Serve versucht es, aber schafft es nicht. Trotzdem gibt der Serve strom auf den Motor, bis er zur 60° stellung gefahren ist! Sobalt du also los lässt, fährt er da hin.

    das ist soweit hilfreich, das eine bestimmte stellung immer den selben wert hat!
    Beispiel:
    Siehe Modell Auto/Boot/... bei zb. bei 90° fährt man grade. bei 0° nach links bei und bei 180° nach rechts!

    MfG

    Stefan

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2010
    Beiträge
    5
    Hey Stefan,

    danke für die schnelle Antwort!
    Hat mir schonmal gut weitergeholfen da ich nun weiß die positionsbestimmung bewirkt.
    Allerdings steh ich immernoch vor dem Problem das ich nicht weiß ob und wie eine Rücksprache mit dem Micrcontroller (Atmega 64) geht. Der Controller wird mit C programmiert und die Programme als Hexfile rübergeladen. Muss dann nicht irgenwo in dem Programm, das rübergeladen wird, eine Funktion oder eine Schleife vorhanden sein in der eine Überprüfung der Position des Servos stattfindet? Ich habe nun die Beispielprogramme ein paarmal durchforstet, aber mir ist kein solcher Codeteil aufgefallen was ich ein wenig seltsam/verstörend finde :/

    Weiß da einer mehr? falls es hilft kann ich auch die Libraryabschnitte mit Anhängen.

    Gruß,

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    "setle" hat das schon richtig beschrieben.
    Es erfolgt keine Überprüfung der Position, sondern der µC schickt an dem Servo kontinuierlich Positionsdaten. Wenn sie sich nicht ändern und das Servo auf der gewünschten Position steht, bewegt es sich nicht, anderfalls läuft es auch nach 5min in diese Position.
    Blockieren ist allerdings für das Servo nicht das Beste, abgesehen vom hohen Stromverbrauch.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2010
    Beiträge
    5
    Hm.. Ok, ganz steig ich zwar noch nicht ganz dahinter, aber ich glaube die Grundidee habe ich verstanden

    Ich habe jetzt auch die richtigen Abschnitte für die Servos gefunden. Ich poste die mal hier. Schaut se euch mal bitte an und sagt mir ob ich das verstanden habe:
    Code:
    #define Pos_Servo_1        OCR1A
    #define Pos_Servo_2        OCR1B
    #define Pos_Servo_3     OCR1C
    #define Pos_Servo_4     OCR3A
    #define Pos_Servo_5     OCR3B
    #define Pos_Servo_6     OCR3C
    
    /*****************************************************************************/
    // Move Servo's 
    
    void Move (uint8_t Servo, uint16_t Value) 
    {
    
        switch (Servo) 
        {
        case 1:    Pos_Servo_1 = Start_Position[1] + Value; break; 
        case 2:    Pos_Servo_2 = Start_Position[2] + Value; break; 
        case 3:    Pos_Servo_3 = Start_Position[3] + Value; break; 
        case 4:    Pos_Servo_4 = Start_Position[4] + Value; break; 
        case 5:    Pos_Servo_5 = Start_Position[5] + Value; break; 
        case 6:    Pos_Servo_6 = Start_Position[6] + Value; break; 
        }
    }
    
    
    /*****************************************************************************/
    /* Move 
    * Example:
    *
    *     s_Move(6, 500,2);
    *        1 - Servo 6
    *        2 - (Startpostion + 500) = 2ms (right)
    *        3 - (speed = 2) 
    */
    
    
    void s_Move (uint8_t Servo, int16_t D_Value, uint16_t Speed) 
    {
        int16_t Actual_position=2700;  
        
        switch (Servo) 
        {
        case 1:    Actual_position = Pos_Servo_1 - Start_Position[1]; break; 
        case 2:    Actual_position = Pos_Servo_2 - Start_Position[2]; break; 
        case 3:    Actual_position = Pos_Servo_3 - Start_Position[3]; break; 
        case 4:    Actual_position = Pos_Servo_4 - Start_Position[4]; break; 
        case 5:    Actual_position = Pos_Servo_5 - Start_Position[5]; break; 
        case 6:    Actual_position = Pos_Servo_6 - Start_Position[6]; break; 
        }
        
        if (Actual_position > D_Value )
        { 
            while (Actual_position > D_Value)
            {
                Actual_position--; 
                Move(Servo, Actual_position);
                mSleep(Speed);
            }
            return; 
        }
        
        
        if (Actual_position < D_Value )
        { 
            while (Actual_position < D_Value)
            {
                Actual_position++; 
                Move(Servo, Actual_position);
                mSleep(Speed);
            }
            return;
        }    
        
        
        
    }
    Es sind 3 Kabel am Servo: eines für Gnd, eines für VCC und eines welches auf die OCR1A-B und OCR3A-B (welche hier als POS_Servo_X definiert wurden und als Ausgang bei der PIN-Konfiguration) des Controllers gehen.
    Mit Spannung werden se dann immer versorgt und durch die Move()-Funktionen werden in die variablen Pos_Servo_X die Werte, ausgehend von der vorher eingegebenen Startposition, eingegeben.
    Und ab hier steig ich nicht mehr ganz durch:

    Die Werte in Pos_Servo_x werden nun an den Servo gesendet und der macht dann was mit dem Poti? Ist da nun eine eigene kleine Elektronik mit dabei die das überprüft ob das dann passt, oder wie? Ich mein, es kann ja bei einer bestimmten Armstellung nur eine bestimmte Spannung anliegen über den Poti...
    Also nen Komparator?
    Und wenn ich das alles richtig verstehe (also auch Stefan und Hubert dann bekomm ich auf gar keinen Fall Werte zurück die ich für die Positionsbestimmung verwenden kann?

    Ich muss/möchte mir nämlich ne Bahngleichung aufstellen mit der die Servos gesteuert werden abhängig von den Toolkoordinaten (sowas in der Art) aber dazu brauch ich glaub ich die winkelstellung (ich bin da noch nicht soo tief drin, ich les mich gerade da ein).

    Gruß,

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2010
    Beiträge
    5
    Ich habe jetzt mal ein wenig in den Datenblättern des Atmega64 gestöbert und rausgefunden das die OCRxA - C Pins sind di mit einem Counter vom Timer verglichen werden um einen Interrupt zu erzeugen (oder so.. ist schon spät). Also kommen wohl keine Daten zurück vom Servo... Wie das genau mit dem Output Compare Register geht versteh ich im mom auch nicht so recht, also wenn einer sich mit diesem Microcontroller auskennt und mir das erklären kann, wäre das super

    Werd dann wohl die Stellungen der einzelnen Servos mit Variablen über die Software überwachen lassen...

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    31.03.2011
    Beiträge
    89
    warum zerlegst Du nicht einfach einen Servo, danach weißt Du sicher bescheid wie dieser aufgebaut ist/funktioniert (~2 Schrauben rausdrehen).
    Der Servo meldet nicht zurück sondern ist ein "Diener" der den empfangenen Befehl ausführt. Ein kleiner Motor betätigt über ein Getriebe eine Welle die ins freie geführt ist und mit dem anderen Ende in einem Poti steckt, welches als Regelwert verwendet wird um herauszufinden in welcher Position sich die Welle befindet. Wie oben beschrieben wurde hält der Servo die Position solange er das entsprechenmde Servosignal empfängt indem er in regelmäßigen Abständen die Lage der Welle auf den Sollwert korrigriert...

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Hier siehst du wie ein Servo funktioniert. http://www.rn-wissen.de/index.php/Servo
    Der Timer erzeugt diese Impulse, wie breit sie sind steht im OCRxx Register. Dieser Wert lässt sich sicher in den entsprechenden Winkel umrechnen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.557
    Zitat Zitat von Mechapat
    ... Also kommen wohl keine Daten zurück vom Servo ...
    Genau. Ein Servo hat so das Gemüt eines Grundschul-Lausbuben: Du kannst im etwas sagen und das tut er - oder auch nicht. Und Du hast keine Ahnung ob er es tut oder nicht oder getan hat oder nicht - wieder ernsthaft: üblicherweise keine Information darüber - ob der Servo die Position angefahren hat oder nicht. Technisch heißt das eine Steuerung - ein Wert wird vorgegeben und es wird darauf vertraut (oder gehofft), dass das angesprochene Aggregat den Wert erreicht. Intern läuft der Servo aber geregelt: er kontrolliert das erreichte Ziel (=Winkelstellung=Potimesswert) mit dem Zielbefehl (=Rampenlänge) und schaltet den Motor auf "go", solange da eine merkliche Differenz herrscht.

    Zitat Zitat von Mechapat
    ... Wie das ... mit dem Output Compare Register geht versteh ich ... nicht ...
    Mal eine sehr kurze Erklärung - mehr erarbeite Dir aus den Tutorials - dann verstehst Du das auch. Der Controller hat nen Timer. Dieser Timer schaltet einen Pin auf high oder low. Für Dein Beispiel: wenn der Timer eine Zeitschleife beginnt, dann schaltet er den Pin auf high. Wenn der Registerwert OCRxn erreicht ist, schaltet er den Pin wieder ab - und der bleibt ab, bis die Timerschleife abgelaufen ist. Beginnt dann wieder von vorn. Mit dem Registerwert kann man also die Pulslänge bestimmt - so einfach ist das. Heraus kommt die Pulsform, die im Link von Hubert.G gezeigt wird.

    Ausführlich ist das im Datenblatt des Controllers beschrieben - das hast Du hoffentlich schon gelesen.
    Ciao sagt der JoeamBerg

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2010
    Beiträge
    5
    Ich danke allen soweit erstmal für die Antworten! Hat mir schonmal weitergeholfen.

    @Abnormal: Ich habe nicht aufgemacht, da ich den Servo nicht zerstören wollte. Habe keine Ersatz-Servos im Moment zur Hand

    @Hubert.G: Den Link werd ich mir dann gleich mal durcharbeiten! Thx. Und die Idee mit den Werten umrechnen erscheint mir ganz gut, darauf bin ich noch nicht gekommen.

    @oberallgeier: Ja, die Tutorials werd ich mir dann heute mal vorknöpfen. Die kurzerklärung war aber auch schon sehr hilfreich.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Roboterarm Arexx ansteuern
    Von syndicate4 im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 2
    Letzter Beitrag: 16.07.2011, 21:20
  2. Ultraschall ULT-10 Arexx verwendung
    Von NorthVan im Forum Sensoren / Sensorik
    Antworten: 0
    Letzter Beitrag: 08.09.2010, 10:32
  3. YETI- von AReXX
    Von Daniel im Forum Yeti
    Antworten: 13
    Letzter Beitrag: 10.05.2010, 12:10
  4. Frechheit von Arexx!!!!
    Von freak_ontour im Forum Asuro
    Antworten: 15
    Letzter Beitrag: 17.01.2007, 19:47
  5. Asuro Arexx Anfängerfragen
    Von ANG€L im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 03.01.2006, 22:09

Berechtigungen

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