Pfad: Home => AVR-Übersicht => Anwendungen => Steppermotor-Steuerung    (This page in English: Flag EN) Logo
Schrittmotor-Steuerung klein

Schrittmotor-Steuerung mit ATtiny13

Diese Anwendung eines AVR beschreibt die Steuerung eines Schrittmotors mit einem ATMEL ATtiny13 mit folgenden Eigenschaften:
Eine alternative Schrittmotorsteuerung mit dem ATtiny24 für den 5 V-Schrittmotor 28BYJ-48, die zwischen zwei einstellbaren Positionen um bis zu +/-90° hin- und herfährt, siehe diese Seite.

0. Inhalt

1. Hardware

Schaltung Die Hardware besteht aus dem AVR-Prozessor ATtiny13, einem sechspoligen Standard-In-System-Programmieranschluss (ISP), einem 7-Bit-Treiber ULN2003, der Stromversorgung für den Prozessor und der Filterung der Eingangsspannung. Das Schaltbild (Anklicken für höher aufgelöstes PDF-Format):

Schaltbild

1.1 Prozessorteil

Der Prozessor ATtiny13 hat folgende Funktionen.
Die Betriebsspannung von 5 V wird über die Pins 8 (+5 V) und 4 (0 V) zugeführt und mit einem Keramikkondensator von 100 nF abgeblockt.
Pin 1 (= RESET-Eingang) liegt über einen Widerstand von 10 kOhm an der positiven Betriebsspannung.
Der Eingang PB4 (Pin 3) misst über einen internen AD-Wandler die anliegende Analogspannung durch Vergleich mit der Betriebsspannung. Die Software errechnet daraus die Soll-Stellung des Schrittmotors.
Die Ausgänge PB0 bis PB3 (Pins 5, 6, 7 und 2) steuern die Treiber für die Schrittmotor-Magnete an.

1.2 ISP-Interface

Das ISP-Interface dient der Programmierung des AVR in der fertig aufgebauten Schaltung. Die Beschaltung entspricht dem ATMEL-Standard.
Für ISP verwendet werden die Portbits PB2 (SCK, Pin 7), PB1 (MISO, Pin 6), PB0 (MOSI, Pin 5) sowie der RESET an Pin 1 verwendet. Die Betriebsspannungsanschl sse VTG und GND versorgen eventuell das externe ISP-Interface, hat dies eine eigene Versorgung ist VTG offen zu lassen.

1.3 Spulentreiber ULN2003A

Die Antriebsströme für die Magnete des Schrittmotors werden vom Treiberbaustein ULN2003A gesteuert. Die Ausgänge mit Open-Collector-Treibertransistoren vertragen hohe Spannungen von 50 V, Ströme bis 500 mA und schalten die einzelnen Magnete des Motors ein und aus.
Induktive Überspannungen an den Kollektoren werden über die eingebauten Dioden am Anschluss CD kurzgeschlossen. Der hier verwendete Motor wird mit 12 V Betriebsspannung betrieben und zieht pro Magnet ca. 150 mA Strom (da im Betrieb immer zwei Magnete angesteuert werden zusammen 300 mA).
Die Eingänge I7..I4 des Treiberbausteins werden vom Prozessor angesteuert (aktiv high, logisch 1 schaltet Magnet an).

1.4 Stromversorgung

Bei der Stromversorgung auf der Steuerung wurde auf eine hohe Festigkeit gegenüber den Schaltströmen der Magnete gelegt. Die Versorgung der Magnete erfolgt gegen Verpolung über eine Diode 1N4007 mit einem Glättungskondensator von 100 µF.
Der Prozessor wird über eine eigene 5 V-Versorgung betrieben, die mit einer Diode 1N4007 und einem Glättungskondensator von 100 µF aus der 12 V-Versorgung abgeleitet ist. Der Spannungsregler 78L05 ist mit Tantalkondensatoren von 1 µF bzw. 2,2 µF gegen Schwingungen gesichert.
Die Versorgung der Steuerung erfolgt über ein vieradriges Kabel aus einem 12 V-Netzteil (Klick auf Bild fürt zu höher aufgelöstem PDF-Dokument).

Schaltbild Versorgung

Die Stromversorgung ist auf einer kleinen Leiterplatte aufgebaut.

Bild Stromversorgung

2. Software

Die Software für den ATtiny13 ist in Assembler geschrieben, der Quellcode ist hier erhältlich.

2.1 Funktionsweise

Die Software besteht aus folgenden Grundelementen:

Reset- und Interruptvektor-Tabelle

