My first take on custom build "silent" stepper driver (FPGA based)

520 views
Skip to first unread message

Mikael Bohman

unread,
Aug 13, 2018, 7:37:00 AM8/13/18
to OpenPnP

First test, only using FPGA logic, the ARM side is sleeping.

 My goal is to kill as much energy as possibly < 20kHz that is not the fundamental tone driving the stepper.


WIN_20180813_13_18_06_Pro.jpg


Z-turn 7020 ZYNQ board + custom daughter card (White PCB)



47Hz 12VDC 42SHDstepper.gif

NEMA 17 stepper 12V 0.4 A rated. Using ~400kHz switching freq with 8 bit pwm (100MHz FPGA clock) 1:St order delta sigma with 16 bits LFSR dither. 25 kHz sampling rate (creating the ~50kHz alias tone). 50Hz == 1 rev/s . 10ns deadtime. THD = -66dB or 0.05%


(Will push to github later on)

Any suggestions?




Mikael Bohman

unread,
Aug 13, 2018, 7:38:50 AM8/13/18
to OpenPnP
At the moment, It is all feed forward, no current feedback.

ma...@makr.zone

unread,
Aug 13, 2018, 8:15:10 AM8/13/18
to OpenPnP
Hi Mikael

I'm not sure I understand this post really ... aren't these values/curves already very good?

Or are you more "fishing for compliments" actually? :-D

I guess adding a random generator input to the delta sigma to further smooth the few remaining spikes is nothing you haven't considered, right?

_Mark

Mikael Bohman

unread,
Aug 13, 2018, 5:02:32 PM8/13/18
to OpenPnP
random generator - That is the 16 bits LFSR dither. Without it you get non harmonic tones higher up.
The existing dist. is harmonic tones, and without any feedback - they will not be suppressed. 

The stepper runs very quiet, even if I use place the stepper on a large desk to amplify the acoustic noise.

I'm mostly fishing for - you can not do like that because that will cause ... ... I have already tried it. Because that would save time, to not repeat the same error.

Right now, I'm confused over the current measurements.

Mark

unread,
Aug 13, 2018, 5:42:13 PM8/13/18
to ope...@googlegroups.com
> random generator - That is the 16 bits LFSR dither.

Aha! Learning every day. Thanks.

I never dared doing something like that because freezing up the code and keeping the current going in the wrong moment could prove disastrous. Like burning your hose down disastrous (if unattended). Or so I thought.

Are your half bridges current limited?

Also 400kHz sounds like a lot of switching loss in the FETs, right? Wouldn’t 40kHz suffice except for bats and dogs?

_Mark



n.a.m...@gmail.com

unread,
Aug 13, 2018, 6:59:56 PM8/13/18
to ope...@googlegroups.com, Mikael Bohman
Hi Mikael,

This looks great! Why are you confused over the current measurements?

Are you driving the H-bridge directly or via a (micro-) stepper driver?

Regards,
Niels.

--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To post to this group, send email to ope...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/8bd58fb3-f004-49ad-be1b-40bf7c70e3d7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Mikael Bohman

unread,
Aug 14, 2018, 6:29:01 AM8/14/18
to OpenPnP
Niels: The FPGA drives gatedrivers which drives the FET in the H-bridge.

V_I LP10kHz.png

This is current going through the H-bridge down to ground, and the Voltage from one of the half bridge LP filtered @ 10kHz. As expected.

The current is measured with a 33mOhm resistor and a 20X gain stage made for this purpose.


 

V_I LP10kHz zoom1.png

Lets zoom in on half a period, and analyse different sections.



V_I LP10kHz pos1.png

Phase position 1, The current is now filtered @ 1MHz.

V_I LP10kHz pos2.png

Phase position 2

V_I LP10kHz pos3.png

Phase position 3)

V_I LP10kHz pos4.png

Phase position 4


The impedance is shifting during the period, which I expected. But I did not expect the stepper to lose so much inductance when the current is decreasing in the coil. 
I was expecting to be able to use the inductance as an anti-alias filter @ 1MSPS, but that is a very bad idea.

Maybe someone can explain the electrical analogy of the stepper as a function of angle, load etc. (Meaning, if you would measure the impedance of the stepper continuously, how would it change with angle and load.

Mikael Bohman

unread,
Aug 14, 2018, 6:37:02 AM8/14/18
to OpenPnP
The 20X current gain stage has 250kHz BW, thus the current in the current sensing resistor probably changes even more rapidly that seen in phase position 3.  
I have full control over a 4 FET's in the H bridge, so I am not limited to "On-Off" mode.


Den måndag 13 augusti 2018 kl. 13:37:00 UTC+2 skrev Mikael Bohman:

Mikael Bohman

unread,
Aug 14, 2018, 7:56:05 AM8/14/18
to OpenPnP


Here is the switching powerloss in 2 full H-bridges (One stepper driver). The MOSFET are Audio class D graded and are intended to operate up to 400kHz.

At 30V rail they get around 40 deg C without any heatsink.

Powerloss.png


Mark

unread,
Aug 14, 2018, 9:14:51 AM8/14/18
to ope...@googlegroups.com

> Here is the switching powerloss in 2 full H-bridges (One stepper driver). The MOSFET are Audio class D graded and are intended to operate up to 400kHz., At 30V rail they get around 40 deg C without any heatsink.

Amazingly low.

 

_Mark

Mikael Bohman

unread,
Aug 15, 2018, 7:06:28 AM8/15/18
to OpenPnP

First measurement using the ARM CPU to create the waveform @ 400 ksps for both X and Y axis.

The CPU load on core0 is ~55% using double prec. and the sin and cos in math.h.

If needed CPU time for trig functions can be improved with an factor 5 with lookup array.


Effectively, I'm using  8000 microsteps per step @ 1 rev/s, or 400 000 microsteps per step @ 1step/s


Here is a measurement using 29V rail with improved Delta-Sigma to reduce the noise-floor. 

Next step is to build the feed-forward filter that increases the voltage at higher speeds to keep the current constant.



50Hz 29VDC ARM 42SHDstepper.gif



Den måndag 13 augusti 2018 kl. 13:37:00 UTC+2 skrev Mikael Bohman:

Mikael Bohman

unread,
Aug 15, 2018, 11:03:37 AM8/15/18
to OpenPnP
Here is an acoustical result :)

I'm using microphone (pressure sensing) in front of the head.
In the FPGA.wav the head is moving back and forth in front of the microphone.

