Pages: [1]   Go Down
Author Topic: wie mehrere Servos paralell bewegen und Fahrbereich festlegen?  (Read 457 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen,

ich möchte mehrere Servos gleichzeitig laufen lassen. Wichtig ist dabei, dass diese sich gleichzeitig bewegen. Dies läuft bei mir über eine c# Oberfläche und dementsprechend über einen Port.
Dies funktioniert halbwegs, jedoch fahren die Servos wenn ich das Arduino Board mit Spannung versorge, erst einmal irgendeine Position an und dann erst die gewünschte.


Meine Motoransteuerung sieht so aus ( soll anwendbar sein für n Motoren ):


Code:
for(pos = 0; pos <= 180; pos += 1)  
{  


if (ServoSollPos[1]>ServoIstPos[1])
{

ServoIstPos[1]=ServoIstPos[1]+1;

ServoObj[1].write(ServoIstPos[1]);  


}
else if (ServoSollPos[1]<ServoIstPos[1])
{

ServoIstPos[1]=ServoIstPos[1]-1;

ServoObj[1].write(ServoIstPos[1]);  
}

if (ServoSollPos[2]>ServoIstPos[2])
{

ServoIstPos[2]=ServoIstPos[2]+1;

ServoObj[2].write(ServoIstPos[2]);  

}
else if (ServoSollPos[2]<ServoIstPos[2])
{

ServoIstPos[2]=ServoIstPos[2]-1;

ServoObj[2].write(ServoIstPos[2]);  
}
delay(15);


Nun habe ich ein paar Fragen:

1) Startposition? Mein Program hat das Problem, dass ich die IST Position des Servos nicht kenne, wenn ich das Board anschließe. Erst wenn ich positioniert habe. Dies ist aber generell ein Problem, wenn ich einen Motor nur in gewissen winkeln betreiben will. Daher: Kann ich irgendwie sicher stellen, das ein Servo nur in einem gewissen Winkelbereich fährt? Weiterhin.... auch wenn der Servo sich in einem gewissen Winkelbereich befindet ( z.B. 90 - 120). Woher weiß ich denn, in welche richtung ich Positionieren muß ( Sollposition = 100 ), wenn ich die Ausgangsposition nicht kenne?
2) Geschwindigkeit? Mit einem Delay laufen alle Motoren synchron. Jedoch würde ich irgendwann auch gern Gruppen von Servos haben, die eine andere Geschwindigkeit haben. Also Wartezeiten zwischen den Positionierungen. Ist da delay die richtige Lösung oder gibt es eine andere, die bei n-Motoren benutzt werden sollte/kann?

habt Ihr vielleicht eine Idee oder ein Beispiel um meine Probleme zu lösen?

Gruß und schonmal danke,
Jamhacker
« Last Edit: May 10, 2013, 03:05:26 pm by UweFederer » Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 578
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Reden wir über Modellbau-Servos?
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 122
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Zu 1)
Wenn das Board startet bewegt sich der Servo in Nullstellung, da wirst du nie was dagegen machen können außer die Steuerleitung zu trennen, weil während dem Starten kein genau definierter Wert am Pin anliegt( Vermutung von mir: und somit der Servo weil er keine ordentliche Frequenz bekommt in die Nullstellung fährt und solange verharrt bis er eine ordentliche Frequenz bekommt ).
War bei mir genauso. Ich habe dann ein Relay angeschlossen und den Servo erst im Programm mit dem Pin über schalten des Relays verbunden.
Zu 2)
Mach doch Funktionen. Eine fährt alle Servos zb. 5 mal hin und her  und lässt dann 2 weiter Funktionen starten, die einzelne Servogruppen ansteuern.
Das funktioniert dann beides gleichzeitig .
Konnte ich helfen ?
Logged

Everybody makes mistakes, me too smiley

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja genau kleine Modellbau Servos mit verbauter Elektronik. Ich kann über die Signalleitung direkt den Winkel angeben.

1)Das kann es sein, dass die Servos zuerst in Nullstellung fahren. Ich habe es bis jetzt leider nicht hin bekommen, das Board zu debuggen mit laufender C# Oberfläche und somit offenem Port.
Ich habe ein Motor shield. Also würde es ausreichen, wenn ich die Spannungsversorgung auf extern stelle und den Motor shield erst über ein relais dazu schalte, wenn das Programm läuft?

Aber ist es nicht möglich, dies rein durch die Software zu realisieren? Zumal dies doch ein großes Problem für alle Anwendungen ist, wo der Motor nur einen eingeschränkten Fahrbereich haben darf.

2)
Wenn ich es richtig verstehe,wird bei einer Deplayzeit nichts gemacht und nur gewartet. Wenn ich 2 Motoren mit delay(15) laufen lassen will und 1 Motor mit delay(5) wird dies wohl nicht funktionieren?
Somit müsste ich für jeden Motor oder Motorgruppe einen eigenen Zähler aufbauen und selbst die servos alle x Sekunden neu positionieren?

Für die Motorsteuerung in beiden Richtungen, mit von ausen übergebener Position und Geschwindigkeit, muß es doch ne schöne Vorlage geben oder?
Ich kann mir nicht vorstellen, dass die beiden Probleme so ungewöhlich sind :-)
Logged

Pages: [1]   Go Up
Jump to: