RoboPro-I²C Schrittmotor Treiber

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
chehr
Beiträge: 161
Registriert: 07 Apr 2015, 21:07
Wohnort: Friedrichshafen

RoboPro-I²C Schrittmotor Treiber

Beitrag von chehr » 25 Okt 2016, 22:25

Bin schon seit längerem auf der Suche nach einer einfachen und kostengünstige Methode um mit Robo Pro Schrittmotoren anzusteuern.

Meine Erfahrung ist nun das man mit dem TX oder TXT zwar Schrittmotoren ansteuern kann, jedoch nicht wirklich präzise und mit höherer Drehzahl.

Die beste Ansteuerung via Robo Pro, was ich bisher gesehen habe, ist die mit einem speziellen Schrittmotor IC wie z.b. den TMC223 oder AMIS-30624 via I2C, wie von Rei Vilo programmiert. Siehe dazu den Link http://reivilofischertechnik.weebly.com ... oller.html Der Vorteil ist das der IC die komplette Schrittmotor Steuerung inklusiv Microstepping, Frequenz bis 1kHz, Positionskontrolle und Geschwindigkeit und Beschleunigungsfunktionen übernimmt. Leider ist das Board nicht gerade billig.

Habe nun ein Robo Pro Treiber im Betastatus der nun Schrittmotoren ansteuern kann via einem Board das recht günstig und weit verbreitet ist (unter 10€). Er kann den alten Fischertechnik Schrittmotor (Plotter/Scanner) mit ca 120 rpm und mehr ansteuern (müssten ca 5760 Steps /min) sein. Der Motor bleibt trotz dieser Drehzahl relative leise. Falls jemand den Treiber mit einem neueren Schrittmotor testen möchte kann er sich gerne bei mir melden mit einer PM.

Zur Info:
Die Schrittmotoransteuerung benötigt ein Adafruit Board wie das:
  • Adafruit Stepper + DC Motor FeatherWing (es passt in das 9V Batterie Gehäuse)
  • Adafruit DC and Stepper Motor HAT for Raspberry Pi
  • Adafruit Motor Shield V2 for Arduino
Der Schrittmotortreiber beeinhaltet ein Fastmode und Slowmode.

Im Fastmode übernimmt das Board die komplette Steuerung des Schrittmotor und man ist nicht mehr limitiert mit der Geschwindigkeit und Zuverlässigkeit vom 400kHz I2C Bus, mit allen Vor- und Nachteilen.
Die Schrittgeschwindigkeit beträgt (wenn ich es richtig gerechnet habe) zwischen 96Hz und 6104Hz, jedenfalls theoretisch falls der Motor das mitmacht.

Im Slowmode wird der Schrittmotor über Robo Pro getaktet. Da beträgt die Schrittgeschwindigkeit ca 0 bis 68 Hz. Ich denke der Treiber lässt sich noch etwas optimieren.
Der Vorteil ist das jeder Schritt via Robo Pro gezählt wird, jedoch hängt die Geschwindigkeit vom I2C Bus ab, womit ich noch nicht ganz zufrieden bin, da es immer wieder Verzögerungen gibt.

Mich würde interessieren was ist die max Drehzahl / Schrittgeschwindigkeit mit den neunen fischertechnik Schrittmotoren mit dem Betatreiber. und ob er mit diesen Motoren funktioniert.
Noch eine Anmerkung: Ich denke der TX oder TXT und auch die Boards werden nicht die Präzision erreichen wie das Steuerboard vom 3D Drucker, also ich denke es wird keine alternative für den 3D Drucker sein.
Eine zweite Anmerkung: Der ftpedia Artikel: "Der ftPi – ein Motor Shield für den TX(T)" im Heft 2/2016 hat mir ein paar Tipps dazu gegeben.

chehr
Beiträge: 161
Registriert: 07 Apr 2015, 21:07
Wohnort: Friedrichshafen

Re: RoboPro-I²C Schrittmotor Treiber

Beitrag von chehr » 31 Okt 2016, 11:35

Der Fastmode ist nun optimiert und läuft nun ganz gut und extrem leise, im Leerlauf kann man mit den alten Fischertechnik Schrittmotoren Geschwindigkeiten von 500 rpm und mehr erreichen.
Leider hackt es noch an einer Sache, da habe ich gerade keine Idee um das Problem zu lösen.

