Seit dem Bau einer kleinen CNC-Fräsmaschine ist die Faszination der Möglichkeiten im Umgang mit Schrittmotoren stets gewachsen.
„Damit kann man jede Menge Ideen verwirklichen!“
Hier mal eine paar Ideen, mit welchen sich ein paar meiner Synapsen gerade beschäftigen.
- Automatisierung von Schiebe-Fensterläden
Fensterläden, welche nicht geklappt sondern von der linken und rechten Seite des Fensters auf und zugeschoben werden können, sollten bekannt sein. In dieser Projektidee geht es darum, die Fensterläden zu automatisieren.
- Kaffeevollautomat-Tassen-Rondell
Besitzer von Kaffee-Vollautomaten kennen das! Die sogenannten Espressomaschinen machen nur eine Tasse nach dem Anderen. Das Problem: Man muss warten bis eine Tasse gefüllt ist um die nächste unter den Auslass zu stellen. Wie wäre es, wenn eine Tasse nach der Anderen automatisch unter den Auslass gestellt und gefüllt wird? Dieses Projekt wird eines Tages angegangen!
- Automatischer Cocktail Bartender
Der in bekannten DIY Projekten gebastelte automatisch Bartender, welcher Cocktails selbstständig mixen kann sollte eines Tages ebenfalls in das Projekt-Portfolie gehören!
Damit solche Projekte mit Schrittmotoren umgesetzt werden können, ist erst mal ein wenig Grundlagenwissen erforderlich.
In folgendem werden ein paar technische Ansätze zur Ansteuerung von Schrittmotoren mit Hilfe eines Arduinos und Pololu-Treibern erläutert. Wie ein Schrittmotor funktioniert möchte ich auf dieser Seite nicht vorstellen, dazu gibt es bereits hervorragende Seiten im Netz. Wikipedia erklärt uns das fürs erste schon mal ganz gut: https://de.wikipedia.org/wiki/Schrittmotor
Kurzinfo zum Pololu Schrittmotor Treiber
So sieht eine kleine, feine Treiberstufe zur Ansteuerung der Motoren aus:
Pololu Schrittmotor Treiber (Allegro A4988/A4983 IC)
Immer wieder faszinierend, welche Leistung mit solch kleinen Käfern erreicht werden kann. Immerhin schafft der Treiber bis zu 2 Ampere pro Phase
Hier ein paar technische Daten:
- A4988/A4983 IC Treiber
- Logik-Spannung: 3.0V-5.5V
- Motor Versorgungsspannung: 8V-35V
- Motor Ausgangsstrom: bis 2A (pro Phase)
- Für 2-Phasen-Schrittmotor geeignet
- 5 Mikroschrittauflösungen einstellbar
- Strombegrenzung/-Einstellung
- IC Überhitzungs-Schutzelektronik (A4988)
Auch wenn so eine winzige Treiberplatine auf dem Elektroinklabortisch chick aussieht, muss sie doch früher oder später angeschlossen werden. Hier die Pinbelegung:
Im Schematic diagram sieht das Ganze dann schon etwas komplizierter aus, was jedoch für den schnellen Aufbau von Projekten nicht unbedingt erforderlich ist.
Natürlich stellt sich nun die Frage, wie der kleine Treiber seine Bestimmung zusammen mit einem Arduino Mikrocontroller findet. Das folgende Bild veranschaulicht uns das sehr gut.
MS1 |
MS2 |
MS3 |
Microstep Resolution |
Low |
Low |
Low |
Full step |
High |
Low |
Low |
Half step |
Low |
High |
Low |
Quarter step |
High |
High |
Low |
Eighth step |
High |
High |
High |
Sixteenth step |
Ohne Software läuft hier nichts!
// Initialisierung mit 2 Pins, Vollschritt
// RESET muss an SLEEP angeschlossen werden
AH_Pololu(int RES,int DIR,int STEP)
// Initialisierung mit 6 Pins, Änderung der Mikroschrittauflösung
// und Sleep-Modus sind verfügbar.
// RESET muss an SLEEP angeschlossen werden
AH_Pololu(int RES,int DIR,int STEP,int MS1,int MS2,int MS3,int SLEEP)
// Initialisierung mit 9 Pins, alle Funktionen vorhanden.
AH_Pololu(int RES,int DIR,int STEP,int MS1,int MS2,int MS3,
int SLEEP,int ENABLE,int RESET)
// Modul zurücksetzen
void resetDriver()
// Modul ein- oder ausschalten
void enableDriver()
void disableDriver()
// Schlaf-Modus ein- und ausschalten
void sleepON()
void sleepOFF()
// Geschwindigkeit ändern
void setSpeedRPM(int RPM)
void setSpeedHz(int FREQ)
void setSpeedMax()
// Mikroschritt-Modus wählen
// MODE 0 -> Vollschritt
// MODE 1 -> 1/2 Mikroschritt
// MODE 2 -> 1/4 Mikroschritt
// MODE 3 -> 1/8 Mikroschritt
// MODE 4 -> 1/16 Mikroschritt
void setMicrostepping(int MODE)
// Motorsteuerung
void move(int NUMBER_OF_STEPS)
void move(int NUMBER_OF_STEPS, boolean DIRECTION)
void rotate(float DEGREES)
void revolve(float TIMES)
// Bibliothekversion
String getVersion()
/* Simple Stepper Motor Control Exaple Code
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
// defines pins numbers
const int stepPin = 3;
const int dirPin = 4;
void setup() {
// Sets the two pins as Outputs
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
}
void loop() {
digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
// Makes 200 pulses for making one full cycle rotation
for(int x = 0; x < 200; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
delay(1000); // One second delay
digitalWrite(dirPin,LOW); //Changes the rotations direction
// Makes 400 pulses for making two full cycle rotation
for(int x = 0; x < 400; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
delay(1000);
}