Yet another iteration of nothing
Random header image... Refresh for more!

Category — Ballscrews

Driving a Ballscrew – Servo vs. Steppers

Excellent example of Servo vs. Stepper vs. Feed Speeds. This is by John Dammeyer, developer of the Electronic Lead Screw Project: Electronic Lead Screw Main Page

…now I did some experiments as a result of this posting subject. I found if I turned the handle for moving the carriage at what was a pretty normal speed it went 10” in about 4 seconds. That means 10 inches in 4 seconds is 2.5 ips or 150 ipm.

If your goal is to replace the lead screw with a ball screw and still be able to traverse as quickly as the rack and pinion while maintaining knowledge of the position to the nearest 0.0005” you need to consider how you drive this lead screw and the pitch of the screw.

Let’s look at a stepper based solution first.
1. Max RPM with a stepper and still decent torque is about 700 RPM.
a. Use 600 RPM to be conservative (10 RPS).
b. 10 uSteps per step results in 2000 steps per rev x 10 RPS is 20,000 steps per second. (Gecko Driver)
c. Resolution is 2000 steps per rev but accuracy is still only to the nearest ½ step so 400 steps per rev.
2. With 400 steps per rev and a target of 0.0005” accuracy a pitch of 0.2” or 5 TPI is required.
3. With 10 RPS we’re moving 0.2”/Rev x 10 Revs/Sec = 2”/second (2 IPS). However, your target is 2.5 IPS or better.
4. This system won’t move the carriage quite as fast as you normally would with the handle.

Now a Servo.
1. Max RPM is usually 3000 RPM and torque is good all the way to the top.
2. Aiming for 750 RPM means a 4:1 belt reduction.
a. 4:1 on the belt though results in 4x the encoder resolution.
b. With a 100 line encoder in quadrature you get 400 lines per rev x 4:1 or 16,000 steps per rev.
c. Accuracy is still 16,000 steps per rev.
3. Stay with a 4 TPI ball screw and 0.2” pitch we resolve (and position) down to 0.0000125” per step.
a. But at 20,000 steps per second from the ELS you can really only turn the lead screw 1.25 turns per second
b. That’s 0.2”/rev x 1.25 revs/sec = 0.25”/second (0.25 IPS). A factor of 10 too slow.
4. I think Gecko has a step multiplier that turns the servo 10 lines for every step in.
a. Now we’re at 2.5 IPS which was the goal.
So: A DC servo Motor with 100 line encoder on a 4 TPI ball screw results in a position resolution and accuracy of 0.000125” with a top speed of 2.5 IPS and a step rate input of 20,000 steps per second.

Please correct my math if I’ve made a mistake.

From: []
Sent: March-19-16 8:29 AM
Subject: [E-LeadScrew] Re: Ball screw question

Though I am not an engineer it looks to me that the stock design of the
leadscrew on this particular lathe looks to be at fault. The leadscrew has a
slot that runs down the entire length of the screw itself that is used to
power the cross feed. The screw was turned and then the slot was milled.
This left many “teeth” that in a relatively short amount of time “cut” away
the half nut. The half nut itself just pushes forward on a lever. There is
no “backing ” at all to support the half nut and in order for it to track a
considerable about of force is applied to keep the half nut engaged.

I doubt it is the design’s fault. Thousands of lathes use this exact
system to drive the carriage and cross slide without and wear issues. The
half nuts stay engage without any extra pressure also. I am wondering if
someone ground the bed and didn’t take the extra time to align the lead
screw with the carriage? I can assure you something else is going on with
your lathe other than the keyway down the center of the lead screw.
Rick in WA State

[Non-text portions of this message have been removed]


Posted by: “John Dammeyer” <>

Reply via web post Reply to sender Reply to group Start a New Topic Messages in this topic (12)

I use a 10.000 count encoder on the servo, and 1:2 belt drive, and 5 mm 
pitch screw.
=> 20.000 counts/rev at screw.
=> 4000 steps/mm.
= 0.25 microns.

This is pretty much the ideal setup.

3000 rpm = 50 revs/sec.
50 revs x 10.000 counts = 500.000 kHz.

So, I must have a hardware timing engine able to pulse at 500 kHz 
(Cslabs CSMIO-IP-S).