Wie schon geschrieben funktioniert der Fastmode autark im PCA9685. Somit braucht Robo Pro oder der TXT keine Ressourcen um den Schrittmotor am laufen zu halten. Jedoch hängt sich Robo Pro jedes mal auf nach ein paar Sekunden, nachdem die I2C Kommunikation wieder gestartet wird z.B. um die Drehzahl zu ändern. Egal, ob es Lese- oder Schreibbefehle zum PCA9685 sind.

Der Workaround ist wohl keine Pause mit der I2C Kommunikation einzulegen.

Ist die Ursache die fehlende Unterstützung von Clock stretching?

chehr
Beiträge: 161
Registriert: 07 Apr 2015, 21:07
Wohnort: Friedrichshafen

Re: RoboPro-I²C Schrittmotor Treiber

Beitrag von chehr » 02 Nov 2016, 22:05

Der Fastmode funktioniert auch mit den neuen fischertechnik Schrittmotoren. Bei 9V vom TXT beträgt die max Leerlaufgeschwindigkeit 1140 Steps / s oder 342 rpm. Mit einer Beschleunigungsrampe oder wenn man von Hand beschleunigt ca 480 rpm.
Kritischer Betrieb bzgl Schrittverluste bei Schrittmotoren ist in der Regel der Beschleunigungsvorgang, Eine Beschleunigungsrampe könnte da eine weitere Optmierung bringen, was ich aber z.Z. nicht vor habe.
Bei den Motoren ist das bereitgestellte Moment von ca 0,25 Nm laut Datenblatt bei 12V bemerkenswert und müssten ähnlich hoch sein wie beim Power Motor 20:1 (Art. Nr. 104589). Da bleiben kaum noch Wünsche offen....
Als nächster Schritt habe ich geplant zu prüfen ab welchem Stromfaktor die Schrittverluste bei der X,Y und Z-Achse am Drucker entstehen.

Benutzeravatar
Andre
Beiträge: 56
Registriert: 07 Mai 2015, 16:20
Wohnort: Schotten

Re: RoboPro-I²C Schrittmotor Treiber

Beitrag von Andre » 07 Dez 2016, 11:15

Liegen die Probleme bei i2c denn am Robo TX(T) oder am Stepper-Treiber?
Für den Stepper Treiber gäbe es ja noch die Alternative, einen Arduino Mini pro Klone (ca. 3,50. mit Versand aus China) und eine Doppel-H-Bridge (ca.1,50) zu kombinieren. Der Arduino arbeitet als i2c-Slave und steuert den Schrittmotor.
Hier wäre man völlig flexibel, beliebige Beschleunigungs- Brems und Geschwindigkeitsverhalten zu programmieren. Man könnte sogar zwei Doppel-H-Bridges mit einem Arduino so ansteuern, dass der TX(T) nur die relative relative Zielkoordinate übergibt und der Arduino die Geschwindigkeiten so abstimmt, dass trotz Beschleunigung und Verzögerung die Stepper relativ zueinander immer im gleichen Geschwindigkeitsverhältnis bleibentl - also beim Plotter das Ziel wirklich in einer exakten Gerade angefahren würde. Bei getrennten Stepper-Treibern wäre das schwierig, weil man nur schwer sicher stellen kann, dass die Motoren wirklich synchron laufen.

chehr
Beiträge: 161
Registriert: 07 Apr 2015, 21:07
Wohnort: Friedrichshafen

Re: RoboPro-I²C Schrittmotor Treiber

Beitrag von chehr » 11 Dez 2016, 10:38

Andre hat geschrieben:Liegen die Probleme bei i2c denn am Robo TX(T) oder am Stepper-Treiber?
Ich denke es liegt am I2C Bus, der nicht geeignet ist für genaues Timing im kHz Bereich. Deshalb habe ich den Slowmode nun verworfen. Der Fastmode funktioniert gut.

Ich habe mir inzwischen den TRINAMIC TMC222 gekauft. Der funktioniert nun super mit dem TX zusammen und hat auch die Beschleunigungs- und Verzögerungszeit implementiert und auch das Microstepping (bis 1/16). Somit kann man super schnell und exakte Positionen z.B. bei Linear-antriebe anfahren.

Für konstante Motordrehzahl ist am besten der TXT oder TX mit dem TB6612 z.B. im Adafruit Stepper + DC Motor FeatherWing im Fastmode geeignet, obwohl man das auch über einen Trick im TMC222 machen kann (Indem man immer wieder neue Sollpositionen via I2C vorgibt).

