Go Down

Topic: Langsamer Schrittmotor (Read 1 time) previous topic - next topic

Addi2438

Mar 10, 2015, 03:27 pm Last Edit: Mar 10, 2015, 04:00 pm by Addi2438
Guten Abend,
habe mir vor paar Tagen ein Paar 5V Schrittmotoren bei Pollin gekauft:
http://www.pollin.de/shop/dt/NjU0OTg2OTk-/Bausaetze_Module/Module/Schrittmotor_Set_DAYPOWER_S_SPSM_5V.html

Nach dem ich einen Angeschlossen und diesen Sketch auf den UNO geladen habe:
Code: [Select]
int counter = 0;

void setup() {
  // put your setup code here, to run once:
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
 
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
}

void loop() {
  if(counter == 0) {
      digitalWrite(11, HIGH);
      digitalWrite(10, LOW);
      digitalWrite(9, HIGH);
      digitalWrite(8, LOW);
  } else if(counter == 1) {
      digitalWrite(11, LOW);
      digitalWrite(10, HIGH);
      digitalWrite(9, HIGH);
      digitalWrite(8, LOW);
  } else if(counter == 2) {
      digitalWrite(11, LOW);
      digitalWrite(10, HIGH);
      digitalWrite(9, LOW);
      digitalWrite(8, HIGH);
  } else if(counter == 3) {
      digitalWrite(11, HIGH);
      digitalWrite(10, LOW);
      digitalWrite(9, LOW);
      digitalWrite(8, HIGH);
  }
 
  counter = (counter + 1)%4;
  delayMicroseconds(3000);
}


Ist mir aufgefallen, dass das Teil sich extrem langsam dreht.
Ist das normal, oder läuft da was schief?
Ich habe auch 2 größere, die deutlich schneller sind.

Edit:
Der Treiberchip bekommt eine externe Spannung.
Beide Gnds (UNO und Treiber) sind verbunden.

Edit2:
Der andere Motor selben Typs mit selbem Treiber, der dreht sich garnicht,
egal ob ich den Wert innerhalb des delays größer mache.
Kann bei dem davon ausgehen, dass er kaputt ist?
Baby Kiwi, what else? :D

jurs

Ist mir aufgefallen, dass das Teil sich extrem langsam dreht.
Ist das normal, oder läuft da was schief?
Dein "delayMicroseconds(3000);" kannst Du wohl auch halbieren oder sogar dritteln.

Und wenn Du etwas möchtest, das sich schneller dreht, dann darfst Du eben keinen Motor mit einem Untersetzungsgetriebe mit einer Untersetzung von 1:64 verwenden.

Mit dem angeflanschten Verlangssamungsgetriebe entsprechen dann eben 64 Umdrehungen des Motors nur noch einer einzigen Umdrehung an der Abtriebswelle.

Addi2438

#2
Mar 10, 2015, 04:14 pm Last Edit: Mar 10, 2015, 04:17 pm by Addi2438
Alles klar für die Aufklärung, habe mich nur gewundert, warum das Ding so langsam ist :D.
Halbierung/Drittelung funktioniert leider nicht, da die Antriebswelle sich dann überhaupt nicht mehr dreht ;).

Kann ich beim 2ten Motor dann davon ausgehen, dass da das Getriebe kaputt ist?
Ich habe testweisen mal diesen Angeschlossen, und der dreht sich eben überhaupt nicht.
Baby Kiwi, what else? :D

jurs

Alles klar für die Aufklärung, habe mich nur gewundert, warum das Ding so langsam ist :D.
Halbierung/Drittelung funktioniert leider nicht, da die Antriebswelle sich dann überhaupt nicht mehr dreht ;).

