I recently came across a pretty good deal for the MKS Servo 42C closed loop stepper motor on AliExpress. I have a bit of a fascination with motors so I decided to add one of these to my collection. It arrived wrapped in a bit of foam and tape which did a decent job of keeping the thing in one piece. Setup was straightforward. I just stuck the connectors into their respective receptacles and plugged it into the motion control board.
where a stepper driver usually goes. This version comes with a small OLED display on the back for navigation. The user manual says to run the calibration without a load attached, so that's what I did. The shaft turned around a bit during calibration and it took about a minute to complete.
I had a quick browse of the other menu options, but there wasn't anything particularly interesting, so I just left everything on default. For comparison, I have selected two contenders for my motor collection. The first is a generic NEMA 17 open loop stepper motor, driven by the TMC 2209. It's slightly bigger than the closed loop stepper but it should be close enough for comparison. The second is a servo I designed myself.
Electronics, firmware, everything. Did I mention I have a fascination with motors? The motor is a C3548 Hobby BLDC, which is substantially smaller than the other two.
A C4260 would be a closer match but both of mine are currently installed in my pick and place machine. Similar to the closed loop stepper, the servo requires calibration and setup. The full auto commissioning process takes about six minutes and includes everything from counting the number of hole pairs to measuring the phase inductances to calibrating for anti-cogging.
Before calibration, the motor exhibits strong cogging, that is the rotor snaps to certain preferred angles. After calibration, caulking and stiction are virtually eliminated, allowing buttery smooth operation. Before we even go into the acceleration and speed tests, let's compare the thermals of these three systems.
For this test, the motors are simply holding position with no load. The servo and the closed loop stepper are both drawing minimal current and the driver electronics are barely getting warm. The open loop stepper and the TMC2209 driver continuously draw about 12W of power.
The stepper gets warm, and the driver is getting blazing hot without the cooling fan. The need to constantly energize the motor is one of the drawbacks of using an open loop stepper system. Using a smart driver like the TMC2209, it's possible to reduce the holding current if the load is known, but it's not going to be as good as a closed loop system.
Anyway, if this were a competition, the open loop stepper would have lost. unless you're looking for a space heater. The acceleration and speed test setup is a linear system, similar to what you'll see in a 3D printer.
There's a linear guide that allows about 350mm of travel, a GT2 belt and pulley system configured to travel 40mm per rotation, and there's an optical end stop for homing. I chose an optical end stop because I was switching motors and configurations all the time and would rather not crash the machine into a switch if I misconfigured it. I've also mounted an accelerometer on the slider, to see if we're actually getting the accelerations we asked for.
The drag chain manages the wiring between the accelerometer and the Raspberry Pi Pico which will be streaming the acceleration data via USB. Motion control is handled by the SKR 1.4 running Clipper. We will be using the step and direction interface for all three systems and all are configured to use 3200 steps per revolution, which is the equivalent of having 16 microsteps.
The system can handle 24V but I started off with 12V 3A. And I'm so glad I did that, because when I repeated some of the tests at 24V, I got carried away with the ludicrous speeds of the open-loop stepper and servo and ended up releasing the magic smoke from the SKR 1.4. It's going to take a while to get the replacement components, so we're left with the results from the 12V tests for now. I wrote the stress test program in Python that pipes Gcode to Clipper's sudo 0 port. The process is simple.
Home, move, home again and check if any steps were skipped. For a move to be considered successful, it needs to run three consecutive times without skipping steps. The acceleration and or speed is increased until the movement fails.
You can then start a binary search to find a maximum acceleration and speed. We'll also monitor the life plots and terminate the test early if necessary. Because the maximum torque changes with speed, we are most likely to get maximum acceleration at low speeds.
So to find the maximum acceleration, we'll limit the peak velocity by setting the travel to just 50mm. We'll then repeat the test with 300mm travel to find the maximum speed. Okay, let's start with the one we're all familiar with, Open Loop Stepper with the TMC2209. First, the acceleration test with no load and 50mm of travel. To save time, I've edited out the repeated moves.
All the tests start off with a comfortable 1000 millimeters per second squared. Let's pause for a moment here. It's worth mentioning that the acceleration plots we're seeing here are what we're expecting to see.
That is, the acceleration and deceleration are symmetrical. The peaks of the acceleration plots should also match the set values. In this case, 20,000 mm per second squared. When the move fails, the values are shown in red. As expected of the open-loop stepper, it either gives us what we commanded or fails completely.
When the test is complete, the results are shown in green. We'll do a side-by-side comparison later in the video so we don't have to pay too much attention to the exact numbers right now. We also repeat the test with a 500 gram load.
As expected, the maximum acceleration decreases substantially. Let's move on to the speed test with no load and 300 millimeters of travel. Because of the reduced torque at higher speeds, the move already fails at just 10,000 millimeters per second squared.
We also repeat the test with a 500g load. With the 500 gram load, both the maximum acceleration and maximum speed decrease. Here's a summary of the results. I don't really have an intuitive feel for what these numbers mean so we'll have a side-by-side comparison towards the end of the video. The servo, being a closed loop system, gives us a lot more information.
I've chosen to include plots for the set point and process values for the position as well as the position error. The servo is configured with safety limits and will automatically halt and report a fault if it is pushed too hard. You'll see this happen in a bit.
Finally, it's worth noting that even if a closed loop system isn't skipping steps, the position error could be unacceptably high. Okay, let's continue with the tests. The servo noise is caused by noisy phase current measurements and an extremely high current control loop bandwidth.
It's nothing to worry about. Without the load, the servo has no problems hitting the 40,000 mmpsq cap. With the 500g load, the servo starts to struggle with overshoots, which we can see in the position and acceleration plots. This is quite possibly a controller tuning problem, but I'll treat it as a failure.
For the 12V speed test, I've limited the motor to 2500 RPM, which translates to 1666mmps. Attempting to accelerate at 30000mmps squared, the servo hits the limit, resulting in a fault, but the servo automatically recovers for the next move. With the 500 gram load, regenerative braking spikes the power supply up to 15 volts. I didn't connect the regenerative braking protection circuit for this test and that's how I eventually blew up the SKR 1.4 board.
Despite its smaller size, the servo is faster than the stepper in every test. Finally, we have the closed loop stepper. Like the servo, the position and error information are available through the serial port. The first thing I noticed was how quiet this was compared to the other two systems.
But hold on, something's gone wrong already. The motor is stopping much harder than expected. We can see the big deceleration spikes in the plot when it happens. As it turns out, the system has a maximum speed of just 1000 RPM. Sometimes this limit is caused by the magnetic encoder, but this system uses the MT6816 which works up to 25,000 RPM.
Well, anyway, a quick conversion shows that at 1000 RPM, we're limited to just 666 mm per second. That's pretty disappointing. Let's rerun the test with the new speed limit. Hmm... that didn't fix it.
After some trial and error, I found that limiting the speed to 333 mm per second, which is half the advertised speed, reduces but doesn't eliminate the problem. What's more, the closed loop stepper seems to peak at under 10,000 mm per second squared acceleration. It's also suspicious that the reported position error never goes above about 20 degrees.
I'm guessing the closed loop stepper doesn't reliably report the position error. and instead attempts to catch up to the commanded position. It does so by moving at its top speed towards the destination, ignoring the deceleration profile and slamming to a stop when it finally arrives.
Perhaps this is an issue with the configuration. Let me know in the comments if you know what the problem is. With the 500g load, the acceleration suffers even more. With the 333mms limit, Running a speed test seems pretty pointless. I ran it anyway and found even more issues.
Besides the usual stuff like the deceleration spike and the capped position error, the system seems unable to maintain a stable speed. The acceleration plot shows the wobbling, which is also audible. I thought maybe this was a mechanical problem, so I checked that the pulley was concentrically mounted and even replaced it, but that didn't make any difference.
I'm just gonna roll with the punches here. Finally, we do the test with the 500g load. It's really not too exciting with the speed limit.
Here's the final table of results. Of course, speed isn't everything. But the closed loop stepper seriously fails to impress in this department, coming in last in all the acceleration and speed tests.
As promised, I've selected the fastest successful moves from each test and put them side by side in a drag race. In summary, each of the three systems has its strengths and weaknesses. While the MKS closed loop stepper certainly isn't breaking any speed records, it's still worth a look if you need a quiet, energy efficient motion system. It's simple enough to configure and I can see it being used in projects like camera dollies or time-lapse sliders.
Perhaps I'll even build one myself. If you need maximum speed and acceleration, a servo is probably what you want, assuming you've got the budget. All you need is the skill and patience to properly tune the control loops. For simpler projects, the open loop stepper motor is still a perfectly good option.
Sure, it might waste lots of power just being stationary and can't quite match the speeds of a servo, but that's often an acceptable trade-off for a simple, low-cost motion solution. There's still a lot more to be tested and said about these motors, but that's all I have for today. Subscribe if you'd like to see more on motors and motion systems.