Beschreibung:
Schrittmotoren sind heute ein fester Bestandteil in unserem Alltag. So in diversen elektronischen Geräten wie etwa Drucker, Kameras, Scanner. Früher auch noch Laufwerke wie CD, Disketten oder auch Festplatten mit drehenden Scheiben. In der Automation haben Schrittmotoren ebenfalls wichtige Funktionen. Die Vorteile sind dabei die vergleichsweise einfache Ansteuerung im gegensatz zu Brushless Motoren. Wobei Schrittmotoren gegenüber Bürstenmotoren den Vorteil haben, dass sie sich sehr genau drehen lassen. Vorausgesetzt, der Motor verliert keine Schritte. Wer sich bisher noch nicht mit Schrittmotoren beschfätigt hat, dem sei diese Seite zu empfehlen: http://www.b-kainka.de/bastel10.htm
Wer sich bereits mit Schrittmotoren beschäftigt hat, der kennt das Problem, dass für einen ordnungsgemässen Betrieb die Motoren entsprechend angesteuert werden müssen. So genügt es nicht, einfach nur ein Drehfehld anzulegen, denn damit keine Schritte verloren gehen, müssen die Motoren mit einer Rampe anfahren und auch wieder abbremsen. Um dies zu erreichen, gibt es viele Code-Beispiele im Internet. Doch dies führt zum nächsten Problem. Immer wenn man wieder einen Schrittmotor einsetzen möchte, so muss man sich wieder um die Ansteuerung Gedanken machen. Deswegen habe ich mich vor einiger Zeit entschieden, einen Schrittmotortreiber zu entwickeln.
Die Idee:
Die Steuerung:
Als Ergebnis war dann ein entsprechendes Modul entstanden. Dieses beinhaltet einen STM32F030 Mikrocontroller, ein SN65HVD75DR RS485 Transceiver sowie ein Allegro A4988 Schrittmotortreiber. Das Board lässt sich mit einer Spannung von bis zu 24V versorgen. Dies ermöglicht es, auch hochohmigere Schrittmotoren problemlos betreiben zu können. Die Leiterplatte misst gerade mal 50x31mm
Die Leiterplatte ist einseitig bestückt. Auf der Rückseite befindet sich lediglich der Programmieranschluss sowie die Beschriftungen für die Anschlüsse.
Die Beschaltung des Boards ist denkbar einfach. Es genügt der Anschluss eines Schrittmotors, sowie einer Spannungsquelle und eines RS485 Masters. In diesem Beispiel ist der Master ein Computer mit angeschlossenem USB-RS485 Konverter. Es kann natürlich genau so gut ein Raspberry-Pi oder ein Arduino als RS485 Master fungieren.
Die Software:
ModBus Teilnehmer kommunizieren indem diese untereinander auf sogenannte Register und Coils zugreifen. Dabei stellt ein Coil einen Boolean Wert dar, ein Register hingegen einen 16-Bit langen Wert. Die Register haben eindeutige Adressen. Register können, je nach Anwendung, entweder nur gelesen, nur geschrieben oder aber gelesen und geschrieben werden.
Auch das iMotion board hat verschiedene Register. So z.B. eines zur Konfiguration der Anfahrrampe.
Mit diesem Register wird dem Treiber mitgeteilt, mit welcher Beschleunigung an die Zielgeschwindigkeit beschleunigt werden soll. Neben diesem gibt es noch viele weitere Register. Diese finden sich alle im entsprechen velinkten Dokument in der Sidebar (ModbusSpec).
Für die Bequeme Ansteuerung vom PC aus, gibt es ein Softwaretool namens ModbusMasterTool unter GitHub. Mit diesem Tool kann man einerseits manuell einzelne Register oder Coils beschreiben und lesen, andererseits aber auch ein kleines Skript schreiben. Dazu gibt es folgende Befehle:
- WR: Write Register
Usage: WR Register Value - RR: Read Register
Usage: RR Register - WC: Write Coil
Usage: WC Register Value - RC: Read Coil
Usage: RC Register - PC: Poll “Coil”. This Command polls specific bits from a register.
Usage: PC Register Bitmask (dec)
Ein Beispielskript für iMotion sieht wie folgt aus:
WR 1030 30000
WR 1031 10000
WR 1010 3
WR 1060 3200
WC 2020 1
Zuerst wird mit 1030/31 die Start und Stopprampe definiert. 1010 aktiviert den Treiber und mit 1060 wird die zu fahrende Zahl an Schritten definiert. 2020 startet schlussendlich die Bewegung.
Projektstand: abgeschlossen
Aktuelle Version: A