Home

   Alignment

    >  2-Star-Alignment

    >  Parallaktisches Alignment

    >  Scheiner-Methode

   Schrittmotor-Steuerung

   >  Controller Elektronik

    >  ASCOM Treiber Download

    >  Verwendung an Astro3-Montierung

    >  Controller Code Download

   Optik

   Raytracing

Gemeinschaft Bad Cannstatt

   > Veranstaltungen

 

Karl-Heinz Schweikert   

Home   

Stand: 22. Sep 2010

 

Schrittmotoren-Steuerung

Ü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

 

Meine Microstep Schrittmotor-Steuerung

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)

 

'Single Chip' Lösung::

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

 

'Multiplex' Lösung::

Abb.: Blockschaltbild für 'Multiplex' Betrieb (schematische Darstellung)

Direkt-Ansteuerung

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

 

Steuerung über RS232 Kommandos:

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

 2 Byte Commands:

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 
RS, Clock und 4x Code/Data -> siehe LCD Datenblatt HD44780)

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:
MotorA: east/west, MotorB: north/south, MotorC: forward/reverse, MotorD: in/out

':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)

 

Wichtige SRAM Adressen: (rw=read/write, r=read only)

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

 

Setup

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)

 

User-Bus

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...)

 

Aufbau und Platinenlayout

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.

Controllerplatine

Die Schaltung enthält nur einige wenige Funktionsgruppen::

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

 

Treiberplatine

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...

Downloads:

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) .

 

Ansteuerung

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:

Einstellung für Setup: 

 

Relaisplatine (6bit Outport)

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.

 

 

Test am Lidlscope (Astro 3)

Derzeit laufen Tests an einer 'kleinen' Montierung. 

 

 

Zukünftige Erweiterungen

Es gibt also noch viel zu tun...

 

 

Kontakt

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:

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

Links

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...)

Home                  Top