Links:
http://www.fh-aalen.de/dti/doku_stp/stp_doku.htm
http://rn-wissen.de/wiki/index.php/Schrittmotoren
Bei Wikipedia fand ich eine tolle Animation zum Thema "Reluktanz-Schrittmotor":
http://de.wikipedia.org/wiki/Schrittmotor
Hier erkennt man ziemlich gut, wie der geteilte Anker (Noppen bzw. Zähne) die hohe Schrittzahl pro Umdrehung ermöglicht.
Eine weitere, ausführliche Abhandlung zu Schrittmotoren (mit Animation zum Halbschrittbetrieb eines unipolaren Schrittmotors) gibt es hier:
http://www.phyta.net/stepper.htm
Allgemeines
Schrittmotoren werden heute überall dort eingesetzt, wo eine exakte Positionierung erforderlich ist. Man findet sie beispielsweise in DVD-Laufwerken, Tintenstrahldruckern, Laserdruckern oder Kopiergeräten.
In der Automatisierungstechnik werden meist Schrittmotoren verwendet, um Werkzeugmaschinen zu steuern.
In modernen PKWs werden Schrittmotoren z.B. zur Betätigung der Klappen von Heizungs- und Klimaanlagen verwendet. In manchen Mittelklassewagen sind über 50 Schrittmotore verbaut!
"Schrittmotoren folgen im Prinzip exakt dem außen angelegten Feld und können ohne Sensoren zur Positionsrückmeldung (Encoder, Drehgeber oder ähnliches) genau betrieben werden. Sie zeigen damit ein ähnliches Verhalten wie Synchronmotoren, weisen aber in der Regel eine deutlich höhere Polpaarzahl auf. Daher können sie einfacher betrieben werden als beispielsweise Servomotoren (i. d. R. Gleichstrom- oder Synchronmotoren mit Positionsgeber), welche auf die gewünschte Position eingeregelt werden müssen. Für einen besonders homogenen Verlauf werden Schrittmotoren mit einem gleichförmigen Drehfeld angesteuert." (Quelle: Wikipedia)
Bauformen
Nach der mechanischen Konstruktion unterscheidet man
Eine detaillierte Beschreibung findet man bei Wikipedia.
Beschaltung
Bildquelle: Wikipedia
Ansteuerung mit Schaltern
Die unipolare Schaltung kann man real auf dem Steckbrett aufbauen und schafft es mit etwas Geschick, den (unipolaren) Schrittmotor anzusteuern, so dass er sich schrittweise bewegt.
Theoretisch geht dies auch mit dem bipolaren Schrittmotor - aber da ist schon etwas mehr Geschick erforderlich (8 Schalter)!
In der obigen Grafik des uinipolaren Schrittmotors gibt es die Schalter A, B, C und D.
Diese Schalter müssen in einem bestimmten Muster (teilweise gleichzeitig) gedrückt werden, um eine schrittweise Bewegung zu erzeugen.
Überlegen wir einmal, wie ein Drehfeld erzeugt werden kann, das den Rotor "mitnimmt"
Der hier dargestellte Vollschrittbetrieb ist relativ leicht zu verstehen und besteht aus nur 4 Schritten. In der Praxis haben die meisten Schrittmotore aber mehr Pole bzw. Wicklungen und brauchen für eine Umdehung bspw. 200 Schritte (1 Schritt = 1,8 Grad) oder 400 Schritte (1 Schritt 0,9 Grad).
Aber auch Schrittmotore mit 7,5 Grad = 48 Schritte oder 15 Grad = 24 Schritte sind erhältlich.
1. Schritt - Die Spule A und D werden eingeschaltet. Die beiden Südpole bzw. Nordpole ziehen den Rotor in die folgende Position:
2. Schritt - Spule A bleibt eingeschaltet und Spule C wird statt Spule D eingeschaltet. Das magnetische Feld dreht sich um 90 Grad gegen den Uhrzeigersinn. Der Rotor wird "mitgezogen":
3. Schritt - Nur die Spulen B und C sind eingeschaltet. Das magnetische Feld dreht sich wiederum um 90 Grad gegen den Uhrzeigersinn und bewegt so auch den Rotor.
4. Schritt (ohne Abbildung)- Nur die Spulen B und D sind eingeschaltet. Das magnetische Feld dreht sich wiederum um 90 Grad gegen den Uhrzeigersinn und bewegt den Rotor weiter.
Danach geht es wieder mit Schritt 1 los!
Ansteuerungstabelle:
Eingeschaltete Spulen = 1 Ausgeschaltete Spulen = 0
Schritt | A | B | C | D |
1 | 1 | 0 | 0 | 1 |
2 | 1 | 0 | 1 | 0 |
3 | 0 | 1 | 1 | 0 |
4 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 1 |
Diese Werte kann man direkt an 4 Portpins eines Mikrocontrollers oder an den DATA-Pins der parallelen Schnittstelle des PCs ausgeben.
Recycling von Schrittmotoren
Bei der Demontage einer alten elektronischen Schreibmaschine sind mir einige unipolare Schrittmotore in die Hand gefallen.
Messen Sie bei Recycling-Motoren vorher den ohmschen Widerstand der Schrittmotor-Wicklungen aus, falls kein Datenblatt vorliegt. Ältere unipolare Schrittmotore können in der Regel direkt (ohne Strombegrenzung) an 12 Volt angeschlossen werden, da sie meist relativ hochohmig sind (50 - 200 Ohm). Der hier von mir verwendete Schrittmotor stammt aus einer elektrischen Schreibmaschine Baujahr 1998 und besitzt pro Wicklung genau 50 Ohm. Daher stellt sich dann pro eingeschalteter Wicklung ein maximaler Strom I = 12 V / 50 V/A = 240 mA ein. Ein zur Ansteuerung geeigneter Transistor ist der BC337 mit 800 mA bzw. 625 mW.
Einfachste mögliche Hardware zur Ansteuerung unipolarer Schrittmotore mit dem PC
Alle Widerstände sind 3,3 KOhm und alle Dioden 1N4002.
Der Testaufbau wurde mit einem Bausatz "SUB-D Anschlussplatine" von www.pollin.de (Bestellnummer: 810 055) sowie einem kleinen Labor-Steckbrett realisiert.
Die Transistoren BC337 vertragen einen Kollektorstrom von 800 mA und sind daher bestens geeignet. Gemessen wurde nämlich ein Gesamt-Stromverbrauch in der Größenordnung von 150 mA. Das wäre für Transistoren wie BC546 oder BC548 schon etwas grenzwertig!
Die Freilaufdioden dürfen nicht vergessen werden, da hohe Induktionsspannungen an den Wicklungen auftreten.
Für eine professionelle Lösung würde man allerdings "schnelle" Dioden verwenden.
Siehe auch "Bauanleitung Schrittmotorcontroller".
Die Ansteuerung machen wir mit MS Visual C# 2008 über den Parallelport.
In MS Visual C# gestalten wir eine kleine Benutzeroberfläche mit "Windows Forms":
Für die Combobox müssen noch die Anzeigewerte eingetragen werden über "Eigenschaften - Auflistung":
Hier nun das C#-Programm:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices; // Für DLL-Import benötigt
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
// LPT1 bei meiner PCMCIA-Karte ist FEE8 HEX!
// Öffnne Systemsteuerung - System - Hardwaremanager und schaue nach!
public int LPT_PORT_ADRESS = 0;
public int[] BackwardStepArray = { 9, 10, 6, 5 }; // Bitmuster der Einzelschritte rückwärts
public int[] ForwardStepArray = { 5, 6, 10, 9 }; // Bitmuster der Einzelschritte vorwärts
public int StepCounter = 0; // Zum Abrufen der Werte aus dem StepArray
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
CParallelPort.Output(LPT_PORT_ADRESS, 0x00);
}
private void timer1_Tick(object sender, EventArgs e)
{
int Wert = ForwardStepArray[StepCounter]; // Auslesen eines Wertes
CParallelPort.Output(LPT_PORT_ADRESS, Wert); // Ausgabe an Parallelport
StepCounter++; // Schrittzähler erhöhen
// Insgesamt sind nur 4 Werte im Array
// Deshalb muss der StepCounter schließlich wieder auf Null gesetzt werden
if (StepCounter > 3)
{
StepCounter = 0;
}
}
// Timer1 Start
private void button4_Click(object sender, EventArgs e)
{
if (LPT_PORT_ADRESS == 0)
{
label3.Text = "Fehler: Bitte LPT-Port auswählen!";
}
else
{
label3.Text = "Alles okay!";
}
timer1.Enabled = true;
}
// Timer1 Stopp
private void button5_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}
private void label2_Click(object sender, EventArgs e)
{
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// LPT_PORT_ADRESS =
switch (comboBox1.SelectedIndex)
{
case 0: LPT_PORT_ADRESS=0x378;
break;
case 1: LPT_PORT_ADRESS = 0x278;
break;
case 2: LPT_PORT_ADRESS = 0xFEE8;
break;
}
}
private void button1_Click(object sender, EventArgs e)
{
int Ausgabewert = 0x9;
CParallelPort.Output(LPT_PORT_ADRESS, Ausgabewert); // Ausgabe an Parallelport
int Testwert = CParallelPort.Input(LPT_PORT_ADRESS); // Einlesn vom Parallelport
if (Ausgabewert == Testwert)
{
label3.Text = "Der gewählte Port existiert.";
CParallelPort.Output(LPT_PORT_ADRESS, 0x00); // Ausgabe an Parallelport / Zurücksetzen
}
else
{
label3.Text = "Fehler: Der gewählte Port existiert nicht!";
}
}
}
}
class CParallelPort
{
// inpout32.dll muss im /bin/ebug-Ordner vorhanden sein!
// Dieser Code funktioniert nur mit Windows XP
// Für Windows 7 wird eine 64-Bit-DLL inpoutx64.dll benötigt!
[DllImport("inpout32.dll", EntryPoint = "Out32")]
public static extern void Output(int adress, int value);
[DllImport("inpout32.dll", EntryPoint = "Inp32")]
public static extern int Input(int adress);
}
Die Idee zu diesem Grundlagenversuch stammt von Wolfgang Back (www.wolfgang-back.com).
Eine interessante Variante für die Ansteuerung eines unipolaren Schrittmotors gibt es hier:
http://www.aaroncake.net/Circuits/stepper.asp
Noch weitere interessante Seiten mit Schrittmotor-Controllern:
http://home.cogeco.ca/~rpaisley4/Stepper.html
Schrittmotorcontroller mit Dezimalzähler 4017
Hier ein Bild vom Innenleben eines Hybrid-Schrittmotors (Bildquelle Wikipedia):
xxx