Go Down

### Topic: MotorSpeed ULN2003 AN, 28BYJ-48 (Read 3282 times)previous topic - next topic

#### svenhk1990

##### Aug 07, 2013, 12:08 pmLast 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 pinsint motorPin1 = 8;    // Blue   - 28BYJ48 pin 1int motorPin2 = 9;    // Pink   - 28BYJ48 pin 2int motorPin3 = 10;    // Yellow - 28BYJ48 pin 3int motorPin4 = 11;    // Orange - 28BYJ48 pin 4                        // Red    - 28BYJ48 pin 5 (VCC)int motorSpeed = 1200;  //variable to set stepper speedint count = 0;          // count of steps madeint countsperrev = 512; // number of steps per full revolutionint 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

#1
##### Aug 07, 2013, 01:54 pm
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

#### svenhk1990

#2
##### Aug 07, 2013, 02:07 pm
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 pmLast 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:

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.

#### svenhk1990

#4
##### Aug 07, 2013, 03:05 pm
Okay!
Dann werd ich das gleich mal versuchen um zusetzten.
Vielen Dank für die schnellen Tipps!
Gruß Sven

#### mkl0815

#5
##### Aug 08, 2013, 10:51 am
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