- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 27

Thema: Adafruit_PWMServoDriver

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645

    Adafruit_PWMServoDriver

    Hallo zusammen,

    ich verstehe was nicht, mit dem Adafruit-PWM-Servo-Driver.
    Es gibt dazu den Beispielcode "servo.ino", im Unterverzeichnis "examples".

    Hier ein Auszug, wo ich noch keine Erklärung habe:

    Code:
    
    
    #include "Adafruit_PWMServoDriver.h"
    
    
    Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();   // called this way, it uses the default address 0x40
    
    
    #define SERVOMIN  150 // this is the 'minimum' pulse length count (out of 4096)
    #define SERVOMAX  600 // this is the 'maximum' pulse length count (out of 4096)
    
    
    SERVOMIN und SERVOMAX bilden die minimale und maximale Pulslänge, im weiteren Programmcode.
    Nun könnte ich sagen, dass mein Servo andere Pulslängengrenzen benötigt, um den maximalen Stellwinkel zu erreichen.

    Nun steht dort aber: out of 4096 - Das verstehe ich noch nicht, was bedeutet das genau?
    Die PCA9685-Boards haben eine Auflösung von 4096 Schritten, also 12Bit.
    Wie würde sich das auswirken, wenn ich einen Wert größer 600 bspw. an den PCA9685 schicke oder kleiner 150?



    MfG

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    4096 repräsentiert 100% PWM duty cycle.
    Für die Servopulse werden aber nur etwa 5% duty cycle benötigt, AFAIR 1,5ms innerhalb des 20ms-Zyklus als Neutralwert und davon ausgehend 0,5ms nach unten oder nach oben als Steuerwert für den Stellwinkel.
    Die 150 bzw 600 darf man vermutlich nicht als Gesetz zur Umrechnung verstehen sondern als Orientierung zur Dimensionierung.

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.653
    .. Nun steht dort aber: out of 4096 - Das verstehe ich noch nicht, was bedeutet das genau? ..
    Vielleicht hilft dies zur besseren Klarheit des Ganzen? Da sieht man den Unterschied zwischen Periode (in der Darstellung 20 ms) und Pulslänge (in der Darstellung variabel). Beachte in der Skizze den Hinweis ".. NUR dieser Bereich (ca. 1 ms!) ist für den gesamten Ausschlag .."

    Anm.: "out of" heißt ja üblicherweise "von" - und damit suggeriert mir der Text (hatte Kollege RoboHolIC ja schon schön erläutert), dass die 12 Bit eben die gesamte Periode ist.

    Anm. muss wirklich nicht gelesen werden: bei meinen Servoroutinen kann ich die PULSE von 0 bis etwa 6000 ticks (sind ca. 2,4 ms) aufteilen. Da ein Minimalpuls - !je nach Servo! - von ner knappen Millisekunde (entsprechend rund 2000 ticks) einen Anschlag bedeutet, kann ich also zwischen rund 2000=min und 6000=max ticks zum Pulserzeugen nehmen.
    Ciao sagt der JoeamBerg

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    So in etwa habe ich das auch irgendwie gedacht. Aber wurde trotzdem nicht schlau.

    Ich habe jetzt in einer Adafruit-Erklärung gelesen, dass man dieses Servomin und Servomax auf den jeweiligen Servo anpassen soll. So dass Servomax die maximale Stellposition des Servos ergibt und Servomin also die Null-Grad-Position. Danach soll man sich orientieren um den Servo zu kalibrieren.

    @oberallgeier
    Ich hatte das schon gelesen.


    Interessant finde ich, dass man bei diesem "Treiber" zwei Werte hat, bei diesem Beispiel: pwm.setPWM(servonum, 0, pulselen);

    setPWM(channel, on, off)
    Description


    This function sets the start (on) and end (off) of the high segment of the PWM pulse on a specific channel. You specify
    the 'tick' value between 0..4095 when the signal will turn on, and when it will turn off. Channel indicates which of the
    16 PWM outputs should be updated with the new values.


    Arguments
    channel: The channel that should be updated with the new values (0..15)
    on: The tick (between 0..4095) when the signal should transition from low to high
    off:the tick (between 0..4095) when the signal should transition from high to low
    Normal nimmt man den Off-Wert als Pulslänge, für die Positin des Servos und den On-Wert setzt man auf 0.
    Wenn ich aber als Servomin = 150 habe und Servomax = 600 und der Servo nicht den vollen Bereich 0 bis 180° damit abdeckt (sondern meinetwegen von 15° bis 140°), dann kann man den On-Wert verändern und damit ändert sich dann der Winkelbereich des Servos. Weiß nicht, ob das jemand versteht. Kann es nicht besser erklären Ist auch eine merkwürdige Sache. Wenn der Servo mit einem Wert bei Servomin = 150 beispw. bei 15° seine Ausgangsposition erreicht, kann ich Servomin verringern auf z.B. 130, so dass die Ausgangsposition genau auf 0° ist. Ich kann aber auch den On-Wert auf bspw. 18 setzen. Nur dass ich damit dann auch den Max-Stellwinkel und nat. alle Winkel dazwischen ändere (verkleinere), wenn der On-Wert = 18 unverändert bleibt und also eine feste Größe ist.

    Wenn minimale Pulslänge = Null-Grad-Position und wenn maximale Pulslänge = 180-Grad-Position, könnte man die Winkel dazwischen theor. ausrechnen. Bei den meisten Servos klappt das ganz gut, bei manchen, derselben Sorte, haut das nicht hin.

    Sonst so weit erst mal Danke!


    MfG
    Geändert von Moppi (02.05.2019 um 07:06 Uhr)

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.653
    .. Interessant finde ich, dass man bei diesem "Treiber" zwei Werte hat, bei diesem Beispiel: pwm.setPWM(servonum, 0, pulselen) ..
    Zwei Werte brauche ich bei meiner Servosteuerung auch: einer ist die "Hausnummer" des Servos - damit der Controller weiß welchen Ausgangspinn er bedienen muss - und der andere eben die Pulslänge.

    .. Normal nimmt man den Off-Wert als Pulslänge, für die Positin des Servos und den On-Wert setzt man auf 0 ..
    Bei meiner Servosteuerung fahre ich Periodenzeiten von 20± ms bis gute 25 ms; den längeren Wert dann, wenn ich alle zehn Servos bedienen will. Ich fahre nämlich die Pulsansteuerung eines Servos in der Pausenzeit aller anderen. Und die Pulse sind auf die individuelle Steuerungscharakteristik des jeweiligen Servos abgestimmt.
    Was "Normal" ist, weiß ich nicht; vermutlich gibts irgendwo im Modellbaubereich ne Definition des Standards - sicher wissen das auch etliche Forumskollegen. Erfahrungsgemäß ist die Pulsdauer (siehe *) unter diesem Absatz; ne kurze Vereinbarung über Ausdrücke) zuständig für die Sevostellung. Nach einigen Versuchen meinerseits (und Informationen von andern) ist die Servostellung maßgeblich von der Pulszeit abhängig und weitgehend unabhängig von der Pausenzeit. So sind bei manchen Servos Periodenzeiten von 10 ms bis weit über 20 ms möglich - bei gleicher Pulslänge - bei weitgehend gleichem Positionierverhalten des Servos.
    Das wird auch dort ausgenutzt wo nur die Pulslänge variiert wird bei ansonsten konstanter Pausenzeit.

    *) Pulslänge = Zeit welche der Steuerungspin auf high steht, zugehörig dann On-Wert, Puls etc.
    Pause = Zeit welche der Steuerungspin auf low ist, zugehörig dann Off-Wert, Pause etc.
    Periode oder Periodendauer = Zeit von Pulslänge UND Pause.
    Die werden ja ziemlich ausführlich im ganzen RN-Wissen-Beitrag behandelt. Siehe auch z.B. hier (klick) mit den da folgenden drei, vier Beiträgen.

    .. Bei den meisten Servos klappt das ganz gut, bei manchen, derselben Sorte, haut das nicht hin ..
    Hier gilt, wie so oft, Versuch macht kluch.
    Geändert von oberallgeier (02.05.2019 um 08:42 Uhr)
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Danke, für Deine Ausführungen!

    Hier gilt, wie so oft, Versuch macht kluch.
    Das ist das, was ich seit schon 2 Tagen mache. Deshalb frage ich ja so bisschen komisch (vielleicht)
    Muss mich mit dem Thema auch erst mal auseinander setzen.

    Ich weiß nicht, ob das bei allen Servos so ist, aber bei denen, die ich jetzt hier habe, ist der Stellwinkel insgesamt größer als 180°, somit lassen die sich auch gut in der Software kalibrieren. Wenngleich viele Parameter ermittelt werden müssen, damit die einzelnen Winkelstellungen nachher auch halbwegs bis ziemlich genau stimmen (jedenfalls so nach Augenmaß mit mehrmaligen Wiederholungen).



    MfG

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.653
    .. weiß nicht, ob das bei allen Servos .. die ich jetzt hier habe, ist der Stellwinkel insgesamt größer als 180° ..
    Ich kenne nicht viele Servos, aber ich kenne keinen der eindeutig weniger als 180° macht. Allerdings zeigt SvenB in seiner kleinen Servoübersicht etliche die offensichtlich weniger machen :-?

    .. damit die einzelnen Winkelstellungen .. halbwegs bis ziemlich genau stimmen (jedenfalls so nach Augenmaß mit mehrmaligen Wiederholungen) ..
    Ich weiß nicht wie gut Dein Augenmaß ist. Mir hilft dazu ne ziemlich einfache Vorrichtung. Manchmal klebe ich gleich ne Kopie von nem Geodreieck drüber. In dem Bild ist unter der Schablone ein MG-Servo der 40mmx20mmx40mm-Klasse (NEIN - kein RS-2! - ist ja MG *gg*).

    Ansonsten hatte ich gerne meinen eher aufwendigen Servomesstester bemüht. Damit messe ich dann tatsächliches Dreh- resp. Haltemoment, Stromaufnahme, Regelabweichung in Abhängigkeit der Regelabweichung - und zugehörigen Strombedarf (*gg*!!), auch Geschwindigkeitskonstanz usf.
    Ciao sagt der JoeamBerg

Berechtigungen

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

Labornetzteil AliExpress