Alignment
Schrittmotor-Steuerung
> Controller Elektronik
> Verwendung an Astro3-Montierung
Optik
Gemeinschaft Bad Cannstatt
Karl-Heinz Schweikert |
Stand: 22. Sep 2010 |
Übersicht
Hier wird ein Controller-Baustein vorgestellt, der Mikroschritt-Steuersignale für bis zu 4 Schrittmotoren generiert. Über eine serielle Schnittstelle (RS232) werden Zielkoordinaten oder Bewegungsbefehle (teilweise LX200 kompatibel) gesendet - die erforderlichen kompletten Wegberechnungen einschließlich Berechnung der korrekten Start- und Bremsrampen werden vom Controller intern berechnet und die entsprechenden Signale ausgegeben. Hierbei können auch bis zu 3 Motoren synchronisiert werden (z.B. für Plotter oder 3-D Frästische. Einzelheiten s. unten).
Weitere Eigenschaften sind über RS232 frei programmierbare extra Ein- und Ausgangssignale, Ansteuermöglichkeit für ein Standard-LC-Display, integrierte Sternzeituhr (für Teleskopsteuerung), einfacher Periodenfehler- und Getriebespiel-Ausgleich, und vieles andere mehr ...
In Kombination mit einem (noch zu entwickelnden) Koordinaten-Controller ist ein späterer Ausbau auf Alt-Az Nachführung (z.B. als Dobson-Drive) möglich - hier habe ich den zugehörigen mathematischen Formalismus abgeleitet.
Der Controller ist so ausgelegt, dass er nicht nur Teleskop-Montierungen, sondern auch Koordinatentische, Roboter, usw. ansteuern kann. Hierzu gibt es unzählige Konfigurationsmöglichkeiten, die mit einem speziellen Setup-Program frei geändert werden können. Die Konfiguration ist natürlich nicht-flüchtig, d.h. sie bleibt beim Ausschalten erhalten.
Aber erst mal etwas Schrittmotor-Theorie (informative Artikel auch unter Wikipedia):
Voll- und Mikroschritt
Wenn präzise Bewegungen auch bei extrem kleinen Geschwindigkeiten reproduzierbar durchgeführt werden sollen, werden dafür gerne Schrittmotoren eingesetzt. Sie bestehen aus einem magnetisierten Rotor und meist 2 Spulen, durch die der Ansteuerstrom fließt. Häufig anzutreffen sind Motoren mit z.B. 48 Steps/Umdrehung (7.5°/Step) oder 200 Steps/Umdrehung (1.8°/Step). Werden die Spulen in der richtigen Reihenfolge mit der richtigen Polarität angesteuert, bewegt sich der Rotor bei jedem Ansteuerwechsel um 1 Schritt ("Step") weiter - je nach Ansteuersequenz vorwärts oder rückwärts. Es muss allerdings beachtet werden, dass der Motor nur eine endliche Winkelbeschleunigung gestattet, und somit die Ansteuerimpulse beim Anfahren und Abbremsen genügend langsam beschleunigt bzw. verzögert werden. Die Frequenz der Ansteuerimpulse muss also bei jedem Geschwindigkeitswechsel die Form einer Rampe aufweisen.
Bei der typischen Vollschrittssteuerung (und ebenso bei der daraus abgeleiteten Halbschrittsteuerung) wird der Spulenstrom lediglich mit definierter Polarität ein- oder ausgeschaltet. Die Steuerelektronik ist für diesen Fall besonders einfach. Es gibt hierfür eine Vielzahl kommerzieller ICs, die die komplette Ansteuerlogik enthalten. Das abrupte Schalten zwischen den ziemlich groben Schrittpositionen führt zu einem sehr unruhigen und lauten Lauf der Motoren. Bei bestimmten Frequenzen treten sogar mechanische Resonanzen auf, die den Motor völlig aus dem Tritt bringen können.
Abhilfe bringt eine Ansteuerung im Mikroschritt-Modus. Hier wird der Spulenstrom nicht nur einfach ein- oder ausgeschaltet, sondern definiert in feinen Zwischenschritten variiert. Damit wird ein Vollschritt (z.B. 7.5°) in viele kleine (hier z.B. 16) Mikroschritte unterteilt. Die beiden Spulenströme folgen den Funktionen:
|
Ia = I0*sin (Phasenwinkel) Ib = I0*cos (Phasenwinkel) |
Allerdings muss die Ansteuerelektronik statt einfachen High/Low Pegeln jetzt Analogsignale für die Stromwerte liefern, was die Steuerung erheblich aufwendiger macht. Die Analogwerte werden üblicherweise mit statischen oder dynamischen Digital-Analog-Wandlern, z.B. mit Hilfe der dynamischen Pulsweiten-Modulation (PWM) erzeugt. Hierbei wird ein digitaler Ausgang mit hoher Frequenz zwischen H und L umgeschaltet und aus diesem Signal durch Filterung (=Mittelwertbildung) der Analogwert gewonnen. Die Amplitude des Analogsignals hängt direkt von der relativen Impulsbreite der digitalen Signale ab. Das Vorzeichen wird mit einem separaten (digitalen) Signal erzeugt und an den Dir - oder Polarity-Eingang des Leistungstreibers geführt.

