# Stepper motor won’t turn once loaded

I can’t get a stepper motor to rotate a load that it should have enough torque to rotate. The load is a 3’ x 3’ x 2” table, with the stepper motor centered underneath. I have a 51204 thrust bearing between the motor and the table to reduce friction as much as possible. The table can be turned with a light touch, and when set in motion it continues to glide for some time before coming to a stop. I had a simple flange bushing machined which connects the motor shaft to the table. The motor shaft is secured using a set screw.

I’m using a 5V 1A DC power supply. I used the code and circuit from the MotorKnob example on the arduino website. I got a Texas Instruments SN754410NE dual H-bridge as instructed, since my motor is bi-polar. I modified the circuit to make it actually work (added one wire connecting the two +5V outside rails of the breadboard) and i successfully got the motor spinning ok by itself, and with the flange bushing attached. Everything seemed ok.

However, when i assemble the table, it does not behave as expected. I’ve fiddled with the setSpeed function: at 10RPM or less almost nothing happens, at 30-40 RPM it starts turning very slightly, then stops moving, then when the motor stops it sort of repositions itself and jiggles the table. Above 60RPM very little motion occurs. I’ve tried adding more steps (the motor is 1.8 degree, so 200 steps), but that has little effect either. I also tried setting it to step one at a time, with a delay between single steps, but this sometimes worked and sometimes did not. the motor gets the load moving, but then the load keeps moving, sometimes forward, sometimes as if the motor is trying to keep position. When it’s time for the next step, often the load is already spinning, which i wonder if is causing it to miss steps. This stepper motor can theoretically output 490mNm, Which should be more than enough to turn this table (estimated weight of 30lbs), but so far I haven’t been able to make it work with the standard stepper.h library. I’m aiming to eventually be able to turn ~500lbs on the table, and my math suggested that this motor should produce enough torque to rotate that weight 180 degrees in ~30 seconds (including allowing for friction of bearing). Any suggestions/hints/comments?

Stepper Motor: Trinamic Motion Control GmbH QSH4218-51-10-049 http://www.digikey.ca/product-detail/en/QSH4218-51-10-049/1460-1076-ND/4843427

Circuit & code from here: https://www.arduino.cc/en/Tutorial/MotorKnob

I was reading up about how if the voltage profile for the stepper is not properly aligned for the particular motor, it may turn weakly (or not at all). Could that be what is happening here?

I’ve got an A4988 driver board now, I’ll try using it tomorrow, but i have a feeling my problems are in timing the motor control.

And lastly, if you had to design a system to rotate a table like this, would you go with a stepper motor? the rotation only has to be 90 degrees once every 24 hrs.

• Most probably the motor can't handle all the weight? And that the stepper motor is not able to keep up with the input signal that is supposed to be controlling the spinning of the rotor due to it's inability to move the rotor in time. – Alexander Sabiona Dec 18 '15 at 3:23
• Direct Drive????? Seriously??? Might I suggest a LARGE toothed belt pulley for the table and a SMALL toothed belt pulley for the motor? And quite possibly more motor? I guess WRB already did, more or less. – Ecnerwal Dec 18 '15 at 5:26
• Also your power supply voltage is too low. To retain torque when driving a stepper motor at speed requires a supply voltage several times the coil's rating to overcome the inductance, and something like a chopping current regulator to automatically scale that to whatever is actually needed to achieve rated current at a given step rate. – Chris Stratton Dec 18 '15 at 6:00
• Yep I'm seeing it's a combination of problems. I should be using gears/belts, my supply voltage is too low, and i need to be using a proper motor driver circuit. here's some more excellent feedback I received from the guys over on the arduino forum: forum.arduino.cc/index.php?topic=366491.new#new – scott Dec 18 '15 at 20:25

Holy cow. That's a real load for a little motor like yours. The problem is not weight, but moment of inertia. If you're going to do this stuff, you need to figure out how to calculate this.

First, moment of inertia. For a disk of mass M and radius R, $$I_z = \frac{MR^2}{2} = \frac{(13.6 \text{ kg})({.43\text{m})^2}}{2} = 1.3$$ Since the nominal torque T of the stepper is .49 Nm, and 1/200th of a revolution is $$\Theta = \frac{2 \pi}{200} = .0314\text{ radians}$$ the nominal time for one step (starting from rest) is $$t= \sqrt{\frac{2\alpha}{\Theta}} = \sqrt{\frac{2T}{\Theta I_z}} = \sqrt{\frac{2\times .49}{.0314 \times 1.3}} = 4.9 \text{ seconds}$$ So your problem is that you're trying to step way too fast. Even manual stepping is, as you've discovered, unreliable. Your table is not terribly massive, although 30 lbs is more than you think, it's the large radius that giving you problems.

For this application, I'd recommend either a much beefier stepper, or a reduction mechanism to increase the torque at the table. Try putting a simple bearing at the axis, and use the stepper to drive the edge of the table (I'm assuming it's a circular table) using something like a 1" diameter rubber wheel - the smaller the better. This will give you a 30-fold increase in torque, with a starting step time of the order of 1 step/sec. You'll be able to ramp up the speed as the table rotates faster, so your total time will be less than 200 seconds for a revolution. But also keep in mind that you'll need a deceleration profile which matches the acceleration profile. The stepper will have exactly the same problems stopping the table that it had starting it.

EDIT - Oh yes, and your final load is not going to help. If it at all approximates a cylinder of the table diameter, since final mass is about 16 time the table mass, your step time will have to increase by a factor of 4.

• thanks, actually the table is square, which means its a different moment calculation and removes the possibility of driving from the outside edge. I do see that some sort of gear/belt system is probably going to be required. here is more discussion on the arduino forun: forum.arduino.cc/index.php?topic=366491.new#new – scott Dec 18 '15 at 20:28
• @scott - With a square table, you'll need to make a cylindrical ring attached to the underside, with either very precise centering or some sort of idler mechanism. A belt system using commercially-available pulleys is perfectly possible, but for the sort of torque ratios you want, the larger pulley will be very large, and therefore expensive. Ultimately, a gearhead may be cheaper. – WhatRoughBeast Dec 18 '15 at 20:59

You need to get a smart driver that can handle acceleration and deceleration. This will allow it to put energy into the system and take it out of the system as it is able to rather than attempting it all at once.

If you are super fancy with your microcontroller programming skills, you can do it the hard way, but a smart driver will get you started more quickly.

Here's a board from Sparkfun that uses ST's L6470. It's pretty good. There are others out there too.

The only catch is that you'd need to increase your supply voltage a bit.

• I think you have missed the fundamental problem - the moment of inertia. – Transistor Dec 18 '15 at 10:32
• Uh, no. If you have a giant mass you have to turn with a motor, you use a velocity profile to slowly add energy. You can't have discontinuous velocity in a system with a large moment. – Daniel Dec 18 '15 at 16:26
• That would work with, say, a DC motor but how how can you give a velocity profile to a 1.8° discrete step on a stepper motor? The Sparkfun board you reference does micro-stepping which may be a huge help. You should explain micro-stepping in your answer. – Transistor Dec 18 '15 at 19:24
• You can use velocity profiles without microstepping. If the stepper motor is literally not able to move the load, it doesn't even matter, but if it can go a single step, it is possible. – Daniel Dec 18 '15 at 20:40
• But surely that's the problem - to get it to move the first step? I agree that if you can move the first step that you could probably move a second and a third ... – Transistor Dec 18 '15 at 22:00