Wie hoch soll denn die Rate sein? Also mit welcher Frequenz sollen die Daten ausgegeben werden?
Hallo Forengemeinde,
Ich bin neu hier im Forum und habe auch sonst bisher wenig Erfahrung auf diesem Gebiet.
Ich lese hier schon seit einer Weile mit und bin deshalb recht zuversichtlich, dass ihr mir bei der folgenden Frage helfen könnt.
Es geht um die Steuerung von 3 Schrittmotoren welche beispielsweise über 3 SMCI33 von Nanotec betrieben werden mithilfe von Takt- Richtungssignalen.
Die Signale für die 3 Schrittmotorsteuerungen sollen synchron getaktet sein, sprich wenn zwei Motoren einen Schritt in eine Bestimmte Richtung gleichzeitig ausführen sollen muss das auch wirklich absolut GLEICHZEITIG geschehen! Ich vermute nach dem was ich hier und in anderen Foren gelesen habe, dass so etwas ganz einfach über einen Mikrocontroller zu realisieren ist welcher die Signale für alle 3 SMCI33 erzeugt.
Die genauen Bewegungsabläufe werden separat berechnet und stehen quasi in der folgenden Form zur Verfügung:
Gibt es eine Einfache Möglichkeit (am besten ein fertiges Bauteil) welches die insgesamt 6 Takt- Richtungssignale erzeugen kann und auf welchem ich unterschiedliche Bewegungsabläufe speichern und im Stand-Alone Betrieb ausführen lassen kann? Die Tabellengröße ist jedoch nicht zu unterschätzen (ca. 1e7 Takte pro Bewegungsprofil), weshalb entsprechend Speicher zur Verfügung stehen sollte. Am liebsten wäre mir eine kommerzielle Lösung bestehend aus Hardware und zugehöriger Software zum übertragen der Bewegungsabläufe.
Takt Motor1 Motor2 Motor3 1 Schritt nach rechts kein Schritt Schritt nach rechts 2 Schritt nach rechts kein Schritt kein Schritt 3 kein Schritt Schritt nach links Schritt nach links ...
Vielen Dank für eure Hilfe!
Wie hoch soll denn die Rate sein? Also mit welcher Frequenz sollen die Daten ausgegeben werden?
So um die 300kHz.
Das sind recht viele Daten. Bei optimaler Kodierung (und wenn ich richtig rechne) kommst du auf 7.15 MB an Daten, die du vorhalten willst. Das geht nicht in den RAM von (zB) einem AVR. Ein externes Speichermedium (zB SD Karte) wäre groß genug, aber intuitiv würde ich sagen, dass du da dann auch schon mit den Datentransferraten am oberen Ende bist, wenn du mit 300 kB/s (2 Bit pro Byte verschenkt) lesen willst. Da habe ich aber keine praktischen Erfahrungen, vielleicht kann jemand anderes etwas dazu sagen.
Gruß
Malte
Vielen Dank erstmal für deine Hilfe.
Da es nicht so sehr auf die Geschwindigkeit ankommt, wäre das jetzt erstmal kein Problem. Kennst du (oder jemand anderes hier) denn eine Möglichkeit wie man solche Schritttabellen einfach auf externer Hardware speichern und anschließend die Takt- Richtungssignale erzeugen lassen kann? Ich habe leider keinerlei Erfahrung auf dem Gebiet der MC Programmierung und würde daher eine Art Fertiglösung bevorzugen...
Was soll das ganze denn überhaupt werden?
Für was du diese riesige anzahl an Datenmengen benötigst, ist mir nicht ganz klar, deswegen wäre gut, um zu wissen, um was es sich denn genau handelt. Ich kann mir nur schwer vorstellen, das es notwendig ist, 10Millionen einzelpositionen speichern und nacheinander ausgeben musst. Evtl. lässt sich das ganze ja dann auch über eine art g-code oder einer inversekinematik einfacher/besser lösen.
Alleine die 300kB/s über SPI sind mit einem kleinen mikrocontroller nichtmehr machbar. Wenn dann noch ein FAT dateisystem dazu kommen funktionierst erst recht nicht, ich glaube da ist man bei ca. 10kB/s.
Die 300kHz finde ich auch etwas hoch, für einen Schrittmotor (außer mit µstepps) wir sprechen hier von 15k U/min bei Vollschritten. Normale Schrittmotoren packen maximal 3000U/min. Deine Treiber können auch nur maximal 50Khz im takt richtungsmodus.
Also, was hast du denn genau vor zu realisieren, vlt. benötigst du ja auch gar keinen schrittmotor?
Hallo Robin,
Also: es sollen 2 Linearaktuatoren über ein Gelenk A miteinander verbunden werden. Die Beiden (ebenfalls drehbaren) Aufhängungen B und C der Aktuatoren bilden also mit A ein Dreieck. Durch Längenänderung der Linearaktuatoren lässt sich der Punkt A somit beliebig in der Ebene positionieren.
Ich möchte den Punkt A beliebige Bahnen fahren lassen.
Mein Plan war es nun die Kinematik, zu welcher noch ein weiterer Teil gehört (weshalb ich im Eingangspost von 3 Motoren sprach) in Matlab zu implementieren und dort die einzelnen nötigen Schritte für die 3 Stepper zu berechnen. Zusätzlich könnte ich dort dann die auftretenden statischen und dynamischen Kräfte berechnen und somit für die nötigen Beschleunigungs- und Bremsrampen sorgen.
Das ganze wäre für mich eben viel einfacher, da ich in einer bekannten Programmierumgebung bleiben könnte.
Falls es jedoch nicht so geht wie ich mir das vorgestellt habe, könnte ja dein Stichwort "Inverse Kinematik" genau das richtige sein, da jeder Punkt A durch eindeutige Schenkellängen AB und AC gekennzeichnet ist.
Allerdings vermute ich, dass ich in diesem Falle wieder nicht um die MC Programmierung herum komme.
Gemeint sind natürlich Mikrosteps. Ich habe Schrittmotoren für die richtige Wahl gehalten, da ich bei Verwendung von Servus die beiden Linearaktuatoren nicht richtig synchronisiert bekomme und somit meine Bahn nicht stimmt.
dafür brauchst du nie im Leben 300 kHz! deine Steuerung kann ja gerade einmal 50 kHz...
Normale Standard Schrittmotoren haben eine Auflösung von 200 Schritten pro Umdrehung, dh du weißt dass sich der Schrittmotor pro Schritt um 1,8° dreht. Mikroschrittendstufen können dies teilen, dass heißt zum Beispiel bei Halbschritt brauchst du 2 Step Signale, damit sich der Motor um 1,8° dreht, bei einem Schritt dreht sich der Motor ungefähr um 0,9°. Wenn man eine CNC Maschine auf Mikroschritt umbaut verbessert sich also keineswegs die Genauigkeit der Maschine, allerdings führt Mikroschritt zu einem saubereren, weniger ruckligen lauf der Motoren.
Mal als Beispiel:
Meine ISEL CNC Fräse hat Standard Schrittmotoren im Halbschrittbetrieb an Kugelumlaufspindeln mit einer Steigung von 5mm. Die maximale Verfahrensgeschwindigkeit beträgt 8m/min =~133 mm/s, in einer Sekunde muss sich die Spindel also ~26,6 mal drehen.
26,6*200(schritte)*(Halbschritt)= 10666 Schritte pro Sekunde, also benötige ich maximal 11kHz. Die Steuerungskarte könnte also mehr, es hängt aber vor allem von der Mechanik ab, welche Verfahrensgeschwindigkeit möglich ist.
MfG Urs
Der Punkt an der hohen zeitlichen Auflösung könnte sein, dass diese das kleinste Geschwindigkeitsinkrement bzw -dekrement bestimmt. Es muss also garnicht darum gehen, Steps mit 300 kHz zu triggern, sondern evnt darum, die Geschwindigkeit fein genug variieren zu können.
Aber das ist natürlich nur mal so spekuliert, dazu müsste sich der TO äußern .
Gruß
Malte
Das ganze klingt für mich nach einer art delta roboter nur mit 2 armen.
Schrittmotoren sind nicht schlecht, kann man falls man geschwindigkeit braucht später immernoch durch servomotoren ersetzen.
Da das ganze standalone werden soll, könnte es mit einem Raspberry Pi funktionieren. Darauf läuft linux+matlab drauf (so weit mir bekannt), die frage ist nur, ob es schnell genug für dich ist und ob/wie du die Ein- und Ausgänge ansteuern kannst.
Zur not gibt es ja immernoch USB oder RS485, hier könnten die Treiber probleme machen, aber einfacher wird es für dich kaum möglich sein (vlt. noch mit einem nettop oder netbook), wenn du kein C programmieren willst.
Ich würde das ganze persönlich (ohne das projekt zu kennen) mit einem µController aufbauen der die inverse kinematik berechnet (formeln hast du ja schon in matlab) und eine SD-karte auf der G-Code gespeichert ist. Je nach komplexität kann man dann auch noch ein display anschliesen, mit dem man verschiedene programme wählen kann.
Das ganze sollte für Anfänger/Künstler auch mit einem arduino machbar sein, mit etwas C kenntnissen und einarbeitung, natürlich vorrausgesetzt.
Lesezeichen