Abb.: Prinzip der Pulsweitenmodulation
Noch eine Bemerkung zu den Motoren:
Nicht alle Motoren sind für Mikroschritt geeignet. Viele der besonders billig angebotenen Motoren "aus der Ramschkiste" weisen eine starke Nichtlinearität im Drehwinkel auf. Zudem haben sie oft ungünstige Werte für Spulenwiderstand, Induktivität und Drehmoment, was sich sehr negativ auf die Laufruhe und die maximal erzielbare Drehzahl auswirkt. Es wird im Betrieb zwar nichts kaputt gehen, aber das Verhalten im Betrieb ist fast immer sehr unbefriedigend. Ein hochwertiger, für Mikroschritt konstruierter Motor (der leider auch recht teuer ist) mit auf den Einsatzzweck abgestimmten Daten ist mit den Billigteilen nicht zu vergleichen!
Motor-Synchronisation
Werden mehrere Motoren für 2- oder 3-dimensional koordinierte Bewegungen eingesetzt, stellt sich das Problem der Motor-Synchronisation oder Koordinaten-Interpolation. Werden z.B. die Achsen eines xy-Plotters nicht-synchronisiert angesteuert, ergibt sich folgendes Verhalten: x- und y Motor laufen los (unter Beachtung der üblichen Beschleunigungsrampen bis zur Maximalgeschwindigkeit) und kommen bei unterschiedlichen Wegstrecken auch zu unterschiedlichen Zeitpunkten an ihren Zielpunkten an - die geplottete Linie hat einen Knick (hier durch die Brems-Rampe des y-Motors etwas abgerundet)!

Abb: Motoren nicht sync.
Eine Synchronisation sorgt dafür, dass die Werte des Motors mit der kürzeren Wegstrecke interpoliert werden und alle beteiligten Motoren gleichzeitig am Zielpunkt ankommen - die geplottete Linie ist somit bei synchronisierten Motoren gerade:

Abb: Motoren synchronisiert
Einige Eigenschaften in Stichworten:
Controller-Struktur

Abb.: Funktionsblöcke des Controllers (schematische Darstellung)
Die Controller-Software ist vollständig in Assembler programmiert und hoch optimiert - sowohl was Geschwindigkeit als auch Speicherbedarf angeht. Die Steuerung der 8 parallelen PWM-Ausgänge zur Erzeugung der sinusförmigen Halbwellensignale stellt harte Echtzeitanforderungen, die taktgenau erfüllt werden. Auch bei hohen Fahrgeschwindigkeiten erfolgt die Berechnung der 8 Phasensignale und Rampen in Echtzeit ohne jeglichen Jitter oder Aussetzer. Dies ist selbst dann gewährleistet, wenn gleichzeitig dazu Daten über die seriellen
Schnittstellen mit der höchsten Datenrate übertragen werden (z.B. beim kontinuierlichen Abfragen der aktuellen Fahr-Positionen).
Trotz umfangreicher Funktionen und Betriebsmodi kommt das Programm mit den verfügbaren Flashspeichergröße von 1024 Word (=2048 Byte) aus. Dabei werden auch alle 32 Register und der gesamte 128 Byte SRAM Block vollständig belegt. Viele
Initialisierungs-Paramerter sind im nichtflüchtigen EEPROM dauerhaft abgelegt, können aber während des Setups leicht angepasst werden.
Eine detailliertere Beschreibung der zugrundeliegenden Algorithmen und ein Programm-Listing in übersichtlichem 'Pseudocode' gibt's hier.
Pin-Belegung des Atmel 2313 Controllers:

Je nach eingestelltem Mode ('Single Chip' oder 'Multiplex') hat der Controller eine unterschiedliche Pin-Belegung (s. auch Schaltbilder weiter unten):
|
|
Single Chip (2 Motoren) |
Multiplex (4 Motoren) |
|
PB 0...7 |
Pol + PWM-Signale |
HC574 Data D0...D7 (PWM / Pol / Par.Out) + Par.In |
|
Sig.En |
(not connected) |
HC574 Latch Enable (=Clk) für PWM-Signale |
|
Setup |
'Setup-Mode'= wenn beim Einschalten L-Pegel anliegt (=> EEPROM Programmierung) |
|
| SyncPulse | Trigger für Sync Sägezahn-Signal (wird auf der Treiberplatine verwendet) | |

Abb.: Blockschaltbild für 'Single Chip' (schematische Darstellung)

Abb.: Blockschaltbild für 'Multiplex' Betrieb (schematische Darstellung)
Wenn kein besonderer Wert auf Energieeffizienz und Motorgeschwindigkeit gelegt wird, gibt es eine besonders einfache Ansteuer-Möglichkeit, die sowohl für Single-Chip als auch für den Multiplex-Modus geeignet ist. Hier werden die PWM-Impulse direkt - d.h. ohne Umwandlung in Analogsignale - über Leistungstreiber (Einzeltransistoren oder Treiberbausteine) an die Schrittmotoren gelegt. Das funktioniert nur, wenn die Strombegrenzung über Vorwiderstände oder den internen Spulenwiderstand erfolgt, wodurch allerdings die meiste Energie in den Widerständen verheizt wird. Hier ein schematischer Schaltungsvorschlag, links mit Einzeltransistoren für Unipolar-Motoren (die Dioden sind vorzugsweise Schottky-Typen); rechts mit dem Baustein L293D (der die Freilaufdioden bereits integriert hat) für Bipolar- oder Unipolar-Motoren:

