Is the 28BYJ-48 motor really that weak?

Hi guys,
I'm trying to make an arduino controlled turntable, basically a 160mm plywood disk that would be turning by a stepper motor.
I got the 28BYJ-48 motor with the driveboard, but it seems very weak. It can barely turn the disk, but if there's some object on the disk and minimal friction, it stucks. :frowning:
Is this motor really so weak or can I do something with the code?

Thanks 8)

How are you powering the moto -- wall wart, batteries? Are you running it from the Arduino 5VDC or straight from wall wart / battery voltage? What voltage and amperage of wall wart / battery are you using?

I'm powering it right from arduino... shouldn't i?

Artem85:
I'm powering it right from arduino... shouldn't i?

That depends on the voltage and amperage the motor needs. The Arduino Uno's voltage regulator cannot supply more than 500mA at 5VDC. Other models vary.

Is there any information on the motor denoting voltage and amperage?

that's all the info I got.

Electronic Parameters :

Rated voltage ? 5VDC

Number of Phase ? 4

Speed Variation Ratio ? 1/64

Stride Angle ? 5.625° /64

Frequency : 100Hz

DC resistance ? 50?±7%(25?)

Idle In-traction Frequency : > 600Hz

Idle Out-traction Frequency : > 1000Hz

In-traction Torque >34.3mN.m(120Hz)

Self-positioning Torque >34.3mN.m

Friction torque : 600-1200 gf.cm

Pull in torque : 300 gf.cm

Insulated resistance >10M?(500V)

Insulated electricity power ?600VAC/1mA/1s

Insulation grade ?A

Rise in Temperature <40K(120Hz)

Noise <35dB(120Hz,No load,10cm)

Ohm's law lets us convert the 50 Ohm resistance to mA:

That's only 100mA, so you appear to be meeting the current requirements of the motor.

You said you're using a driver board -- what's the part number / datasheet / link to where you bought it? I would hope that it's rated for at least 100mA but I guess we should check.

Also, how are you activating the motor? digitalWrite or analogWrite?

The board is standard ULN2003, I connected it do digital pins 8-11, as it's suggested in most same codes.

So are you using the Stepper library? Please post your code.

I made an experiment - connected this 5v motor to a 12v adapter, it worked great. Of course, it did heat up and I turned it off before it would born down.

Yes, here' the code

/-----( Import needed libraries )-----/
#include <Stepper.h>

/-----( Declare Constants, Pin Numbers )-----/
#define STEPS 100 //Number of steps per revolution

/-----( Declare objects )-----/
// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to

//The pin connections need to be 4 pins connected
// to Motor Driver In1, In2, In3, In4 and then the pins entered
// here in the sequence 1-3-2-4 for proper sequencing
Stepper small_stepper(STEPS, 8, 10, 9, 11);

/-----( Declare Variables )-----/

int Steps2Take;

void setup() /----( SETUP: RUNS ONCE )----/
{

// set the speed of the motor
small_stepper.setSpeed(200);
}/--(end setup )---/

void loop() /----( LOOP: RUNS CONSTANTLY )----/
{

small_stepper.setSpeed(300);
Steps2Take = 800; // Rotate CW
small_stepper.step(Steps2Take);
delay(1000);

small_stepper.setSpeed(300); // 200 a good max speed??
Steps2Take = -1800; // Rotate CCW
small_stepper.step(Steps2Take);
delay(1000);

}/* --(end main loop )-- */

/* ( THE END ) */

So here's where my expertise ends, as I don't know much about steppers. But I see your code is using

small_stepper.setSpeed(300);  // 200 a good max speed??

but your datasheet shows

Idle In-traction Frequency : > 600Hz

Idle Out-traction Frequency : > 1000Hz

I've no idea what these numbers mean but maybe 300 is too slow? Then again,

Frequency : 100Hz

Suggests you shouldn't use over 100... hopefully a stepper expert can advise.

If you run a motor's PWM frequency too fast, you also will get stuttering or little power output, since you don't give it time for the Magnetic field to form before it collapses again. This is just a physical limitation of motors.

mirith:
If you run a motor's PWM frequency too fast, you also will get stuttering or little power output, since you don't give it time for the Magnetic field to form before it collapses again. This is just a physical limitation of motors.

This would explain why it works faster at 12V -- stronger / quicker magnetic field.

I suggest you try small_stepper.setSpeed(100);

Run the motor with nothing connected to the output shaft (perhaps a bit of sticky paper to make a flag so you can see what's happening).

How fast does it turn - seconds per revolution or revs/second as appropriate?

How powerful (how much torque) does it feel if you try to stop it with your fingers (assuming no sharp edges)?

If it is turning faster than 1 rev/second try slowing it down and see what that does to the torque?

Edit to Add...
I just looked at the datasheet - this is a 5-wire stepper, have you wired it correctly? I'm not sure how to do it, but I know the A4988 driver I have won't work with a 5-wire motor.

...R

I have one of these motors/drivers, asuming it is one like this.

http://yourduino.com/sunshop2/index.php?l=product_detail&p=126

The fastest I can make it spin is one rev in 6 seconds.
BTW, I'm using 4,5V to drive the motor and it is using aprox. 74mA

I'm using this simple sketch:

int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;

int delayTime = 3;

void setup() {
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
}

void loop() {
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);
}

You can run it at 12V but you need to add 60 ohm resistors (1W rating) to the stepper lines to keep the current at the 100ma maximum.

Remember that your 4.5V power is getting dropped another 1V by the transistors in the ULN2003. (4.5V supply - 1V drop) / 50R stepper coil = 70ma.

See also: Tutorials Archives - StepperWorld and scroll down to "selecting a current limiting resistor".

Thanks for the info guys. Meanwhile I managed to get way more power out of the motor by turning the coils on like that 8)
Now it can easily turn about 1kg, but before it could even barely turn itself! XD

int delayTime = 10;

  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  
   digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);
  
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);
  
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);

Did small_stepper.setSpeed(100); not work?

not really sure, but I guess not.

I recently started using one of these. I found that the step per rev had to be 2048 and the max rpm had to be below about 14 or it would just vibrate. In fact anything much above 10RPM would skip steps. I have it now completing a single rev in about 10 seconds and it's very predictable in the movement. Using the standard Arduinio stepper example for a single turn it's working well. I did have to swap my center pins to get it to properly rotate in both directions (pins 9 and 10). I need to play with it some more but overall it's working but realize it's slow yet has decent torque.

You can use a 12v supply without a resistor. So long as the code allows it to cool off between moves. Or when going slower. This way you have the advantage of double the torque and speed when you need it. Did you see my code here on the forum? It makes this whole process as easy as 1 line of code...