Archiv verlassen und diese Seite im Standarddesign anzeigen : Takt- Richtungssignale erzeugen
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:
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
...
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.
Vielen Dank für eure Hilfe!
Wie hoch soll denn die Rate sein? Also mit welcher Frequenz sollen die Daten ausgegeben werden?
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.
Horstelin
20.10.2013, 18:05
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.
Matlab auf einem Raspberry Pi? Halte ich für ausgeschlossen. Lasse mich aber gerne eines Besseren belehren.
Auch möglich, so gut kenne ich mich mit matlab nicht aus. Hab mal ein bischen google bemüht und scheint wohl nur ein I/O device zu sein. Aber auch etwas interesantes gefunden, das es evtl möglich wäre, c-code auf matlab zu erzeugen und diesen dann auf dem Pi auszuführen. Aber wie gesagt, kenne mich damit nicht gut genug aus.
Vielen Dank erstmal für die zahlreichen Antworten und Vorschläge. Die von mir vorgeschlagene Steuerung unterstützt natürlich nur 50kHz - das hatte ich bei meiner Antwort nicht beachtet. Da es sich jedoch nicht um eine zentnerschwere CNC Fräse handelt halte ich es nicht für ganz ausgeschlossen, dass die Schrittmotoren auch mit sehr hohen Frequenzen bewegt werden können. Der Vergleich mit dem zweiarmigen Delta-Roboter trifft es schon ziemlich gut. Der Aktionsradius wird sich allerdings auf wenige mm^2 beschränken und zwecks ruhigerem Lauf hatte ich an Mikrostepping (1/16 Schritte) gedacht. Bei einer Auflösung der Aktuaren von beispielsweise 0.005mm im Vollschritt komme ich also auf 3200 Schritte/mm im 1/16-Schritt. Bei 50kHz könnte ich somit eine Geschwindigkeit von ca. 16mm/sek fahren. Das halte ich bei sehr kleinen bewegten Massen und den dadurch geringen Beschleunigungs- und Trägheitskräften für machbar. Allerdings habe ich da keinerlei Erfahrungswerte auf die ich zurückgreifen kann - berichtigt mich also gern, falls das aus irgendwelchen Gründen eher nicht im Bereich des Möglichen liegen sollte.
Viel wichtiger war mir jedoch die Eigentliche Frage, wie ich die Signale für die Motoren erzeugen kann. Hier scheint mir tatsächlich die beste Lösung der Vorschlag mit dem Mikrocontroller zur Berechnung der inversen Kinematik zu sein. Ich habe mir den Arduino jetzt mal ein bisschen genauer angeschaut. Da gibt es ja durchaus Varianten, welche entsprechend hohe Taktraten haben. Ausserdem scheint es recht einfach zu sein Displays, externe Schalter, evtl. sogar zusätzlichen Speicher sowie eine PC-unabhängige Stromversorgung zwecks stand-alone Betrieb anzuschliessen. Im Internet finden sich dazu reihenweise Tutorials und Beispielcode - es sollte also eigentlich kein Problem sein, sich da einzuarbeiten.
Ich danke euch für die schnelle Hilfe!
Piattu
Horstelin
21.10.2013, 20:27
Der Aktionsradius wird sich allerdings auf wenige mm^2 beschränken und zwecks ruhigerem Lauf hatte ich an Mikrostepping (1/16 Schritte) gedacht. Bei einer Auflösung der Aktuaren von beispielsweise 0.005mm im Vollschritt komme ich also auf 3200 Schritte/mm im 1/16-Schritt. Bei 50kHz könnte ich somit eine Geschwindigkeit von ca. 16mm/sek fahren. Das halte ich bei sehr kleinen bewegten Massen und den dadurch geringen Beschleunigungs- und Trägheitskräften für machbar. Allerdings habe ich da keinerlei Erfahrungswerte auf die ich zurückgreifen kann - berichtigt mich also gern, falls das aus irgendwelchen Gründen eher nicht im Bereich des Möglichen liegen sollte.
Das ist absolut machbar, abgesehen davon kannst du immernoch auf 1/8 umschalten und hast dann die doppelte Verfahrensgeschwindigkeit oder sparst Speicher.
Viel wichtiger war mir jedoch die Eigentliche Frage, wie ich die Signale für die Motoren erzeugen kann. Hier scheint mir tatsächlich die beste Lösung der Vorschlag mit dem Mikrocontroller zur Berechnung der inversen Kinematik zu sein. Ich habe mir den Arduino jetzt mal ein bisschen genauer angeschaut. Da gibt es ja durchaus Varianten, welche entsprechend hohe Taktraten haben. Ausserdem scheint es recht einfach zu sein Displays, externe Schalter, evtl. sogar zusätzlichen Speicher sowie eine PC-unabhängige Stromversorgung zwecks stand-alone Betrieb anzuschliessen. Im Internet finden sich dazu reihenweise Tutorials und Beispielcode - es sollte also eigentlich kein Problem sein, sich da einzuarbeiten.
Ich danke euch für die schnelle Hilfe!
Piattu
Ich würde es übrigens so umsetzen:
Pro gewünschter Bewegung würde ich ein Array mit n Zellen erstellen, wobei n die Anzahl der maximal möglichen Step signale darstellt, also zb bei 3s wäre das Array 3s*50000Hz=150000.
in jede Zelle kommt ein byte, du hast also 8 bit frei für die 6 Dir/step Signale. Von matlab lässt du dir berechnen wann welche Achse sich in welche Richtung bewegen soll und dass im 1/50kHz=0,02ms Takt
Jetzt programmierst du auf deinem Atmega/arduino einen Timer der alle 0,02ms aufgerufen wird, dir dein Byte an einen Port ausgibt und die lauf variable vom Array um 1 erhöht. Dass wars dann eigentlich schon ;)
Längere Bewegungsabläufe musst du dann natürlich auf eine SD-karte auslagern oder du besorgst dir einen µC mit genügend großem Flash-speicher
MfG Urs
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.