Auf der Suche nach einer Ansteuerung für meinen Schrittmotor DAYPOWER S-SPSM-5V bin ich über eine Beschreibung gestolpert, wie es auch ohne Bibliothek geht. Kern ist diese Tabelle:
//Ansteuerung der Spulen des Schrittmotors DAYPOWER S-SPSM-5V von Pollin.de
$step[1]="1,0,0,0";
$step[2]="1,1,0,0";
$step[3]="0,1,0,0";
$step[4]="0,1,1,0";
$step[5]="0,0,1,0";
$step[6]="0,0,1,1";
$step[7]="0,0,0,1";
$step[8]="1,0,0,1";
Nach Umwandlung in einen Test-Sketch für den UNO läuft der Motor mit einem leisen Surren in die eine oder andere Richtung.
const byte pinFreigabe = 2; // LOW=dreht; HIGH=stopp
const byte pinRichtung = 3; // LOW=links; HIGH=rechts
const byte pinStart = 4; // LOW-HIGH-Flanke=Start
bool altStart;
bool aktStart;
int schrittZaehler;
const byte pinMotor[] = {8, 9, 10, 11}; // IN1, IN2, IN3, IN4 des Boards
const byte schrittfolge[] = {B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001};
byte schritt = 0;
byte richtung = 0;
byte bitfolge = 0;
unsigned long aktMicros;
unsigned long prevMicros;
const unsigned long intervall = 1000;
void setup() {
for (byte i = 0; i < sizeof(pinMotor); i++) {
pinMode(pinMotor[i], OUTPUT);
}
pinMode(pinFreigabe, INPUT_PULLUP);
pinMode(pinRichtung, INPUT_PULLUP);
pinMode(pinStart, INPUT_PULLUP);
}
void loop() {
aktMicros = micros();
altStart = aktStart;
aktStart = digitalRead(pinStart);
if (altStart && !aktStart) {
schrittZaehler = 64 * 8 * 8; // 4096 ist etwas viel, oder?
}
if (digitalRead(pinFreigabe) == LOW && schrittZaehler > 0) {
if (aktMicros - prevMicros >= intervall) {
prevMicros = aktMicros;
bitfolge = schrittfolge[schritt];
for (byte j = 0; j < sizeof(pinMotor); j++) {
digitalWrite(pinMotor[j], (bitfolge >> j) & 1);
}
schrittZaehler--;
if (digitalRead(pinRichtung) == LOW) {
schritt++;
} else {
schritt--;
}
if (schritt < 0) {
schritt = sizeof(schrittfolge);
} else {
schritt = schritt % sizeof(schrittfolge);
}
}
} else {
for (byte i = 0; i < sizeof(pinMotor); i++) {
digitalWrite(pinMotor[i], LOW);
}
schrittZaehler = 0;
}
}
Die Aufgabe eines Schrittmotors ist ja die Positionierung, also versuche ich eine 360° Drehung.
„Schrittwinkel: 5,625° (64 Schritte/Umdrehung)“, tatsächlich bin ich jetzt aber bei 4096 Schritten für eine Umdrehung! :
Ich freue mich über Hinweise für den richtigen Dreh!