Go Down

Topic: easydriver eine umdrehung pro minute (Read 660 times) previous topic - next topic

mipumat

hallo,

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.

Code: [Select]

// 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.

uwefed


Code: [Select]
// Funktion für Schrittmotor
void step(true,1600, 1000){
 digitalWrite(dirPin,dir);
 delay(50);
 for(int i=0;i<1600;i++){
   digitalWrite(stepperPin, HIGH);
   delayMicroseconds(1000);
   digitalWrite(stepperPin, LOW);
   delayMicroseconds(1000);
 }
}


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.

Grüße Uwe



mipumat

lieber uwe, danke für die antwort auch wenn ich sie nicht ganz verstehe (sorry bin nicht sooo bewandert).

(1) wo mach ich 2ms pause? ist das das delay 50?

(2) wenn du von rechtecksignal sprichst nehme ich an es dreht sich um den begriff pwm, mit dem ich noch nie zu tun hatte.

es wäre nett, wenn du mich noch ein wenig mehr aufklären würdest.

uwefed

#3
Sep 22, 2012, 08:55 pm Last Edit: Sep 22, 2012, 08:57 pm by uwefed Reason: 1
2 Millisekundn kommen von:

   
Code: [Select]
digitalWrite(stepperPin, HIGH);
   delayMicroseconds(1000);
   digitalWrite(stepperPin, LOW);
   delayMicroseconds(1000);


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.


Grüße Uwe

Go Up