I’m using a #1206 stepper and am wondering what the motor is rated for maximum step frequency (couldn’t find this spec listed anywhere on the product page). Trying to determine max. RPM speed for the motor. I’m using the DRV8825 controller (@ 1/16) and a 12V DC source. Does this have to be kept below 20kHz? I’ve been able to get consistent rotation up to 29.3kHz (17us on/off pulse) but I’m unsure of the stability at that frequency. If set to anything lower (like 16us pulses) the stepper sometimes works but at other times just hums without rotation. Whatever the max. frequency is, would that be the same for all of your steppers or is that product specific? Appreciate any help.
Wouldn’t that depend on how much load you have on the motor, too?
You have to energize the windings to their max current for each step, to achieve max torque, and then you have to make sure that that torque is enough to turn the motor to the “next step,” and that’s much more dependent on the amount of current you can cram into the motor (controller + power source, and motor current rating) and the amount of load you are driving, than any theoretical “max step frequency.” Specifically, the max step frequency with an infinitely good driver is just enough to overcome internal friction while keeping the motor spinning; it’s very likely that your driver, power source, load, and natural friction variation will be much more important in determining practical limitations, than such a theoretical value.
In general, stepper drivers are rated at max step frequency, because they generate heat each time they switch state, and there is a certain rise time of the signal each time it switches, which can be integrated and compared to the thermal dissipation ability of the driver to get the max switching frequency. No such thing for motors.
Yes, I agree that loading is a factor in the final design but I’m currently just looking at the motor under no-load conditions. At this point, I’m just trying to find out what the motor spec is for a maximum step frequency and whether what I’m seeing is consistent with what should be expected for the #1206. I understand that the driven step frequency may have to change once the stepper is integrated mechanically but at least it provides an upper-limit. I’m also seeing that the max. frequency is also dependent on how the stepper is micro-stepped, which makes some sense since with less micro-stepping it will take the motor longer to complete a step since it is traveling a further distance and won’t be ready to accept the next pulse as quickly. I’m in the process of designing a stepper-control library for an ARM-Cortex-M4 micro-controller (running at 96mHz) that can take as many of the variables into play as possible to provide a robust and easy-to-use stepper interface.
The pull-out torque curve on the stepper motor product page is probably the best way to understand what kind of performance to expect. Ultimately, the maximum speed you will be able to get with a stepper motor will depend on a number of factors independent of the stepper motor itself, such as the current-limit setting of your driver, the supply voltage, the microstepping mode, and your speed profile (you will need to gradually accelerate your stepper motor to achieve top speeds). The graph on the 1206 product page is for half-stepping with a 24V supply.
Can you provide any guidance as to how long an acceleration ramp-up should take and the best step size change to use during the ramp-up period? Is it best to ramp-down the stepper as well when stopping? Appreciate any help.
Just to give you some perspective, we did some tests with our #1207 stepper motor using a DRV8825 driver in half-step mode with the current limit set to 280 mA:
[ul][li]24V supply with a bare shaft -> 1500 RPM top speed (10k pps)[/li]
[li]24V supply with a fly wheel -> 2000 - 3000 RPM top speed (15k - 20k pps)[/li]
[li]12V supply with a bare shaft -> 1000 RPM top speed (7k pps)[/li]
[li]12V supply with a fly wheel -> 1500 RPM top speed (10k pps)[/li][/ul]
To get these speeds, we needed to ramp the motor speed up from rest over several seconds. We have not conducted the same tests with our #1206 stepper motor, but I suspect the results will be similar. I suggest you try playing around with the microstep setting and ramp duration to see how that affects your results, and I would be very interested to hear what your results are.
A ramp-down is probably not very important unless there are additional mechanical considerations (e.g. if you have a heavy load spinning very fast, stopping abruptly could be rough on your system, and it could potentially cause your stepper motor to take a few extra unaccounted-for steps).
Stepper motor operation at high speed
Thanks for the info. I just did a quick test with the DRV8825 (@ 1/16 micro-step) & #1206 Stepper driven at 12V/650ma current-limit with no-load. I seem to be getting much higher step frequencies than what you are listing for the #1207 but I am using a higher current (however, at a much greater micro-step setting). Here’s what I did to provide a ramp-up curve (over 40ms, 5ms delay before each frequency change):
Pulse Freq. (Hz)
Nothing really fancy about the frequency change magnitudes I used nor the delay time, that’s just what I tried. The interesting part is that I was able to get a much higher pulse rate with consistent rotation using the ramp-up. In my ARM-M4 code, I am firing the stepper driver interrupt every 12us to provide the 41.6K step frequency. This has been running in an infinite-loop (with a 1sec. delay before res-tart) for the last 20minutes without any rotation problems. When starting the stepper directly, the quickest I could get was about 16us (31.3K).
I’m going to investigate all of this some more and will post-back more in the next few days.
OK, I’ve gone a little further with this testing. First, I want to confirm that I’m dealing with the current limit on the DRV8825 correctly. I started using Vref but when I measured the actual coil current it was much less than I thought it should be (in full-step mode). All of the Vref calc. info seems to reference full-step mode and doesn’t really talk about what needs to be done if running in micro-step modes. If the pot is adjusted to provide the correct value in full-step mode, will that apply the correct max. current when running in any of the micro-step modes or does something need to change? I understand that the driver chip is varying the coil currents to achieve micro-step but does that mean that a higher max. current can be used to get better performance when running in micro-step modes? I’d appreciate any info you have on this … I’m sure you’ve been through this a million times with others, so if there are specific forum post links that explain this just point me there and I can read through it.
OK, back to my setup. I’ve re-adjusted the current limit to provide approx. 640ma (in full-step mode). Just a note, this is quite a bit different than the approx. 250ma value I had (which I measured with the driver in full-step mode) with the pot setting & Vref value I was originally using. I’m assuming what I have is correct at this point. Please comment if necessary.
With this setup, I’m able to get a bit higher step frequency. I can now ramp-up the step frequency to approx. 45.3K (11us interrupt firing). Interestingly, the motor was running pretty hot with the previous settings (which was providing a lower current?) but it seems to be running much cooler now with higher current. Does that make sense? Any comments on the ramp-up values I’m using or the ramp time?
Appreciate any comments you have. Still more testing to do … I’ll post back as I progress.
How did you measure the coil current? What coil current did you measure and what was your Vref voltage? Was your stepper motor stepping while you measured the coil current? What is your power supply?
The reason that we suggest you measure the coil current while in full-step mode is because that is the only mode where the coil current magnitude is the same for both coils and independent of the step you are on. When microstepping, the coil current is given by:
coil 1 current = current limit * sin(step2pi/(#microsteps4))
coil 2 current = current limit * cos(step2pi/(#microsteps4))
The magnitude of the current vector is given by
sqrt[(coil 1 current)² + (coil 2 current)²] = current limit
So what you end up with is a vector of constant magnitude that is just rotating with every step. This keeps the motor torque constant. But the current in each coil is changing with every step. Unless you know exactly what step you are on and feel like doing the math, it is difficult to work backwards from what you measure to what you actually have the current limit set to. The DRV8825 datasheet has the step table at the end, so you can see what the driver is trying to limit the coil current to for each microstep. When microstepping, it is important that your current limit is set to the rated current limit of the driver, since on some steps, 100% of the current limit will be flowing through one of the coils (the other coil will have little to no current flowing on these steps). When in full step-mode, you can actually set the current limit a little higher than the rated current, since there will always be approximately 70% of the current limit flowing through each coil. Does this make sense?
The motor temperature should increase with increased current, since the heat is the result of power dissipated by the resistance of the motor coils. P = I²R, and R is a constant, so if P is going down, I is going down. However, the current is a function of more than just the current limit setting. For example, the faster your motor is stepping, the lower the current will be through the coils (assuming all other conditions are held constant).
I don’t have much to say about the ramp values or ramp time. I think you should just try playing around with the different parameters to see how they affect your results. It sounds like you are changing the step frequency discontinuously; you might get better results if you ramp the speed up more smoothly.
I measured the coil current with the DRV8825 in full-step mode and the pulse input tied HIGH (3.3V). No, the motor was not stepping when the current was measured. I’m using a 12V/4A supply for drive power with a 50V/100uF electrolytic capacitor installed across the power input terminals. The original measured current was approx. 250ma and I believe the Vref was set to approx. 0.35V but unfortunately I did not re-measure it before I made changes (you can take a look here for more info on the setting of the 0.35V value … https://forum.pololu.com/t/setting-current-limit-on-drv8825-md20a-with-1206-stepper/5725/1). Based on this setup, I re-adjusted the pot to provide approx. 640ma of current and this is what I used for the testing data I provided above (using 1/16 micro-step mode). I’m assuming this setup is now correct, yes?
Thanks for the details on the micro-step current settings. Yes, that makes sense.
I figured the heat would vary in proportion with the current based on I[size=85]2[/size]R but didn’t really originally get the fact that the heat is reduced at higher step rates. I can now see more diminished current readings when I step more quickly, so it would make sense that it should run cooler at higher step frequencies. However, in my case, running the same code that I had with the original pot setting and again with the new pot setting (i.e. same move profile) results in a cooler running motor with the new settings.
Regarding ramp-up profile & timing, should I be looking for better results than what I’m showing? With what I have, I’m able to get the unloaded motor to ramp-up to 45.3K step frequency (using a 11us interrupt firing) and run consistently within 40ms. Should I be able to do better than this? Yes, I’ll play around with making a more consistent step frequency delta during the ramp-up. However, I found that if I made less radical frequency changes as I got closer to the target value, I was able to support a slightly higher final step frequency. One issue I’ll have later is that I really need to attain the ramp-up as quickly as I can since I’ll be moving to discrete points and not just spinning the motor constantly. The max. step frequency I’ll apply for a given move will be based on the parameters of the move (i.e. faster speeds for longer moves & different ramp-ups based on the move distance).
I’ll continue working through this and will post back when I have more info to share. Please let me know if you have any comments on any of this. Appreciate your help.
You still haven’t said how you measured the current. I am concerned about the discrepancy between the VREF voltage and your measured current, so I am not comfortable confirming that your setup is correct until I know how you performed the measurement you are now relying on.
We have not characterized the maximum achievable speed of that particular stepper motor, which is why I am suggesting you try adjusting the various parameters to get a sense for what leads to optimal performance for your particular application. The pull-out torque curve for that stepper motor (you can see it on the product page) makes it seem like you should be able to achieve around 10k pps in half-step mode with a 24V supply under at least some conditions (which would be around 1500 RPM), but that might take many seconds of ramp-up and probably allows for very little torque.
Can you share more about your actual application?
Regarding coil current measurement (in full-step mode), here’s a diagram that hopefully will help:
Again, I’ve set the pot to provide about 645ma with this setup. Is this OK?
Don’t really want to share anything additional on the actual application at this point (I really don’t think that’s pertinent to the discussion at hand now since the application will be using a different driver & stepper motor). My main goal now is developing a comprehensive general purpose stepper library for the ARM-M4 micro-controller that will provide a STEP/DIR-based micro-step library that can be used universally with different stepper motors & drivers which support a STEP/DIR interface. I’m using the DRV8825 driver & the #1206 stepper as test components for now so that’s why I’m trying to apply these properly.
If you were in full-step mode and not stepping while taking the measurement, and if you plan on always running in full-step mode, then yes, that is okay. If you plan on using microstepping, you need to set the current limit so that you measure approximately 475 mA when in full-step mode (VREF = 240 mV).
OK, that makes sense since the measured current (in full-step) is 70% of the current limit. I will be using micro-stepping so I’ll reset the pot so I measure 470ma (470/.70 = 670ma [#1206 current limit]). Let me re-test with this change and see what step frequencies I now have. Appreciate the help.