I'm building a machine that uses a single stepper motor connected to a gearbox. I'm running it at full steps and I seem to only be able to reach 1000 steps per second with a 200 step/rev motor. Much higher and it stalls and makes a lot of bad noise. I really would like to be going at least 2000 steps.

Here's some specifics on the hardware:

The original machine used a pulley between the motor and gearbox. Because I don't want slippage, I've switched to a gear and chain setup, but I think the gear ratio is reasonably similar. I had hoped that this stepper was powerful enough to replace the original DC motor, but it doesn't seem to be able to run quite as fast. Did I pick the wrong stepper?

On a related note, is there any way to do a comparison between a stepper and a regular old DC motor? Or is that comparing apples to oranges?


You don't say it, but your problem may be that you're trying to start the stepper at full speed. If so, there is a maximum speed (which varies somewhat with load) beyond which a stepper will not accelerate, and this speed is normally well below what you can reach with a gradual increase in speed. Google on "stepper motor torque curve".

The problem is that, with a 4-phase stepper such as you are using, if the shaft angle lags more than 2 step angles behind the commanded angle, the torque reverses and the motor sits and vibrates and makes horrible noises. This is not, technically speaking, a stall condition, where the shaft does not move at all.

The torque-speed curve for your motor can be found at http://www.kelinginc.net/KL34H2120-42-8AT.pdf and indicates that the motor can be run at 5000 steps/second, which suggests that your problem is your attempt at fast start.

If, on the other hand, you've already tried a slowly increasing step rate while running, then you probably do need a heftier motor. However, my calculations for a .144 hp motor at 10 rps gives about 2 Nm torque, and the linked torque curve for your stepper is about the same, so I wouldn't expect a problem. Unless, of course, you've modified your mechanical setup somehow.

  • \$\begingroup\$ Sorry, forgot to add that I am using an acceleration setting. And I even set it very low, but have the same problem. I can't remember what the units were in, but at 1000 steps/s it was set at 10000 on the acceleration and worked fine. I believe I tried 500 on acceleration with 2000 steps/s and it didn't work. Nothing modified on the mechanical setup. \$\endgroup\$ – Dan May 17 '14 at 23:55
  • \$\begingroup\$ Is there any chance you set the current with a 27k resistor, rather than a 270k? Just asking out of desperation. \$\endgroup\$ – WhatRoughBeast May 18 '14 at 0:59
  • \$\begingroup\$ Sorry for my inexperience with steppers, but I think what you are referring to is resistors to set the amp rating on the driver? I don't use one. I don't believe the Geckodrive needs one. You just set the dip switches and you're good. \$\endgroup\$ – Dan May 18 '14 at 2:32
  • \$\begingroup\$ You're right, you can set the current either by dip switches or by an external resistor. See the manual. As I said, I was grasping at straws for advice to give you. Is it possible that you've set the switches wrong? If you set the current too low (and thus the torque), that would explain things. \$\endgroup\$ – WhatRoughBeast May 18 '14 at 3:50
  • \$\begingroup\$ Originally I did have it at 3 amps. But I changed it to 6 and still no luck. I'm pretty sure it's set right. The dip switches are clearly marked. I've had some doubts about whether the voltage booster is good enough. I'm not really sure how to test it. But I'd think 600w is more than enough. \$\endgroup\$ – Dan May 18 '14 at 4:02

If your application does not need the positioning accuracy of a stepper motor, you may want to consider going back to a DC motor. A stepper motor may not be the best choice for speed and torque.

Regarding the maximum attainable step rate of your stepper motor. If you have a good (jitter free ... see below regarding jitter) variable clock source such as a function generator, try attaching that to the step input of your stepper drive (be sure to adjust the voltage output levels first, of course). Ramp up the speed by turning up the rate manually and see how fast the motor will go.

A commonly overlooked problem that can limit the speed of your stepper motor (besides the need for an acceleration ramp correctly suggested by WhatRoughBeast) is jitter in the timing of your step pulse.

Jitter is often caused by variations in the timing loop or the latency of the interrupt routine that generates the step pulse. The variations are often due to latency caused by other interrupt routines of equal or higher priority.

You can check for jitter by running the stepper motor at a constant rate and looking at the period of the step pulse with an oscilloscope set to continuously trigger on the step pulse. Adjust the sweep to show the next step pulse after the one triggering the scope. The amount of jitter is the variation between the maximum period measured and the minimum period measured.

How much jitter is too much? That's difficult to say. Any jitter is bad. More jitter will have a greater effect on the maximum step rate. In general, you really need to keep jitter below maybe 5% of the minimum desired step period (maximum step rate).

How can you reduce jitter? Depending on what else the processor is doing, this can be a daunting task:

  1. If your step pulse is generated in an interrupt, move it to the highest priority possible. Move other interrupt routines to a lower priority. If there is anything in your code that temporarily disables interrupts, does something, then re-enables interrupts; you should try to reduce or eliminate the time that your interrupts are disabled.
  2. If you have any other interrupt routines of equal or higher priority, their entire execution time will add to your jitter. You need to shorten them to the greatest extent possible. Eliminate any un-necessary delays. Anything in those routines that does not need immediate servicing should be moved to the main loop (or sometimes a lower-priority interrupt).
  3. If your step pulse is generated in the main loop and samples a timer, the entire loop time will contribute to your jitter. Consider moving it to a timer interrupt. If you are not using a timer to time the stepper, seriously consider using one.
  4. If your processor has too many tasks to reduce the jitter, you may need to consider adding another microcontroller to handle the stepper motor.

Stepper is not good for high speed rotation. It quickly reach max. RPM when motor gets in resonance. It need proper ramping to get "slightly" higher speed. To increase max.speed over-voltage is good idea. When driven by driver which is sensing current it's not problem because the motor current never exceeds datasheet value you set to driver. I.e. double voltage hopefully double RPM (but not such a relation torque!). Even a step-up converter is good when you have not high enough voltage power available.

Because you wrote you tried it without any effect I'd check how change of load (without load) has influence on behaviour. I think because you removed gear box (i.e. you need higher torque) might not be good for stepper which is mechanically behind magnetic field and falls into resonance. Finer ramping (accelerating) does not have any influence ?


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.