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: |