Forum: Mikrocontroller und Digitale Elektronik 18 fach Servo Controller


von Christoph (Gast)


Lesenswert?

Hallo,
wir bräuchten einen 18 Fach Servo Controller hat irgendjemand eine Idee 
wie man so etwas machen kann?
Ich hab da schon welche im Internet gesehen, aber aus Platz und 
Technischen gründen würden wir gerne für unser Schul Projekt alles mit 
einem µC machen, zur verfügung haben wir einen mega 2561 bzw. 1281.

Wie machen die das mit den Boards die man fertig kaufen kann? soweit von 
unserem Lehrer weiß brauche ich eine PWM und einen Timmer aber kein 
AT-Mega hat diese menge die man benötigt...
Gibt es irgendwelche Hardware mit der ich das erweitern kann?

MFG

von Andreas R. (rebirama)


Lesenswert?

Schau dich mal hier im forum ein wenig um, das wurde schon öffter 
gemacht.

Der Schlüssel zum Erfolg ist es, die Signale nicht rein in Hardware 
(timer) sondern aus einer Kombination Timer und Software zu erzeugen.

Ich würde dir, wenn du noch viel anderes, als die Servos anzusteuern, 
machen willst zu einem Xmega statt dem älteren mega raten: Der hat 
interrupt prioritäten, was von Vorteil ist, wenn noch andere 
Zeitkritische sachen getan werden sollen.

von freak (Gast)


Lesenswert?

hallo,

habe so etwas in der art schon einmal gebaut, auch für ein schulprojekt.
leider handelt es sich bei meinem um einen 20fach servo-controller.
schade, dass ihr einen 18fachen benötigt, sonst hätte ich euch meinen 
gerne zur verfügung gestellt.

mfg

von Andreas R. (rebirama)


Angehängte Dateien:

Lesenswert?

so, hab mal ein wenig gekramt.

Die angehängt Software steuert mit einem Atmega8 17 Servos an (18 
vorgesehen)

Ist aus einem alten Projekt, auf dem du aufbauen kannst.
Die Datem kommen seriell (Fleur-lib, nicht enthalten) rein. Den Teil 
musst du halt rausnehmen.
Des weiteren kann man ein poti anschließen um alle Servos gleichzeitig 
zu testen. (Kannst du auch rausnehmen, dann wird der Pin für den 18ten 
Servo frei ;-)

von Christoph (Gast)


Lesenswert?

Hallo,
egal dann hätten wir halt 2 über, wenn du einen 20Fach fertig hast würde 
uns das viel zeit die wir nicht haben ersparen.

Würdest du mir die Sachen den geben?
Habt ihr ihn getestet?

Viel dank schon mal in vorraus!

MFG

von freak (Gast)


Lesenswert?

ja haben wir alles getestet, läuft super!

ja müsstest die sachen aber abholen, wo kommst du her?

von Christoph (Gast)


Lesenswert?

@Andreas R.

Wie war den deine Hardware aufgebaut?
kann man damit immer nur einen servo gleichzeitig laufen lassen?
und wie kann ich damit Schrittketten/Bewegungsabläufe fahren?

Danke für deine mühen!

von freak (Gast)


Lesenswert?

kein interesse mehr? kein problem, habe grade per pm einen anderen 
interessenten gefunden.

wünsch euch noch viel spaß :)

von Andreas R. (rebirama)


Lesenswert?

man kann damit alle servos gleichzeitig bewegen, wenn das das ist, was 
du wissen wolltest. Denk daran, dass einem Servo sowieso nur alle 20 ms 
eine neue Position per PWM mitgeteilt werde kann, das ist eine kleine 
Ewigkeit!

Die Bewegungsabläufe wurden von einem zweiten Controller erzeugt, war 
aber rückblickend käse, das hätte der Atmega locker auch noch machen 
können.
Wir haben damals keine reine Onlineberechnung der Servowinkel gemacht, 
sondern und offline berechnet, wie die servos sich z.B. für eine 
Geradeausbewegung,Kurve, drehen auf der Stelle - bewegen müssen. Das kam 
dann als Tabelle ins Flash. Die Tabelle war recht klein, da man einiges 
an an Symetrie und Phasenversatz der Einzelbewegungen ausnutzen konnte.
(Die Berechungen der notwendigen Winkel-Zeit-Verläufe ist nicht ganz 
trivial, ein haufen Trigonometrie, das schafft nach meiner Einschätzung 
kein 8-Bitter in Echtzeit).

Dann noch ein paar Sharp Abstandssensoren und fertig ist der Hexapod :-)
(ganz so einfach wars nicht ;-)

von F. T. (efreaky)


Lesenswert?

@ Andreas R.

wie lautet die Syntax über den serin-Port um einzelne Servos in eine 
bestimmte Position fahren zu lassen für Deine "servo.c".
Wenn ich den Code richtig interpretiere arbeitest Du mit einem 
16MHz-Quarz und einer Baudrate von 38400. Kann man die Baudrate einfach 
ändern in 9800 oder ähnliches, oder muss noch etwas anderes korregiert 
werden um andere Baudraten zu wählen.

Ist so etwas möglich:
Fahre Servo3,4,9 zu Position 45 in 4 Sekunden

Kann man Servoverfahrwege miteinander verknüpfen:
Fahre Servo3,4,9 zu Position 45, Servo2,5,11 zu Position 113 in 4 
Sekunden

von andreas (Gast)


Lesenswert?

das "Protokoll" ist denkbar einfach (leider nicht ganz 
wasserdicht/vollständig*)

das protokoll besteht aus zwei-byte-paketen
1. byte: command
2. byte: daten

command:
0b0010xxxx: Setze servo xxxx(binär) auf neue Position
daten:
neue Position (0-255, wobei 127 etwa die Mittelstellung der Servos ist.

eine ausnahme bildet das Paket
0xff 0x00
damit wird die Komunikation einmalig eingeleitet.

* Abfangen von verlorenden Daten etc ist nicht implementiert, ebenso 
keine Plausibilität, Checksumme o.ä. -> Deshalb unbedingt überarbeiten. 
Damals hatte ich noch keine Ahnung, wie man ein Protokoll sinvoll 
implementiert ;-)

von andreas (Gast)


Lesenswert?

Die eigentlichen Bewegungsabläufe wurden im anderen Controller gemacht. 
Also irgendwas mit Position x in 5 sekunden ist mit dem code nicht drin.

Bin hier leider nicht an meinem Rechner, sonst könnte ich die die 
"Motion Engine" des zweiten Controllers auch raussuchen. Für deine 
Anwendung würde ich beides auf einem Controller laufen lassen. Dann 
fällt die Kommuntikation weg.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.