Stepper motor reflections

Hi everybody. Since a couple years I have set a stop in building my sailboat model to organize my workshop. The main reason I am slow are my health problems. But impacting is that working to improve my workshop has become a purpose by itself.

The start of this work was due to my tower mill getting damaged and the chaos in my workshop made it impossible to make the repair by myself.

So I did purchase the table saw Bosch Professional GTS 10 XC and did expand it by building a router table using the Triton tra001. These machines generate so much dust and chips that I decided to build a dust absortion system that uses a cyclone and an industrial vacuum cleaner.

The calibration of the circular table saw and the router table extension used a lot 3D printed stuff, that I decided to buy a Creality Ender 5 Plus printer. Watching videos from Kersey Fabrications and others and trying to educate myself abot 3D printing becoming 3D printing a hobby by itself and I have purchased 2 BTT SKR PRO V1.2. I have purchased these 2 boards because I found out for myself that both, 3D printing and CNC work using G-Code to do their jobs.

During my years working in the semiconductor industry making and using electronics in my hobbies to do the things my way. So, close to a decade I decided to use stepper motors instead of winches in my model sailboat and driving them usinc Trinamic stepper motor drivers. Their evaluation kits and their IDE enable you to learn a lot about the inner workings of stepper motors and how the Trinamic ICs provide valuable functionalities.

So studying the details of 3D printers I did notice that the 3D printer ecosystem shows an incredible amount of ignorance about stepper motors and an incredible arrogance. I know this a pretty hard judgement and I have received valuable responces from a few.

I know and you have the full and justified right to demand my justification.

The issues show themself in many topics:

  1. Stepper motors used in 3D printer do not have the plate that shows the nominal values for current and voltage. Also missing is the value for the holding torque. Stepper motors usually show this important information. It seems that NEMA17 sized stepper motors share this. Only going to the websites of serious manufacturers of stepper motors show this data. Why is this information so important.

The maximum torque of a stepper motor is exclusively there when the nominal current is flowing through its coils. This current flows only when the applied voltage is the effective voltage and this only true when the value of the induced voltage is ZERO.

Veffective = Vapplied + (-Vinduced)

The absolute value of the induced voltage is the higher and the faster the voltage changes that makes the current flow through the coils.

So, the faster a stepper motor makes its steps, the shorter is the time the voltage changes its values. This is why I decided to buy, additionally a Meanwell 600W 48 VDC power supply to be fed to the stepper motors driven by the SilentStepSticks driver boards.

You might not believe the aggresive and personally offensive responses I got in all 3D printing forums. But you might also not believe huw fast this incompetent aggressive forum membeds disappeared when I quoted an entry from the FAQ section at the Trinamic website explained why stepper motors are usually operated by applying a voltage of up to 20x the value of the nominal voltage value.

When applying voltage, as I will do, 48 VDC, the effective voltage will not drop due to the induced voltage. A stepper motor driver will limit the current value to nominal current using PWM.

  1. A more performant stepper motor is one that achieves its nominal torque with the lowest nominal voltage. Why. Because this means the cables in its coil can handle more current. In my sailboat model I use stepper motors with a nominal voltage value of 3.6 VDC. The stepper motors are fed from a battery pac that has 12 LiFePO4 battery cells connected inseries and that fully loaded supply close to 40 VDC and when they have to be recharged still 24 VDC.

  2. When studying the videos from Kersey Fabrications 2 aspects become evident to me. Please, I am aware of that speed of printing are the result multiple factors that have interdependancies. In another forum I read the analogy to dancing.

One fully self explaining is that a controller board has to be able to process all G-Codes that are due between steps and that stepper motors need to have the torque required to move from one step to the next for step loses not to take place.

1 Like

I agree with your math and most of your assumptions. It looks like maybe you’re picking a fight, but I will risk it and give you the benefit if the doubt that you are in fact interested in a discussion about this.

The thing I would point out is that it isn’t necessary to get the maximum torque or reach nominal current all the time. And specifically for CNC, you usually need the most torque at slow speeds, so Vinduced will be smaller.

48V is a lot more than most users here and you will need to upgrade the electronics to reach 48V. In more than 95% of the use cases here, 12V will still leave enough room to reach the target current. And that target current is generally set lower than the nominal, because nominal current ends up heating the motors up too much. But bottom line is, we have plenty of overhead to do great projects without maxing out every stepper. I also believe that a stepper with 30% more maximum torque will work better than a smaller one, even at 3/4 of max torque.

But I won’t ever begrudge you for making a 48V beast and driving it around at 150mm/s at full torque. We all need to just remember that we are in charge of our machine, and no one else’s.

