Linearantrieb mit Schrittmotor

Im klassischen Schreinerbetrieb werden Verbindungen über Eck oft als Fingerzinken ausgeführt. Man kann sie mühsam von Hand sägen, mit einer Schablone und einer Oberfräse ausfräsen oder aber auf auf der Kreissäge erzeugen. Im amerikanischen Umfeld werden dafür gerne dado blades (Nutsägeblätter) verwendet. Das sind mehrere Sägeblätter im Stapel, die in einem Durchlauf gleich einen ganzen Zentimeter Breite raussägen können.

Dado Blade auf Wikipedia

In Deutschland sind die dado blades meines Wissens nach nicht zulässig. Aber man kann es mit etwas mehr Mühe auch mit einem normalen Kreissägeblatt hinbekommen. Es sind dann eben mehrere Durchläufe notwendig, die jeweils um die Breite des Sägeblatts versetzt vorgenommen werden. Die Schwierigkeit liegt dabei in dem korrekten Versatz, denn die Fingerzinken müssen relativ genau gearbeitet werden.

Ich habe mir dabei gedacht, dass sich um den Versatz ein Microcontroller kümmern kann. Man stellt die Breite der Zinken ein und der Controller verschiebt bei jedem Durchgang den Anschlag um den benötigten Betrag. Dieser Versatz ist nicht immer gleich. Bei meiner Säge beträgt die Breite des Sägeblatts 3 Millimeter. Ein 8 Millimeter breiter Spalt wird also durch einen Sägeschnitt erzeugt, gefolgt von zweimal einem Versatz von jeweils 2,5 Millimeter. Danach müssen 8 Millimeter stehen bleiben, der nächste Versatz beträgt also 11 Millimeter. Der Anschlag muss also immer um die Beträge 2,5 – 2,5 – 11 – 2,5 – 2,5 – 11 … Millimeter verschoben werden.

In der Bastelkiste habe ich einen alten Schrittmotor aus einem 5 1/4 Zoll Floppy Disk Laufwerk gefunden. Er hat fünf Anschlüsse, ein gemeinsamer Plus Pol und dann vier versetzte Spulen. Obwohl ich kein Datenblatt dafür habe, konnte ich die Anschlüsse relativ schnell mit einem Ohmmeter ermitteln.

ULN2003Der Anschluss an einen Microcontroller ist recht einfach. Für solche Fälle hat man immer ein paar ULN 2003 rumfliegen. Das sind 8 Darlingtontransistoren mit Vorwiderständen in einem DIL Gehäuse. Da der Schrittmotor aus einem Floppy Laufwerk stammt, gehe ich von einer Betriebsspannung von 12 Volt aus. Tests haben gezeigt, dass ab etwa 8 Volt eine ausreichende Kraft zur Verfügung steht und auch 16 Volt nach längerer Arbeit nicht zu einem heißen Motor führt.

Schrittmotor

Der Microcontroller wird über die USB Leitung mit Spannung versorgt, kann aber auch eine externe Spannungsquelle haben. Der Schrittmotor bezieht seine Versorgung aus einem Labornetzteil (über die grün/ weiße Leitung). Man sieht, dass die komplette Schaltung im Prinzip nur aus einem IC besteht.

Nachdem ich einen laufenden Motor hatte, habe ich zuerst die Schrittzahl für eine volle Umdrehung ermittelt. Das muss nicht übermäßig genau sein, da Schrittmotoren typischerweise eine Schrittzahl von 24, 200 oder 400 besitzen. Ich habe noch keinen Motor gesehen, der 197 Schritte pro Umdrehung im Datenblatt angegeben hat. Ein kleiner Test mit einer Markierung auf der Achse zeigt, dass ich ein Modell mit 200 Schritten habe.

Als nächstes musste ich die Geschwindigkeit des Motors ermitteln. Ein Schrittmotor dreht sich exakt so schnell, wie es über die Schrittfolge vorgegeben ist – zumindest im Normalbetrieb. Wenn man den Motor mechanisch zu stark belastet, verliert er Schritte, d.h. er dreht sich nicht weiter. Wenn man eine langsame Schrittfolge wählt, wird der Vorschub sehr langsam. Die verwendete M6 Gewindestange hat eine Steigung von einem Millimeter pro Umdrehung. Wenn ich 10 cm vorrücken will, sind also 100 Umdrehungen notwendig. Zur Ermittlung der maximalen Schrittrate habe ich die Geschwindigkeit beginnend von 50 Schritten pro Sekunde nach und nach auf 1000 Schritte pro Sekunde erhöht. Wenn die maximale Geschwindigkeit erreicht ist, kann der Motor einen Schritt nicht mehr vollständig ausführen bevor der nächste Schritt kommt. Das führt dazu, dass der Motor mit einem heftigen Brummen stehen bleibt. Von der Maximalgeschwindigkeit habe ich dann noch mal eine ordentliche Portion abgeschnitten. Als Sicherheitsmarge, denn bei dieser Geschwindigkeit ist die Kraft gerade noch ausreichend, um die Gewindestange zu drehen. Aktuell verwende ich maximal 500 Schritte pro Sekunde. Das ergibt 2,5 Umdrehungen pro Sekunde und somit einen Vorschub von nur 2,5 Millimeter pro Sekunde. Da ich jeweils nur kurze Strecken zurücklegen muss, ist das für den Einsatzzweck akzeptabel.

