meta data for this page
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Nächste Überarbeitung | Vorherige Überarbeitung | ||
| uebung:itt11:stepper-motor_ansteuern [2023/01/13 14:58] – angelegt juergenhaas | uebung:itt11:stepper-motor_ansteuern [2024/04/24 08:42] (aktuell) – juergenhaas | ||
|---|---|---|---|
| Zeile 3: | Zeile 3: | ||
| [[uebung: | [[uebung: | ||
| + | Bei einem Stepper-Motor können verschiedene Wicklungen im Motor einzeln angesteuert werden. Dadurch kann der Motor in Bruchteilen einzelner Umdrehungen bewegt werden. In Verbindung mit einem Getriebe entsteht dadurch die Möglichkeit, | ||
| + | Der Stepper-Motor aus dem Beispiel verfügt über 4 getrennt voneinander ansteuerbare Wicklungen, weswegen auch das Board mit dem Steuerungsmodul für den Motor über 4 Anschlüsse verfügt. | ||
| - | < | + | Der hier dargestellte Quellcode kommt ohne die Verwendung einer Bibliothek aus. |
| + | |||
| + | **Wichtig: | ||
| + | |||
| + | < | ||
| + | /* | ||
| + | * PIN-Belegung: | ||
| + | * Pins D0-D3 des NodeMCU an Pins IN1-IN4 am Motorboard | ||
| + | * Stromversorgung (5V) an VCC und GND | ||
| + | * | ||
| + | * Motor dreht in der Schleife abwechselnd links und rechts herum. | ||
| + | */ | ||
| + | |||
| + | #define IN1 D0 // Input 1 am Motormodul | ||
| + | #define IN2 D1 // Input 2 am Motormodul | ||
| + | #define IN3 D2 // Input 3 am Motormodul | ||
| + | #define IN4 D3 // Input 4 am Motormodul | ||
| + | #define LEFT 0 // Richtungsangabe für Steppermotor | ||
| + | #define RIGHT 1 // Richtungsangabe für Steppermotor | ||
| + | |||
| + | // Forward Declarations | ||
| + | void init_stepper(); | ||
| + | void step(int s); | ||
| + | int next_step(int currentStep, | ||
| + | void test_stepper(); | ||
| + | void init_echo(); | ||
| + | void read_distance(); | ||
| + | |||
| + | // Konstanten | ||
| + | const int positions[8][4] = { // Abbildung aller 8 Stellungen des | ||
| + | {LOW, LOW, LOW, HIGH}, | ||
| + | {LOW, LOW, HIGH, HIGH}, | ||
| + | {LOW, LOW, HIGH, LOW}, // Es wird immer abwechselnd eine | ||
| + | {LOW, HIGH, HIGH, LOW}, // einzelne Wicklung und dann 2 | ||
| + | {LOW, HIGH, LOW, LOW}, // benachbarte Wicklungen gleichzeitig | ||
| + | {HIGH, HIGH, LOW, LOW}, // aktiviert. Dadurch kommen bei 4 | ||
| + | {HIGH, LOW, LOW, LOW}, // Wicklungen 8 Einzelschritte bei | ||
| + | {HIGH, LOW, LOW, HIGH} // einer Umdrehung zustande. | ||
| + | }; | ||
| + | |||
| + | // globale Variablen | ||
| + | int curStep = 0; // aktueller Schrittzustand | ||
| + | int curDir = RIGHT; | ||
| + | |||
| + | int curPos = 0; // aktuelle Motorstellung | ||
| + | int gotoPos = 0; // gewünschte Motorstellung | ||
| + | |||
| + | |||
| + | /* ---------- Hauptfunktionen ---------- */ | ||
| + | |||
| + | /** | ||
| + | * setup | ||
| + | */ | ||
| + | void setup() | ||
| + | { | ||
| + | // Serielle Konsole | ||
| + | Serial.begin(9600); | ||
| + | Serial.println(" | ||
| + | |||
| + | // Stepper initialisieren | ||
| + | pinMode(IN1, | ||
| + | pinMode(IN2, | ||
| + | pinMode(IN3, | ||
| + | pinMode(IN4, | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * loop | ||
| + | */ | ||
| + | void loop() | ||
| + | { | ||
| + | // rechts drehen, insgesamt 64 Umdrehungen | ||
| + | for (int i = 0; i < 64; i++) | ||
| + | { | ||
| + | // Stellung 1 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | // Stellung 2 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | // Stellung 3 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | // Stellung 4 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | // Stellung 5 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | // Stellung 6 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | // Stellung 7 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | // Stellung 8 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | } | ||
| + | |||
| + | // Motor stromlos schalten | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(1000); | ||
| + | |||
| + | // links drehen, insgesamt 64 Umdrehungen | ||
| + | for (int i = 0; i < 64; i++) | ||
| + | { | ||
| + | // Stellung 8 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | // Stellung 7 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | // Stellung 6 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | // Stellung 5 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | // Stellung 4 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | // Stellung 3 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | // Stellung 2 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | // Stellung 1 | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(5); | ||
| + | } | ||
| + | // Motor stromlos schalten | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | delay(2000); | ||
| + | } | ||
| </ | </ | ||
| [[uebung: | [[uebung: | ||