- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 31

Thema: Servo Geschwindigkeitsregelung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2011
    Beiträge
    9
    Habe die Geschwindigkeitsregelung jetzt mit einem Pololu Serial 8-Servo Controller realisiert, welche ich zum testen bekommen habe. Leider schaffe ich damit nur die Geschwindigkeit bei einem analog Servo Hitec HS-322HD zu steuern.
    Für meinen Modelcraft VSD-18MBWG Digitalservo ist dies nicht möglich, jedoch klappt die Positionszuweisung mit dem Controller. Schicke ich einen Geschwindigkeitsbefehl an den Pololu, ändert sich bei neuer Positionszuweisung nur der Stellweg (es wird nicht die Position voll angefahren) und nicht die Geschwindigkeit. Wenn ich es mit dem Graupner Digitalservo DES 806 BB MG versuche, kann ich nicht mal eine gewünschte Position anfahren.
    Kann das an dem Controller liegen, dass dieser nur mit analog Servos funktioniert (habe aber in der Bedienungsanleitung nicht von funktionalitätsauschluss mit digitalen Servos gelesen)?

    Das eigentlich Vorgehen eines solchen Controllers zur Geschwindigkeitssteuerung ist doch auch eine Pulsweitenveränderung zu der gewünschten Position hin, entsprechend einer gewissen möglichen Auflösung des Controllers oder?

    Das Signal was ich mit meiner Karte erzeugt habe, ist ein counter gestütztes PWM-Signal (je nach Position), dass ich alle 20 ms an den Servo schicke. Ist es dabei vielleicht möglich durch eine Verringerung der Low-Time von 20 ms auf zb. 10ms und meiner Idee des schrittweisen Anfahren einer Zwischenposition zur Endposition (wenn ich die Auflösung der Zwischenschritte sehr klein mache) eine saubere Geschwindigkeitsregelung zu realisieren bzw. das Zittern des Servos zu verringern?

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.05.2005
    Ort
    Berlin
    Beiträge
    316
    Warum das jetzt mit den Digitalservos nicht funktioniert, kann ich mir auch nicht erklären.
    Ich arbeite zZt mit 5€ Servos von Modelcraft. Ich mache den Refresh alle 10ms. Dabei gibt es keinerlei Probleme.
    Auch Fahrten mit konstanter Geschwindigkeit werden relativ sauber ausgeführt.


  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2011
    Beiträge
    9
    @ lokirobotics: Da hast du recht, das sieht sehr gut aus. Genau das was meine Servos machen sollen. Wie steuerst du denn die Servos an?

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.05.2005
    Ort
    Berlin
    Beiträge
    316
    Danke.
    Ich hab einen eigenen Servocontroller auf Basis eines ATMega32. Die Software läuft aber praktisch auf jedem Controller, der einen Timer mit Compare Match hat.
    Der Controller wird einfach mit Positionswerten über die serielle Schnittstelle gefüttert. Für den PC hab ich mir ein Programm geschrieben, mit dem ich Sequenzen erstellen und ablaufen lassen kann.
    Der Befehl "set,0,200,1000" z.B. würde Servo1 in einer Sekunde auf Position 200 fahren (0-255 möglich).

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2011
    Beiträge
    9
    @ lokirobotics: Also verändert dein Controller, wie ich in dem Viedeo gesehen habe, die Pulsweite entsprechend der Zeit, die der Servo für das Anfahren der benötigten Position brauchen soll oder? Hast du die Software in C oder mit was anderem geschrieben? Habe mit meinem Programm und der Messkarte (läuft auch mit Digitalservos), das ganze noch mal optimieren können und das zittern vermindern können. Komme aber immernoch nicht ganz an die saubere Bewegung, wie mit einem Servotester z.B. ran.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.05.2005
    Ort
    Berlin
    Beiträge
    316
    Der Controller erzeugt nur die Signale für die jeweiligen Servos. Das Programm im PC erstellt eine Tabelle, in der die Servopositionen stehen. Jede Tabellenzeile stellt dabei einen Timeslot von 10ms dar. Der Controller kriegt also alle 10ms die Servopositionen übermittelt, die er dann auch sofort anlegt. Die Servos bewegen sich also immer mit maximaler Geschwindigkeit.
    Hier mal ein Ausschnitt aus solch einer Tabelle:

    Code:
    0    0    0    0    
    2    2    0    0    
    4    4    0    0    
    6    6    0    0    
    8    8    0    0    
    10    10    0    0    
    12    12    0    0    
    14    14    0    0    
    16    16    0    0    
    18    18    0    0    
    20    20    0    0    
    22    22    0    0    
    24    24    0    0    
    26    26    0    0    
    28    28    0    0    
    30    30    0    0    
    32    32    0    0    
    34    34    0    0    
    36    36    0    0    
    38    38    0    0    
    40    40    0    0    
    42    42    0    0    
    44    44    0    0    
    46    46    0    0    
    48    48    0    0    
    50    50    0    0    
    52    52    0    0    
    54    54    0    0    
    56    56    0    0    
    58    58    0    0    
    60    60    0    0    
    62    62    0    0    
    64    64    0    0    
    66    66    0    0    
    68    68    0    0    
    70    70    0    0    
    72    72    0    0    
    74    74    0    0    
    76    76    0    0    
    78    78    0    0    
    80    80    0    0    
    82    82    0    0    
    84    84    0    0    
    86    86    0    0    
    88    88    0    0    
    90    90    0    0    
    92    92    0    0    
    94    94    0    0    
    96    96    0    0    
    98    98    0    0    
    100    100    0    0    
    102    98    0    0    
    104    96    0    0    
    106    94    0    0    
    108    92    0    0    
    110    90    0    0    
    112    88    0    0    
    114    86    0    0    
    116    84    0    0    
    118    82    0    0    
    120    80    0    0    
    122    78    0    0    
    124    76    0    0    
    126    74    0    0    
    128    72    0    0    
    130    70    0    0    
    132    68    0    0    
    134    66    0    0    
    136    64    0    0    
    138    62    0    0    
    140    60    0    0    
    142    58    0    0    
    144    56    0    0    
    146    54    0    0    
    148    52    0    0    
    150    50    0    0    
    152    48    0    0    
    154    46    0    0    
    156    44    0    0    
    158    42    0    0    
    160    40    0    0    
    162    38    0    0    
    164    36    0    0    
    166    34    0    0    
    168    32    0    0    
    170    30    0    0    
    172    28    0    0    
    174    26    0    0    
    176    24    0    0    
    178    22    0    0    
    180    20    0    0    
    182    18    0    0    
    184    16    0    0    
    186    14    0    0    
    188    12    0    0    
    190    10    0    0    
    192    8    0    0    
    194    6    0    0    
    196    4    0    0    
    198    2    0    0    
    200    0    0    0
    edit: MCU in C, PC Programm in C#

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Gute Arbeit, mein Kompliment.
    Zitat Zitat von lokirobotics
    ... Controller kriegt also alle 10ms die Servopositionen übermittelt, die er dann auch sofort anlegt ...
    Nun ist die Standard-Updateperiode eines Servos 20 ms. Aber wir wissen, dass Servos nicht so pingelig auf diese Zeit achten - aber das Rampenverhältnis muss halt stimmen. Spricht Dein Servo wirklich 100 mal pro Sekunde mit Dir? Dann müsste ja auch Dein Stellungssignal, die Rampe (siehe hier) entsprechend kleiner sein, sprich 0,5 bis 1 ms je Periode.

    Frage 1: wie lang ist Deine kürzeste Rampe, wie lang Deine längste ?
    Frage 2: Verarbeitet Dein Servo wirklich die 100-Hz-Signale? (Wie) Ist das getestet/gesichert?
    Ciao sagt der JoeamBerg

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2011
    Beiträge
    9
    Zitat Zitat von lokirobotics Beitrag anzeigen
    Der Controller erzeugt nur die Signale für die jeweiligen Servos. Das Programm im PC erstellt eine Tabelle, in der die Servopositionen stehen. Jede Tabellenzeile stellt dabei einen Timeslot von 10ms dar. Der Controller kriegt also alle 10ms die Servopositionen übermittelt, die er dann auch sofort anlegt. Die Servos bewegen sich also immer mit maximaler Geschwindigkeit.
    Hier mal ein Ausschnitt aus solch einer Tabelle:
    das heist: für den Algorithmus bedeutet das, wenn du schneller mit den Servos fahren möchtest, dann schickst du ihm einfach weniger Werte bzw. größere Abstände oder wie kann ich das verstehen?

Berechtigungen

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

Labornetzteil AliExpress