Inzwischen bin ich wenig optimistisch, dass der TXT auch mit optimierter Software Schrittmotoren vernünftig ansteuern kann, weil die PWM Frequenz imTXT nicht hoch genug ist, aber ich denke eine Verbesserung wäre möglich:

Max PWM Frequenzvergleich:
TXT = 2 kHz (limitierender Baustein MC33879)
TMC222 = 22 kHz
TB6612 = 100 kHz
Andre hat geschrieben:Für den Stepper Treiber gäbe es ja noch die Alternative, einen Arduino Mini pro Klone (ca. 3,50. mit Versand aus China) und eine Doppel-H-Bridge (ca.1,50) zu kombinieren. Der Arduino arbeitet als i2c-Slave und steuert den Schrittmotor.
Mein Ziel ist das gesamte fischertechnik Model via Robo Pro zu steuern. Dann müsste man den Arduino via Robo Pro ansteuern.
Hat da jemand schon die Erfahrung mit dem Gesammtsystem "Robo Pro -> Arduino oder besser FRDM-K64F -> Motorshield -> Steppermotor"?

Ich hätte da den mbed "FRDM-K64F" Cortex®-M4, welcher Pin compatible zu Arduino ist. Somit könnte man das Motorshield hiermit betreiben. Jedoch befürchte ich, dass es viel Zeit braucht, bis man erste Ergebnisse sieht, die ich leider momentan nicht habe, auch weil ich in dem Gebiet Anfänger bin....

Benutzeravatar
Andre
Beiträge: 56
Registriert: 07 Mai 2015, 16:20
Wohnort: Schotten

Re: RoboPro-I²C Schrittmotor Treiber

Beitrag von Andre » 11 Dez 2016, 12:20

Bisher habe ich hier im Forum noch nichts davon gelesen, dass jemand einen Arduino als i2c Slave eingesetzt hat. Meist wird der Arduino als Master verwendet.
Die Library unterstützt allerdings den Slave-Modus. Auch gibt es abseits von Fischertechnik durchaus Beispiele, dass mehrere Arduino per i2c gekoppelt werden oder ein Arduino an einem RasPi hängt. Einer dann eben als Master, die anderen als Slave.
Es sollte letztlich egal sein, wenn der Master ein Robo TX(T) ist. Der Arduino reagiert auf die Adresse, die man im Sketch vorgesehen hat, und wartet darauf, angesprochen zu werden. Verschiedene Subadressen nimmt man, um verschiedene Aktionen zu unterscheiden und en Arduino verschiedene Subroutinen ausführen zu lassen.
Aus Sicht des Robo-Controlles ist der Arduino ein ganz normales i2c-Gerät, er kann also ganz normal Befehle an ihn senden.
Damit der Arduino als Schrittmotorsteuerung (möglichst für zwei Schrittmotoren) taugt, muss man da natürlich noch etwas programmieren und erstmal die i2c-Kommandos basteln (also das Programm für den Arduino schreiben), die der TX/TXT dann aufruft. An sich nicht sonderlich kompliziert, aber natürlich zeitaufwendig. Da mir selbst die Zeit etwas fehlt, hatte ich die Idee gepostet. Unter Umständen ist das Timingproblem da leichter behoben, als mit den fertigen i2c-Chips. Wenn einer den Sketch Mal geschrieben hat, wäre der Nachbau dann ja trivial. Billig ist die Lösung ja.

chehr
Beiträge: 161
Registriert: 07 Apr 2015, 21:07
Wohnort: Friedrichshafen

Re: RoboPro-I²C Schrittmotor Treiber

Beitrag von chehr » 11 Dez 2016, 12:53

Andre hat geschrieben:Bisher habe ich hier im Forum noch nichts davon gelesen, dass jemand einen Arduino als i2c Slave eingesetzt hat.
Doch gibt es mit dem GPS Sensor NEO-6M. Der wird mit dem ATMega 328P Mikrocontroller angesteuert.
Leider gab es da wenig Doku was problematisch bei meiner Fehlersuche war...
Siehe viewtopic.php?f=6&t=2034&p=24422&hilit=GPS#p23158

Aber die Idee ist super und es wäre eine tolle Aufgabe für einen Student z.B als Studienarbeit bzw Bachelorarbeit oder für jemand der damit Erfahrung hat.
Ein standardisierter und dokumentierter Befehlssatz im Arduino um das Motor und Sensorshield zu steuert welcher via I2C vom TX / TXT als Master angesprochen wird.
Die zeitkritischen Aufgaben könnte man dann alle im externen Mikrocontroller laufen lassen, wie Positions- und Geschwindigkeitsregler, Schalter abfragen, Beschleunigungsrampen, PWM etc....
Ich denke die Implementierung ist Aufwändig aber die Hardwarekosten wären dafür sehr gering mit ca. 20€.
Vielleicht ein Community-Controller? ...

