ich habe folgende frage: ich habe einen schrittmotor über einen easydriver mit dem arduino duemilanove verbunden. es funktioniert auch alles soweit. nun hab ich mich bereits blöd-gegoogelt aber nichts gefunden - wie programmiere ich den arduino, dass sich der schrittmotor während einer minute einmal dreht (quasi als sekundenzeiger einer uhr).
hier was ich bisher hab ist zu testzwecken ein kleines script, das theoretisch den motor einmal in der sekunde eine umdrehung machen lässt. das tut er allerdings nicht - er braucht länger.
// Motor 200 schritte/umdrehung, 8 fach microstepping -> 1600 schritte / umdrehung
// Variablen deklarieren
int dirPin = 2;
int stepperPin = 3;
int LEDPin = 13;
// Ein-Ausgänge deklinieren
void setup() {
pinMode(dirPin, OUTPUT);
pinMode(stepperPin, OUTPUT);
pinMode(LEDPin, OUTPUT);
}
// Funktion für Schrittmotor
void step(boolean dir,int steps, int stp_int){
digitalWrite(dirPin,dir);
delay(50);
for(int i=0;i<steps;i++){
digitalWrite(stepperPin, HIGH);
delayMicroseconds(stp_int);
digitalWrite(stepperPin, LOW);
delayMicroseconds(stp_int);
}
}
// Anweisungen
void loop(){
step(true,1600,1000); // schrittmotor 1 umdrehung in 1 sekunde
delay(1000); // 1 sekunde warten
}
es wäre wirklich supernett, wenn mir jemand auf die sprünge helfen würde.
rechne mal nach
Du machst 1600 Schritte und jedesmal 2 Millisekunden Pause.
Das sind (Trommelwirbel) 3200 Millisekunden oder 3,2 Sekunden ( ohne die Zeit für for und digitalWrite() zu berücksichtigen).
Wenn der 1 Runde pro sekund e machen soll dann muß er 1600 steps in 1 Sekunde machen, also 1 step alle 625µSekunden. das heißt Bei Symetrischen Rechteksignal an STEP ist das 312,5µS LOW und 312,5µS HIGH. Du kannst auch 300 LOW und 325 HIGH machen, das ist das selbe. Um die Sekunde genau zu haben mußt Du aber auch die Zeit berücksichtigen die Für die FOR-Schleife und für das digitalWrite() gebraucht werden. Das sind sicher etliche µS.
Du setzt den Ausgang High, wartest 1milliSekunde, setzt den Ausgang LOW und wartest nochmal 1 milliSekunde. Das sind dann 2 milliSekunden pro for-Schleifendurchgang.
Das Rechteckignal kommt vom wiederholten HIGH-LOW-setzen des Ausgangs. Hat nichts mit PWM zu tun.