Go Down

Topic: MotorSpeed ULN2003 AN, 28BYJ-48 (Read 1 time) previous topic - next topic

Aug 07, 2013, 12:08 pm Last Edit: Aug 07, 2013, 01:53 pm by uwefed Reason: 1
Hallo zusammen,
ich bin absoluter Neuling im Bereich Arduino. Zum Erfahrungen sammeln habe ich mir einen Arduino Uno + Set bestehend aus ULN2003 AN und 28BYJ-48 gekauft.
Der Code, den ich zum Set fand lautet:

Code: [Select]
// This Arduino example demonstrates bidirectional operation of a
// 28BYJ-48, using a ULN2003 interface board to drive the stepper.
// The 28BYJ-48 motor is a 4-phase, 8-beat motor, geared down by
// a factor of 68. One bipolar winding is on motor pins 1 & 3 and
// the other on motor pins 2 & 4. The step angle is 5.625/64 and the
// operating Frequency is 100pps. Current draw is 92mA.
////////////////////////////////////////////////

//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));
}


Teilweise hab ich ihn verstanden. Allerdings möchte ich jetzt mittels Poti und Spannungsteiler die Drehzahl regeln. Nun habe ich einfach mal den Wert für MotorSpeed auf 600 bzw. 5000 verändert. Bei 600 dreht er sich garnicht mehr. Bei 5000 deutlich langsamer.
Wisst ihr in welchen Bereich ich den Wert ändern kann?
Danke vorab!

Gruß Sven

uwefed

Quote
Wisst ihr in welchen Bereich ich den Wert ändern kann?

Die max Ansteuerfrequenz hängt vom Motor und von der Last ab.
Grüße Uwe

Das heißt also das ich den Wert ohne Last nur in einem kleinen Bereich ändern kann?
Besteht den die Möglichkeit z.B. eine Drehzahl von 400 1/min mit diesem Stepper zu erzeugen?

Serenifly

#3
Aug 07, 2013, 02:44 pm Last Edit: Aug 07, 2013, 07:59 pm by Serenifly Reason: 1
Schrittmotor-Geschwindigkeiten werden oft in Hertz, d.h. Schritten pro Sekunde angegeben (in deinem Programm ist die "motorSpeed" da einfach die Länge der Schritte in Mikrosekunden).

Schauen wir uns mal ein Datenblatt an:
http://www.raspberrypi-spy.co.uk/wp-content/uploads/2012/07/Stepper-Motor-28BJY-48-Datasheet.pdf

Von einer maximalen Drehzahl sehe ich da nichts, aber das Drehmoment ist für 500 Pulse pro Sekunde definiert. Das musst du dann mit den Schritten pro Umdrehung verrechnen um auf rpm zu kommen. Das würde also mindestens gehen. Obwohl im Program "operating frequency = 100pps" steht.

Hier steht mal mehr:
http://robocraft.ru/files/datasheet/28BYJ-48.pdf

"idle-in/out traction frequency" von >600-1000 Hz. Ich nehme mal an das ist die Start-Stop Frequenz.

Da ist aber auch noch ein 1:64 Getriebe drin. Das muss man auch noch berücksichtigen.


Wenn du eine bestimmte Frequenz nicht sofort erreichen kannst, kannst du auch probieren eine Rampe zu fahren. Das heißt erst langsam anfahren und dann schneller werden. Das ist bei hohen Drehzahlen generell ratsam, vor allem wenn eine Last bewegt wird.

Okay!
Dann werd ich das gleich mal versuchen um zusetzten.
Vielen Dank für die schnellen Tipps!
Gruß Sven

mkl0815

Mit den Motoren hab ich auch schon gespielt. Hohe Geschwindigkeiten kannst Du davon nicht erwarten, da die wie bereits erwähnt ein 1:64 Getriebe verbaut haben. Dafür kommt man aber auf 4096 Schritte pro Umdrehung und auf eine recht ordentliche Kraft des kleinen Motors.
Aber das direkte Anfahren mit einer bestimmten Geschwindigkeit funktioniert nur in einem recht engen Rahmen. Wenn man schneller drehen will, muss man die Drehtzahl langsam steigern. Fängt man gleich mit einer hohen Geschwindigkeit an, sperrt der Motor, da das hoch untersetzte Getriebe zu träge ist.

Mario.

Go Up