VarsDa die Port-Pins des Microcontrollers nicht in einer Reihe liegen, habe ich sie so verdrahtet, wie es am einfachsten ist. Um zur Schrittgenerierung eine 1 durchzuschieben habe ich ein Array der Länge 4 angelegt, welches dann das jeweilige Port Bit enthält. Es müssen also im Kreis alle vier Werte vorwärts oder rückwärts ausgegeben werden.

Steps

Wenn man bei einem Schrittmotor im Ruhezustand direkt auf volle Geschwindigkeit geht, führt das zu Schrittverlusten, da der Motor nicht so schnell reagieren kann. Im schlimmsten Fall läuft er gar nicht an. Deshalb wird die Geschwindigkeit langsam hochgefahren. Der Abstand vom ersten zum zweiten Schritt beträgt 13 Millisekunden. Er wird bei jedem Schritt um eine Millisekunde verkürzt, bis zur maximalen Geschwindigkeit mit einem Abstand von 2 Millisekunden. Beim Abbremsen passiert das gleiche umgekehrt, die Abstände werden über 10 Stufen langsam verlängert. Wenn weniger als 20 Schritte ausgeführt werden sollen, besteht die Sequenz nur aus einer Teilrampe zum Beschleunigen und Abbremsen.

Move

Die Funktion für den schrittweiten Vorschub wartet auf das nächste Kommando. Wenn es zum nächsten Anschlag weitergehen soll, holt sie sich die nächste Schrittzahl aus dem Feld stepValues über den hochgezählten Index globalStep und führt diese Anzahl von Schritten aus. Die Anzahl wird auch in einem Summenspeicher gemerkt, damit der Linearvorschub über ein zweites Kommando wieder zum Startpunkt zurückfahren kann.
StepGrid

Eine weitere Funktion dient zur Einstellung des Nullpunkts. In diesem Fall fährt der Schrittmotor in eine Richtung, bis diese über einen Tastendruck gewechselt wird.

Erstaunlicherweise gibt es in meiner Bastelkiste einen auffälligen Mangel an Drucktastern. Also musste ich das „User Interface“ auf ein Minimum begrenzen. Auf der Microcontroller Platine gibt es einen User Button – das war alles, was mir zur Verfügung stand.

CheckButtonDer Zustand des User Buttons wird alle 10 Millisekunden geprüft. Zur Entprellung wird ein kurzer Tastendruck gewertet, wenn der Zustand mindestens 50 Millisekunden auf 1 stand.

Wenn er eine Sekunde lang gedrückt wurde, dann wird das als langer Tastendruck gewertet.

Wenn beim Start des Programms der User Button gedrückt ist, geht das Programm in den Null-Einstellungsmodus. In diesem Fall läuft der Schrittmotor in eine Richtung bis der User Button gedrückt wird. Dann wird die Drehrichtung umgeschaltet.

Ist er beim Start nicht gedrückt, geht das Programm in den normalen Vorschubmodus. Bei jedem kurzen Button Klick wandert der Vorschub bis zum nächsten Stopp weiter. Bei einem langen Button Klick geht es zur Startposition zurück.

Was würde ich jetzt anders machen?

Da es sich nur um ein Bastelprojekt handelt, habe ich für den Linearvorschub keine Trapezgewindespindel gekauft sondern einfach eine Gewindestange aus dem Bestand verwendet. Diese hat leider einen deutlichen Schlag, was zu störenden Bewegungen seitlich und nach oben und unten führt. Für den geplanten Einsatzzweck ist das zwar egal, es sieht aber einfach nicht gut aus. Zudem könnte man die Trapezgewindespindel mit einer höheren Steigung kaufen und somit einen schnelleren Vorschub erreichen. Die aktuelle Positionierungsgenauigkeit, von rechnerisch 5 Mikrometer, kann ich ohnehin nicht ausnutzen.

Nachtrag vom 27.12.

Ein kurzer Test zeigt: Prinzipiell funktioniert das System – aber leider nicht mit der Präzision, die ich erhofft hatte. Es ist schwierig, die zu sägenden Teile exakt Senkrecht am Anschlag zu halten. Schon ein kleiner Winkelfehler führt zu unterschiedlich breiten Zinken.

Testschnitt Verleimter Test

 

Schreibe einen Kommentar