1 Like

There’s a fair amount of Dunning-Kreuger in there, too, but I think it really comes down to the fact that for the vast majority of 3D printers, the Chinese stepper motors that are rampant throughout the community are still massive overkill for the application, and in general most users tend to only understand enough about them to get the job done. In that case, you get your RAMPS 1.4 board, or equivalent clone, plug the steppers in and they get the job done, typically with much less than the peak current or voltage. Thus, the standard motors that tend to get used for 3D printers tend not to come with full ratings. “It works” is good enough. Most people buy stepper motors that are severe overkill for the actual needs of their 3D printers. I’m guilty of this too. No way I need ones capable of 84 oz-in of torque to drive a print head, and I know it, so the actual capabilities are simply not important. The control board pretty much takes care of it, and usually has voltage limitations itself that will restrict what you can feed the stepper motors. A RAMPS 1.4 can’t be fed (much) more than 12V because it has polyfuses that blow up at 16V. My Duet Wifi can’t take more than 24V because the onboard regulators for the lower voltages won’t be happy. Therefore it doesn’t matter if my motors can benefit from a higher voltage supply.

Most 3D printers use 3D printed parts, too. Thermoplastic with a glass temperature in about 60-75°C so you don’t really want the motors getting too hot, and some of these prints are many hours long. Generally current is set more to the temperature tolerance much more so than to the motor’s. I like things running cool, and I found that getting motors with much more capability than I actually use, tends to mean that they also run cooler.


First, the responces are objective and by no mean aggressive. Thanks for setting up an environment that can fruitfull. Let me get step by step in responding and not responding to a topic the first has allready addressed and I have tried to respond to.

@jeffeb3: To what you wrote in your second paragraph. Let me refer to the following video in the Trinamic YouTube channel:

It is about coolStep and stallGuard functions that Trinamic driver ICs offer:

coolStep Function is one that control the amount of current supplied to the stepper. It reduces the amount of current flowing to the stepper by monitorng the torque load of the stepper and adapting it so that the resulting torque is just as required in a specific moment from the stepper plus a user defined safefy. The result is that the stepper remains cool. In my sailboat model that means it draws less energy from the battery pack.

The same functionality is used for stallGuard. When the stepper hits an obstacle the torque load increases and the stallGuard is executed. The video shows it.

To the next paragraph:
It is why I did purchase the BTT-SKR-PRO V1.2 and the SilentStepSticks TMC5160hv from Watterott. As the version V1.1 of the board claimed to allow up to 30 VDC, I did assume the ports of board to connect 30 VDC, the circuit has to remain isolated as there either 12 VDC or 24 VDC are allowed. The V1.2 uses an ARM4 device that runs faster, 168 MHz. This means that the highest computing performance from all boards and so the fastes G -code execution. Linked to the lag of knowledge of the producer I do assume that to be the reason for not using a dual code ARM4 controller as the benefits are not known to the producer of products for the consumer market. The stepper motor driver board using the TMC5160hv allows in its latest release up to 50 VDC.

So, as heating of the stepper is not impacted by applying 48 VDC, thanks to the coolStep function of the Trinamic driver ICs, why working on speeding up the printing? Print jobs can even take more than a day and so speeding the printing in my opinion makes sense.

But I want to repeat what I did write earlier. In 3D printing many interdepending factors influence the printing speed and the quality of printing on object.

@SupraGuy: I believe I have answered all of what you wrote. As to CNC milling, my impression so far is that it requires far less computing performance in the controller board. Here I guess the topic of the stiffness of the frame is followed by the torque the stepper offers. What I wrote above about coolStep and stallGuard as well as what I wrote about the stepper and driver boards apply. Another function supported by the Trinamic ICs is worth to mention. When the driver IC realizes that the torque load exceeds the holding torque it can deliver up to 20% more torque for peak loads by taking advantage of the fact that is limiting the value of the current when higher voltages are applied by extending the duty time of the PWM and so increasing the amount of current. The aspect that this can made for a limited time is due the stepper overheating.

I would like to add a question regarding how the Marlin firmware has been implemented. Arm obliges companies that license one of their Cortex M designs to implement CMSIS API. What CMSIS does is to offer the identical API for any ARM Cortex functions and peripherals. So migrating software between different ARM Cortex implementations becomes trivial. The lpc1769 is one of those controllers. So if Marlin 2.0 was implemented on top of CMSIS, porting it to any ARM M4, including dual code versions would be relatively simple. Here controllers run up to 200 MHz. Dual core controllers consist of an ARM M3 core like the one used in the loc1768/9 and an M0+ core that could be used i.e. to interface to a graphic display and communication tasks such having the M3 core to focus G-code processing. As I wrote before this speed improvements would mainly benefit 3D printing. But I guess it would allow CNC machines to use more powerful algorithms like Bezier curves to compute curved lines stepping. I have also read about milling in more than just 3 axis.

Maybe you’re 3D printers are better than mine, but I don’t skip steps when I increase speed, I get ringing and eventually extrusion problems. Neither of those are fixed with more current (or more voltage, which would allow me to get more current).

I haven’t dug into the HAL for marlin, but my experience with concurrent programming tells me that just running the code on dual core isn’t going to cut it. Marlin is embedded programming and very optimized, but still supports the arduino mega. It would take a lot of work to make that work with dual core. There are also some good alternatives if you want more processing power, like klipper. I do have a grbl_esp32 based board which is dual core, but it also supports a web interface, which justifies it to me.

1 Like

I don’t know that anyone on these forums can provide authoritative data on the APIs implemented in Marlin. That’s a question for the Marlin development team. I’d guess the Marlin Firmware site is the place to begin that investigation.

Marlin 1.x supports older not 32 bit in controller boards, version 2.x is for 32 bit controller only. As to your comment about step loses not being an issue for you, that is why I wrote that in 3D printing factors are all interdependent. So in a possible upgrade path that factor that is the weakest chain element is the one to address.

As to the use of dual core M4 controllers, one core is an M3 for example but running at 200 MHz or more would be in charge of processing G-code and all tasks that a controller processes, while the M0+ core would just be in charge of communication and i.e. of managing the display. The efficient partitioning between cores is a well understood process. So the M3 core would be responsible for all tasks that have to be process between 2 steps.

As to addressing the topic related to the use of CMSIS in Marlin, it is hard to find a person willing to respond objectivelly as I have found in this forum.

But I would be interested if you share with us which elements are weakest in your chain and your thoughts about how they could be improved. 3D printing can take a lot of time, In Kersey Fabrications youtube channel he analyzes the impact of possible upgrades and compares the resulting improvement or no improvements upgrading options have.

If I compare the processing power needs for CNC milling, the frequency of stepping related to proccesing power does seem not to be an issue. Other more mechanical issues seem to be the issue there. Torque delivered by the stepper motors and by the spindle motor are relevant, as well as the rigidity of the frame.

I see forward when the pending projects for my workshop are done. I will engage into a DIY CNC milling machine project. My not CNC tower milling machine will make it posible to make elements of the frame using stiff and thick aluminum plates.

I understand more or less how steppers function, and that running 48V is usually more efficient… for the electrons anyways. It is less efficient in the cost department though, to run 48V when 12V is adequate for the application.

I know for sure it is more than enough for most 3D printers where structural issues are the design driver. With respect to the Cnc machine supported in these forums, I believe 12V is also more than enough. We have a “drag race” event going right now where a 12V machine is in the lead.

Yes, they all should have 48V in an idea world, but they exist regardless.

1 Like

This is incorrect. 2.x supports 32 bit and 8 bit. And make no mistake, 8 bit is still coming out in new boards. It meets the needs of most applications of Marlin. The firmware we configure for the V1 machines is based on and supports many 8 bit boards.

I am a software engineer and have written a lot concurrent programs and I have done some in embedded systems. It is will understood, but often requires significant overhaul of the code.

My chain is fine. I am honestly happy to have broken through the barrier to print whenever I want it carve when I can get out to the garage. Having the ability to do either is 90% of the benefit. Making my printer faster is marginal after that. It hasn’t printed anything in a week and that isn’t uncommon.

1 Like

Always, if a small car is enough and status symbolds are irrelevant you would never buy a Maserati. But if car technology is your interest, exchanging about technologies is justfiable. The title of this thread is to indicate an exchange over related technologies and their use in applications like 3D printing and CNC.

There is always a balance though. I don’t find enjoyment in overkill, and in many cases, when you build one part over spec, you end up having to build all the connecting components at larger spec, until you have replaced the whole machine.

I would never buy (or even keep, if they gave me) and avid CNC machine. It would just be a huge shame to sit in my garage all day long, with nothing to do.

I also wouldn’t buy a maserati :slight_smile:.

One of the special things about 3D printing right now, is that some parts are made with such huge quantities and sold directly to consumers that they end up being a crazy good value. If the only 3D printers that worked were still $2500, I would never own one. Not because I couldn’t afford it, I just can’t justify it. I’ve probably spent $2500 on this entire hobby, included lots of spools of filament and upgraded parts, but each $50 gave me hours of fun, and occasionally, it makes something I don’t have to buy.

The other hard logical fallacy is that when you’re buying a laptop, and there are two processors, one for $100 more, you will actually benefit, a little at a time, for having that faster processor or having more cores. But in an embedded system, there aren’t a bunch of tasks waiting to be processed. To use a faster processor, you have to keep adding more code. To use multiple cores, you don’t have an operating system that will schedule the tasks, you have to explicitly write the code to use those cores. So having a processor that is twice as fast, but running the same code will just mean you will have a processor that sits idle for half the time. (There are exceptions to that, but most embedded code is written that way).

Doubling your processor without doubling the code to run is really similar to doubling the supply voltage without increasing the speeds. In both cases, you have a more expensive part, sitting idle most of the time. A lot like buying a Maserati, and then driving it one way, and having it towed back.

1 Like

I should add a point, which I think was missed above, that a really good solution to separating the stepping and mechanics from things like the interface and advanced movement algorithms is klipper. It does a great job at turning small processors into super fast stepping machines and keeping all the advanced tech in the raspberry pi (or linux box, if you like).


This thread is not about the question if something makes sense or not, but about exchanging informations. This the reason why the thread name is as it is.

Well, there’s your problem. While there is a good flow of information here, most people are here to help, and to do that, they like to not just answer the question asked, but step back and see what the rationale/goal is, and also provide advice/guidance at that level.

When you pop on, and begin challenging accepted norms re: controllers, motors, and drivers, most people are going to ask “why?”, and try to figure out the problem you’re trying to solve. And most people don’t see any problem. I barely followed what you and Jeff were talking about, but what it sounds like to me is that you are wanting to poke around the theoretical working boundaries of motors, drivers, controllers, and even the properties of the printed parts (keeping things within the envelope to avoid melting). But the state of the industry/hobby is such that there is no tangible benefit to running at those boundaries (at least, from the direction you appear to be coming at them). The hardware is inexpensive enough, and the tolerances all overlap enough that there’s no operational reason to be poking at those particular boundaries.

Now, all that being said, theoretically poking at the edges is a fine endeavor in and of itself, and in general, that is greatly encouraged. But at a certain point, just do it. Build the machine/test bed based on your theory, and take some measurements. Report your results. If someone else is interested, they may try to replicate them. But if nobody sees a real tangible benefit to making a change (cheaper, faster, better, lower global temps, more tender steaks), then interest will be pretty low, and you’ll continue to get “Meh…” responses.

To be clear, I am NOT trying to tell you not to test the various working boundaries, or to not discuss them. I’m just trying to explain why you may not be getting the response you had hoped to. It’s not animus or derision, but frankly apathy towards expending time, money, or effort towards something that doesn’t appear to provide meaningful benefit. And a gentle reminder that nobody owes you anything other than reasonable civility in their responses (which are, themselves, optional), even when those responses aren’t expressly what you want.

see also: Chasing Zeros or: How I Learned to Stop Worrying and Love the Slop :wink:

1 Like

To make it clear from the very beginng my objective for this thread was to reflect about the topic. From earlier exchanges about the use of a 48 VDC power supply to feed that voltage via the SilentStepStick TMC5160hv to the stepper motors in charge to move the X, Y and Z axis of my first 3D printer, the Creality Ender 5 Plus, I did face personal attacks that stopped when I did refer to the FAQ section of Trinamic where they wrote that stepper motors are usually operated applying a voltage up to 20x the value of the nominal voltage.

But trying to understand when technical topics were mentioned I did learn about a mistake I had in my understanding. This confirmed to me that there is always room to learn and I am a firm believer in that there is a lot to learn how a more complete understanding of the use of stepper motors in 3D printing and CNC milling. Both applications have the potential to benefit.

As of now I have identified a perspective new in what I do have consciosness about. It is the relationship of the step frequency in 3D printers, ar saying it the otherway around, how much time has a controller in a control board to execute the G-Codes. One of my responders wrote that he could see the benefits of using a dual core controller.

This brings in my believe the need to better understand how Marlin is implemented to eventually be able to benefit for its use on ARM CORTEX Mx controllers. This would i.e. the thread could benefit from a person who already has more knowledge about how Marlin is being implemented.

I also plan to start a diy CNC milling machine using the same controller board I will upgrade my 3D printer and to use Marlin as the OS in that project. So this project would also benefit from this thread.

I will challenge this characterization. I just re-read the thread (the non-technical parts, at least), and I didn’t see any personal attacks. I saw some disagreement, and a few folks saying that there’s no need to push those edges of performance, because the limiting factor is outside of what you can influence (i.e., overall rigidity, inertial mass of the gantry, etc., etc). In fact, most of what I re-read was fairly supportive of your thoughts, and only differed in the urgency or need for that optimization/power feature.

Jeff made some really good and valid points about the difficulty of concurrent programming vs. the actual need for multi-threaded controllers. To the point that it would appear that in some (many?) circumstances, it’s potentially more difficult to get a good, stable controller codebase running on any multi-threaded platform than it’s worth, especially as you push the limits of the CPU(s). Task scheduling, and all that entails, is non-trivial, and unless you get into very specialized systems, most will have some sort of pre-emptive tasking ability, which can wreak havoc on a CNC. Which is also why he mentioned Klipper, since that really decouples the gcode parsing/planning and the actual signals sent to the motors, and the planning can be done in a slightly more relaxed pace, and the controller can really focus on just making sure the electrons get pushed at the right time.

The other issue I saw being raised was power to the steppers, and what I thought I read was that despite the theoretical advantage of running much higher voltages to the steppers, the associated circuitry required to handle the higher voltages is not currently available at the same entry-level/mid-level that would be appropriate for most of the people on this board. Therefore, people were expressing their lack of interest in what is, to them, mostly a theoretical discussion on hobby electronics and motors.

But nobody attacked you. At most, they attacked the rationale and cost-benefit of the changes you were talking about.

Also, and I realize that this may seem a little late in the discussion, but it’s obvious your first language isn’t English, and that’s perfectly fine. While the English speaking world gets a little lax and comfortable on the Internet, we understand that there are people who haven’t been using English their whole lives. Anyway, what I was getting at is that there may be some… mistranslations of what would normally be inconsequential language in its native use. This could cause you to feel attacked, when there was no attack given, or (and this is more likely), I am mis-reading your characterizations of the discussion, and it just sounds worse in my ears than you intended. Mainly that you said you were attacked personally, yet I didn’t see any ad hominem arguments, just disagreements on the substance of your posts.

1 Like

Gets me into trouble with my wife, too.


I did not refer to this forum. It is even more, I have seen a behaivior that led me to initiate this thread.

I did read from some of the responses that made belief it would be right to emphasize my intended objective for this thread. Sorry if my previous response did lead to intentions I did not have.

What has fascinated me are the aspects that pop up in my mind when reflecting about implications of the use of stepper motors in 3D printing and CNC milling.

To repeat. 3D printing is a technology that is advancing very fast. Just limiting my reflections to FDM uses, a lot is going on. 3D printing is the more processing demanding application compared to CNC milling. What is also a fact is that 3D printers consist of moduls that can be upgraded individually and that Marlin and the slicers have been written in such a way that basically all parameters can be set in 2 configuration files. Same is required to done with the slicer software, when individual hardware modules are modified in a way that would the slicer have to be adapted to.

As to splitting the task of I/O tasks to a second core in a dual core controller should be pretty straight forward task. I want to emphasize that this is only the result of reflections and that it allows to decide where in the Marlin software to look.

The input to Marlin has the format of a text file that Marlin interprets to identify the g-codes and its parameters and then to pass the software module to execute the code to service the related g-code. All that would have to be done is to recognize g-codes related to I/O operations to the M0+ core and to diferentiate between operations that need to be completed before executing the next g-code in the file being parsed from instructions that do not have that dependence.

This relates i.e. to negative impacts from operations related to some graphic displays seen in tests available at YouTube. Speed limitations in 3D printers when the length of a time period resulting from the step frequency makes the controller unable to execute all g-codes that have to be executed between to consecutive steps. But allow me to repeat, this are just reflections that result when analyzing aspects that are the result from a higher step frequency made possible by increasing the step frequency of the stepper motors involved. Similar reflections would have to be done for the other modules that make up a 3D printer and would require dedicated reflection threads.

Take it easy. He was talking about how the rest of the Internet responded to his stepper musings. I don’t think there is any reason anyone here should be offended.

1 Like

It’s not that simple though. Marlin can’t just read a line, do it, and then read the next. If you have a small movement and then another, Marlin won’t know if it has to be stopped in between or not. Instead, it reads a lot of commands, puts the movement ones in the planner buffer, and then processes them in order to decide what the max speed is in between the commands and executes them. The IO is carefully orchestrated between axis.

It definitely can be done, and in capable hands, it wouldn’t be terribly complicated. But making it to that, and also support boards back to the 328p is a very challenging task. Take a look at the Marlin code if you don’t believe me.

1 Like