Skip to content

4.2 Programmieren unter ROBOPro

elektrofuzzis edited this page Jan 18, 2020 · 16 revisions

Den ftPwrDrive initialisieren

Um den ftPwrDrive im ROBOPro-Programm anzusteuern, ist im Gegensatz zum Arduino keine Initialisierung notwendig.

Beachten Sie aber den TXT-I²C-Bug, bei dem der I²C-Bus nach 5 Sekunden ohne übertragene Daten hängen bleibt. Diesen Bug können Sie umgehen, indem Sie sicherstellen, dass spätestens alle 4 Sekunden ein Kommando an den ftPwrDrive gesendet wird. Alternativ können Sie mit dem WATCHDOG-Kommandos (s.u.) arbeiten.


Einen Motor steuern

Mit dem folgenden Code-Snippet wird dem Controller mit setRelDistance das Ziel 1000 Schritte gesetzt.

Erst mit dem startMoving-Kommando startet der Motor. Es können so zunächst verschiedene Parameter für die Motoren gesetzt werden und diese dann gemeinsam gestartet werden.

Mit der Schleife wird auf das Ende der Bewegung aktiv gewartet. In der Schleife sollte ein TIMER benutzt werden, um den Controller nicht mit der Verarbeitung von isMoving-Kommandos zu fluten.


Mehrere Motoren steuern

Das Ansteuern von mehreren Motoren ist ebenfalls sehr einfach.

In diesem Code-Snippet werden für die Motoren M1 und M2 die Fahrziele 1000 bzw. 2000 Schritte gesetzt. Bei startMovingAll müssen auch beide Motoren angegeben werden.

Die Schleife prüft mit isMovingAll, ob noch mindestens ein Motor am Laufen ist. Um nicht immer die while-Schleife schreiben zu müssen, kann über das Kommando wait auch auf das Ende der Bewegung gewartet werden.

Die meisten Kommandos gibt es sowohl als einfache Implementierung um einen Motor zu steuern, als auch in der *-All-Fassung um mehrere Motoren gleichzeitig anzusprechen.

Ungewohnt ist, dass die Motoren nur über Konstanten und nicht mit den Werten 1..4 angegeben werden können. Der Grund ist sehr einfach – die Motornummern sind über Bits codiert und können bei den *-All-Kommandos einfach mit einem binären OR oder mit einem + verbunden werden.


Die Endstufen ein- und ausschalten

Ein Vorteil von Schrittmotoren ist, dass sie im Stillstand ihre Position aktiv halten können. Dazu werden die Spulen des Motors auch im Stillstand mit Strom versorgt.

Der Haltestrom führt allerdings zu zwei Nebeneffekten: Da weiterhin ein Strom fließt, werden im Stillstand die Motoren warm. Microstepping führt zusätzlich zu einem leisen, hochfrequentem Summen der Motoren.

Das aktive Halten der Position wird nicht in allen Modellen benötigt. Der ftPwrDrive kann den Haltestrom deshalb je Motor im Stillstand an- und abschalten.

Beim startMoving2-Kommando wird über den zweiten Parameter das Abschaltverhalten mit angegeben werden. Im Beispiel bleibt die Endstufe nach dem Ende der Verfahrbewegung eingeschaltet. Wird hier TRUE übergeben, wird die Endstufe wie bei startMoving nach dem Anhalten der Motoren ausgeschaltet.


Endschalter & Referenzpunkt

Für jeden Motor kann am ftPwrDrive ein Endschalter angeschlossen werden. An den Eingang werden Schalter als Schließer angeschlossen.

Ist der Kontakt geschlossen, so unterbricht der ftPwrDrive sofort die Fahrbewegung des zugehörigen Motors. Über zwei parallel geschaltete Schalter lassen sich auch zwei Endlageschalter für eine Achse aufbauen.

Der Endschalter lässt sich gleichzeitig über das homing-Kommando auch als Referenzpunkt verwenden.

Über den zweiten Parameter beim homing-Kommando wird die Richtung und die maximale Schrittanzahl angegeben. Wird im Beispiel der Endschalter nach 10000 Schritten nicht erreicht, so stoppt die Referenzfahrt.


Relative und absolute Koordinaten

Die bisherigen Beispiele arbeiteten immer mit relativen Kommandos, d.h. die Anzahl der zu fahrenden Schritte bezog sich auf die aktuelle Motorposition.

Der ftPwrDrive kann auch mit absoluten Koordinaten arbeiten. Dazu muss zunächst an einer passenden der Nullpunkt gesetzt werden.

Anschließend kann mit absoluten Koordinaten gearbeitet werden.



Absolute Koordinaten

In den bisherigen Beispielen wurden immer Schritte für die Distanzangaben verwendet. Bei der Ansteuerung eines Plotters ist es jedoch viel praktischer die Strecken in Millimetern anstatt in Schritten anzugeben.

Dieses Problem lösen die beiden Kommandos setGearFactor und setRelDistanceR.

Mit setGearFactor wird der Umrechnungsfaktor von realen Koordinaten – z.B. Millimeter – auf die dafür notwendigen Schritte angegeben. Für die normalen fischertechnik Bauteile gibt es Konstanten, im Beispiel der Schneckenantrieb. Bei setRelDistanceR wird nun die zu fahrende Strecke in Millimeter angegeben.

Über einen dritten Parameter kann setGearFactor ein Getriebe darstellen. Das Beispiel ist ein Getriebe aus einem Z40 und einem Z30 Zahnrad.

Anschließende Verfahrbewegungen werden dann in Umdrehungen angegeben.


Watchdog

Der ftPwrDrive ist ein eigenständiger Controller, der die gesendeten Verfahrkommandos selbständig ausführt. Wird das übergeordnete Programm auf dem TXT beendet, so erfährt der ftPwrDrive nichts davon. Die Motoren arbeiten die Kommandos weiter ab. Um das Programmende auf dem TXT zu erkennen, kann mit einem Watchdog gearbeitet werden:

Der zweite Thread initialisiert den Watchdog und sendet regelmäßig ein keepalive-Signal vom TXT an den ftPwrDrive. Entfällt das keepalive-Signal, da der TXT hart beendet wurde, stoppt der ftPwrDrive nach spätestens 0,5 Sekunden alle Motoren.

Um den Watchdog-Thread bei einem regulären Programmende des Hauptthreads mit zu beenden, muss dort vor dem Programmende das Kommando endWatchdog aufgerufen werden. Dieses Kommando beendet im zweiten Thread die Dauerschleife.

Im Nebeneffekt werden regelmäßig Kommandos über den I²C-Bus an den ftPwrDrive gesendet. Damit wird auch der I²C-Bug des TXT umgangen.

Clone this wiki locally