-         

Seite 3 von 8 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 79

Thema: Kopfsache - und ein m1284, etliche Servos, viel Alu

  1. #21
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Anzeige

    sorry fürs Offtopic, nur ganz kurz:

    Markus/just4fun hat auf seinem Roboter ein itx-Board, nur eine Spannung etc. ich Suche das mal raus.
    Danke für den Tipp! Ich habe eben selber auf Markus Seite nachgesehen, er verwendet ein Commell LP-170G Board (was mir zu teuer wäre und es ist auch nicht mehr das allerneuste). Brauchst Dir also nicht dir Mühe machen, selbst noch nachzusehen.

    Sehr schön das Update von Archies Kopf! Sein immer leicht geöffnetes linkes Auge zeigt ständige Wachsamkeit ... Sleep with one eye open . Hat sein Name eigentlich eine tiefere Bedeutung?

    Gruß
    Malte

  2. #22
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.474
    ... Sleep with one eye open ... Hat sein Name eigentlich eine tiefere Bedeutung? ...
    Na ja, was heißt tiefere Bedeutung. Ich folge dabei Susan Calvin, die dafür war, dass Roboter Namen tragen.

    Nun ist es ja mein fünfter Roboter, wenn er auch - statt er üblichen Kopflosigkeit grad nur als Kopf existiert. Es gab bei mir mal einen ersten. Die 033er Dose war der zweite, daher Dose2, könnte man als Mix lesen als Dose two - und verballhortn Dottie. Die 015er Dose, der dritte Roboter, war eine MiniDose - das wurde dann MiniD0 - die Null am Ende stand für die 0,1.. Liter und könnte auch als anglikanisch Null = ohh gelesen werden. Der R4 war eigentlich ein Z4 und läuft unter dem Namen WALL R. Nun der Fünfte. Irgendein fünfter Roboter dieser Erde hieß mal Jonnie, also Roboter Jonnie, dessen Kopf war erhebliche größer als der hier gezeigte, daher ist meiner eben ein Junior. Also RJjr - kurz Archie (schon wieder ge-/verballhornt *gg*). OK?

    Ach so - ich hatte mich letztes Jahr gefragt, ob man (ähhh - also nicht ich) nicht einen Himbeerkuchen als MiniRechner verwenden könnte. Und ich würd gern immer noch mein Teilchen hier z.B. zum Festhalten von zeitgestempelten Meldungen für eine evtl. Fehlersuche verwenden. Aber das steht ziemlich unten auf meiner Liste.
    Ciao sagt der JoeamBerg

  3. #23
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    16.03.2011
    Ort
    Dresden
    Alter
    30
    Beiträge
    1.931
    Die Servobewegungen sehen sehr smooth aus, wie du das hinbekommen hast würde ich gerne nochmal genauer wissen. Regelst du die Versorgungsspannung der Servos mit oder läuft das alles über viele fein abgestufte Servosignale? Letzteres mach ich nämlich bei meinem Roboter ja auch, aber der zittert wie verrückt, wenn es nicht so schnell gehen soll.

  4. #24
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.474
    ... Regelst du die Versorgungsspannung ... oder ... fein abgestufte Servosignale ...
    Vermutlich geht es mit veränderter/vermindeter Versorgungsspannung nicht oder zumindest sehr schlecht. Jedenfalls ist meine Erfahrung (praktisch nur mit Billigservos), dass Servos mit veränderter Spannung auch ein verändertes, manchmal ein völlig inakzeptables Signalverhalten haben.

    Ich habe theoretisch über 4000 ticks für den vollständigen Servoschwenk zur Verfügung, wie die "absuloute maximum Ratings" (Anschlag bis Anschlag) dabei genau aussehen, weiß ich nicht wirklich aufs Tick genau. Eins weiß ich relativ gut: für das Fahren mit der üblichen Servogeschwindigkeit von 60°/0,15 sec müsste ich rund 190 Ticks pro Servoperiode vorgeben. Die letzten Reserven nutze ich natürlich nicht, ss muss ja in der ISR (TIMER1_COMPB_vect) nach "hinten" etwas Luft bleiben, damit ich keinen Laufzeitcrash der ISRs bekomme. Während die erwähnte ~COMPB~-ISR die zuvor gestartete Rampe beendet, wird (wurde) von der ISR (TIMER1_COMPA_vect) alle fast 2,5 ms diese entsprechende Servorampe gestartet.

    Mal nur so als Skizze ein Codeauszug des aktuell laufenden Codes:
    Code:
    // ============================================================================== =
    //   ...
      #define OCR1AV        6400    // Vorgabewert - wegen prescaler clk/8
      #define OCR1BV        3600    // Startwert OCR1B {960 .. 6240}: ca. 1,5 ms Rampe
    //   ...
      #define stdMIN        1600    // Standard Minimum
      #define stdMIT        3600    // Standard Mitte
      #define stdMAX        5600    // Standard Maximum
    //   ...
    // ============================================================================== =
    // ============================================================================== =
    // ==   Timer  Aufgabe: Servo mit Soft-PWM ansteuern auf wählbarem Port
    //      Beispiel:       Set TCNT1 to 0x01FF :   TCNT1 = 0x1FF;
    //                      Read TCNT1 into i   :   i = TCNT1;
    // - - - - - - - - - - - - - - - -
      void TC1TMR_init(void)        // Init Timer/Counter 1 für 2 ms Servoperiode
      {                             //
        TCCR1B  |= (1<<WGM12);      // WGM12 => CTC, TOP = OCR1A                   S133
        TCCR1B  |= (1<<CS11);       // CS11+10 <=> clk/8 => 2,500 MHz              S134
        OCR1A    = OCR1AV;          // 8mal OCR1A = 6800 => alle 20 ms ein Interrupt
        OCR1B    = OCR1BV;          // OCR1B = {???} => 1-2 ms Rampe
    //  TIMSK1  |=  (1<<OCIE1A);    // Tmr/Cntr1 Oput CompA Mtch intrrpt enabled
    // - - - - - - - - - - - - - - - -
        SetBit (PORTC, L1r);        // rtLED ein, Kontrolle für Servotimer-init
      }                                
    // ============================================================================== =
    
    // ============================================================================== =
    // ===  ISR für TIMER1_COMPA_vect, VECTOR 16 (vgl. S 65)    ===================== =
    //      Zehn Servos umlaufend ansteuern. 
    // - - - - - - - - - - - - - - - -
      ISR (TIMER1_COMPA_vect)       // Servo[Svpt] wählen + dessen Rampe starten
     {                              //
      u8  xt;                       // Kurzschreibweise für Servopointer
    // xt   = NxtSvpt;              //
    // - - - - - - - - - - - - - - -
      Svpt ++;                      // Pointer für diesen, aktuellen Servo eins rauf
      if ((Svpt < 1) || (Svpt > Svmx)) Svpt = 1;    // und eingrenzen auf {1-10}
    
      xt    =  Svpt + 1;            // Pointer auf nächsten Servo berechnen
      if ( xt >= 11) xt  =  1;      //   .. Überlauf abfangen
            
    // - - - - - - - - - - - - - - -
    //      Für den aktuellen Servopointer liegt ein korrekter Wert Srv_tm[nr] vor
    //      Den aktuellen Srv_tm-Wert auf zulässige Schranken begegrenzen, vgl. kal_0
    //      und vor dem Setzen Offset draufrechnen.        ##########################
      if ( SrvCHK )                 // Prüfung nur, wenn ServoCHECK aktiv !!
      {                             //
        if ( Srv_tm[Svpt] < SrvMin [Svpt] ) Srv_tm[Svpt] = SrvMin [Svpt];
        if ( Srv_tm[Svpt] > SrvMax [Svpt] ) Srv_tm[Svpt] = SrvMax [Svpt];
      }                             //
            
    // - - - - - - - - - - - - - - - -
      switch (Svpt)                 //
      {                             //
        case 1:   SetBit ( PC, Servo1 ); break;
        case 2:   SetBit ( PC, Servo2 ); break;
        case 3:   SetBit ( PC, Servo3 ); break;
        case 4:   SetBit ( PC, Servo4 ); break;
        case 5:   SetBit ( PC, Servo5 ); break;
        case 6:   SetBit ( PC, Servo6 ); break;
        case 7:   SetBit ( PA, Servo7 ); break;
        case 8:   SetBit ( PA, Servo8 ); break;
        case 9:   SetBit ( PA, Servo9 ); break;
        case 10:  SetBit ( PA, Servo10); break;
        default: break;             // hierher würde noch n Fehlerflag passen
      }             // Ende switch (Svpt)
    // - - - - - - - - - - - - - - -
    //  OCR1B   = Srv_tm[Svpt];    // Stellwert ist durch Rampenwert Srv_tm definiert
      OCR1B   = Srv_tm[Svpt] + Seroff [Svpt]; // Rampenwert ist mit Srv_tm definiert
      TIFR1  |=  (1<<OCF1B);        // ??? Klappt immer wenn dies gesetzt wird
      TIMSK1 |=  (1<<OCIE1B);       // Tmr/Cntr1 CompB Match interrupt enabled
                                    //   d.h. Timer1B starten <=> nächster Servo...
    // - - - - - - - - - - - - - - -
    // - -  Wert für nächsten Servo holen wenn möglich
    // .... hier folgt die Servo-Vorgabedaten-Umschaufelei - aktuell entfernt
      return;               //
    // - - - - - - - - - - - - - - -
      }                     // Ende ISR (TIMER1_COMPA_vect)
    // ============================================================================== =
    
    // ============================================================================== =
    // ===  Nicht unterbrechbare ISR für TIMER1_COMPB_vect     ====================== =
      ISR (TIMER1_COMPB_vect)       // VECTOR 18                                   S 65
      {                             //
        TIMSK1 &= ~(1<<OCIE1B);     // Tmr/Cntr1 CompB Match interrupt disabled
    // - - - - - - - - - - - - - - -
        switch (Svpt)
        {                           //
          case 1:   ClrBit ( PC, Servo1 ); ClrBit ( PA, Servo10); break;
          case 2:   ClrBit ( PC, Servo2 ); ClrBit ( PC, Servo1 ); break;
          case 3:   ClrBit ( PC, Servo3 ); ClrBit ( PC, Servo2 ); break;
          case 4:   ClrBit ( PC, Servo4 ); ClrBit ( PC, Servo3 ); break;
          case 5:   ClrBit ( PC, Servo5 ); ClrBit ( PC, Servo4 ); break;
          case 6:   ClrBit ( PC, Servo6 ); ClrBit ( PC, Servo5 ); break;
          case 7:   ClrBit ( PA, Servo7 ); ClrBit ( PC, Servo6 ); break;
          case 8:   ClrBit ( PA, Servo8 ); ClrBit ( PA, Servo7 ); break;
          case 9:   ClrBit ( PA, Servo9 ); ClrBit ( PA, Servo8 ); break;
          case 10:  ClrBit ( PA, Servo10); ClrBit ( PA, Servo9 ); break;
          default: break;   // hierher würde noch n Fehlerflag passen
        }
    // - - - - - - - - - - - - - - -
      }                     // Ende ISR (TIMER1_COMPB_vect)
    // ============================================================================== =
    Und - psssst - nicht weitersagen - es gibt schon mal den einen oder anderen Fall, in dem deutliches Servozittern auftritt. Das sind dann vermutlich irgendwelche Resonanzfrequenzen, die ich durch ne geänderte Zeit vermeide. Da helfen schon gaaanz wenige Ticks.
    Ciao sagt der JoeamBerg

  5. #25
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.474
    Zitat Zitat von Geistesblitz Beitrag anzeigen
    ... Servobewegungen ... sehr smooth ... wie du das hinbekommen ... würde ich gerne ... wissen ...
    ... Mal nur so als Skizze ein Codeauszug des aktuell laufenden Code ...
    Hallo Geistesblitz - war das Beispiel hilfreich für Dich?
    Ciao sagt der JoeamBerg

  6. #26
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    16.03.2011
    Ort
    Dresden
    Alter
    30
    Beiträge
    1.931
    Nicht so richtig, ich seh bei C immer noch nicht so richtig durch.
    Wenn ich das richtig verstehe, bekommen die Servos zu jedem neuen "Takt" einen veränderten Wert zugeschickt, oder? So in der Art funktioniert das zumindest bei meinen Servos, allerdings zittern die wesentlich mehr. Kann aber auch gut daran liegen, dass die mehr Last am Hebel hängen haben.

  7. #27
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.474
    Zitat Zitat von Geistesblitz Beitrag anzeigen
    ... bekommen die Servos zu jedem neuen "Takt" einen veränderten Wert zugeschickt, oder? ....
    Genau, so stehts ja auch in dem Code von mir, den Du gerne haben wolltest.

    Zitat Zitat von Geistesblitz Beitrag anzeigen
    ... So in der Art ... bei meinen Servos ... zittern ... mehr ... mehr Last am Hebel hängen ...
    So in der Art klingt nach ungefähr - naja - egal. Mehr Last heißt natürlich auch, dass Du niedrig(er)e Resonanzfrequenzen hast. Da können schon mal Struktur und Schwingungeparameter prächtig zusammentreffen - sehr zu unserem Leid. Hast Du Dir die Signale schon mal am Oskar angesehen - sorry - Oszilloskop? Da konnte ich früher mal reichlich Schrott sehen bei mir.
    Ciao sagt der JoeamBerg

  8. #28
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.474
    Der Servo RS-2 wurde getestet. Neu, erworben Jan 2013 bei "C". Messzeitpunkt 2013, 31. Mai und 01. Juni.

    Testziel: Anwendung des RS-2 als Aktor.

    Gemessen wurde der Schwenkwinkel in Abhängigkeit von der Pulslänge (als Tickvorgabe, 16bittige Pulsvorgabe) mit und ohne Last, Stromaufnahme und Stellungsabweichung je nach Last. Lastsimulation: Der fixierte Servo drückte mit einem 125mm-Hebel gegen eine Waage - Messbereich 5000g/1g/div, Nachgiebigkeit der Waage << 1mm.

    Messung des Schwenkwinkels ohne Last: Servo Versorgung 5,06 V (Metrahit 12S), Stromaufnahme = gesamter Strombedarf ab Netzgerät bei 8,5V inclusive Strombedarf der Platine mit Spannungswandler, Controller und Hühnerfutter. Winkelmessgerät Geodreieck, NUR Winkel zwischen den Ticks. Servomittenstellung ca. 3600 (Anzeige ca. 90° am Geodreieck) und Messung im mathematischen Sinne, Genauigkeit der Winkelstellung soweit am Geodreieck genau ablesbar (1 Grad – ca. 1,5 mm Strichabstand).

    Messergebnisse ohne Last:
    Stellung 45° => 4740 Ticks, Stellung 90° => 3560 Ticks, Stellung 135° => 2430 Ticks. Gesamt: 90° <=> 2310 Ticks.

    Die Reproduzierbarkeit ohne Last ist gut bis sehr gut auf etwa Strichbreite des Referenzstriches genau, das sind ca. 0,2 mm oder 7,6 Bogenminuten bzw. drei Ticks.
    Anmerkung: die Bewegung des Servos bei einem einzelnen Fortschritt von < 10 Ticks ist nicht mit Sicherheit feststellbar, Bewegung in diesem Fall erst etwa ab 10 .. 15 Ticks. Damit ist die Auflösung theoretisch 0,4 µs Puls, praktisch sind das besser als 0,4 Grad Servobewegung bzw. 9 Bit.

    Die Messung mit Last zeigt die dramatische Nachgiebigkeit des Reglers. Von lastlos bis ca. 80% (28 Ncm) des angegebenen Maximalmoments (35 Ncm) ist ein Nachgeben von 1500 Ticks bzw. 58 Grad feststellbar, dabei steigt die Stromaufnahme von 60 mA auf 620 mA (Anmerkung: Stromaufnahme siehe oben).

    Wer hat bloss diesen lausigen Regler programmiert? Das ist weit ab von den technischen Möglichkeiten.


    Geändert von oberallgeier (01.06.2013 um 09:55 Uhr) Grund: Stromaufnahme nachgetragen
    Geändert von oberallgeier (04.06.2013 um 23:14 Uhr) Grund: Auflösung nachgetragen
    Ciao sagt der JoeamBerg

  9. #29
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Hallo!

    Wer hat bloss diesen lausigen Regler programmiert? Das ist weit ab von den technischen Möglichkeiten.
    Meinst du wirklich dass es am Regler liegt? Es kann doch auch gut sein, dass der Motor schon an seiner Grenze ist, das dürfte den selben Effekt haben. Bei einer derart großen Regelabweichung dürfte der P-Anteil eigentlich schon voll reinhauen - und wenn der nichts mehr reißen kann dürfte das System in der Sättigung sein.

    Wenn ich das mal so freimütig sagen darf: der RS-2 ist doch vermutlich das Schlechteste was es an Servos gibt. Ohne jetzt konkrete Alternativen benennen zu wollen/können, ich bestelle Servos mittlerweile bei Hobbyking in Hong Kong und habe damit was das Preis-Leistungs-Verhältnis angeht gute Erfahrungen gemacht. Ich glaube dass diese Conrad Servos zB einer der Gründe dafür sind, warum viele Hexapodenbauer glauben, es würde nicht mit "billigen" Servos gehen. Meiner Ansicht nach geht es ...

    Gruß
    Malte

  10. #30
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.474
    ... dass es am Regler liegt ... kann doch auch .... der Motor schon an seiner Grenze ...
    Jein. Der Servo wurde über den länger ausgedehnten Lastfall (10 min?) kaum warm - also könnte er den Strom schon ab. Muss ja auch, weil 80 % des maximalen Moments kein Sonderfall sein dürften.

    Regler gibts seit Urzeiten mit I-Anteil. Nicht zuletzt damit könnte man solche dramatischen Auswirkungen abmindern. DAS Problem sehe ich eher bei der Auslegung des internen Reglers - der ja bei Programmierung/Herstellung nicht weiß, welche Dynamik er zu bewältigen hat. Aber dass man dann so viel Sicherheit einbaut, haut mich schon um. Gegenbeispiel ist mein alter, kleiner Carson (siehe Archie), der ist deutlich steifer geregelt! Vielleicht bau ich mal ne eigene Ansteuerung (à la Openservo) - und vergleiche dann nochmal.

    HobbyKingHongKong werde ich auch mal nehmen/testen. Mal sehen, wie dann die Ergebnisse aussehen. Da ist lediglich mein Problem das Paypal - das ich sicher nicht nutzen werde . . .

    Insgesamt bin ich einfach erbost, weil auch hochpreisige Hersteller über die interessierenden Werte wie Stromaufnahme vers. Last bzw. Last vers. Abweichung keine Informationen geben. Die Technischen Daten der Hersteller sind doch höchstens die Minimalanforderung an Wissen.
    Ciao sagt der JoeamBerg

Seite 3 von 8 ErsteErste 12345 ... LetzteLetzte

Ähnliche Themen

  1. Gewinde schneiden in Alu, ein heikles Thema?
    Von hosti im Forum Mechanik
    Antworten: 35
    Letzter Beitrag: 14.07.2015, 07:49
  2. ziehen servos so viel strom???
    Von Roboman93 im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 17.09.2008, 20:13
  3. Antworten: 8
    Letzter Beitrag: 13.11.2007, 10:20
  4. wie viel Servos kann ich ansteuern
    Von Zeroeightfifteen im Forum Motoren
    Antworten: 23
    Letzter Beitrag: 08.07.2006, 21:10
  5. Antworten: 11
    Letzter Beitrag: 18.05.2006, 12:40

Berechtigungen

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

Gearbest