Schrittmotorsteuerung mit dem Attiny13

von Hermann Nieder
ELO 2009
Elektronik-Labor  Labortagebuch  ELO  

 In verschiedenen Fachbüchern, Fachzeitschriften sowie auf Internetseiten ist der grundsätzliche Aufbau eines Schrittmotors dargestellt, und seine Wirkungsweise wird an einem Modell mit zwei Wicklungen auf U-förmigen Eisenkernen, einer Kompassscheibe oder -nadel als „Läufer" und Kreuzschaltern bzw. Wechselschaltern beschrieben. Diese sind zu betätigen, damit sich der „Läufer" um einen bestimmten Winkel, den Schrittwinkel dreht. Ich ließ mich von den oben erwähnten Ausführungen und Schaltplänen anregen und baute mir bereits im vergangenen Jahr selbst ein solches Modell, das im folgenden Bild dargestellt ist. Damit wollte ich nun experimentieren, um die Erfahrungen und Ergebnisse für die Schrittmotorsteuerung mit dem Attiny13 nutzen zu können.

Die beiden als Kreuzschalter dienenden Kippschalter besitzen anders als diejenigen in den oben erwähnten Darstellungen auch eine AUS-Stellung in der Mitte, um auch jeweils nur eine Wicklung ein- und ausschalten zu können. Sie sind aus zwei gleichen Teilwicklungen zusammengesetzt, deren Verbindungspunkt mit dem Anschluss M1 oben bzw. M2 unten verbunden ist.

In der dargestellten Position des unteren der beiden Kreuzschalter fließt der Strom nur in einer Wicklung, und der „Läufer" stellt sich entsprechend ihrem Magnetfeld ein, während er sich bei der oberen Position des Schalters in die entgegengesetzte Richtung dreht. Wird ausschließlich der obere der beiden Kreuzschalter betätigt, wird die Stellung der Kompassnadel nur durch das Magnetfeld der mit ihm verbundenen Wicklung beeinflusst. Bei Verwendung beider Schalter überlagern sich die Magnetfelder beider Wicklungen, und der „Läufer" nimmt je nach Stromrichtung in ihnen eine der vier möglichen diagonalen Positionen ein. Die Schalter sorgen dafür, dass in den Wicklungen wie bei einem bipolaren Schrittmotor die Richtung des in ihnen fließenden Stromes und damit die Polarität der Magnetfelder geändert wird. Abwechselndes Betätigen führt zu einer schrittweisen Drehbewegung der Kompassnadel des Motormodells.

Die gleiche Stromrichtung und damit die gleiche Richtung des Magnetfeldes wie in den Bildern oben ergibt sich, wenn man den Anschluss 1 des Schalters anders als dargestellt statt mit dem Pluspol nun mit dem Minuspol der Spannungsquelle verbindet, während Anschluss 2 jetzt frei bleibt. Der Pluspol wird an den Verbindungspunkt M2 der beiden senkrecht angeordneten Teilwicklungen angeschlossen.

Der Kreuzschalter funktioniert nun wie ein Wechselschalter, der es möglich macht, die obere oder die untere der beiden Teilwicklungen einzuschalten, um eine Drehung der Kompassnadel in die im Bild dargestellte bzw. die dazu um 180° versetzte Position zu bewirken.
Werden beide Schalter als Wechselschalter angeschlossen und dann abwechselnd betätigt, wird der „Läufer" des Schrittmotormodells durch Einschalten der Teilwicklungen wie bei einem unipolaren Schrittmotor zu einer schrittweisen Drehung veranlasst.

Zum Betrieb des oben dargestellten Modells benötigte ich als „elektronischen Ersatz" für die beiden Kreuzschalter also ein IC, das bei Ansteuerung durch einen ATtiny13 eine Stromrichtungsänderung in den an seinen Ausgängen angeschlossenen Wicklungen bewirkt.

 

 

Der Baustein L293D ist für diese Anforderungen geeignet, wie ich aus seinen Datenblättern herausfand. Die Pins des Mikrocontrollers musste ich nach dem Schaltplan mit diesem IC verbinden, an dessen Ausgänge die beiden Wicklungen des Schrittmotormodells (A ..D) angeschlossen wurden. Sollen wie bei einem unipolaren Schrittmotor jeweils Teilwicklungen eingeschaltet werden können, eignet sich als „elektronischer Ersatz" der Baustein ULN2803, den ich dem Schaltpan entsprechend an den Attiny13 anschloss. M1, M2 sowie Anschluss 10 musste ich in diesem Fall mit dem Pluspol der Spannungsquelle mit hier z. B. 12 V Ausgangsspannung verbinden, während die Enden der Wicklungen an die Ausgänge (A .. D) des Ics angeschlossen wurden.Der Baustein ULN2803 besitzt acht Eingänge und acht Ausgänge, die ich nur zur Hälfte benötigte, wie es dem Schaltplan zu entnehmen ist. Ich verwendete auf der Seite des Attiny13 die Portleitungen PB0, PB1, PB3 sowie PB4 zur Ansteuerung des L293D bzw. des ULN2803.


Am PC konnte ich mit der Software des Lernpakets Mikrocontroller [1] Zahlenwerte eingeben und mir die dazu gehörenden Positionen des „Läufers" des Motormodells jeweils skizzieren. Mit dem Schrittmotormodell und der genannten Software fand ich heraus, dass für eine vollständige Drehung der Kompassnadel nacheinander 1, 4, 2, 8, 1 usw. einzugeben ist, für den Fall, dass jeweils nur eine Wicklung eingeschaltet ist, bzw. 5, 6, 10, 9, 5 usw. für den gleichzeitigen Betrieb zweier Wicklungen. Der „Läufer" des Motormodells drehte sich in beiden Fällen gegenüber der vorherigen Position jeweils um einen Schrittwinkel von 90° weiter und um 45°, als ich nacheinander 1, 5, 4, 6, 2, 10, 8, 9, 1 usw. am PC eintippte und an den Attiny13 zur Ansteuerung des L293D bzw. des ULN2803 übertrug. Für eine Drehrichtungsänderung musste ich die oben genannten Zahlen jeweils nacheinander in umgekehrter Reihenfolge eingeben, also z.B. für einen Schrittwinkel von 45° 1,9,8,10,2,6,4,5,1 usw. Diese Ergebnisse verwendete ich für die Gestaltung des BASCOM-AVR-Programms für den Attiny13. Hier ist dazu ein Auszug aus dem Programmlisting: 'step_mot2.bas


Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.3 = Output
Config Portb.4 = Output
Open "comb.2:9600,8,n,1,inverted" For Input As #2
Dim B As Byte
Anfang:
Portb.0 = 0 ‚ Grundstellung, alle Bits gelöscht
Portb.1 = 0
Portb.3 = 0
Portb.4 = 0
Weiter:
Do
Get #2 , B
Select Case B ' Fallunterscheidung
Case 1 : Gosub Eins
Case 2 : Gosub Zwei
...
Case 15 : Goto Anfang
Case Else : Goto Weiter
End Select
Loop
Eins:
Portb.0 = 1 ' Bit 1 gesetzt
Portb.1 = 0
Portb.3 = 0
Portb.4 = 0
Return
Zwei: ‚ Bit 2 gesetzt
Portb.0 = 0
Portb.1 = 1
Portb.3 = 0
Portb.4 = 0
Return
...

Den ursprünglichen Aufbau des Schrittmotormodells musste ich um eine 16-polige IC-Fassung mit den für den Anschluss erforderlichen Verbindungsleitungen erweitern. Für die Schaltung auf dem kleinen Steckboard mit dem Attiny13 und dem IC L293D sowie für diejenige auf einem anderen mit dem Mikrocontroller und dem Baustein ULN2803 fertigte ich jeweils eine Adapterleitung an, um die Verbindung mit dem Schrittmotormodell möglichst schnell herstellen zu können. Im Bild wurde gerade der Zahlenwert 5 vom PC an den Mikrocontroller übertragen

Nachdem diese Experimente mit einem Baustein L293D sowie einem IC ULN2803 und dem Schrittmotormodell erfolgreich verlaufen waren, konnte ich auch vorhandene richtige bipolare und unipolare Schrittmotoren anschließen und über den Attiny13 aktivieren. In einigen Fällen musste ich wegen der Motordaten die Betriebsspannung des L293D auf 5 V herabsetzen.

Im folgenden Bild ist gerade ein bipolarer Schrittmotor an ein solches IC angeschlossen. An die Ausgänge des Mikrocontrollers sind vier LEDs mit einem Vorwiderstand von je 4,7 kOhm nach Masse angeschlossen, die dem Bitmuster entsprechend leuchten. Die untere der vier Leuchtdioden ist Bit 0 und die obere Bit 3 zugeordnet. Im Bild wurde gerade der Wert 9 an den Attiny13 übertragen.



Wirkliche Schrittmotoren sind wesentlich aufwändiger aufgebaut als das oben dargestellte Motormodell, da sie z. B. bis zu 200 Schritte pro Umdrehung ausführen können. Das bisherige Programm genügte nun nicht mehr, da es zu umständlich war, für eine fortwährende Drehung des Läufers nacheinander die in den oben beschriebenen Experimenten ermittelten Zahlenwerte am PC einzutippen, also musste nun das BASCOM-AVR-Programm für den Attiny13 wesentlich erweitert werden. Dies ist dazu ein Auszug aus dem Programmlisting:


$regfile = "attiny13.dat"
$crystal = 1200000
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.3 = Output
Config Portb.4 = Output
Open "comb.2:9600,8,n,1,inverted" For Input As #2
Dim B As Byte
Dim N As Byte
Dim Z As Byte
Dim C As Byte
Dim W As Byte
Anfang:
Portb.0 = 0
Portb.1 = 0
Portb.3 = 0
Portb.4 = 0
Do
Get #2 , B
Select Case B
Case 1 : Gosub Rechtslauf ' Fallunterscheidung Rechtslauf /Linkslauf
Case 2 : Gosub Linkslauf
Case Else : Goto Start
End Select
Loop
Start:
Portb.0 = 0
Portb.1 = 0
Portb.3 = 0
Portb.4 = 0
Get #2 , Z
Get #2 , W
Goto Anfang
Rechtslauf:
Get #2 , Z ' Anzahl vier nacheinander auszugebender Bitmuster
Get #2 , W ' Faktor für Wartezeit
For C = 0 To Z
Portb.0 = 1
Portb.1 = 0
Portb.3 = 1
Portb.4 = 0
Gosub Warten ´ Sprung in Warteschleife
Portb.0 = 0
Portb.1 = 1
Portb.3 = 1
Portb.4 = 0
...
Warten: ´ Wartezeit
For N = 0 To W
Waitms 5
Next N
Return


Download: Stepper.zip

 

 


Elektronik-Labor  Labortagebuch  ELO