Benutzeravatar
Andre
Beiträge: 56
Registriert: 07 Mai 2015, 16:20
Wohnort: Schotten

Re: RoboPro-I²C Schrittmotor Treiber

Beitrag von Andre » 13 Dez 2016, 15:53

http://www.airspayce.com/mikem/arduino/AccelStepper/
Dort findet sich eine Library, mittels derer der Arduino mehrere Stepper steuern kann - einschließlich Beschleunigung usw.
Im Hauptprogramm müsste der Arduino nur die i2c-Schnittstelle bedienen. Verschiedene Subadressen=verschiedene Parameter, die gesetzt werden. Eine Subadresse, die dazu führt, dass die Aktion mit den gesetzten Parametern gestartet wird.
Im Prinzip könnte man letztlich alle Kommandos der AccelStepper.h und der Multistepper.h einfach über Subadressen ansprechen. Die Haupschleife liest den i2c-bus, kommt ein Befehl für die Adresse des Arduinos, wird die Subadresse geprüft und davon abhängig einer der Befehle Speed(), moveto()... aufgerufen.

Man könnte bei Booten des Arduinos auch noch einen ungenutzten Pin abfragen, mit dem man wahlweise auf high oder low jumpert, um festzulegen, ob an i2c oder seriell gelauscht wird. Dann hätte man auch die Möglichkeit, die Schrittmotoren von dem älteren RoboInterface ansprechen zu lassen...

Benutzeravatar
Andre
Beiträge: 56
Registriert: 07 Mai 2015, 16:20
Wohnort: Schotten

Re: RoboPro-I²C Schrittmotor Treiber

Beitrag von Andre » 14 Jan 2017, 17:29

Nachdem ich mich mal mit dem Thema 3d-Drucker beschäftigt habe, ist mir aufgefallen, dass es die ideale Hardware zur Schrittmotorsteuerung per i2c quasi schon fix und fertig gibt: RAMPS 1.4
Arduino-Mega (Clone) mit RAMPS 1.4 Shield und 5 Schrittmotortreibern kostet inklusive Versand aus China weniger als 20€. Als FT-Gehäuse müsste eine Kippermulde geeignet sein (der 9V Power-Bock ist leider ein paar mm zu klein, außerdem braucht man ja Luftzufuhr, damit die Schrittmotortreiber nicht überhitzen).
Auch der i2c (5V) ist herausgeführt, eigentlich als Master für ein Display gedacht, ist es aber ja nur Softwarefrage, den als Slave zu nutzen. Außerdem sind noch 3 Mosfetausgänge (Heizung), 3 analoge (für Temperaturmessung) und 10 digitale Eingänge (Endpositionsschalter) heraus geführt; dazu noch eine Stiftleiste mit den nicht vom Shield genutzten GPIO des Mega.
Natürlich kann man für den Einsatz als i2c-Slave an FT nicht die Mendel-Firmware nutzen; da aber eine gute Dokumentation des RAMPS vorliegt, sollte es gar kein Problem sein, die AccellStepperLibrary mit eigener Software auf dem Mega zu nutzen und damit die Hardwaretreiber auf dem Shield zu steuern.

Ich habe mir eben so ein RAMPS-Kit und zwei Nema14 bestellt. Letztere arbeiten mit 6-12V, mal schauen, ob das RAMPS nicht auch mit 9V betrieben werden kann. Sollte eigentlich funktionieren. Netzteil braucht man aber je nach Schrittmotoren schon mit einigen Ampere.
D-Edition hat die FT-Schrittmotorhalter aus dem 3d-Kasten unter Neuheiten 2017 für 2,99€/St im Programm. Zur Zeit ausverkauft (die letzten 2 auf Lager sind auf dem Postweg zu mir). Wenn ich mich nicht irre, sind die FT-Schrittmotoren Nema14, man kann die billigen chinesischen Motoren also voll ins System integrieren.

Rei Vilo
Beiträge: 79
Registriert: 19 Dez 2015, 15:39

Re: RoboPro-I²C Schrittmotor Treiber

Beitrag von Rei Vilo » 15 Jan 2017, 12:46

Interesting project!

One question: The NEMA 14 stepper motor from Pololu has a shaft diameter of ⌀ 5 mm “D”.

