Pages: [1]   Go Down
Author Topic: Accel stepper library with support for 28byj-48 motor  (Read 3788 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Full Member
***
Karma: 5
Posts: 229
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,
Not sure if this is the right place but I modified AccelStepper library by Mike McCaulay to work with 28byj-48 motors.
To use it simply define the motor in sketch as follows
Code:
AccelStepper stepper(5, pin1, pin2, pin3, pin4);
Where '5' is the interface type for the 28byj-48 motor. The pins are just whatever pins you want to use. The library didn't use number 5 at all so it has its full functionality plus support for 28byj-48 motor.

In case you've never used the original library it is pretty awesome as it allows adding more than one stepper and supports acceleration. So now you have it - you can drive more than one 28byj-48 motor.

Here is an example code I am using in the video:
Code:
#include <AccelStepper.h>

// Define some steppers and the pins the will use
AccelStepper stepper1(5, 2, 3, 4, 5);
// The first argument '5' indicates that we're using a 28byj-48 geared motor. The rest is just pin numbers.
//You can still use all the other types of motors supported by accelstepper library (e.g. 4 for a normal 4 wire step motor, 8 for a halfstepped normal 4 wire motor etc.)
AccelStepper stepper2(5, 6, 7, 8, 9);


void setup()
{  
  stepper1.setMaxSpeed(900.0); //max speed of the first motor - modify if you want to
  stepper1.setAcceleration(700.0); // rate at which the first motor accelerate -

  stepper2.setMaxSpeed(700.0);
  stepper2.setAcceleration(400.0);



}

void loop()
{    

  if (stepper1.distanceToGo() == 0){
    stepper1.moveTo(random(1500,7000));//just an easy way to get the motors to move to random positions
  }
  if (stepper2.distanceToGo() == 0){
    stepper2.moveTo(random(1500,7000));
  }
  stepper1.run();
  stepper2.run();

}



What do you think?

Mind you that you have to be logged in to see the attachments and download the modified library. Otherwise you can't even see that the files are here.
To install just copy and paste the two files into AccelStepper library folder and they will replace the original files ( you need both AccelStepper.cpp and AccelStepper.h ).

* AccelStepper.cpp (14.55 KB - downloaded 472 times.)
* AccelStepper.h (32.85 KB - downloaded 449 times.)
« Last Edit: October 22, 2013, 05:00:56 pm by kerimil » Logged

Offline Offline
Edison Member
*
Karma: 8
Posts: 1341
If you're not living on the Edge, you're taking up too much space!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

That does make it easy to use!  But it doesn't have all the features that I listed in my code...
Logged

If you fall... I'll be there for you!
-Floor

Skype Brighteyes3333
(262) 696-9619

0
Offline Offline
Full Member
***
Karma: 5
Posts: 229
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Thanks. Well I got to admit that it doesn't have all the features of your code but I guess you could expand on it. The library is very well structured from the ground up, which makes it easy to follow and expand. What's more, you can now use different types of motors in one project, so nothing stops you from using for example 2 regular step motors with a 28byj-48 motor etc.
Logged

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

Hi Kerimil,

I have a question for you.  Do you have any trouble running this motor in reverse using your modified Accelstepper library?  I can only get mine to move forward, then it stalls out when it should run in reverse until it's time to move forward again.  I noticed that your code is only calling the motor to move in positive (greater than 0) positions, so it moves in reverse because it (for instance) is moving from 7000 to 2000.  I'm using the following basic code, and it won't work in reverse for me:


#include <AccelStepper.h>
AccelStepper stepper3(5, 10, 11,12, 13);  //this is the ship rotation motor that is controlled by encoder, the '5' signifies that the motor is a 28byj-48 8-step motor.  This uses the modified accelstepper library

void setup()

    stepper3.setMaxSpeed(150.0);
    stepper3.setAcceleration(300.0);
    stepper3.moveTo(768);
    }

void loop()
{
    // Change direction at the limits
        if (stepper3.distanceToGo () == 0)
        stepper3.moveTo(-stepper3.currentPosition());
       stepper3.run();
}

Any thoughts on why this doesn't work?  It works with other motors and the original Accelstepper library.

Thanks in advance!
Atman
Logged

0
Offline Offline
Full Member
***
Karma: 5
Posts: 229
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hmm no idea really... uploaded your code and it works just fine.

I see two possible options
1. Try lowering speed and acceleration as the motors move better in one direction that the other so my only guess is that it is stalling.
2. Your wiring is incorrect


« Last Edit: December 16, 2013, 11:46:10 am by kerimil » Logged

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

Glad to hear it works for you.  I'll check out my wiring.  I had my speed and acceleration set pretty low, so I doubt that's the problem.

Thanks!
Atman
Logged

0
Offline Offline
Full Member
***
Karma: 5
Posts: 229
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

usually I run it much faster and it works fine
Logged

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

Try to remove AccelStepper library and import it again with new files you downloaded here  smiley
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 35
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

good idea expanding the library, these steppers are cheap and great for experimenting

what version of the library did you change?
and what exactly did you change?
and why? what was missing in the library? afaik the 28byc is just a stepper with a gearbox attached, and it works with the standard library.

i am a bit new to steppers, so please excuse me if I overlook something obvious. i downloaded version 1.39
Logged

0
Offline Offline
Full Member
***
Karma: 5
Posts: 229
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

They need an 8 step sequence. I used the newest version I could find
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 35
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hi again ...

i delved a bit deeper myself, as you provide very little information
the version you used is 1.37 and it has a little bug. (which is fixed in the latest version, currently 1.39)

i still do not fully understand why you need a 8 step sequence to make the stepper run. the original stepper library manages to do so nicely with 4 step sequence. I am going to investigate further, and I will let you know.

just as part as my learning process, to really understand how steppers work, and how this library can be used
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 35
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ah - got it ...

nothing wrong with the original library

pins 2 and 3 need to be swapped, than both FULL4WIRE and HALF4WIRE work as expected
so - define a stepper as follows:
AccelStepper byj(AccelStepper::HALF4WIRE, 8, 10, 9, 11); // byj - pins 2 and 3 swapped !!!
(use HALF4WIRE for half stepping)

arduino pin:         ULN2003A IN pin       out pin      color code on the byj stepper
8                             in4                                D                  blue
9                             in3                               C                  pink
10                            in2                               B                  yellow
11                             in1                               A                  orange
+5v                          vcc                                                   red

sorry - don't know how to make a pretty table, hope this clarifies things
Logged

0
Offline Offline
Full Member
***
Karma: 5
Posts: 229
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

That's what the datasheet says. IIRC sbbright mentioned it in his example code.
Logged

Pages: [1]   Go Up
Jump to: