Schrittmotor

Funktionsweise

Der Schrittmotor, bestehend aus festem Stator und bewegenden Rotor, erhält sein Drehmoment durch unterschiedlich ausgerichtete Magnetfelder. Der Rotor dreht sich dabei immer so, dass sich ein möglichst starker magnetischer Fluss ausbildet. Anders als bei anderen Motoren befinden sich beim Schrittmotor jedoch nur im Stator Spulen. Durch gezieltes Ein- und Ausschalten dieser Spulen wird der Motor in Drehung versetzt. Mit korrekter Abfolge der Steuerung lassen sich so Vorwärts und Rückwärtslauf implementieren. Der Name des Motors kommt aus der Tatsache das sich ebenfalls durch Steuerung der Spulen einzelne Schritte mit dem Motor bewegen lassen. Die Schrittgrösse ist dabei abhängig vom physikalischen Aufbau des Schrittmotors. Um die Position des Rotors zu bestimmen, genügt es, ausgehend von einer Ausgangslage die Schritte im bzw. gegen den Uhrzeigersinn zu zählen und mit dem Schrittwinkel zu multiplizieren.

Die Schrittmotoren bieten folgende Vorteile:

  • Genaue Positionierung, keine kumulierten Fehler
  • Haltemoment in Ruhelage
  • Günstige Antriebslösung mit hoher Genauigkeit
  • Einfacher Aufbau des Treibers
Anschluss für Schrittmotor

Voraussetzungen

DIP Switches

Für diese Komponente müssen vier DIP Switches des rechten Blockes gesetzt werden. Die Stellung der DIP Switches sollte anschliessend so aussehen:

ON(links)12345678ON(rechts)12345678

Verwendung

Nachfolgend wird die Verwendung der Klasse com.pi4j.crowpi.components.StepMotorComponent Javadoc beschrieben.

Konstruktoren

Konstruktor Bemerkung
StepMotorComponent(com.pi4j.context.Context pi4j) Initialisiert einen Schrittmotor mit den Standardeinstellungen für den CrowPi.
StepMotorComponent(com.pi4j.context.Context pi4j, int[] addresses, int[][] steps, long pulseMilliseconds) Initialisiert einen Schrittmotor mit frei wählbaren Pins. Diese werden mit dem Parameter steps an entsprechende Schritte des Motors gekoppelt. Zusätzlich kann noch die Pulslänge übergeben werden.

Methoden

Methode Bemerkung
void turnDegrees(int degrees) Dreht die Achse des Schrittmotors um den übergebenen Winkel in Grad [°]. Ein negativer Winkel dreht den Motor rückwärts.
void turnForward(int steps) Dreht den Motor um die spezifizierte Anzahl Schritte vorwärts.
void turnBackward(int steps) Dreht den Motor um die spezifizierte Anzahl Schritte rückwärts.

Beispielapplikation

Die Beispielanwendung zeigt auf einfache Art und Weise wie die verschiedenen Methoden der StepMotorComponent zu verwenden sind. Zuerst wird nach einer kurzen Warnung der Motor um 50 Schritte vorwärts gedreht. Anschliessend dreht der Motor rückwärts ebenfalls um 50 Schritte. Der Motor ist also wieder in Ausgangsposition. Abschliessend wird nun mithilfe eines for-loops einige Male hin und her gedreht. Dazu wird nun die turnDegrees Methode verwendet.

Pfad zum Codebeispiel: src/main/java/com/pi4j/crowpi/applications/StepMotorApp.java
Auf GitHub ansehen
package com.pi4j.crowpi.applications;

import com.pi4j.context.Context;
import com.pi4j.crowpi.Application;
import com.pi4j.crowpi.components.StepMotorComponent;

/**
 * This example shows how the step motor on the CrowPi can be used. It allows for precise rotation in either direction and requires the DIP
 * switches 3, 4, 5 and 6 on the right DIP switch to be set. Turning by either a given count or degrees is being demonstrated below.
 */
public class StepMotorApp implements Application {
    @Override
    public void execute(Context pi4j) {
        // Initialize step motor with default configuration for CrowPi
        final var stepMotor = new StepMotorComponent(pi4j);

        // 'Warn' the user about the upcoming action
        System.out.println("Watch your step motor closely, it will start moving in 5 seconds...");
        sleep(5000);

        // Turn the motor 50 times forward and backward, resulting in the same position
        System.out.println("Moving 50 steps forward...");
        stepMotor.turnForward(50);
        sleep(1000);

        System.out.println("...and moving 50 steps backward...");
        stepMotor.turnBackward(50);

        System.out.println("...and we are back at our previous position!");
        sleep(1000);

        // Simulate a sweeping motion (forward -> backward + backward -> forward)
        for (int i = 5; i > 0; i--) {
            System.out.println("Sweep sweep sweep... just " + i + " more times");

            // Start by rotating 90 degrees forward...
            stepMotor.turnDegrees(90);

            // ...then rotating 180 degrees backwards to the other side...
            // note: a negative amount of degrees means going backward
            stepMotor.turnDegrees(-180);

            // ...then back to the center by going 90 degrees forward again
            stepMotor.turnDegrees(90);
        }
    }
}

Weitere Möglichkeiten

  • Ein 3D-Drucker könnte aus der Kombination von mehreren Schrittmotoren gebaut werden.
  • Automatisches Heizventil in Kombination mit einem Temperatursensor.