Pages: [1]   Go Down
Author Topic: MotorSpeed ULN2003 AN, 28BYJ-48  (Read 812 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
// 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
« Last Edit: August 07, 2013, 06:53:26 am by uwefed » Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 257
Posts: 21462
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Offline Offline
Faraday Member
**
Karma: 116
Posts: 3903
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: August 07, 2013, 12:59:11 pm by Serenifly » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: