meta data for this page
  •  

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
uebung:itt11:stepper-motor_ansteuern [2023/01/13 14:58] – angelegt juergenhaasuebung:itt11:stepper-motor_ansteuern [2024/04/24 08:42] (aktuell) juergenhaas
Zeile 3: Zeile 3:
 [[uebung:itt11:beispielcode_esp8266|zurück zur Übersicht]] [[uebung:itt11:beispielcode_esp8266|zurück zur Übersicht]]
  
 +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, sehr feine Bewegungen vorzunehmen.\\
 +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.
  
-<code javascript Stepper-Motor_manually_minimal.ino>+Der hier dargestellte Quellcode kommt ohne die Verwendung einer Bibliothek aus. 
 + 
 +**Wichtig:** Am Ende einer Drehbewegung müssen alle Motorspulen stromlos geschaltet werden, damit der Motor im Stillstand nicht von Strom durchflossen wird und Schaden nimmt. 
 + 
 +<code cpp Stepper-Motor_manually_minimal.ino> 
 +/* 
 + * 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, int currentDirection); 
 +void test_stepper(); 
 +void init_echo(); 
 +void read_distance(); 
 + 
 +// Konstanten 
 +const int positions[8][4] = { // Abbildung aller 8 Stellungen des 
 +  {LOW, LOW, LOW, HIGH},      // Motors vor dem Getriebe durch 
 +  {LOW, LOW, HIGH, HIGH},     // Beschaltung der 4 Motorwicklungen 
 +  {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;  // aktuelle Drehrichtung 
 + 
 +int curPos = 0;  // aktuelle Motorstellung 
 +int gotoPos = 0; // gewünschte Motorstellung 
 + 
 + 
 +/* ---------- Hauptfunktionen ---------- */ 
 + 
 +/** 
 + * setup 
 + */ 
 +void setup()  
 +
 +  // Serielle Konsole 
 +  Serial.begin(9600); 
 +  Serial.println("Setup"); 
 + 
 +  // Stepper initialisieren 
 +  pinMode(IN1, OUTPUT); 
 +  pinMode(IN2, OUTPUT); 
 +  pinMode(IN3, OUTPUT); 
 +  pinMode(IN4, OUTPUT); 
 +  digitalWrite(IN1, LOW); 
 +  digitalWrite(IN2, LOW); 
 +  digitalWrite(IN3, LOW); 
 +  digitalWrite(IN4, LOW); 
 +
 + 
 +/** 
 + * loop 
 + */ 
 +void loop()  
 +
 +  // rechts drehen, insgesamt 64 Umdrehungen 
 +  for (int i = 0; i < 64; i++) 
 +  { 
 +    // Stellung 1 
 +    digitalWrite(IN1, HIGH); 
 +    digitalWrite(IN2, LOW); 
 +    digitalWrite(IN3, LOW); 
 +    digitalWrite(IN4, LOW); 
 +    delay(5); 
 +    // Stellung 2 
 +    digitalWrite(IN1, HIGH); 
 +    digitalWrite(IN2, HIGH); 
 +    digitalWrite(IN3, LOW); 
 +    digitalWrite(IN4, LOW); 
 +    delay(5); 
 +    // Stellung 3 
 +    digitalWrite(IN1, LOW); 
 +    digitalWrite(IN2, HIGH); 
 +    digitalWrite(IN3, LOW); 
 +    digitalWrite(IN4, LOW); 
 +    delay(5); 
 +    // Stellung 4 
 +    digitalWrite(IN1, LOW); 
 +    digitalWrite(IN2, HIGH); 
 +    digitalWrite(IN3, HIGH); 
 +    digitalWrite(IN4, LOW); 
 +    delay(5); 
 +    // Stellung 5 
 +    digitalWrite(IN1, LOW); 
 +    digitalWrite(IN2, LOW); 
 +    digitalWrite(IN3, HIGH); 
 +    digitalWrite(IN4, LOW); 
 +    delay(5); 
 +    // Stellung 6 
 +    digitalWrite(IN1, LOW); 
 +    digitalWrite(IN2, LOW); 
 +    digitalWrite(IN3, HIGH); 
 +    digitalWrite(IN4, HIGH); 
 +    delay(5); 
 +    // Stellung 7 
 +    digitalWrite(IN1, LOW); 
 +    digitalWrite(IN2, LOW); 
 +    digitalWrite(IN3, LOW); 
 +    digitalWrite(IN4, HIGH); 
 +    delay(5); 
 +    // Stellung 8 
 +    digitalWrite(IN1, HIGH); 
 +    digitalWrite(IN2, LOW); 
 +    digitalWrite(IN3, LOW); 
 +    digitalWrite(IN4, HIGH); 
 +    delay(5); 
 +  } 
 + 
 +  // Motor stromlos schalten 
 +  digitalWrite(IN1, LOW); 
 +  digitalWrite(IN2, LOW); 
 +  digitalWrite(IN3, LOW); 
 +  digitalWrite(IN4, LOW); 
 +  delay(1000); 
 + 
 +  // links drehen, insgesamt 64 Umdrehungen 
 +  for (int i = 0; i < 64; i++) 
 +  { 
 +    // Stellung 8 
 +    digitalWrite(IN1, HIGH); 
 +    digitalWrite(IN2, LOW); 
 +    digitalWrite(IN3, LOW); 
 +    digitalWrite(IN4, HIGH); 
 +    delay(5); 
 +    // Stellung 7 
 +    digitalWrite(IN1, LOW); 
 +    digitalWrite(IN2, LOW); 
 +    digitalWrite(IN3, LOW); 
 +    digitalWrite(IN4, HIGH); 
 +    delay(5); 
 +    // Stellung 6 
 +    digitalWrite(IN1, LOW); 
 +    digitalWrite(IN2, LOW); 
 +    digitalWrite(IN3, HIGH); 
 +    digitalWrite(IN4, HIGH); 
 +    delay(5); 
 +    // Stellung 5 
 +    digitalWrite(IN1, LOW); 
 +    digitalWrite(IN2, LOW); 
 +    digitalWrite(IN3, HIGH); 
 +    digitalWrite(IN4, LOW); 
 +    delay(5); 
 +    // Stellung 4 
 +    digitalWrite(IN1, LOW); 
 +    digitalWrite(IN2, HIGH); 
 +    digitalWrite(IN3, HIGH); 
 +    digitalWrite(IN4, LOW); 
 +    delay(5); 
 +    // Stellung 3 
 +    digitalWrite(IN1, LOW); 
 +    digitalWrite(IN2, HIGH); 
 +    digitalWrite(IN3, LOW); 
 +    digitalWrite(IN4, LOW); 
 +    delay(5); 
 +    // Stellung 2 
 +    digitalWrite(IN1, HIGH); 
 +    digitalWrite(IN2, HIGH); 
 +    digitalWrite(IN3, LOW); 
 +    digitalWrite(IN4, LOW); 
 +    delay(5); 
 +    // Stellung 1 
 +    digitalWrite(IN1, HIGH); 
 +    digitalWrite(IN2, LOW); 
 +    digitalWrite(IN3, LOW); 
 +    digitalWrite(IN4, LOW); 
 +    delay(5); 
 +  } 
 +  // Motor stromlos schalten 
 +  digitalWrite(IN1, LOW); 
 +  digitalWrite(IN2, LOW); 
 +  digitalWrite(IN3, LOW); 
 +  digitalWrite(IN4, LOW); 
 +  delay(2000); 
 +}
  
 </code> </code>
  
 [[uebung:itt11:beispielcode_esp8266|zurück zur Übersicht]] [[uebung:itt11:beispielcode_esp8266|zurück zur Übersicht]]