Hello everyone, i’m Tom and today we’re
going to do some tuning.
Particularly, of the stepper drivers.
But instead of showing you some magical procedures
that work for some mystical reason, i’ll
also try to explain why and how those things
work.
So to get started, what is a stepper motor?
Well, most of all, it is a brushless, synchronous
DC motor - the same basic type that is used
in RC cars, planes, quadcopters and full-size
electric cars.
And just like most other electric motors,
they rely on magnetic repulsion and attraction
in the right spots to generate torque on the
output shaft.
If these motors only used permanent magnet,
they would be stuck in a single position and
if you tried to rotate them, they would generate
/ opposing torque to return to that position.
Now, because one half of the magnets in actual
# motors are electromagnets, we can control
which ones attract and which ones repulse
the magnets on the rotor.
In our case, those are the ones that are standing
still in the casing of the motor.
When you apply more current to these electromagnets,
they generate a stronger magnetic field and
consequentially, also / more torque.
If the current through the coils changes polarity,
it also inverts the magnetic field, so the
spots that used to attract / now repulse each
other.
Now, if the coils get energized and de-energized
in the right sequence, that one spot the rotor
wants to rest in / starts moving / and the
rotor starts turning to align with that spot
again.
Regular brushless DC motors have a layout
and accompanying electronics that are geared
towards efficiency and often towards higher
speeds, while # steppers are optimized for
high torque and accurate positioning.
Still, the only way they position their shaft
is by generating torque through magnetic fields,
and the closer the rotor gets to its resting
position, the smaller that torque gets.
Which you can easily test out on a stepper:
Try rotating its shaft when it's powered up
and standing still: you'll notice that it
feels a lot like it's spring-loaded - the
harder you twist, the further it will turn.
And the #higher you set the current, the #harder
it will be to flex by hand as the motor generates
#more torque pulling it back to its idle position.
On the other hand, if you set the current
too low or push too hard, you might be able
to feel the motor snapping forward: that's
when it skips a steps and snaps back into
place in the next spot where the magnetic
fields match up again.
Congratulations, your motor just skipped a
step!
Ideally, you don't want that to happen when
printing something, as your electronics have
no idea about whether or not they motor is
still at the position it thinks it is, so
it has to rely on the motor running perfectly.
Now i’ve only mentioned current so far and
haven’t talked about the voltages involved
in driving a stepper motor, and that’s because
they mostly are none of your concerns.
The stepper drivers we use are all chopper
drivers, so they are essentially a DC-DC converter
formed together with the motor’s coils and
they will limit the current the stepper sees
to what they think is appropriate for the
position it is trying to get to.
So by itself, it will increase or decrease
the voltage the motor sees to get the current
it wants - and that’s really all that matters
for the motor and its performance, as the
magnetic fields the electromagnets inside
the motor generate are directly proportional
only to the current through that coil.
To get to the wanted current faster, the driver
will use the overhead it has from the power
supply to get there faster, which is why we
typically use motors that require spec-sheet
voltages of around 3 volt with supply rails
of 12 of 24 volt.
/
Now, when you’re setting the current to
your motors, there are a few things that limit
the range of values that will work.
The friction of your linear slides, the inertia
of your moving parts when accelerating and
decelerating # and possible resonances due
to the springiness of the motors and belts
will all require a certain amount of torque
to overcome - set the current too low, and
your motor will start skipping steps on faster
moves / or on the second the hotend scrapes
over a part of the print that somehow stuck
up too far.
On the other end of the adjustment range,
if you set the current too high, the first
thing that will happen is that your stepper
driver will go into overtemperature protection.
On Allegro chips, that is usually well below
2 amps without extra cooling, but on Texas
Instruments DRV8825 chips, you can actually
also go past the rated current of your stepper
motors.
Now, that’s not all too bad, because the
motors can run for quite some time at a higher
current, but they will eventually heat up
past the softening point of your motor holders
and warp those.
The maximum rated temperature for most stepper
motors is 130 degrees celsius, which is well
past what plastic motor holders can handle.
The other problem that especially the Allegro
chips have at higher current is that they
won’t be able to accurately move the motor
to its microstep positions, which will be
visible as resolution artifacts, so for example
as tree rings on rounded surfaces.
So for the actual current adjustment, there
are two schools of thought: One says that
you should measure the driver’s reference
voltage, which adjusts its output current,
and set it to the exact setting you want.
On the common driver board-lets, this is done
by adjusting a tiny potentiometer.
On more modern boards, you can control the
output current precisely through software
and a bunch of extra chips on your control
board.
The problem i have here is that you usually
won’t be able to set your drivers to the
rated current of your motors, which is usually
at least two amps, without overheating the
driver.
So you compromise on a lower setting, but
still don’t know if that new setting is
going to work out.
Plus, with different reference voltage levels
and different sense resistors on the different
driver boards, saying something like “you
need to set your potentiometers to 0.68V”
doesn’t make too much sense unless you know
the exact hardware used.
So what i like to do is to go with the other
school of thought and just experiment until
i find a setting that doesn’t overheat the
driver or introduces ripple artifacts, but
still provides enough torque to keep the motors
from losing steps under all conditions.
As stupid as that sounds, it’s what i think
is the best way to go about it, especially
since you’ll have already verified the setting
you want to use when you’re done adjusting.
For me, that means jacking the current all
the way up to where the driver just barely
overheats, then backing down a good bit to
leave some leeway in case the airflow changes,
the drivers degrade or some other things happens
that puts more stress on the drivers.
Also, running them right at the edge of the
overheat protection isn’t exactly good for
the life expectancy of the drivers, even though
they are pretty robust little things.
Once i’ve found a current setting that is
low enough to be reliable, i’d start adjusting
the maximum speed, acceleration and jerk settings
in the firmware.
Because that’s the other part of the current
adjustment game - you’re basically always
trying to provide enough current and torque
for your little motors to master the challenges
of driving a 3D printer.
And while current and torque is limited, you
can also make it easier for the motors by
reducing the maximum speed, but also lowering
acceleration and jerk values.
I’ve already made a video on adjusting the
speed settings, and out of those, the most
important one, i think, is the acceleration
setting, because that’s what determines
both the dynamic load on the motor, which
is what it will mostly be dealing with, but
also whether or not an axis will go into resonance,
and it can seriously screw up your prints
and your motivation to keep printing / when
your 3D printer seems to randomly lose steps
on certain parts.
And you’re just standing there, looking
like an idiot.
It’s frustrating.
I’ve been there, i don’t want to be in
that position again.
So do it right, test for resonances, for example
with the test file linked to in the video’s
description.
Print that, check if an axis loses steps and
adjust accordingly.
So, i don’t really know what else to talk
about as far as driver adjusting goes - you
know, any setting that works for you is perfectly
fine.
If the motor’s losing steps, lower the speed
settings or increase the current, if the driver
or motor overheats, lower the current.
That’s it.
And even if you set the current accurately
by measuring reference voltages or configuring
the firmware, you still need to check if they
actually work in the same way.
So, as always, thank you for watching.
And thank you to everyone who has been watching
my videos so far, you guys and gals have accumulated
almost one million minutes of play time so
far, which is pretty hard to wrap my head
around, to be honest.
But it also means that making videos is way
more efficient for me than explaining the
same topic over and over again in person.
And that’s what i was going for in the first
place, and i think it’s working out pretty
well.
To maximize the future efficiency, please
subscribe if you haven’t done so already,
leave a like and feel free to share this or
any of my other videos with people that you
think could find them useful.
Adios amigos, see you next week!
