PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo Drehgeschwindigkeit einstellen



Involut
18.02.2008, 17:17
Hallo,
ich wollte mal fragen ob man in Basocm die Drehgescheindigkeit eines Servos
ändern kann?

Ratber
18.02.2008, 18:13
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.

Involut
18.02.2008, 23:38
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)

Ratber
19.02.2008, 16:18
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.

Involut
21.02.2008, 00:56
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

Involut
21.02.2008, 01:32
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
:-)

Ratber
21.02.2008, 08:40
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
:-)

Ratber
21.02.2008, 08:52
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

jeffrey
21.02.2008, 13:55
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

Ratber
21.02.2008, 14:05
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 ?

jeffrey
21.02.2008, 20:20
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

Ratber
21.02.2008, 21:19
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.

Feratu
23.02.2008, 16:40
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.