End result.
The servo will spin upto 3000 rpm in approx 0.03 secs (20 ms no-load, 
and 20-30 ms with the 100 kg carriage).
This is far too fast, huge wear on belts and screw and ways, and very 
much more than needed.
So, I limit it in sw to something same.

At 1500 rpm at screw, or 25 revs/sec
=> 25 x 5 = 125 mm (==5") per sec.
Movement on z axis is approx 400 mm max.
So, end to end is 3.2 secs.
This is far too fast, so I software limit it to something sane.

Generally, the tools are only about 100 mm from the workpiece, and in 
less than a second the lathe has the potential to crash.
Thats why I normally keep the speeds way down.

The 0.25 micron step size results in real-worl, actual, resolution of 
approx 1 micron, or a bit better.
Hope is to get 0.5 microns, and may (or may not) need ground ballscrews.

Engineering theory and lots of real world examples says 0.5 microns is 
routine, given a sufficiently rigid system.
Thats why I use a very think, 32 mm, ballscrew, because it has very high 
rigidity of 54 kgf/um.

(High precision optronics screws with 0.25 mm rise can position to 0.5 
micron accuracy and several manufacturers quote similar accuracies.
Available from thorlabs, about 70€ each.
Its the kind of thing I will be making).

Accuracy is not, at the moment, 0.5 microns, but in theory and practice 
I will probably get there.
Plan is to add glass scales, and secondary feedback to the CSMIO controller.

At the moment, its possible to do incremental movements to 1 micron.

This means I can make gages, with steps, of 1 micron.
By then measuring the gage, one of the steps will be 49.999 mm.

This will then be what I make bore for, to mount high precision bearings.
(7210AC-DUP-P2. Yes P2 or ABEC 9).

The z axis started working last tuesday, after 300 work hours (this time 
round), and 12 years of development and tries.
Alignment was really hard.

Last TS bracket (not really needed) will hopefully be finished today.

Very Big Grin.
Gonna go make bracket.

On 19/03/2016 17:18, 'John Dammeyer' 
[E-LeadScrew] wrote:
Now a Servo.
1. Max RPM is usually 3000 RPM and torque is good all the way to the
2. Aiming for 750 RPM means a 4:1 belt reduction.
a. 4:1 on the belt though results in 4x the encoder resolution.
b. With a 100 line encoder in quadrature you get 400 lines per rev x
4:1 or 16,000 steps per rev.
c. Accuracy is still 16,000 steps per rev.
3. Stay with a 4 TPI ball screw and 0.2” pitch we resolve (and
position) down to 0.0000125” per step.
a. But at 20,000 steps per second from the ELS you can really only
turn the lead screw 1.25 turns per second
b. That’s 0.2”/rev x 1.25 revs/sec = 0.25”/second (0.25 IPS). A
factor of 10 too slow.
4. I think Gecko has a step multiplier that turns the servo 10 lines
for every step in.
a. Now we’re at 2.5 IPS which was the goal.

So: A DC servo Motor with 100 line encoder on a 4 TPI ball screw 
results in
a position resolution and accuracy of 0.000125” with a top speed of 
2.5 IPS
and a step rate input of 20,000 steps per second.

Please correct my math if I’ve made a mistake.

John Dammeyer
— -hanermo (cnc designs) ———————————— ———————————— ————————————

I think its a fact that microstepping, where you are actually stopping at the microsteps (i.e. using them for resolution) definitely is less torque, simply because the motor cannot hold that position accurately against load. In a dynamic situation however, lots of factors come into play. For example, if the axis is in constant motion the only torque required is to overcome friction and cutting loads, there is little torque required to provide acceleration. Unless the motor is being operated close to its torque limit (at that speed/volt/current combo) then microstepping should have little impact. The general rule I have used is in the spreadsheet is that the motor should provide 3x required dynamic torque at the maximum speed.

Large motors have high inductance so the torque drops off very fast with speed – the corner speed of those motors is 240rpm. I don’t know how big your axis are, but I’m guessing its going to be around 1 – 1.2m? With your 10mm pitch screws 2.5m/min = 250rpm, so that is close to optimal (and 1/8 stepping = 6664steps/sec) and it looks OK at cutting speeds, but its very marginal at 10m/min rapids and that is where you may have lost steps (=27000steps/sec). You need to reduce rapids to 7m/min but it should be OK at 1/4 or 1/8 stepping.

March 19, 2016   Comments Off on Driving a Ballscrew – Servo vs. Steppers


From the ever popular CNCZone:

Al_The_Man and Crevice Reamer:


Only 3 types of couplers offer true zero backlash connection:

Solid. (which can cause problems unless PERFECTLY aligned, Helical, or Oldham.  Helicals are basically solid couplers with some alignment flexibility. Make sure you get the clamping type.


If by Lovejoy you mean spider type then it depends on what material and fit is used for the spacer, the next best is Oldham which is a form of zero backlash spider style.
There is also Disc type zero backlash, if using Helical for any kind of stepper or servo torque application then stainless should be used, aluminum does not stand up to repeated flexing, especially with any slight misalignment.
Either the Lovejoy or Misumi sites will show all the different kinds they offer.

October 19, 2015   Comments Off on Couplers

Dual Closed Loop Control with KFLOP

The Dynomotion KFLOP controller can control 8 motor axis (either as 4 dual/slaved or 8 independent), complete with 8 dedicated hardware encoder channels (while any generic input could be used in theory for encoding,  I understand the general I/O speed is much less than the dedicated lanes).

Placing rotary encoders on stepper or BLDC/BDC/AC motors can feed information on the motor position back to KFLOP, which will then apply corrective action to the drivers to accurately place the motors exactly where they were commanded to be (See Dynomotion – Closed Loop Stepper Control)

Unfortunately, this does nothing to compensate for pitch error in the screws, lash, or other purely linear mechanical elements. The solution to these is to add linear encoders in addition to the rotary; measuring the actual position of the linear elements and sending that feedback to KFLOP.

With a stepper system, one might be able to utilize linear encoders alone, and achieve good results. The stepper motor design itself imparts built in feedback: when the motor is commanded to assume a position, the drive pulse forces the rotor to assume the commanded angle via the two phases. When the motor overcomes the initial frictional opposing forces, the torque is naturally reduced. A stepper motor can be though of as a spring and mass system. The rotor is the mass, and as torque is applied, the magnetic force acts like the spring, storing energy and releasing it (this is also the reason for mid-band resonance in a stepper system). If the load attempts to move the motor out of that position, the increased magnetic field will “push” it back to the commanded position; this force does vary depending on where the motor is (full step and half step are stronger than microstep positions), as the magnetic torque follows a sine pattern.

Having said all that, the “bandwidth” (ability to react in short time frames) with linear encoders alone is said to be rather low/slow.  Enter the Dual Loop setup: using the rotary encoders for velocity control of the motors, and the “outer loop” (linear encoders) for motion/positional control (see Dynomotion – Dual Closed Loop).

Multiplexing Encoders

Unfortunately, encoders #0-4 occupy the same JP connector as that used to connect to a KSTEP (which then uses those pins for multiplexing KSTEP I/O). This is perfectly acceptable for the majority of stepper driven systems (being open loop) and the JP5 connector can be utilized for single loop motor or linear encoders (using the #4-7 encoder channels).

Fortunately, KFLOP can be programmed to multiplex the encoder inputs over to alternative connectors. If the multiplex bit is asserted, the dedicated inputs shift from their normal pin assignments on JP5 and JP7 (respectively) to the first 8 inputs on JP4 and JP6, respectively (4/2012 firmware changesMux’d Encoders Discussion).

The first 8 Inputs on JP4 are Encoders 0-3 A/B signals (when mux’ed). The first 8 Inputs on JP6 are Encoders 4-7 A/B signals (when mux’ed).

Reference MUX program:

 // Mux encoder inputs from KFLOP JP7 & JP5 to JP4 and JP6


Mux = 0                                                              Mux = 1
Signal       I/O Bit  Pin                             I/O Bit    Pin
ENC0A        0                 JP7 – 7                       16             JP4 – 5
ENC0B        1                  JP7 – 8                       17             JP4 – 6
ENC1A         2                 JP7 – 9                       18             JP4 – 7
ENC1B         3                 JP7 – 10                     19             JP4 – 10
ENC2A        4                 JP7 – 11                      20             JP4 – 11
ENC2B        5                 JP7 – 12                      21             JP4 – 12
ENC3A        6                 JP7 – 13                      22            JP4 – 13
ENC3B        7                 JP7 – 14                      23            JP4 – 14

ENC4A        36               JP5 – 1                        26            JP6 – 5
ENC4B        37               JP5 – 2                        27            JP6 – 6
ENC5A        38               JP5 – 3                        28           JP6 – 7
ENC5B        39               JP5 – 4                        29           JP6 – 10
ENC6A        40               JP5 – 5                        30           JP6 – 11
ENC6B        41              JP5 – 6                          31           JP6 – 12
ENC7A        42               JP5 – 7                         32          JP6 – 13
ENC7B        43               JP5 – 8                         33          JP6 – 14

Note that JP6 and JP4 are 3.3V only. Driving them above 3.8V will not do good things to KFLOP’s integrated circuits (JP5 is 5V tolerant by design).


KMOTION Dual Loop Programming

KMotion (the C program loader) must be programmed to join the two servo control loops together, forming an “inner” and “outer” loop. Dynomotion has an example program to do this:

#include "KMotionDef.h"

// Creates dual feeback loops for cases such as rotary motor encoder feedback
// with linear scale encoder feedback.  Two KFLOP Servo Axes are required,
// one for each loop.  Output of the outer loop is applied as a velocity
// to the inner loop 

    for (;;)  // loop forever
        ch0->Dest += ch2->Output;  // move ch0 at speed of ch2 output

This uses two KFLOP Axes channels per set, allowing 4 combined axis. The “FOR” loop can be added to the KFLOP initialization C program as well.

Examples of the settings for KFLOP axes:

Set Inner Loop Axis as:
Input Mode = Encoder
Input Channel = Rotary Encoder
Output Mode = DAC Servo

Set Outer Loop Axis as:
Input Mode = Encoder
Input Channel = Linear Encoder
Output Mode = No Output

Each loop can be tuned separately:

– Tune the inner loop axis for optimal performance based on the rotary encoders

– Tune the outer positional loop for optimal performance based on the linear encoders.

The outer (positional) loop is a higher level control, so it’s output should drive the inner (velocity) loop. example: ch2->Dest +=ch3->Output;


Multiplexing Encoders vs. Input Loss

Multiplexing the encoders to JP4 and JP6 means the previously utilized general I/O connections can only move to JP5 and other connectors (JP7 will still use the I/O pins for multiplexing KSTEP’s inputs). This results in a net loss of available inputs that may be non-trivial to regain.

The Velocity Loop in External Drives

A simpler solution is to fit servo drives that accept encoder feedback and close the velocity/torque loop in the drives, leaving KFLOP to handle the linear encoder inputs, which forms the position loop. The drives will then make certain the motors respond to where they should, and the KFLOP will correct for positional errors via the linear scales. Less control by KFLOP, easier wiring and installation.

Pros and Cons

If the level of mechanical compliance/accuracy of the system is already acceptable, adding the (possibly) significant cost and complexity of closed loop control may not be warranted. Conversely, if the mechanicals are so sloppy a strong wind or quake can shift positions, additional feedback will not make for quality performance.

Closing the control loop around linear scales includes more “bad” mechanical things inside, making the loop more difficult to control. Lash for example, crossing a axis point (think the four quadrants of a circle) will cause considerable havoc as the servo system chases the lash around for that split moment the affected axis is unloaded. Always best to remove lash rather than attempt to correct for it. In addition to Backlash, there is Stiction (static (sticking) vs dynamic friction), and Compliance (elastic modulus). Poor machine design can render expensive zero backlash ballscrews useless. As examples:

  • Inherent design (Box Ways, Dovetail Ways) have relatively large amounts of stiction, which is offset by the proportionally greater load bearing surface area, compared to linear guides.
  • Ballscrew classes can have significant lead error (According to Thompson Ballscrews), a Transport Class 7 rolled Ballscrew can have a permissible variation of 900um in 2500um (0.035 inches in 98), and up to 0.18mm of lash (0.007″).
  • Thermal expansion. On a large machine, the growth of the ballscrew can be significant. (11.7 ppm/° Celsius). As an exaggerated example, a 1219mm long (48 inch) ballscrew, during a 50 degree Celcius rise in temperature, will “grow” 0.73152mm (.0288 inches).
  • Rigidity (stiffness, opposite of compliance) of the unit: floppy drive belts, worn or “sloppy” gearboxes, torsion and bend loads in the structure, flexible couplers

As an example of such from Tom Kerekes of Dynomotion (on a post from CNCZone):


 …So for example say the linear encoder has a small error that the servo wants to correct. This will usually cause the servo to ramp up the motor torque. Eventually the motor will have enough torque to break stiction and begin accelerating. But the linear scales may not yet indicate any thing has moved because of the system’s backlash/compliance. So the Servo will continue to ramp up torque further. Eventually when the backlash/compliance is taken out the Axes will move and the Linear scales will report the motion. But at that point the motor may be at such a velocity that it is difficult to avoid a significant overshoot. Most systems like this can be made to work and be stable but only with very low feedback gains (torque is ramped up very very gradually) resulting in poor dynamic performance (errors are not connected quickly and therefore are allowed to grow to larger values).


February 24, 2015   Comments Off on Dual Closed Loop Control with KFLOP

Excellent Advice on Procuring CNC Components from

A genuine great resource and build log: 5BearsCNC

November 24, 2014   Comments Off on Excellent Advice on Procuring CNC Components from

Ball screw Mapping and Compensation

If you’ve done any investigation into ballscrews, you’ll see there’s a bewildering array of variables: metric/imperial, tolerance classes,  pitch/lead, rotational moments of inertia, backlash compensation methods.


One that may affect cut dimensions is the variation in pitch between one section and another. It may move 10mm in one section, 10.001 in another, 9.998 in yet still another. How much this is an issue compared to spindle run-out, tool accuracy, machine rigidity vs cutting speed is a discussion to be had.

In order to determine the actual distance moved vs what the motion controller thinks has happened, one must have a precision way of measuring that distance. Something better than a ruler, tape measure, tree branch…


In my case, I use either a micrometer/caliper calibration standard (Starret example) or what is the more common method; 1-2-3 gage blocks. Since errors with multiple blocks accumulate, I’d rather use 2-4-6 blocks, but they’re a wee bit expensive, comparatively.

The technique is fairly simple. firmly affix the measurement standard to the mill bed, install a test dial indicator, move the axis to be checked in one direction only (this removes backlash from the measurement), zero the unit, move it the length of the standard, measure again. Check the actual distance against the standard.

Here is the always excellent ‘Hoss’ demonstrating the technique on his mill : HossMachine Mach 3 Ballscrew Calibration (YouTube)

Here’s a posting about it on CNC Zone. As they rightfully say, trying to measure the accuracy of the machine via the actual cut is not going to work. That cut tolerance is a combination of all the errors in the machine, setup, tooling, machine rigidity/feeds and speeds/motion controller/motive drivers/ballscrews.


Once the actual vs theoretical travel is known it can be entered into the motion controller, removing that uncertainty. The careful reader will have noted this doesn’t do anything for the actual pitch error I mentioned earlier. That’s a much harder issue to tackle.

With some motion controllers, there exists the ability to ‘map’ the ballscrew errors. The method is tedious, but straightforward: using some precision measurement tool (many use glass linear encoders or ‘scales’) the axis is moved intermittently in the same direction, stopping at pre-set points to measure how much the actual travel was. This is then entered into a lookup table on the motion controller, which can compensate the commanded distance for the ballscrew characteristics.

Here is another excellent video showing the results: RM1605 (16mm diameter by 5mm pitch) ballscrew pitch error compensation: EdingCNC Software (Youtube)


Again, the errors on ballscrews should be worst-case and posted as such, and are dependent on other factors. Using a precision ground ballscrew with a cheap nut/mountings/massive swings in temperature/feeds and speeds exceeding machine rigidity will not have accomplished anything but increasing frustration and capital expenditure.

Here is a good example of someone who purchased a complete axis setup. He is quite disheartened in the mountings performance:

RM1605 Ballscrew with BF/BK12 Bearing Blocks Excessive Backlash (Youtube)


November 20, 2014   Comments Off on Ball screw Mapping and Compensation