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:
Für diese Komponente müssen vier DIP Switches des rechten Blockes gesetzt werden. Die Stellung der DIP Switches sollte anschliessend so aussehen:
Nachfolgend wird die Verwendung der Klasse
com.pi4j.crowpi.components.StepMotorComponent
Javadoc
beschrieben.
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. |
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. |
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.
src/main/java/com/pi4j/crowpi/applications/StepMotorApp.java
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);
}
}
}
Ein 3D-Drucker könnte aus der Kombination von mehreren Schrittmotoren gebaut werden.
Automatisches Heizventil in Kombination mit einem Temperatursensor.