Multiple Stepper Motor Project Questions

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

These links may help
Stepper Motor Basics
Simple Stepper Code

Be aware that the useful torque of a stepper declines with speed. The better motor manufacturers have graphs showing the relationship between torque and speed. I suggest you look at some of them, even if you want to buy a cheaper motor.

If you have a budget constraint then I suggest you start with one motor. That way your loss is minimized if you need to get a bigger motor.

Be careful to select the motor before you select a driver to ensure you get a suitable driver. The A4988 is rated at 2 amps but 1.4 or 1.5 is a more practical figure to avoid it cutting out from overheating. I suggest you choose a driver that has at least a 30% margin above the motor current. 50% would be better.

Having said all that I suspect a simple geared DC motor with limit switches would be just as suitable for your project.

...R

Steppers only hold position when they are powered. As soon as you turn the power off, the screen will drop. Is screen-down the default position of the system?

Steppers use maximum power when stationary. So holding the screen up requires full power.

2.5ms steps is easy for the Arduino software. That is 2500 microseconds. You don't need to use the timer hardware.

The tricky part with a DC motor is the limit switches for the multiple-turn output. Garage doors and other similar devices use gears for their limit switches, so the lever that touches the switches only does a half or quarter turn.

Alternatively you could have a switch or optical detector looking at a bump on the output shaft. Count the bumps as you drive down. For fully-up just drive for twice the normal time that it usually takes to go all the way up.

Search ebay for gear motors. A small gearmotor should be cheaper than a stepper with the same torque.

Hi All,

Thank for the comments and suggestions.

"Steppers only hold position when they are powered."

I have a stepper motor from an Arduino starter kits, and it is damn near impossible to turn when it is not powered. It is a geared stepper (64:1?) so that may be the issue. When the power is off, I don't really care if the screens unroll. This is for a stage production and they will be powered whenever they need to be up or down. With that said, will a stepper be able to hold position for 10's of minutes at a time? When down, there should be very little torque trying to move the motor. Maybe I could cut the power to them when they are down?

This is one readily available geared DC motor I've found that may meet my needs (similar motors are all over Ebay and elsewhere for the same price):

https://www.amazon.com/gp/product/B072B83JY4/ref=oh_aui_search_asin_title?ie=UTF8&psc=1

I need a total of 9 of these for my project, so I'm in the $270 range for motors and another $10 to $20 for limit switches, and a bit more for mechanical bits and pieces to make the limit switches work.

I mocked up one screen using this motor a while back, and the issue is the limit switches. When going up there is no problem since the rod/weight at the bottom of the screen pulls solidly into the limit switch. The issue is when the screen is going down, the rod/weight trips the limit switch but the motor still turns a fraction of a revolution (gearbox inertia) and the screen sags since the bottom is being held up by the limit switch arm a bit.

I've come up with a way to use a lead screw on the shaft driving the screen roller to trip the down limit switch, but I'm afraid it will be touchy and not fully extend the screens consistently. I have not tested this yet.

By comparison, I can buy 9 Nema17 stepper motors, 3 CNC shields, and 3 Arduinos for about $205. I only need one limit switch on the up travel, I can fine turn the number of steps to unroll the screen, and it will be much simpler to install an adjust, and more reliable.

The motors I'm looking at are rated at 1.7A, so I have a 15% margin under the driver rating. They will have proper heat sinking, and will be located with plenty of open air around them.

Thanks again for your experience and willingness to help.

-Jim

Stepper motors can hold position indefinitely.

You should design your bottom limit switch so that the trigger point can move past it (so there is no sag) OR, after the switch is triggered get the motor to move up for a few steps to take up the slack.

...R

Hi All,

Thanks again for the info.

I looked into torque curves, and while I can't find the one for my potential stepper, the curves typically show that in my speed range (120RPM), the available torque is equal to or exceeds the holding torque. This means if the stepper can hold the screen in position, it should also be able to roll it up with out losing sync. If a stepper can hold position indefinitely (per Robin2), this should work for my application.

The situation where the screen has some slack was for the DC brushed motor with no Arduino controller, just limit switches.

If I go with the steppers, I don't plan to have a lower limit switch, I'll just count steps to unroll it and then step it until the upper limit switch is hit. This way I don't have to worry about losing a step.

Thanks,

Jim

tnjyoung:
the available torque is equal to or exceeds the holding torque.

Post a link to one of the graphs you are working from. I think you are misreading it. AFAIK the holding torque is always greater than the running torque.

...R

I would also suggest you to look into geared motors with encoders. Cheaper than steppers, and much more power efficient. If you have one with a worm drive it will hold position with very high torque (until you pull so hard the whole thing dislodges), no need to keep the motor powered on at all times.
Run your motor, and instead of having it make a number of steps, you count encoder pulses and stop the motor when enough pulses have been received (you can slow down near the end points).

If you have any suggestions on geared motors with encoders, I'd be willing to look at it. The motors I've found (see link above) are $30 each. Encoders are another $10 for 5 of them. But then I have to attach and them and deal with mechanical limit switches, etc... I can get 3 steppers for $40, and the CNC shield and Arduinos for another $18.

Nothing specific in mind. The ones I have for my toy robot cost maybe RMB 5 per set (motor + encoder disk + optical detector). Your motors look a lot more powerful.

For your required torque, I get to 0.75" * 3 lb = 2.25 in.lb. The motor you link to is rated at triple that, should be enough.

Power use is another consideration. At just 180 mA free running you can use a cheap tb6612fng H-bridge to control them. You only need two of those ICs as they have two H-bridges per unit. You don't need a 6-10A 12V supply, a 1-2A one is enough. Thinner wires, smaller motors and little to no heat to deal with are other advantages.

Your stepper, if not through a work drive, will only keep your screen up as long as you have it powered. Day and night it would have to be powered.

You can make your own encoder with a white (or black) dot on the shaft and an optical pick-up. This allows you to read full rotations, which may very well be precise enough for this application.