Direkt-Ansteuerung mit Einzeltransistoren Direkt-Ansteuerung mit Treiberbaustein L293D
Die Schrittmotor-Steuerung ist vollständig über RS232 steuerbar (9600 Baud, 8 Data, no Parity, 1 Stopbit).
1Byte Command:
|
' #' |
return achnowledge '\0' when received. For communication testing and synchronisation |
|
Format: Cmd (='b0001xxxx'), Data |
|
|
User Port: Ansteuerung des 6bit Out Ports (mit externem Schieberegister), z.B. zum Ansteuern von Relais, CCD,... |
|
|
16,b'00DDDDDD' |
set output signals in external Out Port |
|
|
|
|
User Port: Ansteuerung eines Industriestandard Text-LC-Displays (mit externem Schieberegister zur Erzeugung der LCD-Signale |
|
|
20,b'0000LLLL ' |
send 1 nibble LCD code (e.g. during initialize, LCD RS signal=0) |
|
22,b'HHHHLLLL' |
send 2 nibble LCD code (LCD RS signal=0) |
|
23,b'HHHHLLLL' |
send 2 nibble LCD data (LCD RS signal=1) |
|
|
|
|
Control-Register: Tracking on/off, Selektion der Signale für Treiber B Ausgang, usw |
|
|
'+', <Bitmask> |
set Bits in Ctrl.Register (<Bitmask> binary) |
|
'-', <Bitmask> |
clear Bits in Ctrl.Register |
|
Bit |
value |
Control Register Functions |
|
0,1 |
1,2 |
Sync: 00+01=off, 10=Mot.A+B, 11=Mot.A+B+C. 00=indiv.speed+rate settings, else common speed+rate |
|
2 |
4 |
V1.1: TrackMode: 1=tracking on/off with Speed state (set via Userbus) 1) |
|
3 |
8 |
Tracking: 0=off; 1=track MotorA (1 rev/sideral day incl. gear) |
|
4 |
16 |
Userbus-Keys: 0=off; 1=move Motor on pos. Edge (Bit0=MotA+, Bit1=MotA-,...Bit7=MotD-) |
|
5 |
32 |
AltKeys: 0: Keys6:7 move MotD; 1: Keys 6=Track on/off, Keys 7: if set, Keys 0:5 are send to SerOut |
|
6,7 |
64,128 |
Signal source for Port PB3:0: 00=off, 01=Mot.B, 10=MotC, 11=MotD (nur für 4MotMode=0!) |
Bsp: Bit 3 (Wert 8=23) =Tracking. '+'chr(8) = Tracking on; '-'chr(8) = tracking off
1) Die Umschaltung zwischen 'Single Chip' und 'Multiplex' während
des normalen Betriebs über den PC macht keinen Sinn. Ab Controllerversion V1.1
ist die Auswahl nur noch über das Setup möglich. Bit 2 wird jetzt verwendet,
um die Trackingumschaltung von der Handbox aus zu definieren:
Bit2=1: vom Userbus aus wird mit Tracking (on/off) auch gleichzeitig die
Fahrgeschwindigkeit (Rate/max) umgeschaltet (wie in Version V1.0).
Bit2=0: nur Fahrgeschwindigkeit geschaltet (Tracking bleibt unbeeinflusst)
3 Byte Commands
|
'Move'-Kommandos, teilweise kompatibel zum LX200 command set) |
|
|
':Mx' (x=e,w,n,s,f,r,i,o) |
start move in specified direction: |
|
':Qx' (x=e,w,n,s,f,r,i,o,#) |
stop move (n=s, e=w, f=r, i=o, #=all) |
|
|
|
|
Positionswinkel, Zeit, Ports auslesen |
|
|
':Gx' (x=0,1,2,3,T) |
get current position angle [°] of Motor A...D or current siderial time and send 3 Bytes via RS232 |
|
':I<' |
read serial Input (at UserBus) |
|
':I=' |
read parallel Input |
|
|
|
|
Speicherzugriff (lesen+schreiben) |
|
|
':I<adr>' |
read data at memory (SRAM, Working und I/O-Register) address and send via RS232 |
|
':<adr><data>' |
set data at SRAM address (adr >=0x60, data = 0...0xFF) |
|
|
|
|
Motor-Zielkoordinaten und Sternzeituhr |
|
|
b'1NNHHHHH', h'MM', h'LL' |
(NN=00,01,10,11) set motor 0,1,2,3 target to angle (in [°], 0x200000=360°) |
|
b'011HHHHH', h'MM', h'LL' |
set 'Time angle' (0x200000=1 sideral day) |
|
Adr. |
Bytes |
Function |
|
Adr. |
Bytes |
Function |
|
0x60 |
13 |
MotA (base address) |
|
0xC6 |
8 |
Speed for Mot A...D (for Sync=0) rw |
|
0x6D |
13 |
MotB (base address) |
|
0xCC |
1 |
common max.Speed (for Sync>0) rw |
|
0x7A |
13 |
MotC (base address) |
|
0xCD |
1 |
common Rate (for Sync>0) rw |
|
0x87 |
13 |
MotD (base address) |
|
0xCE |
1 |
Par.Out Port data rw |
|
MotX+0 |
2 |
Range (XM) rw 1) |
|
0x55 |
Bit5:0 |
Controller Version (ab V1.1): '1'=V1.1 |
|
MotX+2 |
3 |
Target (HML) [uSteps] r |
|
0xD8 |
4 |
PEC MotA (base address) |
|
MotX+5 |
3 |
Position (HML) [uSteps] r |
|
0xDC |
4 |
PEC MotB (base address) |
|
MotX+8 |
1 |
current Step r |
|
PEC.x+0 |
1 |
Ratio (# w.gear teeth); x=A, B rw |
|
MotX+9 |
Bit 3 |
Margins y/n rw |
|
PEC.x+1 |
1 |
Phase Offset (0...<256 ~ 360°) rw |
|
MotX+9 |
Bits2:0 |
Backlash H [uSteps] rw |
|
PEC.x+2 |
1 |
Amplitude (0..255 microsteps) rw |
|
MotX+12 |
1 |
Backlash L [uSteps] rw |
|
PEC.x+3 |
1 |
current value r |
1) Range: Byte X= Byte L7:6 + Byte H5:0
Daten für die Initialisierung der Steuerdaten sind im nichtflüchtigen EEPROM des Atmel Controllers abgelegt und werden beim Power-Up an die entsprechenden Speicherstellen (in SRAM, Working- und I/O-Registern) kopiert. Dort können sie während des Betriebs zwar verändert werden, nach dem Ausschalten und erneuten Power-Up werden aber wieder die originalen Daten aus dem EEPROM in den Arbeitsspeicher übertragen.
Wenn jedoch beim Anlegen der Betriebsspannung der Setup- Jumper gesteckt war, geht der Baustein in den Setup-Modus und die Daten im EEPROM können über RS232 ausgelesen und dauerhaft verändert werden. Das geht bequem über ein einfaches in VBasic geschriebenes Setup-Programm.
Abb.: Setup des nicht-flüchtigen Speichers (EEPROM)
Range: Der maximal darstellbare Bereich (='Range') der Steuerung umfasst 0x3FFFC0 = 4194240 Mikroschritte = 262140 Vollschritte. Umgerechnet auf einen frei positionierbaren Winkel-Fahrbereich von 360° entspricht das einer Auflösung von ca. 0.3 Bogensekunden. Bei Linearbetrieb ergibt sich z.B. bei einer vorgegebenen Auflösung von 0.001mm ein Fahrbereich von über 4 Meter.
Mit "Margins" wird festgelegt, ob die Bewegung begrenzt ist (Linearbewegung) oder 'grenzenlos' ist (Drehbewegung). Damit wird das Verhalten an den Bereichsrändern bestimmt.
Als einfaches Beispiel soll eine Bewegung von Ausgangsposition A=998 nach Ziel B=2 bei einem Range von 1000 dienen:
Margin 'ein': um auf Position B zu kommen, muss 996 Schritte zurückgefahren werden (998®997®996®....®4®3®2)
Margin 'aus': Position B wird auf dem kürzesten Weg durch 4 Schritte vorwärts erreicht (998®999®0®1®2)
PEC (Korrektur des Periodenfehlers) für Motor A+B wird festgelegt
- durch das Übersetzungsverhältnis des langsamsten Getriebeteils (=Zähnezahl des Schneckenrads bei eingängiger Schnecke),
- einem Phasenoffset, der die Winkelposition des Sinus-Nullwerts beschreibt
- einer Amplitude, die Stärke der Korrektur bestimmt (0=PEC deaktiviert)
Die Geschwindigkeit wird durch die unabhängigen Größen "max.Speed" und "Rate" festgelegt.
"max.Speed" ist die höchste Geschwindigkeit, die ein Motor am Ende der Beschleunigungsrampe erreichen kann, sie kommt besonders nach der Eingabe weit entfernter Zielkoordinaten zum Tragen. "Rate" bestimmt die aktuelle Rate, mit der bei 'Move' -Befehlen (oder Drücken der Bewegungstasten der Handbox) die aktuelle Zielvorgabe verändert wird. Daraus folgt, dass 'Rate' immer kleiner (oder gleich) 'max. Speed' eingestellt sein muss.
Ist dies nicht der Fall, so wird die Zielposition schneller verändert als der Motor folgen kann, und der Motor wird beim Stoppen mit 'Quit' (bzw. Loslassen der Handbox-Tasten) noch einige Zeit nachlaufen, bis er die vorgegebene Zielposition erreicht hat.
Für die Synchronisation git es folgende Einstellmöglichkeiten:
- no sync (individual): Motoren bewegen sich unabhängig, die Geschwindigkeit kann für jeden Motor individuell gewählt werden
- no Sync (common): Motoren bewegen sich unabhängig, die Geschwindigkeitswahl ist für alle Motoren gemeinsam
- Motor A+B: Motor A+B sind miteinander synchronisiert, C ist unabhängig. Gemeinsame Geschwindigkeitseinstellung.
- Motor A,B,C: Motoern A,B, und C sind miteinander synchronisiert. Gemeinsame Geschwindigkeitseinstellung.
4Motor(mux) - Auswahl:
aus: Es werden Signale für 2 Motoren direkt ausgegeben. Dies ist Betriebsmodus, der den unten gezeigten Layouts zugrunde liegt.
ein: Es werden gemultiplexte Signale für 4 Motoren ausgegeben. Diese müssen über externe Latches (z.B.) HC574 gespeichert werden.
"Key Mode (0-3)" beschreibt das Verhalten zusammen mit der 'Mini-Handbox' (Betrieb ohne angeschlossenen PC):
0 |
kein direkter Effekt der Userbus-Eingangsdaten auf die Motoren (Lesen der Daten über RS232 geht immer) |
1 |
die 8 Bits steuern 4 Motoren, jeweils vorwärts/rückwärts (z.B. über 4 Tastenpaare) |
2 |
Bit 0-5 steuern 3 Motoren, Bit 6 definiert die Fahrgeschwindigkeit ('Rate' oder 'max'). Gesetztes Bit 7 legt Bit0:5-Daten an den Outport. |
3 |
wie 2, nur wird mit Bit 6 zusätzlich zur Wahl der Fahrgeschwindigkeit auch noch Tracking ein/ausgeschaltet. |
Download Setup (V1.1, liest auch V1.0 *.smc Dateien):
VBasic6.0 Sourcecode: SMCtrlSource.zip (24 kByte)
komplette Installation (MS-Windows): SMCtrlSetup.zip (1550 kByte; auspacken und 'Setup.exe' starten)
Er dient zum Anschluss z.B. einer Handsteuerbox und eines frei programmierbaren 6-Bit Out-Ports. Hierzu werden 2 Signalleitungen (Takt=out und Data=in) verwendet sowie Masse und + 5V (+5V kann evtl. entfallen, wenn kein größerer Strom gezogen werden soll und die Versorgungsspannung aus der Taktleitung gewonnen wird). Das Taktsignal enthält auch die ausgehenden Daten und einen Syn-Impuls. Diese Signale können z.B. durch einfache RC-Glieder separiert werden. Die Konvertierung seriell/parallel erfolgt durch ein externes 8 Bit Standard-Schieberegister, das mit den Signalen Takt, Data und Syn-Impuls angesteuert wird (z.B. HC595 serial In/parallel Out mit Latches; HC165 parallel In/serial Out)

Abb.: UserBus-Signale

Abb.: externe Schieberegister und Taktaufbereitung für 6 bit Out-Port und 8 bit Input-Port (blau: optional 5V aus Taktsignal erzeugt)
Folgende Betriebsmodi sind konfigurierbar (Festlegung erfolgt im Ctrl-Register):
|
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
|
0 |
Mot C ¬ |
Mot C ® |
Mot B ¬ |
Mot B ® |
Mot A ¬ |
Mot A ® |
|
1 |
Out 5 |
Out 4 |
Out 3 |
Out 2 |
Out 1 |
Out 0 |
Die Eingangsbits (über externes Schieberegister von parallel nach seriell konvertiert) können über RS232 unabhängig vom Betriebsmodus mit dem Befehl ':I< ' gelesen werden (z.B. zum Auslesen von Tasten, Endschaltern, usw...)
Im folgenden sind einige besonders kompakte Schaltungsvorschläge dargestellt, wie ich sie für kleinere Phasenströme (ca. <1A/Phase) realisert habe. Der Controller lässt sich aber genauso mit den bekannten, etwas aufwendigeren Standardschaltungen einsetzen, die z.B. in den Datenblättern der Treiberbausteine beschrieben sind. Damit lassen sich auch beliebig hohe Ströme für besonders schnelle und kräftige Motoren steuern.
Die Schaltung enthält nur einige wenige Funktionsgruppen::
Resetschaltung für sauberes Power-Up und -Down Verhalten (speziell zum Schutz des EEPROM Inhalts)
Sync-Schaltung zur Synchronisation der Treiber-Schaltregelung (Sägezahnsignal, entfällt für andere Treiberschaltungen)
Filter zum Glätten der (digitalen) pulsweitenmodulierten Signale für den analogen Stromamplituden-Sollwerte
Max232 incl. Kondensatoren zur Erzeugung der Spannungen ±10V für die RS232-Schnittstelle und Pegelwandlung
üblicher Quarzoszillator und 5V Spannungsversorgung
Einige Funktionsgruppen können unter Umständen auch entfallen (z.B. sind bei Direktsteuerung der gesamte Filterteil und der Sync-Block überflüssig; falls keine externe serielle Steuerung verwendet wird, entfällt der ganze Max232-Teil)

Abb.: Schaltplan der Controllerplatine
Das Layout erfordert lediglich einseitig geätzte Platinen (+ einige wenige Drahtbrücken, rot eingezeichnet)

Abb.: Prozessor-Platine (ca. 40mm x 45mm, Ansicht von Bestückungsseite)
Layoutdateien und Graphik mit höherer Auflösung im Downloadteil unten.

Abb.: Prozessorplatine, Vorder- und Rückseite
Diese Treiberplatine ist für die Ansteuerung von 2 Motoren ausgelegt und mit 2x LM298 bestückt. Von der Prozessorplatine erhält sie die analogen Stromsignale und die digitalen Dir (=Polarity) Signale. Ebenfalls von der Prozessorplatine stammen ein 19.2 kHz sägezahnförmiges Sync-Signal (gewonnen aus einem der Latch-Signale), das zur frequenzkonstanten Schaltregelung der Phasenströme verwendet wird, sowie die 5V Logikversorgung. Der Schaltregler ist mit einem Komparator (LM 393) und 2 NOR-Gliedern (74HC02) je Phase realisiert. Der Komparator vergleicht das (zur Unterdrückung von Spikes gefilterte) Stromsignal und den analogen Eingangs-Sollwert mit der Sägezahn-Referenz und schaltet somit synchron mit dem Sync-Signal die Treiberausgänge so, dass der jeweilige Phasenstrom proportional zum Eingangs-Sollwert geregelt wird. Wie üblich bei induktiven Lasten müssen Fast-Recovery Freilaufdioden an den Ausgängen der Leistungstreiber vorgesehen werden.

Abb.: Schaltplan der Treiberplatine (für 1 von 4 identischen Phasen dargestellt)

Abb: Treiber-Platine mit 2*L298 für 2 Motoren (ca. 55mm x 45mm, Ansicht von Bestückungsseite)
Layoutdateien und Graphik mit höherer Auflösung im Downloadteil unten.

Abb.: Treiberplatine für 2 Motoren. Um einen kompakten Aufbau zu erhalten, sitzt die Prozessorplatine 'huckepack' auf der Treiberplatine. Die beiden Platinen sind verbunden über zwei 6-polige Steckerleisten, die alle Steuersignale übertragen.
Hier die Layouts zum Download. Ich habe diese Graphikfiles mit einem Tintenstrahldrucker (HP 695, 600dpi) auf Spezial-Layoutfolie ausgedruckt und diese als Vorlage für die UV-Belichtung einer Positivlack-beschichteten Platine genommen. Dann Entwickeln, Ätzen, Bohren, Bestücken, Zusammenstecken und Einschalten! Oder so ähnlich...
Layout (Version 2.0) als TIF Datei, Auflösung 600dpi: Prozessor (56 kByte), Treiber (84 kByte).
Beim Ausdrucken stimmen die Abmessungen, falls die Graphiksoftware die Größendaten nicht ignoriert (mit Word funktioniert's bei mir gut).
Eagle Dateien: Prozessor.brd (27 kByte), Treiber.brd (29 kByte) (Version 2.0, incl. Bestückungsdaten)
Bauteile und Werte: BauteileListe.txt. Die reinen Materialkosten (ohne Platine und mechanische Teile wie Gehäuse, Schrauben,...) liegen bei ungefähr 10 Euro für die Bauteile der Prozessorplatine und ca. 10-15 Euro für die vorgestellte Treiberplatine.
Hinweis: Die Eagle-Datei für das Prozessorboard ist eine weiterentwickelte Version V2.
Hinweis: die Bohrungen der Eagle-Boards sind alle mit 0.3mm spezifiziert!. Damit ist beim manuellen Bohren eine genauere Zentrierung möglich. Bei professioneller Fertigung sollten die Bohrdaten nochmal überarbeitet werden. Typisch sind 0.8mm, bei Bauteilen mit dickeren Anschlussdrähten auch entsprechend mehr (z.B. bei Schottkydioden) .
Durch die umfangreiche Konfigurierbarkeit des Controllers ergeben sich vielfältige Möglichkeiten, die Schrittmotorsteuerung von außen anzusteuern.
Ich habe bisher realisiert:
1.) Rechnerunterstützte LCD-Handsteuerbox:
Am Userbus ist eine 'dumme' Handsteuerbox angeschlossen, die ein 4-zeiliges LCD-Modul und einige Tasten (4 Steuertasten und ein 15-Tasten Feld) besitzt. Die serielle Schnittstelle ist über einen USB-Konverter und -Hub über ein längeres USB-Kabel mit einem Rechner verbunden. Am Hub hängt außerdem die CCD-Kamera. Die Tasten-Informationen werden direkt zum Rechner durchgeschleift, dort ausgewertet, und in Befehle für die Motorsteuerung und das LCD-Modul umgesetzt. Dieses Konzept hat einige Vorteile:

Abb.: Testaufbau Handsteuerbox (rechts noch ohne Beschriftung )
Die seriellen Signale des Userbus werden über Schieberegister nach parallel umgesetzt. Da die Spezifikation für das LCD eine relativ kleine Flankensteilheit fordert, wurde noch ein Schmitttrigger HC04 eingesetzt. Die Rückkopplung von Qf und Qg des HC164 ermöglicht einen gleichzeitigen Betrieb der Handbox und des 6-Bit Outports am selben Userbus: Die Schaltung erzeugt ein Enable-Signal für das LCD nur bei Signalen für die Display-Steuerung, Signale für den Outport (s. unten) werden einfach ignoriert. Die Diodenmatrix auf der rechten Seite konvertiert die Pegel der 15 Zehnerblock-Tasten in ein binäres 4-bit Muster unter der Voraussetzung, dass keine 2 Tasten gleichzeitig gedrückt sind (da man wie beim Taschenrechner üblicherweise mit einem Finger eingibt, funktioniert das sehr gut). Die 4 Display-Tasten haben je einen eigenen Bitwert und können somit unabhängig voneinander gedrückt werden (d.h. auch mehrere gleichzeitig oder zusammen mit dem Zehnerblock).

Die Schaltung habe ich vorerst in "Wildwestverdrahtung" auf einer Lochrasterplatine aufgebaut (Handbox von hinten gesehen, die grüne Platine ist das LC-Display):

Linkes Bild: Auf den eingebauten Platinen sind unten die 4 Displaytasten, ganz links die 15 Tasten des Zehnerblocks montiert (Tasten auf der Unterseite, nicht sichtbar), daneben sieht man die eigentliche Logikplatine umgedreht von der Bestückungsseite aus. Auf dem vorderen Teil befindet sich die Diodenmatrix, die über 2 Steckerleisten von den 15 Tastern angesteuert wird. Vom Stecker etwa in der Mitte gehen Leitungen für die 4 Displaytasten weg (4 Signale weiß, 5V rot). Das Schieberegister HC164, das die 6 Signale für das Display liefert, ist mit doppelseitigem Klebeband direkt auf der Display-Platine neben den Anschlusskontakten angebracht und hier nicht sichtbar.
Rechtes Bild: Die Logikplatine betriebsbereit auf die Tastenplatine gesteckt.
Die Controller-Befehle zur Steuerung des LCD sind unter "Steuerung durch RS232...", "2 Byte Commands" beschrieben.
2.) Mini-Handbox (ohne Rechner und LCD-Modul)
Die Logik ist auch hier wieder auf Lochrasterplatinen aufgebaut:
Die 4 Taster steuern RA und Dec, mit dem 4pol-Schiebeschalter links lassen sich 4 Geschwindigkeiten wählen. Die oberen 2-pol Schiebeschalter schalten das Tracking ein/aus, bzw. schalten ein Relais auf dem 6-bit Outport, das die beiden Dec-Tasten auf den Fokussiermotor umleitet (mit einem 3-pol Schalter könnte auch noch auf einen 3.Motor umgeschaltet werden).
Hier die zugehörige Schaltung:

Jede Flanke an den Eingängen a...d des HC165 fährt den betreffenden Motor eine vordefinierte Anzahl von Schritten vor oder zurück (wird im Controller Setup festgelegt). Das verwendete Signal wird hier aus dem Eingangs-Takt abgeleitet durch einen Binärteiler gewonnen, kann aber genau so gut auf andere Art erzeugt werden (angedeutet z.B. mit einem separaten Oszillator NE555, der eine stufenlose Fahrgeschwindigkeit ermöglicht).
Die 5V-Betriebsspannung wird hier aus dem Taktsignal gewonnen, wodurch 3 Leitungen als Verbindung zum Controller ausreichen.
Mit dieser Handbox lassen sich ohne zusätzlichen Rechner die Grundfunktionen bedienen - derzeit allerdings ohne Anzeige:
RA und Dec-Achse mit wählbaren Geschwindigkeiten verfahren.
alternativ ist die Verwendung von digitalen Impuls-Drehgebern möglich - damit lässt sich's besonders feinfühlig arbeiten.
Tracking ein/aus
Bedienung der Userbus-Ausgänge über Schalter an der Handbox - z.B. für ...
... die Umschaltung von Dec auf Fokus über ein Relais am Userbus- damit können die Dec-Tasten auch zum Ansteueren eines Fokussier-Schrittmotors verwendet werden
Einstellung für Setup:
Keymode=3 (entspricht Control-Register Inhalt b'xx1101xx')
Tempo bei Schalterstellung "Tracking on" = "MaxSpeed"
Tempo bei Schalterstellung "Tracking off" = "Rate"
Diese Platine ist in der Nähe des Dec-Motors angebracht und benötigt (neben den üblichen Versorgungsleitungen) nur das Taktsignal des Userbusses (zur Erinnerung: im Takt- Signal sind sowohl die LCD als auch die SerOut-Signale codiert). Die Rückkopplung von Qh' auf RClk sorgt dafür, dass nur für diesen Port bestimmte SerOut-Kommandos übernommen werden - Signale für das LCD werden ignoriert (siehe auch Beschreibung der LCD-Handbox, bei der im Gegenzug die SerOut-Kommandos ignoriert werden). Zur Verbesserung der Störsicherheit kann in den SClk-Zweig ein weiteres RC-Glied (z.B. 4k7/39pF) eingefügt werden. Weiterhin sollte sichergestellt werden, dass in die Taktleitung keine Störstrahlung von den Motorzuleitungen ("PhaseA/B") eingekoppelt wird (z.B. Abschirmung, geeignete Masse-Auslegung, ...).

