MeckPommER
31.05.2009, 00:24
Da ich Schrittmotoren u.a. auch für Marvin einsetzen möchte, habe ich ein Controllersystem entwickelt. Rahmenbedingungen für diese Entwicklung waren folgende:
- Die Stepperansteuerung muss preiswert sein, da viele Controller hergestellt werden müssen.
- Die Controller müssen leicht sein, da Marvin die Controller im Körper bzw. auf den Beinen zu sitzen hat, also keine schweren Kühlkörper.
- Die Ansteuerung der Controller darf keinen hohen Traffic auf dem Datenbus hervorrufen
- Die Controller müssen mit Marvins Datenbus ansprechbar sein
- Die Controller müssen in Hard und Software identisch sein um die Herstellung und Wartung zu erleichtern
- Die Controller müssen bis 1A liefern können.
- Für Mechaniken in denen mehrere Schrittmotoren für eine Bewegung zuständig sind, müssen die Steppermotoren absolut synchron betrieben werden können.
- Die Controller müssen die Motoren mit variabler Leistung ansteuern können.
Meine Lösung:
Ein Interface-Controller zwischen Marvins Bussystem und dem Stepperbus wandelt Marvins Befehle in Steuerbefehle für die einzelnen Schrittmotorcontroller um.
Die einzelnen Schrittmotor-Einheiten unterscheiden sich nur durch eine Geräteadresse im EEPROM.
Komplexe Bewegungsabläufe werden vom Interface-Controller nacheinander zu den einzelnen Schrittmotor-Controllern geschickt und in einem Ringbuffer abgelegt. Diese Daten bestehen aus einer Zielposition, der Zeit in der diese Position zu erreichen ist und der Stromstärke für den Schrittmotor in dieser Bewegungsphase.
Nachdem alle Daten übertragen wurden (was ja nicht auf Marvins Bus sondern getrennt auf dem Stepperbus in hoher Geschwindigkeit erfolgen kann), wird die komplette Befehlssequenz (bis zu 128 Einzelbewegungen je Motor) auf ein Befehl des Interface-Controllers hin ausgeführt.
Die komplette Schrittmotorsteuerung erfolgt durch eine timergesteuerte ISR, welche in Assembler geschrieben wurde. Die Routine zum Datentransfer zwischen den Modulen sind ebenfalls in Assembler. Der Rest ist Basic (Bascom).
Die Hardware besteht aus je zwei TEA3718 Treiberstufen und einem Atmega644 da ich von diesen DIL-Atmegas noch einige übrig hatte.
Den Nachteil des größeren Platzbedarf habe ich dadurch ausgeglichen, das ich einiges an Elektronik unter dem Atmega untergebracht habe.
http://www.youtube.com/watch?v=nUkDDkwh4Ak
Gruß MeckPommER
P.S.: mein Schrittmotor-Geschwindigkeitstest -> http://www.youtube.com/watch?v=YAWUDQny_qM
- Die Stepperansteuerung muss preiswert sein, da viele Controller hergestellt werden müssen.
- Die Controller müssen leicht sein, da Marvin die Controller im Körper bzw. auf den Beinen zu sitzen hat, also keine schweren Kühlkörper.
- Die Ansteuerung der Controller darf keinen hohen Traffic auf dem Datenbus hervorrufen
- Die Controller müssen mit Marvins Datenbus ansprechbar sein
- Die Controller müssen in Hard und Software identisch sein um die Herstellung und Wartung zu erleichtern
- Die Controller müssen bis 1A liefern können.
- Für Mechaniken in denen mehrere Schrittmotoren für eine Bewegung zuständig sind, müssen die Steppermotoren absolut synchron betrieben werden können.
- Die Controller müssen die Motoren mit variabler Leistung ansteuern können.
Meine Lösung:
Ein Interface-Controller zwischen Marvins Bussystem und dem Stepperbus wandelt Marvins Befehle in Steuerbefehle für die einzelnen Schrittmotorcontroller um.
Die einzelnen Schrittmotor-Einheiten unterscheiden sich nur durch eine Geräteadresse im EEPROM.
Komplexe Bewegungsabläufe werden vom Interface-Controller nacheinander zu den einzelnen Schrittmotor-Controllern geschickt und in einem Ringbuffer abgelegt. Diese Daten bestehen aus einer Zielposition, der Zeit in der diese Position zu erreichen ist und der Stromstärke für den Schrittmotor in dieser Bewegungsphase.
Nachdem alle Daten übertragen wurden (was ja nicht auf Marvins Bus sondern getrennt auf dem Stepperbus in hoher Geschwindigkeit erfolgen kann), wird die komplette Befehlssequenz (bis zu 128 Einzelbewegungen je Motor) auf ein Befehl des Interface-Controllers hin ausgeführt.
Die komplette Schrittmotorsteuerung erfolgt durch eine timergesteuerte ISR, welche in Assembler geschrieben wurde. Die Routine zum Datentransfer zwischen den Modulen sind ebenfalls in Assembler. Der Rest ist Basic (Bascom).
Die Hardware besteht aus je zwei TEA3718 Treiberstufen und einem Atmega644 da ich von diesen DIL-Atmegas noch einige übrig hatte.
Den Nachteil des größeren Platzbedarf habe ich dadurch ausgeglichen, das ich einiges an Elektronik unter dem Atmega untergebracht habe.
http://www.youtube.com/watch?v=nUkDDkwh4Ak
Gruß MeckPommER
P.S.: mein Schrittmotor-Geschwindigkeitstest -> http://www.youtube.com/watch?v=YAWUDQny_qM