Alles 6-Achs-Schrittmotorsteuerungen
für kleine Leistungen (bis 1 A Strangstrom).
Wie bei allen sonst gesichteten Schrittmotorsteuerungen wird der Strangstrom
durch motorspezifisch zu bestückende Messwiderstände eingestellt.
Der erste und zweite Entwurf verwendet ATmega8 und eine Reihe Portexpander (74HC595).
Reicht sogar, aber der auf 8 kHz begrenzte Berechnungstakt hat den Nachteil,
dass bei höheren Schrittfrequenzen der relative Jitter zunimmt,
was Schrittverluste begünstigt.
Der Flash-Speicher von 8 KByte ist nahezu ausgefüllt.
Schaltpläne und Platinen
Erste Version
mit ATmega8 (8-bit-Mikrocontroller), Sammelmotoranschlüsse
Zweite Version
ebenso, modifizierte Leiterplatte für andere (größere) Gehäusebauformen der 74HC595
Eigenschaften
Technische Daten der Motorsteuerung
SM2
(SM1 nach Anpassungs-Bastelei)
und der zugehörigen Firmware:
Maximale rechentechnische Schrittfrequenz: 8000 Vollschritt/s
(8 kHz; 125 µs pro Rechenschritt, gleichzeitig für alle 6 Motoren)
Maximum an Strangspannung und Strangstrom:
46 V (Speisespannung), 1,2 A (einstellbar über Messwiderstände),
Konstantstromsteuerung durch energieeffiziente Pulsweitenmodulation
(maximale sinnvolle Schrittmotorgröße:
42 mm = NEMA 17), Vierdraht-Motoranschluss
Endschalter: insgesamt 8, Achsenzuordnung:
3 Achsen mit je 2 Schaltern (Lineare Achsen)
2 Achsen mit 1 Schalter (Rotationsachsen)
1 Achse ohne Schalter (bspw. Spindelmotor)
Zuordnung als End- oder Referenzschalter wählbar, wird im EEPROM gespeichert
(nur 8 ist ein Schwachpunkt, ist bei SM3 beseitigt)
Kein Mikroschrittbetrieb (ist ein Schwachpunkt, ist bei SM3 beseitigt)
Speisung via Floppy-Stecker oder Schraubklemmen mit 5 V, ca. 100 mA, und 10..46 V, max. 3 A (je nach Motoren)
Serielle Schnittstelle mit 8-bit-Binärdatenübertragung bei 38400 Baud (≈ 4 kByte/s),
mit flinker Motor-Statusabfrage (eben weil binär),
Master-Slave-Konzept (ähnlich USB, SM2 sendet nur Antworten, niemals von selbst),
Mehrbyte-Anordnung: Little Endian (kompatibel zu USB, Intel-PCs, MSP430 und WinAVR),
saubere Struktur-Ausrichtung,
viele Ein-Byte-Kommandos,
kein Eingabepuffer sondern sofortige Kommandoverarbeitung
(außer bei Mehr-Byte-Kommandos, Kommandogröße max. 256 Bytes),
Ausgabepuffer: 256 Bytes
Zusätzliche Anschlüsse: 4 digitale Ausgänge,
1 SPI-Kaskadierungsausgang (letzterer nur zum Anlöten)
Serieller Bootloader, AVR109-kompatibel, nur 1 KByte groß, 9600 Baud,
verbleiben 7 KByte für die Firmware
Bootloader und Firmware in C-Quelltext offen gelegt (open-source),
ohne Interrupts (außer für Sleep-Modus), dadurch keine Race-Conditions
Lokalbedienung mit 3 Tasten, 1 Inkrementalgeber mit Tastfunktion
und 1 Zweifarb-LED, Funktionen:
Achse auswählen (Rückmeldung über LED)
Einzelschritt fahren (mit Inkrementalgeber) — sehr enge Kopplung,
daher keine spürbare Reaktionsverzögerung
bremsen und stoppen (Loslassen des Inkrementalgebers)
Referenzfahrt auslösen
Greifer oder Werkzeug-Spindelmotor schalten (4 Ausgänge wählbar)
Bootloader starten (mit allen Tasten)
Demo/Schmiermodus starten (alle Motoren fahren zwischen den Hardware- oder Software-Endschaltern)
Schnelle Integer-Arithmetik mit drei universellen Sonder-Konstanten
für NaN (Not-a-number, keine Zahl), +Inf (+∞) und –Inf (–∞)
Zielfahrt absolut oder relativ,
mit einzeln festlegbarer Geschwindigkeit und Beschleunigung
über die serielle Schnittstelle, lineare Beschleunigungs- und Bremsrampen,
zielgenaue Bremsung ohne Schleichfahrt oder Übertritt
(davon träumt jeder Lokführer:-)
Unterstützung von rotatorischen Antrieben ohne Endlagen,
Fahrmöglichkeit nach ±∞ („Geschwindigkeits-Modus“, Abbremsen und Anhalten mit Stopp-Kommando),
zyklische Positionsausgabe (Begrenzung auf 0° .. <360° ist gemeint,
die beiden Zahlenwerte sind frei definierbar)
Referenzfahrt in beliebige Richtung, auch ohne Schalter
(auf mechanischen Anschlag) mit festlegbarer
Eil-Geschwindigkeit und -Beschleunigung,
frei definierbarer Referenz-Koordinate,
Report der Abweichung zu einer vorher gehenden Referenzfahrt,
optional automatische Fahrt zur Nullposition anschließend
Fernsteuerbarkeit über serielle Schnittstelle genauso wie Lokalbedienung,
ermöglicht alternative Eingabegeräte am PC
Capture der Lokalbedienung
(Lokalbedienfunktionen werden nicht ausgeführt, sondern auf die
serielle Schnittstelle umgeleitet, bspw. für eine weitere Motorsteuerung)
— sehr enge Kopplung möglich, keine spürbare Reaktionsverzögerung
auch zu einer anderen Schrittmotorkarte
(siehe unten genannte Windows-Software)
Festlegung von Grenzwerten (Software-Endschalter, Maximalgeschwindigkeit usw.)
über serielle Schnittstelle möglich, werden persistent im EEPROM gespeichert
Umrechnungsfaktor, Einheit und Achsbezeichnung im EEPROM, Zeichenketten in UTF-8,
ermöglicht Plug-And-Play von Motorsteuersoftware
ohne Konfigurationsdateien
Istwert persistent (Stromabschaltung führt nicht zum Verlust der
Referenzierung und der Momentanposition),
kein Zwang zur Referenzfahrt beim Einschalten
(wichtig für Experimentalaufbauten)
Zielfahrt, Referenzfahrt, Anzeige aller Motordaten in hex und umgerechnet in Einheiten
Vollständige Konfigurationsmöglichkeit via EEPROM-Editor
Koordinierte Bahnsteuerung: Kreis (als Demo) sowie beliebig von externen CSV-Positionsdaten
Einfaches, Bildschirmplatz sparendes Win32-Steuerprogramm
vorhanden (speziell für Lokalbedienungsumleitung)
Koordinierte Bahnsteuerung von 1-6 Motoren bei 500 Sa/s
(Geschwindigkeitsänderungsrate, trotzdem 8 kHz Schrittfrequenz);
Übertragung von Geschwindigkeits- oder Beschleunigungsvektoren
(wahlweise v- oder a-Betrieb)
über die serielle Schnittstelle,
Flusskontrolle (nur down-stream) via
XON/XOFF-Protokoll,
Empfangspuffergröße 256 Bytes, XOFF-Limit bei 128 Bytes,
ausreichend für mindestens 21 ms Black-Out),
automatische Detektion von Pufferunterläufen und Grenzwertüberschreitungen.
Der Steuer-PC muss einen entsprechenden Datenstrom generieren
und den seriellen Rückkanal prüfen.
Die Lokalbedienung ist im Capture-Betrieb und kann von der Steuersoftware
ausgewertet werden, etwa für eine Geschwindigkeitsveränderung.
Berechnungsvorschrift (a-Betrieb) aus Positionswerten siehe Bild rechts.
Alle Variablen außer xn sind vom Typ Integer (int32).
Deren Einheit ist Mikroschritt.
Zum Vergleich: Die Steuerplatine
SmoothStepper hat ja noch keine
Endstufen, macht einstellbar 0,25 .. 4 kSa/s und kann ≥ 32 kHz Schrittfrequenz.
Geradezu winzige Leiterplatten-Abmessungen (100 x 76 x 18 mm³),
entwerfbar mit der Freeware-Version von Eagle (halbe Euro-Platine),
gute Stapelbarkeit durch Befestigungslöcher, metrische Maße;
gängige, preiswerte Bauelemente (teilweise als kostenlose Muster lieferbar),
Hand-Durchkontaktierung und -Bestückung möglich
Das Bedienteil besteht aus 4 Tastern, 1 Inkrementalgeber und 1 Zweifarb-LED.
Diese einfache Schaltung ist auf einer Lochrasterplatine untergebracht
oder so-wie-es-ist aus einem Röhrenmonitor ausgeschlachtet.
Natürlich sind auch 3 Taster und 1 Inkrementalgeber mit Tastfunktion möglich.
Die Tastfunktion ist dann mit Motoren STOP zu belegen.
Mit MSP430 (SM3)
Die dritte Version verwendet den MSP430F2614 (16-bit-Mikrocontroller).
Dieser hat genügend Beine, um ohne Portexpander auszukommen.
Er hat 7 eigenständige 16-Bit-Timer, sodass kein gemeinsamer Berechnungstakt
vonnöten ist. Damit verringert sich der Jitter auf Interruptverzögerungszeiten,
und die maximal mögliche Schrittfrequenz ist etwas höher.
Bei langsamen Drehzahlen sowie Stillstand eignet sich der per D/A-Wandler
mögliche Mikroschrittbetrieb für höhere Positionierpräzision und ruhigeren Lauf.
Neu sind Einzelachsanschlüsse mit je 2 Null- oder Endkontakten,
deren MicroMaTch-Leiterplattenstecker so belegt sind,
dass Schneid-Klemm-Technik an einer 9-poligen SubD-Buchse verwendet werden kann
und dabei eine isel-kompatible Anschlussbelegung herauskommt.
Schaltpläne und Platinen
Schaltplan im WMF-Vektorformat (weil sehr groß).
Der Leiterplattenentwurf verwendet einige Drahtbrücken als gängiger Ersatz
für eine sonst notwendige dritte Ebene oder mehr Durchkontaktierungen.
Wegen seiner vielen Anschlüsse sitzt der Controller verdreht in der Platinenmitte
und „verdrängt“ die Schrittmotorendstufen-Schaltkreise UC3717 in etwas chaotischer Weise.
Zu allen Steuerungen gehört eine Lokalbedienung
mit 1 Inkrementalgeber, 4 Tasten und 1 Zweifarb-Leuchtdiode.
Das Leiterplatten-Design ist für die Selbstherstellung geeignet.
Fotos
Bestückungsseite, Leiterseite
(zu sehen ist das angelötete JTAG-Kabel für die Firmware-Erstellung)
Ich habe hier noch 2 Leiterplatten (gebohrt) aus Überproduktion herumliegen, wer will?
Das zugehörige Bedienteil hat die gleichen
Eingabe-Elemente wie alle hier vorgestellten Schrittmotor-Steuerkarten,
zusätzlich eine Flüssigkristall-Anzeige (LCD) mit 2 Zeilen à 16 Zeichen.
Es kommt mit minimalistischen 8 Anschlussleitungen aus.
(Eine LCD-Ansteuerung würde bei der ATmega8-basierten Vorgängerversion
nie und nimmer in den Flash-Speicher passen!
Da müsste man schon ATmega168 bestücken …)
Mit einer Tochterplatine ist via RS485 eine Kopplung untereinander vorgesehen,
auf der Leiterplatte „verewigt“ ist es aber erst mit SM4.
Weil der verwendete Mikrocontroller MSP430F2614 im 80-pol. TQFP-Gehäuse
genügend Beine für die direkte Ansteuerung der Schrittmotor-Endstufen hat
(ohne Port-Expander 74HC595) und außerdem genügend Timer,
kann das interne Regime für die Rampengenerierung ganz anders gestaltet werden.
Das Interface an der Schnittstelle soll kompatibel bleiben.
Ideen (für später)
Infrarotempfänger und Infrarot-Bedieneinheit
Infrarotsender und Bedieneinheit mit Anzeigefunktion
dito per Funk
Kann zurzeit auch durch ein externes System via serielle Schnittstelle
erledigt werden.
Schrittmotor-Achs-Anschluss
MicroMaTch♀
SubD9♀
Belegung ISEL
Belegung bei mir
Pin bei OWIS (STANDA nach Umbau)
1
1
Motorphase 1A
1
3
2
Motorphase 1B
2
5
3
Motorphase 2A
3
7
4
Motorphase 2B
4
-
5
+24V Schalter
kein Kontakt
-
2
6
+24V Bremse
+5V Sensorspeisung
8
4
7
Endschalter 2
15 (motorfern; Öffner bei OWIS, Schließer bei STANDA)
6
8
GND Bremse
GND für Schalter
13
8
9
Endschalter 1
11 (motornah; Öffner bei OWIS, Schließer bei STANDA)
Der Schrittmotor-Anschluss ist — so gut es geht —
kompatibel zu ISEL-Steuerungen.
Bei ISEL gehen die Schalter wahrscheinlich zum Pin 5, bei mir zum Pin 8.
Ein Widerstand im Stecker (ca. 10 kΩ von Pin 5 nach Pin 8)
macht einen (bremsenlosen!) ISEL-Antrieb kompatibel zu SM3.
Ärgerlicherweise backen OWIS und STANDA jeweils ihren eigenen Standard,
basierend auf SubD15HD-Steckern.
Ob ISEL Öffner oder Schließer als Endschalter verwendet bleibt unklar.
Öffner als Endschalter haben den Vorteil, als Ansteck-Erkennung dienen zu können,
da mindestens einer geschlossen sein sollte. (Betrifft nur lineare Achsen.)
Schließer haben den Vorteil, dass eine Achse ohne Endschalter im Experimentalaufbau nicht blockiert.
Hinweis zum Verständnis:
Alle Schrittmotorsteuerungen können mit Adaptern passend zu jedwedem
Antrieb gemacht werden.
Beim SM3 ist der Adapter am einfachsten konstruiert,
weil ein MicroMaTch-Stecker, ein 8-poliges Flachbandkabel und eine
SubD-Buchse mit Schneid/Klemm-Anschluss genügt (ohne zu löten),
sofern man es mit einem ISEL-kompatiblen Antrieb zu tun hat.
Viele Bastler und Hobby-NC-Maschinen benutzen jene Anschlussbelegung.
Vierte Version
mit AT91SAM7S64 (ARM7, 32-bit-Mikrocontroller), USB und Mikroschrittbetrieb,
kaskadierbar im Master-Slave-Betrieb per RS485 (bis zu 7 Stück),
für Hexapod mit Koordinatentransformation in Firmware
Zu dieser Steuerung gehört eine Lokalbedienung
mit 1 Inkrementalgeber, bis zu 6 Tasten, bis zu 6 Leuchtdioden
sowie 1 alphanumerisches LC-Display 16x2.
Das Leiterplatten-Design erfordert industrielle Fertigung
(hier: Würth-Elektronik WE-Direkt).
Die Lokalbedienungseinheit (einseitig) kann selbst geätzt werden.
Gegenüber SM2 folgende Veränderungen:
Nochmals kompakteres Platinenlayout mit planer Kühlmöglichkeit der
Motorsteuer-Chips auf der Unterseite
Wesentlich höhere verfügbare Rechenleistung mit 32-bit-Mikrocontroller
für die Koordinatentransformation und koordinierte Motorsteuerung
Befestigungsloch-Anordnung passend für Optik-Tische mit 25-mm-Raster
Nur eine Versorgungsspannung 10..30 V, integrierte 5-V-Versorgung
per Schaltregler, Speisung per Hohlstecker und gut verfügbare Steckernetzteile
USB-Anschluss mit Bootloader
Standardisierter JTAG-Pfostenstecker (nur für Debugging erforderlich)
Anschluss für RS485-Bus zur Kaskadierung weiterer SM4 — inklusive
Stromversorgung
Geänderter (eigentlich nicht vorgesehener) End- und Referenzschalter-Anschluss
Alle Steuerungen sind per serieller Schnittstelle fernsteuerbar.
Piezo-Steuerung mit MSP430 (PS1)
6-kanalig für Piezo-Schiebeaktoren
(wahrscheinlich von SmarAct)
unter Ausnutzung von Gleit- und Haftreibung.
Die neue Serie MSP430F55xx ist endlich mit USB verfügbar,
so kommt man schließlich von der seriellen Schnittstelle weg
und hat eine günstige Option der Selbstversorgung.
Diesmal wird der Weg mit der RS485-Kaskadierung gegangen,
um gemeinsam mit den Hexapods nur ein Steuergerät zu benötigen.
Probeweise Inbetriebnahme des MSP430F5525-Bootloaders
Zunächst wurde eine Universalträgerleiterplatte entwickelt und bestückt
(siehe Archivdatei unten).
Die erprobte, erforderliche Minimalbeschaltung des 80-poligen Gehäuses sieht so aus:
USB-5V (rt) an Pin 65 (UBUS)
USB-D– (ws) an Pin 64 (DM)
USB-D+ (gn) an Pin 62 (DP)
USB-00 (sw) an Pin 61 (USSU)
Grundton-Quarz 12000 kHz an Pin 69 und 70 (XT2IN und XT2OUT)
Brücke zwischen Pin 66 (UUSB) und Pin 50 (DUCC2)
Widerstand 1,5 kΩ zwischen Pin 62 (DP) und Pin 63 (PUR)
Alle übrigen Anschlüsse sind offenbar im Schaltkreis genügend niederohmig gebrückt.
Als Quarz eignen sich eine Reihe „glatter“ Quarzfrequenzen;
diese werden vom Bootloader automatisch detektiert.
Das genügte im Versuchsaufbau (Juli 2010). Keine Kondensatoren!
Der Mikrocontroller meldet sich als HID-Gerät.
Sicherheitshalber wurden die Kondensatoren und Brücken nachher hinzugefügt.
Danach geht's ans Testen der Bootloader-Software.
Die originale von Texas Instruments erwies sich als nicht allzu nützlich,
deshalb habe ich sie kurzerhand noch einmal geschrieben.
Aufbau
Die Steuerung besteht aus sechs Hochvolt-Verstärkern mit OPA454,
die an sechs D/A-Wandler-Ausgängen angeschlossen sind.
Der Mikrocontroller muss die entsprechenden Rampenformen generieren
und per SPI ausgeben.
Die Lageregelung erfolgt mit den Sinus- und Kosinussignalen (Analogspannungen)
in den Aktoren, diese werden direkt den 12 A/D-Wandler-Anschlüssen
des Mikrocontrollers zugeführt und dort verarbeitet.
Ein mikrocontroller-gesteuerter Hochspannungs-Generator (mit PWM-Ausgang
zum Schalttransistor und A/D-Wandler-Eingang zum Messen der Ausgangsspannung)
liefert und regelt die benötigte Speisespannung.
Der Rest ist übrige Stromversorgung sowie drei serielle Schnittstellen:
USB (PC-Ankopplung; geplant ist CDC-Betrieb)
RS232 (Ersatz falls kein USB für PC-Ankopplung verfügbar)
RS485 (Kopplung mit gleicher Steuerung sowie Schrittmotorsteuerung 4)
Schaltplan
und Leiterplatte: oben
und unten
als Vektorgrafik (bestes Anzeigeprogramm: ACDSee 2.43)
Eagle3D-Darstellung der Leiterplatte
Pardon, hier fehlen die Polygone
Fotos von oben und von unten,
Handbestückung mit Kolben und 0,5 mm Lötzinndraht, die OPAs mit Paste und Heißluft
Funktionsprinzip
Der Schaltungskern sind sechs 12-bit-D/A-Wandler mit Ausgangsspannungen von 0 bis 100 V,
realisiert mit Hochvolt-Operationsverstärkern OPA454 und nachgeschalteten
Komplementärpärchen FZT653 + FZT753 zur Stromverstärkung.
Da die Präzision der Ausgangsspannung nicht so wichtig ist, wurden diese Booster
nicht in die Gegenkopplung der Operationsverstärker einbezogen,
um Schwingneigung zu vermeiden.
Damit werden die Piezostellelemente mit Sägezahnkurven angesteuert.
Zur Positionsermittlung werden die Sinus- und Kosinussignale der Inkrementalgeber
an insgesamt 12 A/D-Wandler-Eingänge geführt, die sich im Mikrocontroller befinden.
Das Mikrocontroller-Programm macht damit eine Lageregelung.
Signalverläufe zum Piezo-Aktuator
Der Rest der Schaltung kümmert sich um die Bereitstellung der verschiedenen
Betriebsspannungen sowie von Interfaces, insbesondere zu einer „Fernbedienung“
mit Flüssigkristallanzeige und Inkrementalgeber.
Mehrwegebetrieb
Die Steuerungen SM4 und PS1 sind mit RS485-Busschnittstellen
auf MicroMaTch-Buchsen ausgestattet,
auf der die Rohspannung (7..24 V =) mitgeführt wird.
Das ermöglicht Kaskadierung,
und es wird nur dieses eine 4-polige Kabel benötigt.
Das Protokoll sieht vor, dass es einen „Master“ gibt, an dem die
Lokalbedienung (mit LC-Anzeige) angeschlossen ist.
Dieser kann auch mit dem PC verbunden sein.
Je nach angewähltem „Slave“ leitet der Master die Lokalbedienungs-Kommandos
an den Slave weiter und stellt Informationen vom Slave auf der LC-Anzeige dar.
Das gleiche gilt für Kommandos vom PC, wobei hier der „Fokus“
(also mit welchem Slave der PC gerade spricht) getrennt ist.
Eventuell kann später die Lokalbedienung an einem Slave hängen
sowie mehrere Bedienteile (mit getrenntem Fokus) erlaubt sein.
Digitale Ein/Ausgabe (mal ohne Mikrocontroller)
Ein Richtungswechsel zu Druckluft und Druckluft-Ventilen
machte eine Umstellung auf (ekelhaft umständliche) 24-V-Technik vonnöten.
Dazu wurde eine „formfaktor“-kompatible
Schaltung
mit möglichst vielen Digitalausgängen (also geschaltete 24 V) benötigt.
Um das gleiche 12-V-Netzteil wie für die Motorsteuerungen zu verwenden,
ist der DC/DC-Wandler gleich mit drauf.