View Full Version : stepper acceleration rate - limits?

25-02-2014, 05:50 PM
I'm running a stepper via an EM806 driver and I'm generating the pulses with a PIC via PWM. The frequency is modified by changing the PR2 register, it's pretty crude as it doesn't guarantee a linear speed change, but it's easy to implement (every 25ms or so I simply reduce the PR2 by one), here's what the acceleration curve is like:


The motor stalls sometimes during acceleration, which got me into thinking that maybe the speed is increased too quickly. I'm guessing the answer is no, but is there an easy way to calculate dynamic torque or an acceleration rate to guarantee the least torque drop during speed ramp up? The motor ramps up from 60RPM to 240RPM within 1500ms and is running at 800microsteps per turn.


25-02-2014, 06:36 PM
I'm running a stepper via an EM806 driver and I'm generating the pulses with a PIC via PWM. The frequency is modified by changing the PR2 register

So strictly speaking you mean pulse frequency modulation, not PWM, as the pulse width (quite rightly) is fixed.

The motor stalls sometimes during acceleration, which got me into thinking that maybe the speed is increased too quickly.

So have you tried changing the speed (via PR2) very slowly, to verify your supposition?

I'm guessing the answer is no, but is there an easy way to calculate dynamic torque or an acceleration rate to guarantee the least torque drop during speed ramp up?

Torque that the motor can output, i.e. it's rating, or the torque required by the load? If it's the former then you can make some assumptions to get a reasonable guess (http://www.mycncuk.com/forums/machine-building-faqs-problems-solutions/1524-what-size-stepper-motor-do-i-need.html). If you know, or can calculate, the load inertia and load torque then it's just basic physics to work out the torque required from the motor. Find out what the load inertia is, recall that torque is inertia multiplied by angular acceleration, then pick an acceleration such that the required torque never exceeds the values indicated by the torque-speed characteristic of the motor.

The motor ramps up from 60RPM to 240RPM within 1500ms

So change in speed is 180RPM in 1.5 seconds. For torque calculations you'll need the angular acceleration, \omega=\frac{180}{60}/1.5*2*\pi=12.6 rad/s^2. Now if you know the inertia of the system, i.e. motor and load (taking into account any pulleys etc), then the torque required for this acceleration is simply T=J*\omega where J is the inertia.

26-02-2014, 11:43 AM
Indeed it's frequency modulation, I got more focused on the fact that it's a PWM output in the PIC that I'm using.

I haven't tried slowing down the ramp, the above is purely speculation with no real proof. I was simply curious whether there's some method to quickly judge what the max acceleration limit is, based maybe on the load torque requirements. I can roughly judge what the torque required by the load is, but inertia is a bit more complicated. I think this needs further re-thinks.

Cheers Jonathan.


27-02-2014, 07:52 AM
If you know, or can work out, the mass of the load and screw, the inertia calcs are easy to do. Actually the screw is easy from diameter, length and pitch.

27-02-2014, 11:02 AM
The motor is used in a slightly different scenario, it runs a shaft which acts a bit like a spindle driven via a pulley / belt at 2.67:1 ratio. The load is pure friction on the bottom of the 'spindle', this is variable really and it's really hard to define what the max / min is. So far I've done the following:

- had an 8Nm stepper mounted, running by mistake at 480RPM. This would sometimes stall at full speed (480RPM), a lot of hit and miss, sometimes it was stalling at ramp up. I've only just realised that I was generating 3200Hz to the drive, yet the drive was set to 400 microsteps which gives 480RPM, I was really aiming for 240RPM, so I increased the amount of microsteps to 800. That made the motor super quiet and will probably bump the torque at full speed (240RPM now) significantly, but maybe not enough to get it past stalling.

- switched to a 12Nm stepper for which I haven't got a torque curve so it's hard to judge what the torque is at 240RPM. I've ran some tests yesterday with very slow ramp ups (PR2 decreased by 1 every 100ms) and the motor was stalling before it got to 240RPM. I've lowered the max speed to 180RPM, it was still stalling, went down to 120RPM and it runs fine. Looking at some videos of the motor in action, I'm judging I can probably push it to 150RPM, but anything higher than that and the torque drops off really quickly.

The acceleration 'ramp' is not linear, as I do this via modifying the PR2 register, the RPM changes vary as the speed goes up ie. the lower the PR2 gets, the higher the speed, but the bigger the impact a 'PR2 - 1' operation has. For example going from PR2 = 155 to 154 means a change in speed from 30.05RPM to 30.24RPM, going from PR2 = 40 to 39 means a change in speed from 114RPM to 117RPM. Not sure if it affects anything, the bigger motor seems to stall at the same spot every single time, but I haven't yet tried a constant RPM delta for ramp up (say 1RPM per 0.025s or similar)

Does switching from 400 microsteps to 800 microsteps decrease torque?


27-02-2014, 07:50 PM
From the numbers you've quoted, you've tried at a very low acceleration and the motor is still stalling at a low speed. There's something seriously wrong if the motor can't exceed 150rpm - perhaps it's resonant around that speed? How does it when the motor is close to stalling? Have you checked what the corner speed for the 12Nm motor is on the drive voltage you're using?

As irving said, you can easily get a good enough approximation for the inertia of the parts from assuming they're cylinders and using the following formula:
Where m is the mass of the cylinder and r is its radius. That will get the inertia of the pulley connected to the rotor of the motor, but you need to scale the inertia of the parts on the driven shaft by the square of the drive ratio, so in your case they will be 2.67^2=7.11 times lower than calculated, as I think you have the smaller pulley on the motor. The total inertia of the system is therefore motor rotor ineria+motor pulley inertia+1/7.11*(the rest). By all means work it out, but currently I think you're problem lies elsewhere, as with a very low acceleration the inertia will make little difference.

28-02-2014, 12:15 AM
What voltage on the driver and what's inductance of motor? I assume you're wired up bipolar parallel, if this an 8 wire motor.

28-02-2014, 09:51 AM
I haven't got a detailed torque curve for the 12Nm motor, this is the only thing I have:


but it's for a 100VAC driver and that particular motor is a 4 wire version, I'm using an 8 wire connected in parallel. I've asked Leadshine for a torque curve for their own 12Nm just to get an idea of what can be expected and it looks like this:


As you can see, it also drops off pretty quickly for the VDC EM806 drive, performs much better with VAC and higher voltages. Looking at the speed values and the EM806 at 72VDC, the drop off point is around 80-100RPM, afterwards torque falls dramatically, with only around 3Nm available at 240RPM, this is much worse than the less powerful 8Nm motor I was using before which has a torque curve like this:

I wouldn't mind using the 8Nm instead of the 12Nm, but unfortunatelly I need the start torque to be at around 12-10Nm, 7Nm from the smaller motor isn't acceptable and causing stalling pretty much on startup.

To answer some questions:

Jonathan: the 12Nm is resonant but at around 80RPM, I haven't noted down the exact speed, but I can see / hear the whole motor / belt vibrating pretty badly, but it's only a short period, once it's past that speed stage the vibration is gone. When I say stalling it's really loosing steps and hardly rotating, a lot of jiggery action going on with the motor pretty much at stand still. With the HBS86 driver that would result in a Stall Fault and stopping the motor, on the EM806 it still wants to move loosing majority of the steps, but the stall alarm doesn't go off (it's got sensorless stall detection, not sure how that works). I simply stop the motor manually at that stage as I can see it's not going to go anywhere.

irving: it's 68VDC on the EM806 driver, here's the inductance data, the 12Nm is used in parallel:


This is the connections on the driver:

Phase A: RED + BLU
Phase A': YEL + BLK
Phase B: WHT + BRN
Phase B': ORG + GRN


01-03-2014, 08:47 AM
9mH inductance :(

A very crude mental calc shows that at 100rpm on 68v you'll be struggling to get little more than 2Nm torque and at 200rpm it's going to be nearer 1Nm, so you've got less than 1Nm available to accelerate the load through that range.

The AC drivers still provide dc to the motor so 100vAC is crudely 140v DC so at 68v the performance is going to be roughly 50-60% of the 100v AC curves.

01-03-2014, 04:00 PM
Thanks irving, can I ask where the 2Nm @ 100RPM and 1Nm @ 200RPM came from?

If 68VDC gives around 50% of what a 110VAC can do torque-wise, here's a chart made using the info from the original 110VAC data from my previous post:


This would mean still around 4Nm at a pretty wide range of speeds, which isn't the case as testing has shown.

The 8Nm motor used to stall sometimes at 480RPM at which it had 3Nm:


this means that the bigger 12Nm must have at least 4Nm or so as it's not stalling at all. It begins to stall at around 180RPM which must be the moment when the torque drops below 3Nm or around. I'd gladly use the smaller motor, but it hasn't got enough starting torque :( it seems that I need around 10Nm on startup, which the small motor cannot deliver.


01-03-2014, 05:18 PM
It was a quick calculation of the motor winding impedance at the frequency in question and therefore the current in the windings. Since torque is proportional to current this gives a rough idea of the torque at a given speed compared to the stall torque.

02-03-2014, 02:25 PM
Thanks again irving, I think the only real solution here will be a servo + gearbox + driver. I'm contemplating that approach, but it's freakishly expensive, although it would mean pretty much constant torque across a wide range of speeds. If I go with a 400W servo which gives around 1.3Nm within 0-3000RPM, I can put a 20:1 gearbox on it and have 26Nm within 0-150RPM. That's well plenty for my application.

One thing I'm not 100% with servomotors, what the current requirements when choosing a PSU? is it similar to stepper motors where a 6A PSU is capable of driving 3-4 motors, or is it more like DC motors where you need a huge DC PSU to deliver the current?