Die Vektortabelle verzweigt bei einem Reset zum Hauptprogramm, bei den beiden Interrupts des Timer/Counters und des AD-Wandlers zu den entsprechenden Behandlungsroutinen. Nicht verwendete Vektoren sind mit RETI abgeschlossen.

Iniitierung Anfangswerte

Die Initiierung der Anfangswerte erfolgt ab dem Label "Main:". Hier wird

Initiierung Hardware

Die Initiierung der Hardware umfasst:

AD-Wandler-Messung der Eingangsspannung

Der AD-Wandler wandelt die Eingangsspannung an Pin 3 (PB4, ADC2) in einen Wert zwischen 0..1023 um und löst nach jedem Abschluss der Wandlung einen Interrupt aus. Die Interrupt-Behandlungsroutine ab dem Label "AdcInt:" holt das Ergebnis von den Ports ADCL und ADCH ab und summiert es 16-bittig zu dem Registerpaar rAdcH:rAdcL. Der Zähler rAdc wird um eins herangezählt. Erreicht er Null, dann wird die bis dahin erreichte Summe in das Registerpaar rAdcRH:rAdcRL kopiert, die Summe wieder auf Null gesetzt, der Zähler wieder auf den Anfangswert 64 und die Flagge bAdc im Flaggenregister gesetzt. Abschließend wird der AD-Wandler erneut gestartet.
Der Summiervorgang bewirkt, dass jeweils 64 Messwerte gemittelt werden, wodurch absichtlich der Ablauf verlangsamt und die Messung von zufälligen und durch Einstreuung verursachten Schwankungen unabhängiger wird. Der resultierende Summenwert liegt zwischen Null und 65535 (0x0000..0xFFFF).

Umrechnung des Messergebnisses in den Sollwert

Ist nach einem Interrupt die Flagge bAdc im Flaggenregister gesetzt, wird die Umrechnungsroutine ab dem Label "AdcRdy:" aufgerufen. Diese

Schrittsteuerung und Ausgabe an den Schrittmotor

Die Schrittsteuerung und die Ausgabe an den Schrittmotor erfolgt in der Interrupt-Behandlungsroutine des Counters ab dem Label "Tc0IntCA:".
Zunächst wird der Ist-Wert mit dem Soll-Wert des Schrittmotors 16-bittig verglichen. Sind beide gleich, dann wird nach dem Label "Tc0IntCA0:" verzweigt. Hier wird der Verzögerungszähler im Registerpaar X um eins verringert. Ist er Null, werden die Magnete des Schrittmotors durch Schreiben von Null auf den Ausgabeport abgeschaltet, der Verzögerungszähler wieder auf seinen Anfangswert gesetzt und die Behandlungsroutine beendet. Ist der Ist- und Sollwert nicht gleich, wird der Ist-Wert um einen Schritt vor- bzw. rückwärts verändert. Aus dem Ist-Wert wird der nächste Schritt des Schrittmotors ermittelt: Die Tabelle "SmTab:" mit den beiden Worten 0x0605 und 0x090A enthält die Schrittfolge des Schrittmotors in der Reihenfolge Anmerkung: Sind die Spulen Q1..Q4 des Schrittmotors in anderer Reihenfolge an die Treiberausgänge angeschlossen, genügt es, diese Tabelle entsprechend umzustellen (siehe unten). In der Behandlungsroutine wird abschließend der Verzögerungszähler wieder auf seinen Anfangswert gesetzt, um die Magnete für die die voreingestellte Zeit im aktiven Zustand zu halten.

2.2 Einstellungen vor dem Assemblieren

Im Assembler-Quelltext sind folgende Einstellungen vor dem Assemblieren vorzunehmen: Die Anschlussreihenfolge der vier Magnete an der Buchse J2 ist nicht bei allen Schrittmotoren gleich. Wird eine andere Anschlussfolge der Magnete des Schrittmotors Q1 bis Q4 verwendet oder soll die Drehrichtung des Motors umgekehrt werden, muss nur die Tabelle SmTab: angepasst werden.
Die bestehende Tabelle für den KP4M4-001 ist folgendermaßen aufgebaut:

MagnetFarbePortbitStep 1Step 2Step3Step 4
Q1rotPB30011
Q2grünPB10110
Q3braunPB21100
Q4weißPB01001


Daraus ergeben sich folgende Kodierungen:

StepMagnetPortbitByteWord
Q4Q3Q2Q1PB3PB2PB1PB0
1110001010x050x0605
2011001100x06
3001110100x0A0x090A
4100110010x09


Stepper

2.3 Kommentierter Quellcode

Der Quellcode in .asm-Textformat ist hier erhältlich, in .html-Format hier.

©2007-2018 by http://www.avr-asm-tutorial.net