| SchrittMOtorSTeuerung SMOST
|
|
Wer hat nicht dem ein oder anderen Schrittmotor mit mehr oder weniger Erfolg Drehbewegungen zu entlocken versucht. Dabei ist die Schrittmotor-Endstufe das
kleinere Problem, es scheitert oft an einer geeigneten Ansteuerung. Die hier vorgestellte Schrittmotor-Karte "SMOST" als Erweiterung zum 80C166-Controller-Board kann bis zu
vier 2-Phasen-Schrittmotoren gleichzeitig steuern.
Mit der entsprechenden Software liefert das Controller-Board alle erforderlichen Impulse und reagiert auf Informationen von Tastern, Sensoren, Schnittstellen, usw.
|
Andere Schrittmotor-Karten mit Takt- und Richtungs-Eingang können ebenfalls angesteuert werden.
|
Schalt- und Bestückungspläne, Beschreibungen, etc. befinden sich auf der Download-Seite
|
Blockschaltbild SMOST-Board
| Technische Daten SMOST-Board
4 Schrittmotor-Endstufen mit jeweils
- 2 bipolare Ausgangspaare, max. 0,5 A Phasenstrom
- Strombegrenzung in 3 Stufen oder über Potentiometer
- Cut-Off-Time 35 Sek, Stromabsenkung bei Stillstand
- Voll- und Halbschritt, Schritte über GAL veränderbar
- LED-Anzeigen für Takt und Richtung
- 12 x Optokoppler-Eingänge (26-pol. Pfosten)
- 4 x Nullpunktsensor, 8 x Positionssensor
- 2 x Serielle Schnittstelle (14-pol. Pfosten)
- 1 x PC-Anschluß (9600 Baud, 8 Bit, 1 Stop)
- 1 x Reserve (Monitor-Programm)
- 4 x Ein-/Ausgänge, +5V, GND (14-pol. Pfosten) Reserve
- 10 x Taster für manuelle Steuerung, 1 Reset-Taster
- 4 LED-Anzeigen für Betriebzustand
- 4-poliger Dip-Schalter für Programm-Einstellungen
- Versorgung 12 - 40 V Gleichspannung, ca. 2 A
- Step-Down Wandler für 5 V Versorgung, max. 1 A
Erforderliche Bestückung auf dem 80C166-Board:
64 kB RAM, EPROM mit SMOST-Software, EEPROM.
Die 80C166-Pinbelegung für SMOST ist in Tabelle 6.
|
|
Schrittmotor-Begriffe und -Funktionen
|
Zum besseren Verständnis sollten zuerst einige prinzipielle Begriffe und Funktionen des Schrittmotors und seiner Ansteuerung geklärt werden.
Ein Takt alleine bewegt noch keinen Schrittmotor. Jeder Schrittmotor benötigt eine Elektronik, die aus dem Takt einen Ablauf mit entsprechenden Strömen und Stromrichtungen
(Polaritäten) generiert. Betrachten wir als Beispiel einen Schrittmotor mit zwei um 90 Grad versetzte Polwicklungen (Phasen). Werden die Phasen bestromt, entsteht ein Magnetfeld.
Der Rotor bewegt sich mit seinem Magnetpolpaar in eine Position, wo zwischen Rotor und Phase der Luftspalt am kleinsten und der Magnetfluß am größten ist (zur Erinnerung:
ungleiche Pole ziehen sich an, gleiche stoßen sich ab). Durch Ändern der Bestromungsrichtung kann der Rotor vier verschiedene Positionen einnehmen. Polaritätsänderungen
führen in einer bestimmten Reihenfolge zu einer Drehbewegung.
Nach jedem Takt müssen sich die Polaritäten ändern. Die Rotorpositionen sind in den Abbildungen dargestellt:
|
|
Bei der ersten Methode wird nur eine Phase bestromt (1 - 4):
| Tabelle 1
| Rechts-Drehung | | Links-Drehung
| Takt | Phase 1 Pol./Strom | Phase 2 Pol./Strom |
| Takt | Phase 1 Pol./Strom | Phase 2 Pol./Strom
| 1
| 0
| 1
| X
| 0
|
| 1
| 0
| 1
| X
| 0
| 2 | X | 0 | 0 | 1 | | 2 | X | 0 | 1 | 1
| 3 | 1 | 1 | X | 0 | | 3 | 1 | 1 | X | 0
| 4 | X | 0 | 1 | 1 | | 4 | X | 0 | 0 | 1
|
|
Eine zweite Methode ist das Bestromen beider Phasen (1 - 4):
| Tabelle 2
| Rechts-Drehung | | Links-Drehung
| Takt | Phase 1 Pol./Strom | Phase 2 Pol./Strom |
| Takt | Phase 1 Pol./Strom | Phase 2 Pol./Strom
| 1
| 0
| 1
| 0
| 1
|
| 1
| 0
| 1
| 0
| 1
| 2 | 1 | 1 | 0 | 1 | | 2 | 0 | 1 | 1 | 1
| 3 | 1 | 1 | 1 | 1 | | 3 | 1 | 1 | 1 | 1
| 4 | 0 | 1 | 1 | 1 | | 4 | 1 | 1 | 0 | 1
|
|
Ein Schrittmotor mit nur 4 Positionen liefert keine saubere Drehung; es sind mehr Rotorpositionen notwendig.
Kombiniert man die beiden Vollschritt-Methoden, erhält man die Halbschritt-Steuerung (A - H).
| Tabelle 3
| Rechts-Drehung | | Links-Drehung
| Takt | Phase 1 Pol./Strom | Phase 2 Pol./Strom |
| Takt | Phase 1 Pol./Strom | Phase 2 Pol./Strom
| A
| 0
| 1
| X
| 0
|
| A
| 0
| 1
| X
| 0
| B | 0 | 1 | 0 | 1 | | B | 0 | 1 | 0 | 1
| C | X | 0 | 0 | 1 | | C | X | 0 | 1 | 1
| D | 1 | 1 | 0 | 1 | | D | 0 | 1 | 1 | 1
| E | 1 | 1 | X | 0 | | E | 1 | 1 | X | 0
| F | 1 | 1 | 1 | 1 | | F | 1 | 1 | 1 | 1
| G | X | 0 | 1 | 1 | | G | X | 0 | 0 | 1
| H | 0 | 1 | 1 | 1 | | H | 1 | 1 | 0 | 1
|
|
Der Verlauf von der Start-/Stopfrequenz über die Beschleunigungsphase bis zur Hochgeschwindigkeitsphase sieht wie eine ansteigende Rampe aus und wird auch so bezeichnet.
Das Anhalten des Schrittmotors erfolgt mit einer abfallenden Rampe, da der Rotor bei Abschalten der Taktfrequenz wegen seiner Masse unkontrolliert weiterlaufen würde.
Informationen über die genaue Position gingen verloren.
|
|
|
Im Halbschritt-Betrieb besteht eine Sequenz aus 8 Takten. Auch hiermit wird der Beispiel-Motor noch "ruckeln", besonders bei kleinen Drehzahlen.
Eine weitere Verbesserung ist möglich, indem die Bestromung nicht ein- und ausgeschaltet, sondern stufenweise gesenkt bzw. erhöht wird. Durch diesen Mikroschritt-Betrieb
entstehen ruhige Drehbewegungen. Für einen Schrittmotor mit nur 4 Rotorpositionen ist diese Lösung allerdings nicht praktikabel; die Leistung, also das Drehmoment,
nimmt stark ab und die Positionier-Genauigkeit geht verloren.
Durch mehr Polwicklungen und Rotor-Magnetpolpaare erhält man mehr Rotorpositionen. Im Allgemeinen besitzen Schrittmotoren viele Polwicklungen, die als 2 und mehr
Phasen ausgeführt sind, teilweise mit Mittelanzapfung. Auf den Rotoren befinden sich mehrere Magnetpolpaare entweder auf einem Anker, der wie ein sehr breites Zahnrad
ausgebildet ist, oder auf einer Scheibe. Die Anzahl der Motor-Winkelschritte kann durch langsames Drehen von Hand ermittelt werden. Es ist ein mehr oder weniger starkes
"Einrasten" zu spüren.
In alten Festplattenlaufwerken befinden sich für die präzise Kopfpositionierung Schrittmotoren mit 200 und mehr (mechanischen) Winkelschritten. Dazu 3 Berechnungen:
- Schrittwinkel = 360 Grad / 200 Winkelschritte = 1,8 Grad
- Vollschritt = 200 Winkelschritte x 4 Takte = 800 Takte
- Halbschritt = 200 Winkelschritte x 8 Takte = 1600 Takte
Da ein Schrittmotor mit 2 Phasen und 1 Magnetpolpaar im Halbschritt 8 Takte pro Umdrehung benötigt und der Festplatten-Schrittmotor 1600 Takte, erhalten wir über die
Taktfrequenz keine Aussage zur Drehzahl, jedoch einen Anhaltspunkt für die Positioniergenauigkeit.
Ist eine hohe Drehzahl gefordert, sollte ein Schrittmotor mit gröberen Winkelschritten eingesetzt werden.
|
Bei Einschalten einer Taktfrequenz von 10.000 Hz dreht sich ein Schrittmotor nicht. Der Rotor ist zu träge, um dem schnell rotierenden Stator-Magnetfeld zu folgen.
Mit einer sogenannten Start-/Stopfrequenz, die je nach Schrittmotor und Belastung zwischen 50 und 2.000 Hz liegt, ist ein sicherer Anlauf gewährleistet. Nach dem Start
kann die Taktfrequenz erhöht werden. Diese Erhöhung bestimmt die Beschleunigung des Motors und darf beliebig langsam, jedoch nicht beliebig schnell erfolgen; der Schrittmotor
steigt sonst aus. Ein Überschreiten der maximalen Taktfrequenz bzw. Drehzahl führt ebenfalls zum sofortigen Stillstand.
|
| SMOST Software
| Wie bereits angedeutet, werden alle Takte und Richtungs-Signale auf dem 80C166-Board mit der Software erzeugt. Jeder Takt wird in einem 32-Bit-Zähler
registriert und kann als "Aktuelle Position" abgefragt oder verändert werden. Nach einer Nullpunktsuche wird dieser Wert auf Null gesetzt. Bei dem Kommando "Go" erstellt der
Controller aus den Parametern "Untere Frequenz", "Obere Frequenz" und "Beschleunigung" eine Rampentabelle.
Die Takte werden mit diesen Werten für die steigende Rampe bis zur Hochgeschwindigkeitsphase ausgegeben. Ist der Dauerlaufmodus eingeschaltet, erfolgt die weitere
Taktausgabe mit dem Parameter "Obere Frequenz". Bei einem "Halt"-Kommando wird die Rampentabelle in umgekehrter Reihenfolge für die fallende Flanke bis zum Stillstand abgearbeitet.
Ist der Positionier-Modus eingeschaltet, wird in der Tabelle zusätzlich die Differenz zwischen Aktueller Position und End-Position berücksichtigt sowie die Schrittzahl
für die Hochgeschwindigkeitsphase ermittelt. Werden für die beiden Rampen mehr Schritte benötigt, als für die Differenz von Aktueller Position und End-Position erforderlich
wären, kann die Hochgeschwindigkeitsphase nicht erreicht werden. Da nach dem Start alle erforderlichen Taktfrequenzen und Schritte berechnet sind, dürfen alle Parameter
(ausgenommen der Dauerlauf- oder Positionier-Modus) verändert werden. Ein laufender Schrittmotor kann nur mit dem Kommando "Halt" vorzeitig angehalten werden.
Nach einem "Go" kann sogar unmittelbar das Kommando "Nullpunkt suchen" gegeben werden; nach Erreichen der End-Position sucht der Schrittmotor dann sofort seinen Nullpunkt.
Interessant ist noch der Parameter "Zwischen-Position". Immer wenn die Aktuelle Position gleich diesem Wert ist, sendet das Programm eine Meldung (z1...z4) über die serielle
Schnittstelle. Dieser Parameter kann zu jeder Zeit und beliebig oft geändert werden. Eine Meldung wird auch gesendet, wenn Endposition (e1...e4) oder Nullpunkt (n1...n4)
erreicht sind, bei Verlassen des Nullpunkts (v1...v4) oder bei Aktivieren der 8 Sensor-Eingänge (s1...s8).
Das Kommando "Nullpunkt suchen" führt nur dann zu einer Suche, wenn ein Nullpunkt-Sensor vorhanden ist und der Paramter "Ja, mit Nullpunktsensor" gesetzt ist.
Bei "Kein Nullpunktsensor" wird nur die Aktuelle Position auf Null gesetzt und die Meldung (n1...n4) ausgegeben.
Alle Kommandos und Meldungen sind in Tabelle 5 aufgelistet.
|
| SMOST Kommunikation
|
Die Kommunikation mit SMOST erfolgt über die serielle Schnittstelle mit 9600 Baud / 8 Bit / 1 Stopbit / No Parity. Mit einem PC-Terminal-Programm (ASCII-Übertragung)
ist eine Steuerung und Abfrage von SMOST möglich. Für komplexe Schrittmotor-Abläufe ist jedoch ein Programm erforderlich, das Kommandos erzeugt und Meldungen auswertet.
SMOST empfängt alle Kommandos als Buchstabe oder ganzes Wort ohne Ziffern und Sonderzeichen. Zwischen Groß- und Kleinschreibung wird nicht unterschieden:
M1 / m2 / M 3 / m 4 / Motor 2
Mehrere Kommandos in einer Zeile sind zulässig; sie müssen durch Komma oder Doppelpunkt getrennt sein:
m1, t500 / M1, T500 / M1:T500:M2:T800 / Motor 1, Taktfrequenz 500
Nach einem Semikolon dürfen bis zum Zeilen-Ende Kommentare hinzugefügt werden:
M1,T500 ; Taktfrequenz 500 Hz für Motor
Alle Kommandos und Meldungen sind in der folgenden Tabelle zusammengefaßt.
|
| SMOST Kommandos und Meldungen
|
| Kommando
| Parameter
| Beschreibung
| ? | Hilfe | - | Hilfe abfragen
| A | * Aktuelle Position | ±2.147.483.648 | Aktuelle Position setzen / abfragen
| B | * Beschleunigung | 5 - 1.000 | Motor-Beschleunigung setzen / abfragen (Takte pro ms)
| C | Copy Data | - | Daten von Speicher in EEPROM kopieren
| D | Dauerlauf-Modus | 0 / 1 - 4 / 9 | Dauerlauf-Modus ein (Positionier-Modus aus)
| E | * End-Position | ±2.147.483.648 | End-Position setzen / abfragen
| e | Meldung | 1 - 4 | Meldung "End-Position erreicht"
| F | Fahrt Slow | 0 / 1 - 4 / 9 | Fahrt mit Takt-Frequenz (Slow) in angewählter Richtung
| G | Go | 0 / 1 - 4 / 9 | Motor starten / End-Position anfahren
| H | Halt | 0 / 1 - 4 / 9 | Motor anhalten
| I | Info | - | Informationen abfragen (Status mit vorangestelltem Semikolon)
| J | Ja, mit Nullpunkt | 0 / 1 - 4 / 9 | Nullpunkt-Sensor anfahren und akt. Position auf 0 setzen
| K | Kein Nullpunkt | 0 / 1 - 4 / 9 | Kein Nullpunkt-Sensor; aktuelle Position direkt auf 0 setzen
| L | Linkslauf | 0 / 1 - 4 / 9 | Linkslauf bei Fahrten mit Takt-Frequenz (Slow)
| M | Motor aktuell * | 1 - 4 | Motor-Nr. für nachfolgende Kommandos setzen / abfragen
| N | Nullpunkt suchen | 0 / 1 - 4 / 9 | Nullpunkt suchen mit Takt-Frequenz
| n | Meldung | 1 - 4 | Meldung "Nullpunkt erreicht"
| O | * Obere Frequenz | 50 - 20.000 Hz | Obere Frequenz (Fast) setzen / abfragen
| P | Positionier-Modus | 0 / 1 - 4 / 9 | Positionier-Modus ein (Dauerlauf-Modus aus)
| q | Meldung | 0 - 9 | Quittierung (q0) und Fehlermeldungen (q1-q9)
| R | Rechtslauf | 0 / 1 - 4 / 9 | Rechtslauf bei Fahrten mit Takt-Frequenz (Slow)
| S | Status | - / 0 / 1 - 4 / 9 | Status abfragen: M1,T500,U1000,O10000,B500,....
| s | Meldung | 1 - 8 | Meldung "Sensor erreicht"
| T | * Takt-Frequenz | 50 - 5.000 Hz | Takt-Frequenz (Slow) setzen / abfragen
| U | * Untere Frequenz | 50 - 5.000 Hz | Untere Frequenz (Start/Stop) setzen / abfragen
| V | Versions-Nr. | - | Versions-Nummer des Programms abfragen
| v | Meldung | 1 - 4 | Meldung "Verlassen des Nullpunkts"
| W | Wiederholen | 0 / 1 - 4 / 9 | Wiederholen letzte Schrittzahl in letzter Richtung
| X | Wiederh. umgekehrt | 0 / 1 - 4 / 9 | Wiederholen letzte Schrittzahl in umgekehrter Richtung
| Z | * Zwischen-Position | ±2.147.483.648 | Zwischen-Position setzen / abfragen
| z | Meldung | 1 - 4 | Meldung "Zwischen-Position erreicht"
| * | Zulässige Werte: | 0 | = aktueller Motor (mit M1 - M4 vorher gesetzt)
| | | 1 - 4 | = angegebener Motor
| | | 9 | = alle Motoren
| | | - | = Zustand abfragen
|
| SMOST Pinbelegung 80C166 Board
| Funktion
| Bezeichnung
| Pin
|
| Pin
| Bezeichnung
| Funktion
| +5V
| Versorgung
| +5V
| 1bc
| 1
|
| 2
| 1a
| +5V
| +5V
| Versorgung
| Ausg. | SIO 2 TxD Mon | P3.8 / TXD1 | 2bc | 3 |
| 4 | 2a | P1.12 | Ausg. | SIO 2 RTS
| Eing. | SIO 2 RxD Mon | P3.9 / RXD1 | 3bc | 5 |
| 6 | 3a | P2.12/CC12IO | Eing. | SIO 2 CTS
| GND | SIO 2 | GND | 4bc | 7 |
| 8 | 4a | GND | GND | SIO 1
| Ausg. | SIO 1 TxD Prog | P3.10 / TXD0 | 5bc | 9 |
| 10 | 5a | P1.11 | Ausg. | SIO 1 RTS
| Eing. | SIO 1 RxD Prog | P3.11 / RXD0 | 6bc | 11 |
| 12 | 6a | P2.11/CC11IO | Eing. | SIO 1 CTS
| +5V | Seriell | +5V | 7bc | 13 |
| 14 | 7a | GND | GND | Seriell
| Ein/Ausg. | Seriell Data | P1.10 | 8bc | 15 |
| 16 | 8a | P2.10/CC10IO | Ein/Ausg. | Seriell Clock
| Eing. | unbenutzt | NMI# | 9bc | 17 |
| 18 | 9a | RSTIN# | Eing. | Reset-Taster
| Ausg. | 4 | P3.15 / CLK | 10bc | 19 |
| 20 | 10a | P2.13/BREQ# | Ausg. | 1
| Ausg. | 2 | P2.14/HLDA# | 11bc | 21 |
| 22 | 11a | P2.15/HOLD# | Ausg. | 3
| Eing. | Dip-Switch Bit 4 | P3.7 / T2IN | 12bc | 23 |
| 24 | 12a | P3.6 / T3IN | Eing. | Dip-Switch Bit 3
| Eing. | Dip-Switch Bit 2 | P3.5 / T4IN | 13bc | 25 |
| 26 | 13a | P3.4 / T3EUD | Eing. | Dip-Switch Bit 1
| Ausg. | unbenutzt | P3.3 / T3OUT | 14bc | 27 |
| 28 | 14a | P3.2 / CAPIN | Eing. | Pos.-Sensor 7
| Ausg. | unbenutzt | P3.1 / T6OUT | 15bc | 29 |
| 30 | 15a | P3.0 / T0IN | Eing. | Pos.-Sensor 8
| Eing. | Taster 10 (Prog.) | P2.9 / CC9IO | 16bc | 31 |
| 32 | 16a | P2.8 / CC8IO | Eing. | Taster 9 (Shift)
| Eing. | Taster 8 (1) | P2.7 / CC7IO | 17bc | 33 |
| 34 | 17a | P2.6 / CC6IO | Eing. | Taster 7 (2)
| Eing. | Taster 6 (3) | P2.5 / CC5IO | 18bc | 35 |
| 36 | 18a | P2.4 / CC4IO | Eing. | Taster 5 (4)
| Eing. | Taster 4 (5) | P2.3 / CC3IO | 19bc | 37 |
| 38 | 19a | P2.2 / CC2IO | Eing. | Taster 3 (6)
| Eing. | Taster 2 (7) | P2.1 / CC1IO | 20bc | 39 |
| 40 | 20a | P2.0 / CC0IO | Eing. | Taster 1 (8)
| Eing. | Nullpunkt SM-1 | P5.0 / AN0 | 21bc | 41 |
| 42 | 21a | P5.1 / AN1 | Eing. | Nullpunkt SM-2
| Eing. | Nullpunkt SM-3 | P5.2 / AN2 | 22bc | 43 |
| 44 | 22a | P5.3 / AN3 | Eing. | Nullpunkt SM-4
| Eing. | Pos.-Sensor 1 | P5.4 / AN4 | 23bc | 45 |
| 46 | 23a | P5.5 / AN5 | Eing. | Pos.-Sensor 2
| Eing. | Pos.-Sensor 3 | P5.6 / AN6 | 24bc | 47 |
| 48 | 24a | P5.7 / AN7 | Eing. | Pos.-Sensor 4
| Eing. | Pos.-Sensor 5 | P5.8 / AN8 | 25bc | 49 |
| 50 | 25a | P5.9 / AN9 | Eing. | Pos.-Sensor 6
| GND | Analog Referenz | VAGND | 26bc | 51 |
| 52 | 26a | VAREF | +5V | Analog Referenz
| Ausg. | LED Prog. | P1.9 | 27bc | 53 |
| 54 | 27a | P1.8 | Ausg. | LED Shift
| Ausg. | Richtung SM-4 | P1.7 | 28bc | 55 |
| 56 | 28a | P1.6 | Ausg. | Takt SM-4
| Ausg. | Richtung SM-3 | P1.5 | 29bc | 57 |
| 58 | 29a | P1.4 | Ausg. | Takt SM-3
| Ausg. | Richtung SM-2 | P1.3 | 30bc | 59 |
| 60 | 30a | P1.2 | Ausg. | Takt SM-2
| Ausg. | Richtung SM-1 | P1.1 | 31bc | 61 |
| 62 | 31a | P1.0 | Ausg. | Takt SM-1
| GND | Versorgung | GND | 32bc | 63 |
| 64 | 32a | GND | GND | Versorgung
|
|