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
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.
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
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 ;-)
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
@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!
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 ;-)
@ 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
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 ;-)
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.