With the 2DM860H stepper driver @ 64X MICROSTEPPING (based on TI C2000 DSP) the head just pass by once.


It is a LARGE difference in acoustical overtones!
I really need to fix my pulleys, and change to a neoprene belt. 


FPGA.wav
TI_DSP.wav

Jason von Nieda

unread,
Aug 15, 2018, 2:03:37 PM8/15/18
to ope...@googlegroups.com
Whoa, that is impressive!


--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To post to this group, send email to ope...@googlegroups.com.

Trampas Stern

unread,
Aug 15, 2018, 7:20:32 PM8/15/18
to OpenPnP
The inductance of the coils do change, if you have load on the motor the then the stator does not move and the coils have more inductance.  

So basically you are charging the stator with a magnetic field and then as it moves the core(Stator) of the inductor moves, and a precharged part of stator moves into it's place over coil and inductance drops. So when there is a load you have to charge the stator with more magnetic field before the stator moves, which shows up as an increased inductance. Also as motor steps the inductance goes from high to low. 

The issue with PWM stepper drivers is that this change in loading affects the drive current, as you have seen. So most PWM systems sense the current through the transistor h-bridge (usually on low side) so they turn h-bridge on, then wait some dead band time until ringing stops and then leave H-bridge on until the low side current is reached. Then they will either reverse h-bridge on short both low side FETs, the idea is that the inductor of the motor keeps that constant current flowing in coil until your next cycle. Note the reversing of the h-bridge is often needed to over come the dead band time.  That is if the h-bridge is on for say xxns before measuring current and you have low inductance motor and/or high voltage source you can drive too much current into the coil so you have to reverse it back out, yes this causes noise, heat and other issues but it is often done on most stepper drivers.  

So the ideal low noise drive into stepper motors is an adjustable constant current drive. However this means lots of heat losses in driver.  The PWM drive works well but you have noise.  If you drive with really high frequency then you run into problem monitoring current and will need to tune your PWM duty cycle to the motor, but then can run into problems as loads change on the motor, which changes the inductance of the motor and hence your tuning. So it works fine most of the time, but not when the load on motor changes.   

To do the best PWM drive you need to sense the current in the coil and change PWM based on that. If you for example put a 0.010 resistor as a current sense then you introduce loss and higher resistance to the coil.  Hence I found the best way is to use a hall effect current sensor.  With the hall effect sensor you can directly sense the current in the motor and adjust your PWM to give you correct output.  Here if your current is low you drive coil positive until current is reached and then drive h-bridge to have both low side FETs on (brake mode) the current will continue to flow through coil due to charge on the motor inductive coil. When the current starts to drop you turn H-bridge back on.   When you need to drop current you drive H-bridge in reverse and repeat. The idea is to have the desired constant current in motor coils with as small ripple noise (acoustic) as possible.

The acoustic noise is based on the PWM frequency for sure, and how fast you can sample and adjust current, faster means less low frequency ripple and noise.  Also ringing when turning FETs on and off can cause acoustic noise. To help here you can use some tricks like putting a resistor in series with gate of high side FET and a diode in parallel with resistor. Such that your turn on time of the high side FET is slower than the turn off. So now by tweaking the resistor value what happens is the high side FET is slightly on when the low side FET turns on, this causes more current draw and heat in driver but snubbs out the ringing.  With the FPGA you could tweak the PWM timing to do this or better yet run really fast PWM such that you control current into FET gates to do this, basically turning the FETs into programmable snubber circuit.  Again the cost is heat to reduce noise. 

The torque of the motor is based on the maximum current you drive the coil. For example the spec on a stepper might be 1A however this is continuous current  spec, so you can drive with higher current as long as average current is lower than 1A. When motor is stalled (not moving) you have to make sure your current is below spec (average current below 1A). When motor is moving you can drive higher currents as long as average is still below spec. For example if you put a sine wave current waveform into motor you can get ~1.414 high peak current than motor spec and still be under the average spec on motor.   

The speed of the motor is dependent on how fast you can get the current to rise in the motor. So running a high voltage allows faster current rises and higher speeds, but also for a 1A  motor you will need shorter PWM pluses for same current.  So for best torque and speed use as high of voltage source for your steppers as possible (ie 24V better than 12V).  Note the motor rated voltage is basically the resistance of motor divided by max current, and has nothing really to do with your voltage source for your stepper driver. 

For really high speeds you need to do a phase prediction. That is you predict where the next phase angle of the motor stator should be and basically skip steps ahead to drive motor. Hence you are predicting the stator position based on motors speed and driving coils based on where stator will be by the time you power coils not based on where stator is.  I have done this with my smart stepper boards which has encoder feedback and can get really high speeds out of a stepper, 20k RPM for example.  Now there is very little torque at these speeds but it is fast. 

To keep motor heat down what I do on the smart steppers is montior the motor desired position and the actual position. If they match turn off the current, if they don't use PID control on the current to force them to be the same. This way the current into motor is always just enough for the holding torque of the load or moving motor. This minimizes the heating of motor and noise. Note most drivers if set for 1A will put 1A in the motor when there is no load, which causes more noise and heat than needed. 

Have Fun!
Trampas

 

Mikael Bohman

unread,
Aug 17, 2018, 9:41:18 AM8/17/18
to OpenPnP
OOPS!
First I made a control-map for the amplitude of the voltage, so I was feeding the stepper a constant power drawn from the PSU independent on velocity.
It seemed to work great. Since it is not current controlled, the current momentarily goes up during hard acceleration or an external jerk.

Then I start to play with 

wtX += yf*dt;
double amp_3=yf*amp3;
if(amp_3>0.12)
  amp_3=0.12;
double x = sin(wtX) + amp_3*sin(w3tX);
double y = cos(wtX) + amp_3*cos(w3tX);
s32 A=amp*x;
A+=0x8000;
s32 B=amp*y;
B+=0x8000;
XLlFifo_TxPutWord(&FifoInstanceX, (A<<16) | B);

Meaning that for low velocities the stepper in only fed with the fundamental, but as velocity get's higher the stepper driver signal gets more square-waveish.
Without decreasing the rail voltage, more power is thus feed into the stepper at high velocities.

I do not know what how it really happend, but suddenly 30-60W was going from the PSU to one stepper, (since I had increased the current limiter from 0.4A to 2A to see the difference) and then my FPGA card died.
I did not used isolation between the FPGA card and the power MOSFETS in this first design. I was hoping it would work for some testing without blowing things up.
One of the 1.8V rails to the FPGA chip now seems to have an power off resistance of < 1 Ohm. 

Well, if you do not blow things up, you do not know where the limits are. For future designs I will use isolated gate drivers and isolated delta-sigma ADCs.

At least it is possible to create a driving sine-wave without feedback, and I did not need to sacrifice to the Voodoo God to make the software work on both the FPGA side and the ARM CPU side.


Den måndag 13 augusti 2018 kl. 13:37:00 UTC+2 skrev Mikael Bohman:

Mikael Bohman

unread,
Aug 17, 2018, 12:30:46 PM8/17/18
to OpenPnP
Thank you for your long text, here is my thoughts.

Den torsdag 16 augusti 2018 kl. 01:20:32 UTC+2 skrev Trampas Stern:
The inductance of the coils do change, if you have load on the motor the then the stator does not move and the coils have more inductance.  

So basically you are charging the stator with a magnetic field and then as it moves the core(Stator) of the inductor moves, and a precharged part of stator moves into it's place over coil and inductance drops. So when there is a load you have to charge the stator with more magnetic field before the stator moves, which shows up as an increased inductance. Also as motor steps the inductance goes from high to low. 


But how can it change from a corner frequency of ~50Hz (R to jwL) up to > 250kHz ?. Or is it so simple that the stepper changes to become an generator, changing the sign of the inductance to a negative value, Z: | R + jwL |  -> | R - jwL | ->| R + jwL |  , and somewhere in between Z=R ?
 Do I need a passive LC filter on the MOSFET output to limit the HF currents in my next design? Is it hurting any components? EMI must be a nightmare for long cables.

 
The issue with PWM stepper drivers is that this change in loading affects the drive current, as you have seen. So most PWM systems sense the current through the transistor h-bridge (usually on low side) so they turn h-bridge on, then wait some dead band time until ringing stops and then leave H-bridge on until the low side current is reached. Then they will either reverse h-bridge on short both low side FETs, the idea is that the inductor of the motor keeps that constant current flowing in coil until your next cycle. Note the reversing of the h-bridge is often needed to over come the dead band time.  That is if the h-bridge is on for say xxns before measuring current and you have low inductance motor and/or high voltage source you can drive too much current into the coil so you have to reverse it back out, yes this causes noise, heat and other issues but it is often done on most stepper drivers.  

So the ideal low noise drive into stepper motors is an adjustable constant current drive. However this means lots of heat losses in driver.  The PWM drive works well but you have noise.  If you drive with really high frequency then you run into problem monitoring current and will need to tune your PWM duty cycle to the motor, but then can run into problems as loads change on the motor, which changes the inductance of the motor and hence your tuning. So it works fine most of the time, but not when the load on motor changes.   

 
I do not understand why it would heat the MOSFETS? If the coil creates a back EMF higher that the rail, then the body diode of the upper MOSFET would start to conduct with heat loss. Otherwise the MOSFET should be in a low resistive state or a high resistive state. 
I did run my steppers at 3 AMP output at 400kHz switching without any heatsinks on the TO220. 


I know that a simple solution is to use an DAC + comparator instead of an ADC to measure the current, but that is a cycle by cycle method which will introduce a lot of noise and aliasing in to the control.
I also know that you can use the recycling state of the H bridge, but that would make the controller to loose the knowledge about the voltage. But I also have a voltage ADC on my card, to be able to track the voltage over recycling current cycles.

A antialias filter before the ADC would solve the problem with HF, when using a PID controller.
 
To do the best PWM drive you need to sense the current in the coil and change PWM based on that. If you for example put a 0.010 resistor as a current sense then you introduce loss and higher resistance to the coil. 

I do not get that. The output resistance of the PSU, MOSFET and resistor lies in series with the coil resistance. Ideally we would like a superconducting coil to avoid the resistive heating. 
I argue that it is no difference in torque having a 1.33 ohm coil resistance + 0.01 resistor as having a 1.34 coil resistance and a 0 ohm Hall sensor if the windings are the same. The only difference is a little change in the total resistive heating in the stepper.
 
Hence I found the best way is to use a hall effect current sensor.  With the hall effect sensor you can directly sense the current in the motor and adjust your PWM to give you correct output.  Here if your current is low you drive coil positive until current is reached and then drive h-bridge to have both low side FETs on (brake mode) the current will continue to flow through coil due to charge on the motor inductive coil. When the current starts to drop you turn H-bridge back on.   When you need to drop current you drive H-bridge in reverse and repeat. The idea is to have the desired constant current in motor coils with as small ripple noise (acoustic) as possible.

The acoustic noise is based on the PWM frequency for sure, and how fast you can sample and adjust current, faster means less low frequency ripple and noise.  Also ringing when turning FETs on and off can cause acoustic noise. To help here you can use some tricks like putting a resistor in series with gate of high side FET and a diode in parallel with resistor.

I already have that.
 
Such that your turn on time of the high side FET is slower than the turn off. So now by tweaking the resistor value what happens is the high side FET is slightly on when the low side FET turns on, this causes more current draw and heat in driver but snubbs out the ringing.

Which is best RC snubber or "FET" snubber. I guess the RC snubber is more reliable to changes with longer deadtime. 
 
  With the FPGA you could tweak the PWM timing to do this or better yet run really fast PWM such that you control current into FET gates to do this, basically turning the FETs into programmable snubber circuit.  Again the cost is heat to reduce noise. 

The torque of the motor is based on the maximum current you drive the coil. For example the spec on a stepper might be 1A however this is continuous current  spec, so you can drive with higher current as long as average current is lower than 1A. When motor is stalled (not moving) you have to make sure your current is below spec (average current below 1A). When motor is moving you can drive higher currents as long as average is still below spec. For example if you put a sine wave current waveform into motor you can get ~1.414 high peak current than motor spec and still be under the average spec on motor.   

I know. 

The speed of the motor is dependent on how fast you can get the current to rise in the motor. So running a high voltage allows faster current rises and higher speeds, but also for a 1A  motor you will need shorter PWM pluses for same current.  So for best torque and speed use as high of voltage source for your steppers as possible (ie 24V better than 12V).  Note the motor rated voltage is basically the resistance of motor divided by max current, and has nothing really to do with your voltage source for your stepper driver. 


I'm using 30V for a 3V stepper during testing with current limiting. Planning to use a 60 VDC supply in the end.

 
For really high speeds you need to do a phase prediction. That is you predict where the next phase angle of the motor stator should be and basically skip steps ahead to drive motor. Hence you are predicting the stator position based on motors speed and driving coils based on where stator will be by the time you power coils not based on where stator is.  I have done this with my smart stepper boards which has encoder feedback and can get really high speeds out of a stepper, 20k RPM for example.  Now there is very little torque at these speeds but it is fast. 

Do you mean that you feed one cycle with a 100% duty cycle, and then skip some cycles, instead of modulating each cycle !? 

To keep motor heat down what I do on the smart steppers is montior the motor desired position and the actual position. If they match turn off the current, if they don't use PID control on the current to force them to be the same. This way the current into motor is always just enough for the holding torque of the load or moving motor. This minimizes the heating of motor and noise. Note most drivers if set for 1A will put 1A in the motor when there is no load, which causes more noise and heat than needed. 

Have Fun!
Trampas

 

Why not just use mapped voltage control, since I then get an automatic boost of current during load. It should be the most quiet way !?


 

Daren Schwenke

unread,
Aug 17, 2018, 12:37:54 PM8/17/18
to OpenPnP
That 'wooshing' sound you may still hear was most of this going way over my head.  
What I do understand was you have a good grasp of the problem and have generated a working solution we can hear.  That is an amazing reduction in noise even capable of making up for some of my terrible acoustic design choices.
Sorry to hear about your meltdown.  Quick and dirty until it fails works and if your components are cheap enough, who cares.  I drive mosfets directly from microcontrollers all the time, often without even a resistor inline  :)  
You put quite a bit more effort into it and still got bitten.  Ah well.  Learn.. move on.
You are doing good work here.  Keep it up.

ma...@makr.zone

unread,
Aug 17, 2018, 1:31:26 PM8/17/18
to OpenPnP
> The inductance of the coils do change, if you have load on the motor the then the stator does not move and the coils have more inductance. 
> ...

Very nice text write-up, Trampas, thanks.

> OOPS!

Sorry to hear that. Hope you don't give up! Very interesting stuff, keep it coming!

What I wanted to ask is the motor RPM (or feed-rates) these curves and recordings correspond to. I see the how very useful this is for say 3D printing where very slow and continuous feed-rates are needed (and over a very long time)!

However (I guess you already know that!) this elaborate PWM shaping is a bit wasted for PNP where you want to move as fast as possible!

Example: my Liteplacer mod machine has GT2 2mm pitch 20 tooth pulleys with 1.8° steppers* = 200 steps/40mm = 5 full-steps per mm. Let's say you drive it up to 40m/min = ~666mm/s = 3.33kSteps/s. From analysing the video audio (see below) the steps/s directly translate to the peak spectral audio frequency (although the coil currents themselves have a quarter of the frequency) so we get very nasty 3.33kHz noise. For those not familiar with these frequencies, press Play.

You can do nothing from the driver to stop that. However clean your PWM, it is simply irrelevant.

This is ~40m/min = 3.33kHz sound whenever it reaches top speed:

Using simply Audacity I got this spectrum from the video audio (the long diagonal move after the first nozzle tip pickup). One sees how the X axis dominates, the Y axis delta is shorter and is therefore driven slower. There is also an impressive double frequency overtone:



Like Trampas pointed out:

> The speed of the motor is dependent on how fast you can get the current to rise in the motor. ... For really high speeds you need to do a phase prediction. That is you predict where the next phase angle of the motor stator should be and basically skip steps ahead to drive motor.

With raising speed there is quickly a point where your current can never raise or sink fast enough as the effective inductance is just way too high. With only 24V you will never nearly reach the current limit of the stepper. You can just forget all the micro-stepping and sinus shaping and simply drive a square wave for best speed. In a way a square wave does go ahead of the motor like Trampas pointed out. There is no need to do prediction in PNP positioning moves as the motor will simply settle in with a slight phase shift (the axis will be lagging ~0.1mm behind), who cares!? As a side note, this would of course be different for a fast precision motion like a high performance laser cutter (but I guess those use servos anyway).

Of course, good sinus current lookup tables and supersonic PWM are needed at the end of the move for precision positioning and quiet holding.

_Mark

Brynn Rogers

unread,
Aug 17, 2018, 3:54:21 PM8/17/18
to OpenPnP


On Friday, August 17, 2018 at 11:30:46 AM UTC-5, Mikael Bohman wrote:
Thank you for your long text, here is my thoughts.

Den torsdag 16 augusti 2018 kl. 01:20:32 UTC+2 skrev Trampas Stern:
I do not understand why it would heat the MOSFETS? If the coil creates a back EMF higher that the rail, then the body diode of the upper MOSFET would start to conduct with heat loss. Otherwise the MOSFET should be in a low resistive state or a high resistive state. 
I did run my steppers at 3 AMP output at 400kHz switching without any heatsinks on the TO220. 

This part I know   (meaning a bunch of the rest would take a lot of study for me to understand)
The reality is that a MOSFET, while we like to think it is either on, or off, takes time to switch between on and off.  This is mainly dependent on the gate capacitance and the current your gate drivers can put out.

Gate drivers often run 5 amps or more to be able to reduce the time a big MOSFET is linear (Between off and on, when it is making heat).      Personally, I wouldn't run the PWM faster than 20khz,  there are only problems going higher than that and I don't think there is any benefit that will be visible.

Brynn 

Trampas Stern

unread,
Aug 18, 2018, 7:50:03 AM8/18/18
to OpenPnP

But how can it change from a corner frequency of ~50Hz (R to jwL) up to > 250kHz ?. Or is it so simple that the stepper changes to become an generator, changing the sign of the inductance to a negative value, Z: | R + jwL |  -> | R - jwL | ->| R + jwL |  , and somewhere in between Z=R ?
 Do I need a passive LC filter on the MOSFET output to limit the HF currents in my next design? Is it hurting any components? EMI must be a nightmare for long cables.

Yes as the so imagine you have two coils at 180 degrees and a magnet that spins in between them. When the north pole of magnet is point at coil and you are driving coil such that North is facing north you will have high inductance.  Then as the magnet moves perpendicular to coils you basically have no magnet (no iron core) and lower inductance on coil, then as south pole of magnet comes close to your coil you will start getting reverse EMF, ie change in sign on inductance.  These changes can be significant and dependent on motor load.

Any filter you add between FETs and motor coils will reduce your efficiency and speed. 

I do not understand why it would heat the MOSFETS? If the coil creates a back EMF higher that the rail, then the body diode of the upper MOSFET would start to conduct with heat loss. Otherwise the MOSFET should be in a low resistive state or a high resistive state. 
I did run my steppers at 3 AMP output at 400kHz switching without any heatsinks on the TO220. 

So the typical stepper driver will turn H-bridge on always.  For example is the stepper driver will typically turn on the H-bridge for some  period of time before measuring current this dead time (or blanking time), see the A4984 datasheet for example.  What this means is that if you want zero current going into coil the driver will ALWAYS put power into the coil for the blanking time. The A4984 for example is 1us.  This means if you have low inductance and resistance motor and high drive voltage you can get some significant current into motor in 1us.  Then after the blanking time the driver the driver checks the desired current and sees that it is over the current threshold and will reverse the h-bridge to suck that current back out.  This causes heat in motor, FETs, etc which is just wasted and creates noise.
 
I know that a simple solution is to use an DAC + comparator instead of an ADC to measure the current, but that is a cycle by cycle method which will introduce a lot of noise and aliasing in to the control.
I also know that you can use the recycling state of the H bridge, but that would make the controller to loose the knowledge about the voltage. But I also have a voltage ADC on my card, to be able to track the voltage over recycling current cycles.

A antialias filter before the ADC would solve the problem with HF, when using a PID controller.
 
To do the best PWM drive you need to sense the current in the coil and change PWM based on that. If you for example put a 0.010 resistor as a current sense then you introduce loss and higher resistance to the coil. 

I do not get that. The output resistance of the PSU, MOSFET and resistor lies in series with the coil resistance. Ideally we would like a superconducting coil to avoid the resistive heating. 
I argue that it is no difference in torque having a 1.33 ohm coil resistance + 0.01 resistor as having a 1.34 coil resistance and a 0 ohm Hall sensor if the windings are the same. The only difference is a little change in the total resistive heating in the stepper.

If you have a 0.5 ohm coil than the 0.01 resistor would consume 20% of your power.  So if you only want to operate with small motors (with large resistance) then current sense resistor is fine.  



Which is best RC snubber or "FET" snubber. I guess the RC snubber is more reliable to changes with longer deadtime. 

The RC snubber is fine if you are designed only to work with one motor, such that you can tune the snubber. When you change the motor you will need to change the snubber.  By using the FET in a linear mode you can adjust the resistance of the FET and have a more dynamic snubber, but it is a lot more difficult to implement. 

 

 
For really high speeds you need to do a phase prediction. That is you predict where the next phase angle of the motor stator should be and basically skip steps ahead to drive motor. Hence you are predicting the stator position based on motors speed and driving coils based on where stator will be by the time you power coils not based on where stator is.  I have done this with my smart stepper boards which has encoder feedback and can get really high speeds out of a stepper, 20k RPM for example.  Now there is very little torque at these speeds but it is fast. 

Do you mean that you feed one cycle with a 100% duty cycle, and then skip some cycles, instead of modulating each cycle !? 

So consider you are running a 200 step/rotation motor.  Then and you step at 1000 steps per second.  Then in theory your maximum speed would be  1000/500 = 2 rotations per second.   So if you floated the coils on the motor running at 2 rotations per second then in 1/1000th of second the inertia of the motor will move it 1.8 degrees. So if you consider this then when you take your next step your motor would already moved 1.8 degrees before you told it to move, so if you  can actually move 1 step plus the 1/1000 * motor speed in rotations/sec.  Thus you are predicting the phase angle of the sine wave you apply to motor based on the speed of the motor (phase prediction). Doing this means you can run motor at faster than the 2 rotations per second... 


To keep motor heat down what I do on the smart steppers is montior the motor desired position and the actual position. If they match turn off the current, if they don't use PID control on the current to force them to be the same. This way the current into motor is always just enough for the holding torque of the load or moving motor. This minimizes the heating of motor and noise. Note most drivers if set for 1A will put 1A in the motor when there is no load, which causes more noise and heat than needed. 

Have Fun!
Trampas

 

Why not just use mapped voltage control, since I then get an automatic boost of current during load. It should be the most quiet way !?

The loading of the motor changes it's impedance, and the motors are really operating more on current than voltage.  So if you try and do a voltage mapping you will have problems when the impedance of the motor changes due to load.  Also your voltage tuning will be dependent on the motor used, if you changed motors everything would break as it would need a new mapping. 


 

ma...@makr.zone

unread,
Aug 18, 2018, 5:50:12 PM8/18/18
to OpenPnP
> ... you can get some significant current into motor in 1us.  Then after the blanking time the driver the driver checks the desired current and sees that it is over the current threshold and will reverse the h-bridge to suck that current back out. This causes heat in motor, FETs, etc which is just wasted and creates noise.

Are you sure? According to my calculations with typical steppers (example 1A stepper, 2.4mH coil, 24V supply), a 1µs on-time will change your current by 10mA and the power (which is to the square) by 0.01% i.e. nothing! .

Also I don't think switching in the low µs order can create noise (assuming "noise" is of the audio type i.e. perceivable by humans, i.e. subject of this thread). Even bats "only" hear up to 90kHz.

On the other hand - for fast motion, as needed in PNP  - isn't there the elephant in the room that the very stepping itself, the magneto-mechanical effects of going through the magnetic field reversals, creates inevitable vibration in the motor and therefore noise that you can't do anything about from the driver side? The same purr that happens when you (gently!) move an unpowered machine by hand? Its just the nature of the stepper!

You would need servos to get rid of some of that:

...but the belt teething will probably be the next source.

_Mark

Trampas Stern

unread,
Aug 20, 2018, 7:04:50 AM8/20/18
to OpenPnP
Power in watts is volts * amps.  24V * 10mA =240mW of power.    The issues with the 1us blanking time is that if you increase the voltage the power increases to the square, that is if you did the same math for 48V power  supply you would have 20mA of current and the power would be 48V*20mA=0.96W. 

Now if we assume your 2.4mH 1A motor is a 3V stepper (3/1 = 3 ohm resistance) then we have a maximum input power of 3V * 1A=3W so the 1us blanking time at 24V is .24/3*100=8% of the total power into the motor. At 48V it is 32%.   

Now this math has assumed that the stepper driver FETs have no loss and all the power goes into the stepper motor, but I think it proves the point, that the blanking time can be a problem...  I have personally ran into this problem on stepper drivers. 


As are as the motor noise it is true that steppers can create more noise due to the number of steps. However even a brushless DC motor operates on the same principles as the stepper motor, but with less steps per rotations. So they may produce noise too but at a lower harmonic due to less steps.   However the stepping motor noise is more due to how the motor driven, that is taking full steps at maximum current on steppers is like hitting the stepper with a hammer to move it, and creates noise and ringing. The problem with ringing noise is it is dependent on the impedance of the coil, which changes with loads. Hence to remove ringing and make a quite stepper motor driver you need lots of feed back.  For example read up on the trinamic stepper driver chips and see how they operate.  For myself I do not care about the noise, especially when moving, I care more about the noise when idle, here all motors should be zero as nothing should be changing. 

ma...@makr.zone

unread,
Aug 20, 2018, 2:27:07 PM8/20/18
to OpenPnP
On Monday, August 20, 2018 at 1:04:50 PM UTC+2, Trampas Stern wrote:
Power in watts is volts * amps.  24V * 10mA =240mW of power.    The issues with the 1us blanking time is that if you increase the voltage the power increases to the square, that is if you did the same math for 48V power  supply you would have 20mA of current and the power would be 48V*20mA=0.96W.
 
No you can't calculate like that. The coil of the stepper is an inductance. When it is loaded for the first 1µs it will get going up to 10mA, yes, but when the voltage is reversed, the coil will drive back 10mA to the power supply, reloading the capacitors there. With a perfect coil there would be no heating and no losses at the stepper side. The losses are only in the series resistance of the coil that you pointed out. Like the name implies one can assume a model circuit with a Equivalent Series Resistance (ESR) in series with the coil.

So 10mA will only generate I*R=30mV across the ESR. P=V*I=10mA*30mV = 300µW. That's 1/10'000th or 0.01% of the 3W you have correctly calculated for the 1A case. Like I said, the power and the losses scale with the square of the current.

In reality it will even be less, because the 10mA are only a current spike (triangular) at the beginning of a chopper cycle. The chopper then employs a constant-off time, when it shorts the coil, letting the current decay slowly.

I've modelled a simple constant-off time (10µs) chopper to show the effect (LTSpice Simulation, attached):


Here are the results. Note how the PSU current becomes negative, the loaded coil is driving most of the energy back into the PSU. It only reaches ~9mA because of the ESR.

Because it is only a current spike at the beginning of the chopper cycle and then being squared this gives you only 11.2µW average (as reported by LTSpice). With 48V I get 44.7µW. Like I said: "nothing".

 
Now if we assume your 2.4mH 1A motor is a 3V stepper (3/1 = 3 ohm resistance) then we have a maximum input power of 3V * 1A=3W so the 1us blanking time at 24V is .24/3*100=8% of the total power into the motor. At 48V it is 32%.  

Yes, here you have now correctly just calculated the voltage across the ESR. And you correctly get 3W. But the correct percentages are 0.000373% at 24V and 0.00149% at 48V.
 
With a ~1A guestimated on-time setting I get this (once settled). Note again, how the current is driven back into the PSU, only the time doing so is significantly smaller, showing what the ESR has eaten away.


 
As are as the motor noise it is true that steppers can create more noise due to the number of steps. However even a brushless DC motor operates on the same principles as the stepper motor, but with less steps per rotations. So they may produce noise too but at a lower harmonic due to less steps.   

Yes. Perhaps the three-phase operation is a bit smoother too.
 
However the stepping motor noise is more due to how the motor driven, that is taking full steps at maximum current on steppers is like hitting the stepper with a hammer to move it, and creates noise and ringing.

No, because again, it has inductance. With the Back-EMF added the current will only slowly rise and fall. 
 
The problem with ringing noise is it is dependent on the impedance of the coil, which changes with loads. Hence to remove ringing and make a quite stepper motor driver you need lots of feed back.  For example read up on the trinamic stepper driver chips and see how they operate. 

Yes I've done that, as I've got Trinamic TMC2660 drivers and I tuned them extensively. Actually it's from the Trinamic AN001 that I got most info.

At high velocity, the motor resonance must be kept low, in order to maintain torque as high as possible. Microstep waveforms play a reduced role, as the waveform cannot be maintained in this velocity range anymore (see Figure 2), getting worse with each increase in velocity. Fullstepping sometimes brings a few percent increased motor torque.

See: Application Note 001 (V1.02 / 2015-FEB-18) p. 7, 2.5 High Velocity Optimization.

Some real measurements here:

_Mark
Chopper sim v3.asc

Trampas Stern

unread,
Aug 20, 2018, 7:39:04 PM8/20/18
to OpenPnP
Yes you are correct the reverse current pulse after the blanking time is required to reverse the power stored in the inductor, which is the point I was trying to make when we started.  The power stored in the inductor is what I was interested in, not the power(heat) loss in the ESR, but as you pointed out my math did not include the current ramp.   So your graphs are great to prove that you have to reverse the polarity on the stepper after the blanking time to reverse out the blanking power stored in the inductor.  

The issue you get into is that as your voltage goes up the blanking time can create significant power stored in inductor which could result in motor shaft movement, and then you reverse the polarity to recoup that energy which moves motor back.  Sure it could be minor movement, but....   For example in your example the current got up to around 8mA, which is 0.8% of the total motor current (assume 1A).  While at 48V it would double the current and be 1.6% of the 1A total motor current, this is no longer insignificant. 

Trampas 

ma...@makr.zone

unread,
Aug 21, 2018, 3:08:04 AM8/21/18
to OpenPnP
Trampas, when I read some more in the Trinamic data sheet I found that constant off-time choppers employ a fixed-time fast decay.

Could it be that you actually meant this instead of the blanking time?

Quoting the TMC2660 DATASHEET (Rev. 1.05 / 2016-JUL-14) p. 35:
 
The classic constant off-time chopper uses a fixed-time fast decay following each on phase. While the duration of the on phase is determined by the chopper comparator, the fast decay time needs to be fast enough for the driver to follow the falling slope of the sine wave, but it should not be so long that it causes excess motor current ripple and power dissipation. This can be tuned using an oscilloscope or evaluating motor smoothness at different velocities. A good starting value is a fast decay time setting similar to the slow decay time setting.


The recommended setting "similar to the slow decay time" is typically much more than 1us the same data-sheet recommends:

Off time. This setting controls the duration of the slow decay time and limits the maximum chopper frequency. For most applications an off time within the range of 5μs to 20μs will fit....

So when you have 20µs instead of 1µs and 48V it will be not at all "nothing"!

On my machine I'm using Trinamic's spreadCycle(tm) Chopper which controls the timing with current comparators both ways and also employs a slow decay middle phase.


_Mark

Trampas Stern

unread,
Aug 21, 2018, 7:23:57 AM8/21/18
to OpenPnP
One I was reading did the "hybrid" mode where they did they ran the stepper for the blanking time, then the on time and then a fast decay, followed by slow decay.   

For example to get 4mA into the coil using the motor you simulated they would turn on for the 1us blanking time. Then they would leave motor on until current reached 12mA, then they would turn on fast decay for 1us (which reverses back out 8mA) and then they would do the slow decay for remainder of the period at 4mA.  The on/off times were minimal fixed at 1us based on their internal oscillator's frequency, so they could not do a fast decay for 0.5us.

The blanking time ends up being the minimal on time for the FETs and depending on your motor and your drive voltage can be a significant amount of current.  The blanking time is used as that the current sense on the ground side of the FETs can have noise from ringing which would falsely trigger the current trip, hence they "blank out" the current trip sensing during this time.  However it may also be limited by the oscillator frequency in the chip too.  

Generally I use the following definitions:

On Time - this is the time the H-bridge FETs are on driving power into motor in the correct direction (be it relatively positive or negative)
Fast Decay  - This is where the H-bridge is reversing current into the motor (current is going in the opposite direction you want) 
Slow Decay  - This is where both low side FETs are turned on such that the coil's inductor current is allowed to flow and decays slowly based on ESR. 
blanking time - This is the minimal on-time and the delay before current sense starts  

Some stepper controllers do a fast decay after an "on time" specifically after you turn off the FETs you will get a reverse EMF voltage spike. The body diodes in FETs will clamp some of this but can not handle the reverse EMF power on larger motors, so the controller will turn the FETs to the fast decay mode to absorb the reverse EMF back into caps.  If you turn on FETs for too long you suck power out of the inductor of motor and get fast current drop ie, "fast decay".  So you have to time estimate or better measure the time you leave FETs on in the "fast decay" mode to absorb the reverse EMF.  

The issues I found with designing a stepper controller is that your input voltage and motor will change the drive system.  For example if you connect up 12V verse 24V versed 48V it will change the way you drive the same motor as the current ramp is faster with higher voltages.  The same is true when you change from a NEMA 17 to NEMA 23, or even when you change loads on the motor.  

Most stepper drivers therefore are designed for limited voltage range and motor current.  A NEMA 17 stepper driver will work on a NEMA 23 but often not exposed full torque or capabilities of the motor, in fact a NEMA 17 stepper driver on a NEMA 23 motor might be worse off  than using the NEMA 17 motor.   A NEMA 23 stepper driver would also work poorly on a NEMA 17 as that most likely the current sense granularity is higher on the NEMA 23 driver. That is a 10A driver running a 1A motor will be worse than getting a 2A driver to run a 1A motor. 

I have looked at how to design the best stepper driver and found that it is best to measure current in the coil, not just low side on current of the H-bridge.  Doing this you can now do more dynamic cycle times. That is you can regulate the current ripple in the motor to reduce noise. You can also characterize the motor, for example if I turn on the FETs for 1us and get 8mA and I want 4mA I can then create a table of on times verse current.  So that I know I should try 0.5us for 4mA.  Then I can use the current sense to tweak these values over time and also over motor loading (which changes inductance).  Also I can skip the fast decay when driving low currents where the reverse EMF will be low, but use it on higher current on times where I will get significant EMF.  

It is not easy to design a good stepper motor driver that will work with motors from 1A to 10A, for example if you have 256 bit ADC with 10A  current sense circuit then your current resolution is 39mA, which is not good for 1A motors. More specifically with that ADC resolution you would only get a maximum of 25x microstepping with 1A motor while with a 10A motor you would have 256x microstepping, because you can not regulate the current better than 39mA.   This is just an example of the issues, not that I would expect anyone to use a 256 bit ADC these days... 

Usually people start designing stepper drivers by using a table of PWM on times, then tweak these values based on the current in their motor running on a bench.  Then when they connect motor to a load (worse a dynamic load) they wonder why they have problems.  I know I started this way.  I then put a current sense on the H-bridge and realized the purpose of the blanking time and tried to get that working.  After giving up on that I put current sense on the coil and realized that to do a good stepper driver in microcontroller you need to have timing of things near perfect. That is you need to measure the current in the coil fast enough and respond fast enough to do a good job regulating current ripple.  You also have to maintain your tables and lots of tweak/tuning data.  For example with our 2.4mH motor and 48V we would have 16mA of current in 1us. So if you had this 1A motor and wanted 256x micro stepping you need to control the current to 1/256=3.9mA. So you need to be able to control PWM to 0.25us which is (4Mhz). Thus your PWM needs frequency timing needs to be at least 4Mhz.  Of course if someone put a 500mA stepper on the system you now need even shorter pulse widths and higher frequency.  Soon your are fighting your FET turn on times. 

Again it is easy to make a system work for one motor and under one constant load, making work with any motor, any load, and a range of input voltages is harder, so at some point you have to limit you design or make multiple designs targeting specific motors and voltages.  

Mark

unread,
Aug 21, 2018, 8:00:14 AM8/21/18
to ope...@googlegroups.com

Yes I agree with most things.

 

> Some stepper controllers do a fast decay after an "on time" specifically after you turn off the FETs you will get a reverse EMF voltage spike. The body diodes in FETs will clamp some of this but can not handle the reverse EMF power on larger motors, so the controller will turn the FETs to the fast decay mode to absorb the reverse EMF back into caps. 

 

Don’t understand that one. If you go directly to Slow Decay after On Time, you will have a nice short circuit. No body diodes involved, except perhaps for a few nanoseconds of the break-before-make to avoid cross-current in the switching H bridge. But you also have this when going directly to Fast Decay only this time you have it in both bridges. Or am I missing something?

 

> Also I can skip the fast decay when driving low currents where the reverse EMF will be low, but use it on higher current on times where I will get significant EMF.  

 

Again I’m not convinced. Trinamic recommend the opposite. Quoting Application Note 001 (V1.02 / 2015-FEB-18) p. 7:

 

> 2. Try switching the motor to fullstepping, if your driver supports it. Make sure, that the driver coils see a fixed current. Therefore it is important to switch to fullstep at or near the fullstep positions (TMC26x based drivers) – compare Figure 5. Set vhighfs (for TMC5XXX drivers).

 

> 3. As fullstepping does not require high precision chopper operation, you can try to switch to slow decay only chopper – compare Figure 6, e.g. by setting vhighchm (for TMC5XXX drivers).

 

 

I also agree about the needed match between supply voltage, driver and stepper. For instance when I started, I didn’t know (unfortunately) that for fast motion current is not important, voltage is! Current is for torque, voltage is for speed.

 

I would opt for lower current drivers now but with 48V or 60V support, to get the stubborn current into the steppers in time.

 

_Mark

Mikael Bohman

unread,
Aug 21, 2018, 8:19:20 AM8/21/18
to OpenPnP

Also I don't think switching in the low µs order can create noise (assuming "noise" is of the audio type i.e. perceivable by humans, i.e. subject of this thread). Even bats "only" hear up to 90kHz.


I do not consider the frequencies above the switching frequency, I considering the frequencies that are created below the switching frequency.


A school book example: Create a pwm with 51% modulation without dither noise. What is the resulting spectrum of the signal?

If it was 50% you could get : 01010101010101010101
But in order to create 51% you need (in average) to have 51% ones and 49% zeros. 
The total series can be decomposed to: 010101010... + 1 0 0 0 . {99 zeros}  .. 0 0 0 1...

Now let's think about the spectrum of the second part. that is a square wave of 200Hz but with a 1% duty cycle.

Below is a FFT of the signal on log scale using 20kHz switching frequency.spectrum.png
As you can see you get 200Hz with overtones all the way and beyond 20 kHz.
Changing the pwm for each sample, will start changing all those sub 20kHz tones. 

--------------------------------
The other effect is the open loop bandwidth of the system. That decides with closed loop bandwidth I can achieve. 

Mikael Bohman

unread,
Aug 21, 2018, 8:49:05 AM8/21/18
to OpenPnP
CONCLUSION OF THE EXAMPLE:
A DC voltage of 51% was requested, but what you got is a 50% DC + 200Hz square wave with 1 % dutycycle.
If you would filter what below 200Hz you would only see that 51% requested DC, but with a 20kHz bandwith of the hearing, you hear a set of audible tones when a DC value was requested.

ma...@makr.zone

unread,
Aug 21, 2018, 9:31:04 AM8/21/18
to OpenPnP
On Tuesday, August 21, 2018 at 2:19:20 PM UTC+2, Mikael Bohman wrote:

Also I don't think switching in the low µs order can create noise (assuming "noise" is of the audio type i.e. perceivable by humans, i.e. subject of this thread). Even bats "only" hear up to 90kHz.


I do not consider the frequencies above the switching frequency, I considering the frequencies that are created below the switching frequency.


Ah I see. So it is more about the clock resolution than about the FET switching frequency. You could also add a hysteresis to the Delta-Sigma Modulation and as long as you remain > 40kHz and add the same random element you'd get no audible noise, right?

But you already documented that the switching losses in your FETs are astonishingly small, so that's probably not needed. Then again, are they very expensive :-)?

Common stepper drivers have constant off-time and will therefore have variable frequency switching > ~40kHz. Also they employ a Slow Decay Phase where the coil is shorted to let the current fly.

If the driver works as an analogue circuit with comparators and real analogue saw-tooth ramps etc. there are no such artefacts, right?

However modern drivers work digitally with internal clocks so it becomes the same problem. There I agree that the higher the clock frequency the better the outcome.

I'm using TMC2660 drivers. They have a ~16MHz osc if I'm not mistaken, and they also provide a randomizer for the off-time, to get rid of these artefacts and of interference between the two stepper coil channels as they are never perfectly the same. 

_Mark
 

Mikael Bohman

unread,
Aug 21, 2018, 11:08:56 AM8/21/18
to OpenPnP


Den tisdag 21 augusti 2018 kl. 15:31:04 UTC+2 skrev ma...@makr.zone:
On Tuesday, August 21, 2018 at 2:19:20 PM UTC+2, Mikael Bohman wrote:

Also I don't think switching in the low µs order can create noise (assuming "noise" is of the audio type i.e. perceivable by humans, i.e. subject of this thread). Even bats "only" hear up to 90kHz.


I do not consider the frequencies above the switching frequency, I considering the frequencies that are created below the switching frequency.


Ah I see. So it is more about the clock resolution than about the FET switching frequency. You could also add a hysteresis to the Delta-Sigma Modulation and as long as you remain > 40kHz and add the same random element you'd get no audible noise, right?

 

The next step to avoid the audible tones is to add random noise before the quantization, but doing that we need to keep track of the error and feedback it. If we do that we have a dithered delta-sigma modulator.

A very simple 1:st order modulator with dither would create this spectrum instead at 20kHz base frequency.

DS1.png


This modulator have changed all audible tones to noise, but it is still a problematic high level of energy > 1kHz.


Same but with 400kHz base.

DS1hi.png


With a more advanced design you can start to shape the noise and push most of it above 20kHz. A small part will always be present < 20kHz, but you can often do it good enough. 


I used this transistor with dual FET´s in a half bridge config. IRFI4019H-117P. The gatedrivers needed 25mA @ 12V to drive all 8 MOSFETS for one stepper motor.

Trampas Stern

unread,
Aug 21, 2018, 12:16:18 PM8/21/18
to OpenPnP
Yes you can switch to the slow decay mode to handle the reverse EMF, that also means the power is not recouped it the capacitors, but lost in the ESR. Which is often minor at low currents.  

Again I’m not convinced. Trinamic recommend the opposite. Quoting Application Note 001 (V1.02 / 2015-FEB-18) p. 7:

Note here they may be doing the fast decay to reverse out the power stored in inductor during blanking time.  Also different chips allow different configurations that is hybrid, fast decay or slow decay modes such that you can pick for your application and noise tolerance.  It all really depends on what you need from your motors.  


I also agree about the needed match between supply voltage, driver and stepper. For instance when I started, I didn’t know (unfortunately) that for fast motion current is not important, voltage is! Current is for torque, voltage is for speed.

 

I would opt for lower current drivers now but with 48V or 60V support, to get the stubborn current into the steppers in time.


Yea I agree, going from 12V to 24V made big difference in speed. Also going from a smoothie to direct drive via a smart stepper made a huge increase in speed.  That is by telling the smart stepper the desired end location it could move at full steps and then micro steps when close to end location. This created very smooth and  much fast movement. However it accelerated too fast and could leave parts behind (need to add motion planner with acceleration control).  Using phase prediction the smart steppers would move faster, but I never got the algorithm tweaked correctly to work under all loads so I have disabled phase prediction


Trampas


 

Reply all
Reply to author
Forward
0 new messages