Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo Drehgeschwindigkeit einstellen
Hallo,
ich wollte mal fragen ob man in Basocm die Drehgescheindigkeit eines Servos
ändern kann?
sofern der Servo nicht extra eine Möglichkeit dafür hat läuft der kleine Motor des Servos immer so schnell wie er kann.
Ohne zusätzliche Hardware kannst du die Geschwindigkeit aber Pseudo herabsetzen indem du die zu fahrende Strecke in möglichst kleine Teile zerlegst und diese Zeitlich abfährst.
Überspitzt gesagt ruckelt er dann mit der gewünschten mittleren Geschwindigkeit vor sich hin.
Als Eingriff wäre da die Möglichkeit den Motorkreis des Servos mit einer PWM zu erweitern aber das erfordert einen zusätzlichen Kanal.
Hi und Dnake für die Info.
Ich habe das schon probiert mit dem Schritt für Schrit annäheren aber dann rucklet der Servo noch mehr. Das Problem ist dass wenn der Serve einen Roboterarm steuern soll dann hat dieser eine Relativ grußes Trägheitsmoment und der Servo Schwingt über ohne sich zu beruhigen. D.h. er wacklet die ganze Zeit und wenn dann noch ein Roboteram dran ist dann wackelt dieser je nach länge um eineige cm hin und her wobe iman daa eine positionering vergessen kann (ausserdem siehts schlimm aus und das Wackeln kann den ganzen Roboarm umschmeissen)
Wenn es schon "schwingt" dann ist das ein Zeichen dafür das die Servos zu schwach sind oder zuviel spiel besitzen.
Im Modellbau sieht man es ab und an wenn jemand seinem Flitzer einen zu schwachen Lenkservo gegönnt hat.
Die Mimik fängt an zu schwingen bis sich die Mechanik irgendwo auflöst.
Du könntest bessere ,stärkere Modelle nehmen oder auch Digitale und überlegen den Arm softwaremässig zu dämpfen.
Es wäre auch ein Gedanke daran zu verschwenden statt Servos Stepper oder AC/DC-Motoren nebst passenden Getrieben und Gebern (Positionserkennung) zu nutzen.
So hättest du auch volle Kontrolle über die Geschwindigkeit.
Modellbauservos sind eben nicht für sowas gedacht.
Hi,
die Servos sind die stärksten die ich finden konnte(bezahlbar), sie ham 2,5 nm.
Die Alternative einen Getriebemotor zu einzusetzten und dann auf der Welle das Poti anzubringen und sich so kwasi seinen Eigenen Servo zu Bauen.
Könnten den Digiservos (falls ich mir die leisten) kann das Problem mit dem Schiwngen/zittern eliminieren?
radbruch
21.02.2008, 01:13
Hallo
Das Zittern kommt wohl eher von der Ansteuerung. Vielleicht mal eine Lösung ohne die Bascom-Servo-Funktion versuchen. Wie ist denn die Ansteuerung im Programm gelöst?
Gruß
mic
Hier der Code:
Config Servos = 1 , Servo1 = Portd.2 , Reload = 10
Enable Interrupts
Servo(1) = 50
usw.
Kann man da was tunen?
Das Problem ist ja dass der Roboteram der am Servo dran ist ein Trägheist moment hat, dadurch der Servo etwas überschingt, zurückregelt und dabei wieder überschingt.....usw....Zitter Zitter.
python_rocks
21.02.2008, 08:27
Hallo Involut!
Nur um das mal auszuschließen. Für die Servoansteuerung mit Bascom muss der AVR schnell (8 Mhz und mehr) getaktet werden. Sonst werden die Servos zu langsam angesteuert.
Ansonsten fällt mir nur ein Schrittmotor mit Getriebe ein. Bei einem Schrittmotor kannst du die größte Strecke schnell anfahren lassen und zum Schluss langsam abbremsen. Das dürfte das Problem des Schwingens beseitigen. Da der Schrittmotor unter Last auch Schritte verlieren kann, lässt du dir von einem Sensor die Position des Armes geben und regelst dann noch ein wenig nach. Wenn du viele solcher Gelenke hast, dann würde ich diese Arbeit sogar direkt vor Ort von einem kleinen µC erledigen lassen.
mfg
Gerold
:-)
Die Alternative einen Getriebemotor zu einzusetzten und dann auf der Welle das Poti anzubringen und sich so kwasi seinen Eigenen Servo zu Bauen.
Ja,selber was zu bauen macht immer spass aber dann kann man auch gleich eine sinvollere Methode wie angesprochene Getriebemotore nebst Gebern oder Stepper nehmen.
Servos sind zwar bequem aber im Grunde ungeeignet weil man bei Handelsüblichen Modellen nicht in den Regelkreis eingreifen kann.
Könnten den Digiservos (falls ich mir die leisten) kann das Problem mit dem Schiwngen/zittern eliminieren?
Eine konkrete aussage kann ich dir da nicht liefern da ich nicht weiß ob das Zitern bei dir qualitative Gründe hat (Mech. Spiel.Billiger Regelkreis/Poti usw.) oder wie vermutet aus einer überlastung resultiert.
Digitale Servos sind aber in der Regel präziser als die Herkömmmlichen und weisen meist eine feinere Auflösung auf.
@Radbruch
Ja,hatte ich auch erst gedacht und einfach mal mein einfaches Testprogramm mit einem alten Conrad S20 (Stammt noch von ca. 1985) probiert.
'Einfacher Servosteuerung über 2 Taster.
'
'Minimum,Maximum und Schrittweite sind Servospezifisch und müssen auf das
'jeweilige Modell angeglichen werden.
'Verzögerung ist Geschmackssache sowie der Startwert
'Das Programm ist absichtlich einfach gehalten um die Funktion zu verdeutlichen.
'also keine ausgefeilte Tastenabfrage oder sonstige Optimierung.
'
'Ratber 2005
'================================================= ==============================
$regfile = "M8def.dat"
$crystal = 8000000
$baud = 19200
Config Servos = 1 , Servo1 = Portb.1 , Reload = 10
Enable Interrupts 'Ist nötig
Config Portb.1 = Output 'Servoausgang
Config Pind.6 = Input 'Taster 1
Config Pind.7 = Input 'Taster 2
Portd.6 = 1 'Pullup aktiviert
Portd.7 = 1 'Pullup aktiviert
Dim Ist As Byte
Dim Minimum As Byte
Dim Maximum As Byte
Dim Schrittweite As Byte
Dim Pause1 As Byte
Dim Pause2 As Byte
Dim Z As Word
Minimum = 35 'Rechter Anschlag
Maximum = 155 'Linker Anschlag
Schrittweite = 1 'Schrittweite beim erhöhen
Pause1 = 10 'Verzögerungszeit in ms damits steuerbar bleibt
Pause2 = 50
Ist = Minimum 'Einfach nur Definierter Startwert
Do
If Pind.6 = 0 Then
Ist = Ist + Schrittweite
If Ist > Maximum Then Ist = Maximum
Waitms Pause1
End If
If Pind.7 = 0 Then
Ist = Ist - Schrittweite
If Ist < Minimum Then Ist = Minimum
Waitms Pause2
End If
Servo(1) = Ist
Loop
End
Der Servo lief ohne Last zitterfrei,mit leichter Last ebenfalls.
Nur wenn ich ihn überlaste dann gibts die bekannte Schwingneigung weil der Servo aufgrund der zu bewegenden Masse nicht mehr schnell genug gegenhalten kann.
@Phyton_Rocks
Ja,guter Hinweis.
Wenn der Controller zu langsam läuft stimmts Timing nicht mehr und der Servo läuft nicht richtig.
Allerdings würde er dann meist gar nicht laufen oder schon ohne Last wild tanzen.
python_rocks
21.02.2008, 08:47
@Phyton_Rocks
Wenn der Controller zu langsam läuft stimmts Timing nicht mehr und der Servo läuft nicht richtig.
Allerdings würde er dann meist gar nicht laufen oder schon ohne Last wild tanzen.
Hallo Ratgeber!
Bei mir war der Servo bei ca. 3,6 Mhz einfach nur sehr schwach.
mfg
Gerold
:-)
Bei mir war der Servo bei ca. 3,6 Mhz einfach nur sehr schwach.
Definiere "Schwach" !
Das Drehmoment des Servos ist nicht abhängig vom Steuersignal und seinem Timing.
Das bestimmt nur der Motor,das Getriebe und natürlich die richtige Spannung.
Das Timing kommt in diesem Falle vom Controller.
Wenn das nicht stimmt interpretiert der Servo es falsch und begibt sich in irgendeine Stellung oder läst sich nur begrenzt stellen.
Den Begriff "Schwach" kann ich so also nur sehr begrenzt anwenden.
python_rocks
21.02.2008, 09:25
Bei mir war der Servo bei ca. 3,6 Mhz einfach nur sehr schwach.
Definiere "Schwach" !
Hallo Ratgeber!
Das wird lustig. :-)
Also bei 3,6 Mhz konnte ich den billigen Modellbau-Servo ganz einfach mit zwei Fingern zurück halten.
Bei 8 Mhz brauchte ich schon ein wenig Kraft dafür.
Genauer kann ich es nicht beschreiben. Ich habe die Kraft nicht gemessen.
mfg
Gerold
:-)
radbruch
21.02.2008, 13:42
Hallo
Meine tiny13 mit 1,2Mhz können bis zu 5 Servos ohne zittern steuern, an meinem 8MHz-RP6 hingen zuletzt 7 Servos. Allerdings verwende ich C und habe es mit bascom noch nicht versucht. Meine Erfahrung ist aber folgende:
Wenn neben der Servosteuerung noch ein Interrupt mit höherer Priorität aktiv ist, werden die Pulslängen der Servosignale durch die "fremde" ISR beeinflußt. Dies kann zu einem Zittern der Servos führen.
Entscheidend für die Kraft ist auch die Wiederholfrequenz der Impulse. Obwohl standartmässig 20ms als Intervall angegeben werden, erzeugen, je nach Servo, Wiederholungen bis unter 10 ms ein "agressiveres" Drehen der Servo. Werte deutlich über 20ms führen zu einem kraftlosen Zuckeln. Die Übergänge sind fließend.
Gruß
mic
hi,
du kannst auch mal die versorgungspannung des servos erhöhen. allerdings ist überlastung und höhere versorgungsspannung nicht unbedingt förderlich für die lebensdauer des servos ;-)
und wie oben schon geschrieben, drauf achten, dass das steursignal sauber kommt.
mfg jeffrey
Entscheidend für die Kraft ist auch die Wiederholfrequenz der Impulse. Obwohl standartmässig 20ms als Intervall angegeben werden, erzeugen, je nach Servo, Wiederholungen bis unter 10 ms ein "agressiveres" Drehen der Servo. Werte deutlich über 20ms führen zu einem kraftlosen Zuckeln. Die Übergänge sind fließend.
Also bei 3,6 Mhz konnte ich den billigen Modellbau-Servo ganz einfach mit zwei Fingern zurück halten.
Bei 8 Mhz brauchte ich schon ein wenig Kraft dafür.
Genauer kann ich es nicht beschreiben. Ich habe die Kraft nicht gemessen.
Was habt ihr da für merkwürdige Servos ?
Ich kenn das nur so das wenn das signal (Impulsdauer/Länge) nicht mehr korrekt iats der Servo in eine Stellung läuft bzw. bei Ausfall je nach Servochip entweder eine der beiden Endstellungen anläuft oder einfach einfriert.
Einen Kraftverlust kann ich da beim besten Willen nicht feststellen.
Oder werden die Teile Heute so gebaut ?
hi,
entweder eine der beiden Endstellungen anläuft oder einfach einfriert.
ja, er friert ein, regelt aber seine position nicht mehr nach also verliert er an kraft, weil er ja nicht mehr zurück fährt.
mfg jeffrey
Ich habs gerade noch mal probiert aber ausser den alten S10/15/20 hab ich jetzt nix da und die Microservos aussem Segler will ich jetzt nicht extra dafür ausbauen.
Bleibt das Signal weg oder ist unstimmig dann läuft er entweder irgendwohin oder bleibt wie anbetoniert stehen.
Aber wie auch immer,kommen wir wieder zum Thema.
Das Versorgung und Signal stimmen setze ich mal voraus.
Wenn der Servo nicht überlastet wird sollte sich auch kein Zittern einstellen.
Ein Arm wie Involut ihn angedeutet hat stellt einen Hebel dar und da ist man schnell übers maximale Drehmoment hinaus.
Schließlich müssen die Beschleunigungen mit in die Rechnung aufgenommen werden.
HI, also ich wette du brauchst nciht an allen Gelenken des Roboterarm die vollen 180° verfahrweg des Servos.
Das bedeutet du könntest den Hebelarm vom Servo etwas unterstützen indem du den Servo mit einer kleinen Stange an den eigentlichen Roboterarm Abschnitt in einem bestimmten abstand verbindest.
Hab ich schon getestet das funktioniert wunderbar kommt nur auf den Abstand an dem du ihm gönnst. Da trifft dann die einfache Regel zu:
Großer Verfahrweg => Kleine Kraft
Kleiner Verfahrweg => Große Kraft
Das Wackeln kommt soweit ich das beobachten konnte im grunde nur von der Geschwindigkeit des Servos. Der versucht ja seine Position zu halten und schießt dann über sein Ziel hinaus wodurch er wieder zuweit in die andere Richtung verfährt, aber er schießt wieder übers Zeil hinaus und fährt wieder zu weit in die andere Richtung und blabla. Das Problem hatte ich bei meinem 2 Beiner Robbi. Das hat sich meist so stark hochgeschwungen das der umgefallen is -_-.
Mit einem Digitalen Servo löst sich das Problem aber von alleine weil dieeinfach wesentlich schneller die Position korrigieren können.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.