Kann ich beim 2ten Motor dann davon ausgehen, dass da das Getriebe kaputt ist?
Ich habe testweisen mal diesen Angeschlossen, und der dreht sich eben überhaupt nicht.
Den Fall eines defekten Getriebes bei diesen Spielzeug-Steppern hatten wir hier im Forum glaube ich schon mal: Wegen eines Metallspans im Getriebe konnte der Motor immer nur ein klein wenig hin und herdrehen. Der Poster damals hatte seinen über einen China-Versender bezogenen Stepper selbst repariert bekommen, indem er das Getriebegehäuse geöffnet und den Metallspan zwischen den Blechzahnrädern rausgezogen hat.

Ansonsten kommt mir Dein delay von 3000 Mikrosekunden verdächtig hoch vor.

Wenn ich mich nicht täusche, hatte ich so einen Spielzeugstepper hier schon mal mit 1200 µs delay und diesem Sketch erfolgreich zum hin- und herdrehen gebracht:
Code: [Select]

//declare variables for the motor pins
int motorPin1 = 8;    // Blue   - 28BYJ48 pin 1
int motorPin2 = 9;    // Pink   - 28BYJ48 pin 2
int motorPin3 = 10;    // Yellow - 28BYJ48 pin 3
int motorPin4 = 11;    // Orange - 28BYJ48 pin 4
                        // Red    - 28BYJ48 pin 5 (VCC)

int motorSpeed = 1200;  //variable to set stepper speed
int count = 0;          // count of steps made
int countsperrev = 512; // number of steps per full revolution
int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};

//////////////////////////////////////////////////////////////////////////////
void setup() {
  //declare the motor pins as outputs
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  Serial.begin(9600);
}

//////////////////////////////////////////////////////////////////////////////
void loop(){
  if(count < countsperrev )
    clockwise();
  else if (count == countsperrev * 2)
    count = 0;
  else
    anticlockwise();
  count++;
}

//////////////////////////////////////////////////////////////////////////////
//set pins to ULN2003 high in sequence from 1 to 4
//delay "motorSpeed" between each pin setting (to determine speed)
void anticlockwise()
{
  for(int i = 0; i < 8; i++)
  {
    setOutput(i);
    delayMicroseconds(motorSpeed);
  }
}

void clockwise()
{
  for(int i = 7; i >= 0; i--)
  {
    setOutput(i);
    delayMicroseconds(motorSpeed);
  }
}

void setOutput(int out)
{
  digitalWrite(motorPin1, bitRead(lookup[out], 0));
  digitalWrite(motorPin2, bitRead(lookup[out], 1));
  digitalWrite(motorPin3, bitRead(lookup[out], 2));
  digitalWrite(motorPin4, bitRead(lookup[out], 3));
}

Addi2438

#4
Mar 10, 2015, 05:06 pm Last Edit: Mar 10, 2015, 05:09 pm by Addi2438
Dein Sketch hat funktioniert, danke ;).
Allerdings ist der gesammte delay von der routine 8x1200µS,
da er nach jedem umschalten wartet. Werde mal testen, wie weit man da noch runter gehen kann.

Die Beschreibung des Verhaltens des defekten Motors aus dem anderen Thread trift auch auf meinen zu.

Bezüglich des selbstreparierens bin ich mir nicht wirklich sicher, ob ich das selbst versuchen sollte. Ich frage vorher bei Pollin mal nach Ersatz nach, bevor ich das Teil auseinander baue ;)
Baby Kiwi, what else? :D

jurs

Dein Sketch hat funktioniert, danke ;).
Allerdings ist der gesammte delay von der routine 8x1200µS,
da er nach jedem umschalten wartet. Werde mal testen, wie weit man da noch runter gehen kann.
Dein Programm läßt jeden zweiten Schritt weg und macht 3000 µs delay.
Mein Programm macht jeden Zwischenschritt und macht 1200 µs delay.

Für dieselbe Drehung, die Dein Programm in 3000 µs macht, braucht meins also 2*1200µs, müßte also in der Summe um ca. 20% schneller sein als Dein Code.

Außerdem kannst Du von den 1200 µs immer noch etwas runtergehen.

Addi2438

Klar klar,
sollte aber keine Kritik gewesen sein :D
Baby Kiwi, what else? :D

Go Up