Auf der Platine befinden sich 2 Mini-Relais (2x um), mit Hilfe derer die Phasensignale des Motortreibers B (Hinweis: Treiber A steuert RA) auf bis zu 3 verschiedene Schrittmotoren gelegt werden können - derzeit werden nur Dec und Fokussierer verwendet. Weitere 4 Logiksignale (Ausgänge Qb..Qe) stehen an einer Ausgangsbuchse zur freien Verfügung und können z.B. zur CCD-Steuerung eingesetzt werden.
Das Controller-Kommando zum Setzen der Relais- und Logiksignale ist unter "Steuerung durch RS232...", "2 Byte Commands" beschrieben.
Derzeit laufen Tests an einer 'kleinen' Montierung.
Der Controller kann derzeit ohne externe Rechnerunterstützung noch keine Alt-Az-Montierungen (z.B. Dobson) antreiben. Er ist von den Schnittstellen allerdings schon dafür ausgelegt, durch einen zweiten Controller ergänzt zu werden, der die Koordinatenumrechnung (incl. initialem Alignment) durchführt. Damit wären rechenintensive (Koordinatenberechnung) und zeitkritische (Motorsteuerung) Aufgaben auf zwei Prozessoren aufgeteilt. Die Ansteuerung einer Handsteuerbox mit Tasten, Drehgebern und LCD-Ausgabe ist bereits über den beschriebenen Userbus realisiert und kann direkt übernommen werden. Mit den 4 ansteuerbaren Motoren ließen sich Höhe, Azimut, Bildfelddrehung und Fokus steuern.
Die Treiberplatine sollte um eine kleine Boosterschaltung erweitert werden, die aus 12V eine Betriebsspannung von bis zu 40V erzeugt. Damit liese sich die hohe mögliche Taktgeschwindigkeit des Controllers auch mit einfachen Schrittmotoren voll ausnützen. Zudem könnte damit der derzeit etwas unbefriedigende Anschluss der Versorgungsspannung an den Freilaufdioden besser gelöst werden. Das Gehäuse wird dadurch um ca. 2cm länger.
Handboxen und Relaisplatine sind derzeit noch in 'Wildwestverdrahtung' ausgeführt. Ein sauberer Platinenentwurf wäre schön.
Umsetzung der Steuerung auf eine größeren Controller (z.B. ATMega), damit können einige Beschränkungen entfallen. Allerdings ist dann das Gehäuse nicht mehr so kompakt bzw. ist SMD Löten angesagt, was nicht jedermanns Sache ist.
Wer gerne einen großzügigeren Schaltungsaufbau möchte ("Elektor-Lösung": maximal 1 Transistor und 3 Widerstände verteilt auf einer Europlatine, die ganze Schaltung dann im 19"-Schrank ;-) ) kann auch gerne ein Redesign durchführen. Das Layout stelle ich dann hier als Alternativlösung bereit. Ich persönlich hab's aber lieber klein und fein ...
Verschiedentlich wurde angeregt, USB statt RS232 zu verwenden, da viele Laptops keine Serielle Schnittstelle mehr besitzen. Hiefür gibt es einfach zu verwendende fertige Konverter, meines Wissens aber nur als SMD-Chips. Ich habe einen externen Konverter im Einsatz, der nur ein paar Euro gekostet hat.
Die
Treibersoftware basiert derzeit noch auf ASCOM V3.0. Zum Einarbeiten in
ASCOM V4.0 und Konvertierung der Treiber habe ich leider grad keine Zeit.
Nachtrag: ich habe mal kurz in ASCOM V4.1 reingeschaut, eigentlich nix
dramatisch Neues -> mein Treiber für ASCOM V4.1 steht zum Download
bereit :-). Das wär also schon mal erledigt...
....
Es gibt also noch viel zu tun...
Die beschriebene Steuerung kann gerne nachgebaut werden (etwas Elektronik- und Löterfahrung ist empfehlenswert), ich werde im Rahmen meiner Möglichkeiten auch gerne Hilfestellung geben (aber bitte keine 24h Hotline erwarten...).
Hier können auch Source-Code und Binärdateien zum selbst Programmieren kostenlos heruntergeladen werden.
Hinweis: Im Fall von bereits vorhandenen Montierungen bitte die Anforderungen beachten:
Begrenzung der Schrittzahl auf 262140 Vollschritte/(Teleskopdrehung 360°)
Anzahl der Vollschritte ganzzahlig für 90° Teleskopdrehung
Mir ist bewusst, das das ganze Projekt sicher nicht in allen Möglichkeiten auf Anhieb durchschaut werden kann. Dafür bietet der Controller zu viele Konfigurations- und Anwendungsmöglichkeiten für fast alles was irgendwie mit Schrittmotoren gemacht werden kann. Manches läuft schon zuverlässig, andere Dinge sind im Prototypstadium oder sind erst angedacht. Weitere Lösungen, Ideen, Hilfen, Fragen, was auch immer, sind gerne willkommen, einfach mal eine E-Mail an die unten angegebene Adresse senden!
Dr. Karl-Heinz Schweikert, Stuttgart
![]()
Mehrere wagemutige und unerschrockene Bastler haben sich an einen Nachbau gewagt. An dieser Stelle möchte ich mich bedanken für viele Rückmeldungen mit Kommentaren, Fehler-Reports, usw. bis hin zur Mithilfe bei der Erstellung von wichtigen Daten.
Im folgenden beginne ich eine (sicherlich noch wachsende) Zusammenstellung von Links auf nützliche und informative Seiten. Zweifellos handelt es sich bei den Autoren ohne Ausnahme um nette und integre Zeitgenossen, trotzdem übernehme ich keine Verantwortung für die verlinkten Inhalte, blablabla...
Stefan Huskamp (http://home.arcor.de/astronomismus/) hat die µstic-Steuerung erfolgreich aufgebaut und eine Menge detaillierte Informationen und ergänzende Hinweise bereitgestellt.
Pit aus Duisburg hat inzwischen ein Layout für die 4-Motor Multiplexversion erstellt. Die aktuelle Eagle-Datei hier zum Download (zip, 23kB)
Das Layout integriert den Prozessorteil (incl. Multiplex-Latches) mit Treibern für 4 Motoren auf einer Platine:

(Die Liste wird gerne fortgesetzt...)