Hi All,
I'm looking at a project where I need to control 3 stepper motors independently, and as usual within a budget. They will be used to roll/unroll 3 projection screens on command.
Specifics of the project:
1.) Motors only need to move from a "home/zero" position (screen rolled up, limit switch hit) to a specific number of steps (screen unrolled, no limit switch).
2.) Screen weighs approximately 3lbs with the weight at the bottom, and roller is 1.5" in diameter. So I calculate approximately 50oz-in of torque is required.
3.) Speed required is approximately 120 RPM (~2 revolutions/second)
4.) Control 3 motors from 1 Arduino with independent motion (e.g., one rolling up, one rolling down, one not moving).
5.) Screen state is determined by digital I/O pins (1 I/O pin for each screen)
6.) 12V battery to power motors
7.) Motors are up to 10 feet from Arduino/driver
I've found this kit that looks like it will do the job:
Also, I may be able to source the motors and controllers separately at a bit of a savings, from the same manufacturer. I looked at the Arduino store, but the motor shield only handles one stepper and this would blow my budget. Does anyone here have any experience with this manufacturer, and/ or the A4988 driver IC?
Steppers appear to be spec'd for holding torque, so I wasn't sure if the motion torque is similar or not. Can I use the torque specs published on these motors to calculate if it will move my load?
The drivers appear to be able to handle 2.5A, but the stick on heatsinks concern me a bit. The motors will be operated continuously for 10s, with anywhere from a few seconds to several minutes before being run for another 10s. Not sure if heat or duty cycle is a concern with the motors or drivers.
Any issue with driving the motors over 10 feet away?
I've looked at the Arduino stepper library, and the move functions are blocking, so it looks like I need to use a library like AccelStepper to be able to have each motor running independently. Or, this controller appears to have just step and direction inputs, so would it be possible to use a timer interrupt to control the steps of the motors by bit banging 2 I/O pins? Any recommendation in this area?
At 2 revolutions per second and 200 steps per revolution, that should be 2.5ms per step. Seems like a timer interrupt could control three motors.
To keep the SW simple, I'm thinking of reading the digital input, determine if the screen needs to move, move it to the new position (rolled up, rolled down), and only once the motor has stopped, would the SW check the digital input again. This way I would not have to deal with changing directions in the middle of opening or closing the screen (which should not happen).
Normally I would do more research on such a project, but I've got about two months to get a functioning system in place, and I don't have a lot of time to order stuff, experiment, and try different things. Any comments, suggestions, experience is greatly appreciated.
I've got one successful Arduino project under my belt, I'm an electronics engineer by day, and I have written my fair share of code. So, I have no problem tackling this and solving problems, I'm just hoping to leverage some of the experience here to make this project go smoothly and point me in the correct direction.
My backup plan is to use simple DC geared motors, relays, and limit switches. This may be simpler, but the DC motors are $30/each and I may need two per screen, and actuating the limit switches is not very reliable. So, I could actually save money going with an Arduino system. I was surprised that stepper motors were cheaper than a brushed DC motor, but maybe they are simpler to manufacture?
Sorry about the novel, and thanks for your help,
Jim