This is an old revision of the document!


Table of Contents

SChrittmotor

Necessary knowledge: [HW] Motor Module, [AVR] Digital Inputs/Outputs, [LIB] Motors

Theorie

Stepper-motor

Schrittmotoren können generell in unipolare und bipolare Schrittmotoren unterteilt werden. Unipolare Schrittmotoren haben charakteristische Windungen welche die zwei Spulen in vier unterteilen. Schrittmotoren haben keine eingebauten Bürsten oder Elektronik, d.h. jegliche Kommunikation muss extern erfolgen. Der am meisten benuzte Kommutationstyp ist der “open-loop” Modus: der Der Schrittmotortreiber lädt die Spulen nach einem bestimmten Muster, nutzt aber keine Feedback. Schritte können so verpasst werden falls der Motorstab ein Drehmomentüberladung hat. Verpasste Schritte verursachen ungenaue Positionierung. Bipolare Schrittmotoren haben normalerweise vier Drähte und zwei separate Spulen im inneren; sie haben viel gemein mit den unipolaren Schrittmotoren. Unipolare Schrittmotoren können als bipolare Schrittmotoren genutzt werden, aber nicht umgekehrt.

Schrittmotoren werden oft in Applikationen genutzt welche Genauigkeit benötigen. Anders als Gleichstrommotoren haben Schrittmotoren weder Bürsten, noch Kommutatoren - sie haben unabhänigge Spulen, welche durch externe Elektronik (Treiber) angetrieben werden. Um den Rotor zu rotieren werden die Spulen Schritt für Schritt gleichgerichtet werden, ohne Feedback. Das ist der Nachteil des Schrittmotors - bei mechanischer Überladung, wenn der Rotor nicht rotiert, kommen die Schritte durcheinander und die Bewegung wird ungenau. Zwei Typen von Schrittmotoren werden an den Spulen unterschieden: Unipolare und bipolare Schrittmotoren. Durch Aufbau werden drei zusätzliche Segemente bedacht:

    
* Reluktanzschrittmotor (hohe Genauigkeit, wenig Drehmoment, niedriger Preis)
* Permanentmagnetschrittmotor (niedrige Genauigkeit,hohes Drehmoment, niedriger Preis)
* Hybrider Schrittmotor (hohe Genauigkeit, hohes Drehmoment, hoher Preis)

Beim Reluktanzschrittmotor besteht der Rotor aus einem gezahnten Weicheisenkern und Rotor. Die größte Zugkraft entsteht wenn die Zähne beider Seiten sich gegenseitig Abdecken. Im Permanentmagnetschrittmotorsind, wie der Name schon sagt, Permanentmagneten welche sich je nach Polarität der Wicklung orientieren. Im hybriden Schrittmotor werden beiden Techniken genutzt.

Je nach Modell des Schrittmotors, brauch eine vollständige Rotation (360°) des Rotors hunderte von Schritten von Stromwendungen. Für stabile und weiche Bewegungen, wird eine bestimmte Kontrollelektronik genutzt, welche den Motor je nach Parameter kontrolliert (Trägheit des Rotors, Drehmoment, Resonanz etc.). Zusätzlich zur Kontrollelektronik werden verschiedene Methoden zur Stromwendung genutzt. Eine Wicklung in einer Reihe zu kommutieren heisst “Full Step Drive” und falls der Antrieb sich zwischen zwei Wicklungen ändert heisst das “Half Stepping”. “Cosine Micro Stepping” wird auch genutzt um eine sehr genaue und weche Kontrolle zu ermöglichen.

 

Unipolare Schrittmotoren

Die Wicklungen eines unipolaren Schrittmotors

unipolare Schrittmotoren haben 5 oder 6 Anschlüsse. Je nach Aufbau des Motors werden nur ¼ der Wicklungen aktiviert. Vcc Leitungen werden normalerweise an der positiven Stromquelle angeschlossen. Während der Kommutation sind die Enden von den Wicklungen 1a, 1b, 2a and 2b über Transistoren (Transistorarray des Motorbards ULN2803) nur an der Erde angeschlossen und das macht die Kontrollelektronik recht einfach.

Bipolare Schrittmotoren

Die Wicklungen eines Bipolaren Schrittmotors.

