FInd the appropriate stepper for microstepping


I am out of electronics since 2008 (the last year of high school), at the time I was able to design 100Mhz frequency meter with 1 Hz resolution using a 16F84, now I forgot pretty much everything..

I'm looking for a stepper motor with mimimum performance of 245 rpm and 1 Nm torque under load, but using microstepping (I need a final step resolution of 360°/4096). I don't want to use gears.

I'm very rusty! :D

I suspect you meant 100kHz rather than 100MHz ?

Very many stepper motors do 200 steps per revolution. To get 4096 you would need 20.48 times microstepping.

16 times microstepping is common and would give 3200 steps per revolution.

Microstepping is a feature of the stepper motor driver board rather than the motor. As an example look at the Pololu A4988 stepper driver.

You will need to ensure that the motor you choose draws a current that is within the scope of the driver board (or vice versa). This motor may be suitable and will work with the A4988


3200 stp/rev and 245 rpm gives 3200 * 245 * 60 = 47Mhz step pulse rate ... even with full steps (200*245*60 = 3Mhz) the A4988 can do no faster than 0.5Mhz (minium pulswidth for Step) You need a different stepper motor controller/circuit and a faster processor than the Arduino.

You can achieve 4096 step/rev resolution, but you certainly won't get that accuracy as microsteps are not very linear. They are only repeatable with very light mechanical loading.

If you want repeatable accurate positioning to 4096/rev then you need either:

stepper motor with backlash-free reduction gear servo motor with high-performance encoder and servo-driver unit.

both are expensive.

Msquare: 3200 stp/rev and 245 rpm gives 3200 * 245 * 60 = 47Mhz step pulse rate ... even with full steps (200*245*60 = 3Mhz) the A4988 can do no faster than 0.5Mhz (minium pulswidth for Step) You need a different stepper motor controller/circuit and a faster processor than the Arduino.

Good point. I hadn't done that calculation.

I suspect there are few motors that can take a 47MHz step rate.

High speeds will need to be achieved with full steps, not microsteps. But even then 246 rpm needs nearly 3MHz.


Robin2: I suspect you meant 100kHz rather than 100MHz ?

Nope, in fact it was able to read frequencies upo to 100 Mhz, and the resolution was 1 or 0.5 Hz; it was crystal controlled, thermally balanced, and calibrated in my high school lab; I spent less than 20 euros to build it, and it was small like a cell phone; in comparison the frequency counters of our high school labs was huge, expensive (1-2'000 euros) and can't be programmed (with mine you was able to store frequencies and do addition and subtraction).

However, I can understand that it isn't a practical solution. I thought about a servo, with a PID algorithm, but I know that there are problems with resolutions as high (4096 bit per revolution) - I know that due to gears backlash the last openservo attempt has serious problems and oscillates. And the holding will be also an issue.

Now I'm considering a reduction gearbox with anti-backlash gears (certain solutions can be very cheap), but I hope I can achieve this only with four gears (so two anti-backlash) so I can have a 8:1 ratio or so, and to achieve a 4096 resolution I need 512 step. And this still retaining 1 Nm of torque at 240 rpm...

The half-stepping will result in half the holding torque? ANd the microstepping of n times will cause n times loss of torque?

Also, can you address me to some knowledge articles about half-stepping, microstepping and etc.?

3200 stp/rev and 245 rpm gives 3200 * 245 * 60 = 47Mhz step pulse rate .

Maths Fail. 3200 * 245 /60 = 13066 hz 13kHz, not 47mHz.

:sweat_smile: (actually I got it right in the first draft, then I suffert a "mindfart", and did the opposite before posting.) :blush:

13Khz is dooable in a normal Arduino, if you dont do too much else.

@pravda, full marks.

@Scipione205, if you use a "proper" stepper motor driver board (like the Pololu A4988 I mentioned earlier) it will take care of the microstepping.

This document may be of interest


Thank you very much for the discussion; I was looking actually for an application note regarding the microstepping itself; I read somewhere that the higher the division (let's say, 16x), the lower the repeatability.

I'm considering again to use a brushless servo with titanium gears, with the pot/encoder and electronics removed, using my 12bit absolute encoder on the output shaft, and Arduino as a controller; I hope that 16.73 Khz and 0.088° of resolution on the output shaft will not cause the moto to oscillates when holding torque, or to reach the position under load.

However now I'm thinking that for my specific application, the servo will move a device wich is 'damped' so the holding torque isn't an issue, the important thing is to reach immediately the desired position acting against some resistance.

I know that the servos (motor+gearbox) has this kind of issues due to the gearbox backlash.

I will investigate, if anyone has some articles, ANs or other stuff to study, please add them here! :D

Irrespective of it being a stepper - when it is "holding" there is no change in the coil currents. Any damped oscillation comes from the force-proprtional-to-deviation of the permament magnet and the electromagnets. I am not sure if it obeys the constraint to oscillate. A servo though will "hunt", because it is an active feedback circuit that applies current when it has deviated, and when it is in the middle applies no current. Both are very similar, but I have not heard a stepper oscillate because there is a load when holding. Servos do. Lots.

Steppers - in general - are not fast. For a really fast movement and accurate positional control you need a dc (or brushless) motor and encoder feedback. Positioning then again gets the same problems as the Servo when holding against load.