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
ja haben wir alles getestet, läuft super! ja müsstest die sachen aber abholen, wo kommst du her?
@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!
kein interesse mehr? kein problem, habe grade per pm einen anderen interessenten gefunden. wünsch euch noch viel spaß :)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.