Bipolare Schrittmotoren unterscheiden sich von Unipolaren, da sie die Polarität ihrer Wicklungen während der Kommutation verändern. Die Hälfte der Wicklungen wird gleichzeitig Aktiviert, daher haben sie eine höhere Effektivität als unipolare Schrittmotoren. Bipolare Schrittmotoren haben 4 Anschlüsse, jeder wird an eine andere H-Brückenschaltung angeschlossen,(Treiber L293 am Motorboard). Während der Kommutation legen die H-Brückenschaltungen entweder negative oder positive Spannung am Ende der Wicklung an. Unipolare Motoren können mit einem biipolaren Treiber gestartet werden: einfach die Leitungen 1a, 1b, 2a und 2b der Wicklungen anschließen (Vcc wird nicht angeschlossen).

Die Kommutation die notwendig ist um Schrittmotoren mit Wicklungen im Full Step Mode und im Half Step Mode zu kontrollieren wird in der Tabelle unhalb angegeben. Da in Treibern für unipolare Schrittmotoren nur das öffnen von Transistoren stattfindet, werden die Schritte mit 0 und 1 markiert. Für einen bipolaren Schrittmotor brauch man mehr Signale und daher wird jeder Schritt mit der Polarität des Treiberoutputs markiert:

Unipolar Bipolar
Step 1A 2A 1B 2B 1A 2A 1B 2B
Full step
1 1 0 0 0 + - - -
2 0 1 0 0 - + - -
3 0 0 1 0 - - + -
4 0 0 0 1 - - - +
Half step
1 1 0 0 0 + - - -
2 1 1 0 0 + + - -
3 0 1 0 0 - + - -
4 0 1 1 0 - + + -
5 0 0 1 0 - - + -
6 0 0 1 1 - - + +
7 0 0 0 1 - - - +
8 1 0 0 1 + - - +

Übung

Das Ziel dieser Aufgabe ist es einen bipolaren Schrittmotore zu starten, welcher mit einem unipolaren Schrittmotor getauscht werden kann. Es gibt Treiber, auf dem Motorboard, welche durch 4 Input-Pins vom Microcontroller kontrolliert werden. Jeder Pin gibt die Polarität einer Wicklung wieder. Die Spannung am Ende der Wicklung ist positiv wenn der Pin high ist und negativ wenn der Pin low ist. Für die Enden 1A, 1B, 2A und 2B sind die Pins PB0, PB1, PB2 and PB3 am Microcontroller zuständig.

Es gibt die Funktion bipolar_init in der HomeLab Library um bipolare Schrittmotoren zu kontrollieren, die Pins werden als Output gesetzt und die Funktion bipolar_halfstep führt Umdrehungen mit bestimmten Halfsteps aus. Die Kommutation wird mit der Tabelle der Half Steps gemacht, aber es werden komplexere Bitoperationen genutzt.

//
// Preparing for controlling the bipolar stepper motor.
//
void bipolar_init(void)
{
	DDRB |= 0x0F;
	PORTB &= 0xF0;
}
 
//
// Moving the bipolar stepper motor by half steps.
//
void bipolar_halfstep(signed char dir,
	unsigned short num_steps, unsigned char speed)
{
	unsigned short i;
	unsigned char pattern, state1 = 0, state2 = 1;
 
	// Insuring the direction +- 1
	dir = ((dir < 0) ? -1 : +1);
 
	// Execution of half-steps.
	for (i = 0; i < num_steps; i++)
	{		
		state1 += dir;
		state2 += dir;
 
		// Creating the pattern.
		pattern = (1 << ((state1 % 8) >> 1)) |
		          (1 << ((state2 % 8) >> 1));
 
		// Setting the output.
		PORTB = (PORTB & 0xF0) | (pattern & 0x0F);
 
		// Taking a break to wait for executing the step.
		sw_delay_ms(speed);
	}
 
	// Stopping the motor.
	PORTB &= 0xF0;
}

Die Funktion wird durch ein Beispielprogramm demonstriert, welches den Motor abwechselnd alle 200 Halfsteps in eine Richtung rotieren lässt. Die Geschwindigkeit der Rotation ist durch die länge der Pausen zwischen den Schritten definiert. Wenn die Pause zu kurz ist, kann der Motor sich aufgrund der Trägheit nicht drehen.

//
// The test program for the bipolar stepper motor of the motor's
//module of the HomeLab.
//
#include <homelab/module/motors.h>
 
//
// Main program.
//
int main(void)
{
	// Set up of the motor.
	bipolar_init();
 
	// Endless loop.
	while (true)
	{
		// Turning the rotor 200 half steps to one direction at speed of 30 ms/step.
		bipolar_halfstep(+1, 200, 30);
 
		// Turning 200 half steps to the other direction at speed 30 ms/step.
		bipolar_halfstep(-1, 200, 30);
	}
}
de/examples/motor/stepper.1290444598.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0