How to connect it to the standard ⌀ 4 mm used by fischertechnik axes?

Benutzeravatar
Andre
Beiträge: 56
Registriert: 07 Mai 2015, 16:20
Wohnort: Schotten

Re: RoboPro-I²C Schrittmotor Treiber

Beitrag von Andre » 15 Jan 2017, 14:20

eBay search for:
"shaft coupling 4mm to 5mm"
Wellenkupplung / Wellenadapter are also available at fischfriendsman.de

If I understand right, the Fischertechnik 3d-Printer uses also Nema 14 with 5 mm Axis, so the origninal FT-Parts made for the 3d-printer should work also:
http://www.d-edition.de/Spielwaren/fisc ... motor.html
http://www.d-edition.de/Spielwaren/fisc ... motor.html
But I am not totaly sure. I hope to get the Antriebshülse-Schrittmotor next week, the Stepper in about 4-6 weeks (China...)
I will report if it fits when I got it.

Rei Vilo
Beiträge: 79
Registriert: 19 Dez 2015, 15:39

Re: RoboPro-I²C Schrittmotor Treiber

Beitrag von Rei Vilo » 15 Jan 2017, 17:05

Thank you!

Benutzeravatar
Andre
Beiträge: 56
Registriert: 07 Mai 2015, 16:20
Wohnort: Schotten

Re: RoboPro-I²C Schrittmotor Treiber

Beitrag von Andre » 17 Feb 2017, 14:44

Der RAMPS ist zwar noch nicht aus China eingetroffen, aber die Teile von D-Edition und die Nema14.
Also kurzer Zwischenbericht:
Die Fischertechnik-Schrittmotorhalter passen wunderbar auf die NEMA14, leider sind sie bei D-Edition immer noch ausverkauft.
Die Achsadapter, sowohl die für 90 Cent bei D-Edition (original Fischertechnik) als auch die stabileren aus Aluminium von eBay passen einwandfrei, die Achsanpassung ist also kein Problem.

Wollen wir hoffen, dass D-Edition bald wieder Halter rein bekommt.

chehr
Beiträge: 161
Registriert: 07 Apr 2015, 21:07
Wohnort: Friedrichshafen

Re: RoboPro-I²C Schrittmotor Treiber

Beitrag von chehr » 28 Feb 2017, 20:54

Hallo Andre,
bin mal auf dein Feedback bzgl RAMPS gespannt. Ich denke auch das das eine günstige und super Leistungsstarke Lösung ist.
Es ist nicht einfach 4 Schrittmotoren synchron zu steuern, was da schon fertig bzgl Software und Hardware ist.
Wie willst du die Verbindung zwischen RAMPS und ROBO Pro machen? Per I2C oder nicht doch via USB?

Benutzeravatar
Andre
Beiträge: 56
Registriert: 07 Mai 2015, 16:20
Wohnort: Schotten

Re: RoboPro-I²C Schrittmotor Treiber

Beitrag von Andre » 28 Feb 2017, 21:17

Per i2c. Der wird ja eigentlich zum Anschluss eines Displays am RAMPS herausgeführt - müsste also nur als Slave eingestellt werde. Ggf. könnte man zusätzlich einen seriellen Anschluss nutzen - dann könnte man sogar das ältere Robo-Interface nutzen. Im Prinzip nutze ich ja nur zwei bis 3 Librarys (acelstepper, i2c und ggf. seriell) und brauche nur eine Hauptschleife, die den gewählten Eingang abfragt (ggf. ganz am Anfang einen Jumper, über den man zwischen i2c und seriell wählen kann) und dann je nach gewähltem Kommando(ser)/Subadresse(i2c) die Variablen für den Aufruf der Libraryfunktionen setzt. Ein Kommando/Subadresse, die dann alle Schrittmotoren, für die Variablen gesetzt wurden, startet und anschließend die Variablen wieder löscht. Synchron wäre das, weil der Arduino ja kein echtes Multitasking kann, sondern die Accelstepperlib quasi nur solches simmuliert. Tatsächlich hängt ja alles am gleichen Takt.
Wenn ich nicht irre (ich bin noch nicht in alle Details vorgedrungen) kann AccellStepperLibrary sogar die Endpositionsschalter selber auswerten. Das wäre natürlich sehr nützlich.

Inzwischen ist zwar alles da, aber ich habe so viel um die Ohren, dass ich vor Ostern nicht zum Rumprobieren komme.

Antworten