Real Closed Loop Steppers
- geo01005
- Offline
- New Member
Less
More
- Posts: 18
- Thank you received: 1
26 Jun 2015 10:06 #60145
by geo01005
Real Closed Loop Steppers was created by geo01005
So I know that 'closed loop stepper' means different things to different people. What I'm talking about is actual realtime commutation and current control of a stepper motor with the help of a stepper motor. I know that there are several products on the market that offer a drive that can do this for instance:
www.teknic.com/products/meridian-drives/
and
www.leadshine.com/producttypes.aspx?type...pe=easy-servo-drives
However, I wondering if anybody has closed the loop with linuxcnc? So certainly the question will be asked why use a closed loop stepper motor when it ends up being close to the same price as a closed loop servo system... High torque at low speed for direct drive applications.
Additionally why not use an off the shelf drive? If I close the loop with linuxcnc, I get access to the current signal being used in the control loop and I can estimate instantaneous torque, this is useful for my application and I would rather not use an additional sensor and instrumentation to do this.
Any body else done this or have any interest? I would think that it is quite possible to do with an encoder input, dual h-bridges, and fast control loop (5-20 khz). In theory this is quite similar to controlling a AC servo motor with a high pole count. I think this would be most gracefully be done with an FPGA control board with high level information on the linuxcnc control loop similar to what is done with hostmot2 stepgen.
www.teknic.com/products/meridian-drives/
and
www.leadshine.com/producttypes.aspx?type...pe=easy-servo-drives
However, I wondering if anybody has closed the loop with linuxcnc? So certainly the question will be asked why use a closed loop stepper motor when it ends up being close to the same price as a closed loop servo system... High torque at low speed for direct drive applications.
Additionally why not use an off the shelf drive? If I close the loop with linuxcnc, I get access to the current signal being used in the control loop and I can estimate instantaneous torque, this is useful for my application and I would rather not use an additional sensor and instrumentation to do this.
Any body else done this or have any interest? I would think that it is quite possible to do with an encoder input, dual h-bridges, and fast control loop (5-20 khz). In theory this is quite similar to controlling a AC servo motor with a high pole count. I think this would be most gracefully be done with an FPGA control board with high level information on the linuxcnc control loop similar to what is done with hostmot2 stepgen.
Please Log in or Create an account to join the conversation.
- jmelson
- Offline
- Moderator
Less
More
- Posts: 817
- Thank you received: 151
27 Jun 2015 11:03 #60178
by jmelson
Replied by jmelson on topic Real Closed Loop Steppers
The Pico Systems Universal Stepper Controller can use encoders with a stepper motor (or step servo drive). But, it only adjusts the rate of step pulses to correct position errors, it doesn't sense the phase angle between motor drive voltage and current, which I think is what you are talking about.
The way we do it, the encoder measures position, that feeds back to the traditional PID component in LinuxCNC, and that controls the rate of step pulses sent to the drive.
Jon
The way we do it, the encoder measures position, that feeds back to the traditional PID component in LinuxCNC, and that controls the rate of step pulses sent to the drive.
Jon
Please Log in or Create an account to join the conversation.
- geo01005
- Offline
- New Member
Less
More
- Posts: 18
- Thank you received: 1
27 Jun 2015 23:50 #60188
by geo01005
Replied by geo01005 on topic Real Closed Loop Steppers
Thanks for the comment jmelson. Correct me if I'm wrong, but that type of "closed loop" stepper control doesn't keep a motor from stalling or allow you to run at higher RPM or torque?
This article briefly describes the kind of control I'm looking for under the "torque control" heading : www.motion-designs.com/images/DTrends_Nov_2010.pdf
More in depth description here: www.portescap.com/sites/default/files/wp...stepper_motors_0.pdf
This article briefly describes the kind of control I'm looking for under the "torque control" heading : www.motion-designs.com/images/DTrends_Nov_2010.pdf
More in depth description here: www.portescap.com/sites/default/files/wp...stepper_motors_0.pdf
Please Log in or Create an account to join the conversation.
- jmelson
- Offline
- Moderator
Less
More
- Posts: 817
- Thank you received: 151
28 Jun 2015 00:29 #60191
by jmelson
Jon
Replied by jmelson on topic Real Closed Loop Steppers
Well, that's the rub! Because a hybrid stepper motor relies on magnets for part of the magnetic circuit, you can't just increase the coil current to get more torque, as on a servo motor, which relies entirely on the electromagnetic field. So, such schemes can save power at light load, and can detect impending stalls and slow down, this is unacceptable in a multi-axis machine tool doing a coordinated move. You can't slow one axis independently. You'd need to signal the CNC control to slow ALL axes by the same factor, which gets complicated. You can certainly do this, of course, but it brings the CNC control into the stall prevention task.Thanks for the comment jmelson. Correct me if I'm wrong, but that type of "closed loop" stepper control doesn't keep a motor from stalling or allow you to run at higher RPM or torque?
Jon
Please Log in or Create an account to join the conversation.
- PCW
- Away
- Moderator
Less
More
- Posts: 17904
- Thank you received: 4774
28 Jun 2015 00:55 #60193
by PCW
Replied by PCW on topic Real Closed Loop Steppers
Our SoftDMC firmware can run step motors this way with a 7I32 daughtercard
Just like a brushless servo drive, the closed loop step drive always
supplies torque with a stator phase angle a full step (90 electrical degrees)
ahead or behind of the rotor position.
One reason you cannot do this with normal step motor drives is that you can vary the phase
angle but not the torque.
You might be able to get some of the benefits of a closed loop drive with a normal step drive+encoder
if you bounded the lead or lag of the step position relative to the rotor position to 1 full step (so you cannot stall)
Just like a brushless servo drive, the closed loop step drive always
supplies torque with a stator phase angle a full step (90 electrical degrees)
ahead or behind of the rotor position.
One reason you cannot do this with normal step motor drives is that you can vary the phase
angle but not the torque.
You might be able to get some of the benefits of a closed loop drive with a normal step drive+encoder
if you bounded the lead or lag of the step position relative to the rotor position to 1 full step (so you cannot stall)
Please Log in or Create an account to join the conversation.
- geo01005
- Offline
- New Member
Less
More
- Posts: 18
- Thank you received: 1
28 Jun 2015 08:31 #60207
by geo01005
Replied by geo01005 on topic Real Closed Loop Steppers
Yes, from what I have seen using both current and phase advance is key to making it work well. It is good to know that softDMC has this function. I didn't really know much about softDMC till I just went and read some of the manual. I noticed that softDMC typically runs at between 15-30 kHz sample rate, this fast sample rate would help with the task of commentating a high pole count stepper motor.
So from what I understand most 3 phase BLDC or AC servo motors have 3, 6, 9, or 12 poles. I think that a common stepper motor with 200 steps per revolution has 40 poles, right? So I would think that it is possible to do what softDMC is doing within linuxcnc with fast enough hardware to close the loop. For example if I were to use a 5i24 card with say a 7i32 or similar card to support current control on the two coils, then it seems that all that would be required is a fast enough servo loop and the right HAL components for a PID loop that would output a signal to a component that would convert the PID output signal to the right current signal for each coil. That component would take both current and phase control into account.
I'm thinking that to get good smooth control there ought to be at least 20 (completely pulled out of a hat after looking at a sin plot approximated with 20 points) servo periods per pole to control the motor with reasonable smoothness. This would be about the same level of smoothness somewhere between 1/4th and 1/8th stepping in open loop. If this were the case, then by my quick calculations a 5khz servo period (200 us) in keeping with that 20 servo periods per pole would results in a maximum rotational speed of 375 RPM. With a 10 khz servo period the max rpm is 750 rpm, and with a servo loop of 20 kHz the max speed would be 1500 rpm and so on. Of course you could control the system at higher RPMs than this but it would get less stable and start to act more like open loop full stepping. See attached graph.
The general control law for the current and phase control might generally look something like this for a two phase stepper motor:
Current in Coil A= pid_output*max_current*sin(mechanical_angle+(pid_output/(pi/2))
Current in Coil B= pid_output*max_current*cos(mechanical_angle+(pid_output/(pi/2))
So, i know that I have heard of mesa pci cards operating with a servo period of 5khz, but what is the real practical limit with low latency and jitter?
Also please let me know if i'm way off base.
So from what I understand most 3 phase BLDC or AC servo motors have 3, 6, 9, or 12 poles. I think that a common stepper motor with 200 steps per revolution has 40 poles, right? So I would think that it is possible to do what softDMC is doing within linuxcnc with fast enough hardware to close the loop. For example if I were to use a 5i24 card with say a 7i32 or similar card to support current control on the two coils, then it seems that all that would be required is a fast enough servo loop and the right HAL components for a PID loop that would output a signal to a component that would convert the PID output signal to the right current signal for each coil. That component would take both current and phase control into account.
I'm thinking that to get good smooth control there ought to be at least 20 (completely pulled out of a hat after looking at a sin plot approximated with 20 points) servo periods per pole to control the motor with reasonable smoothness. This would be about the same level of smoothness somewhere between 1/4th and 1/8th stepping in open loop. If this were the case, then by my quick calculations a 5khz servo period (200 us) in keeping with that 20 servo periods per pole would results in a maximum rotational speed of 375 RPM. With a 10 khz servo period the max rpm is 750 rpm, and with a servo loop of 20 kHz the max speed would be 1500 rpm and so on. Of course you could control the system at higher RPMs than this but it would get less stable and start to act more like open loop full stepping. See attached graph.
The general control law for the current and phase control might generally look something like this for a two phase stepper motor:
Current in Coil A= pid_output*max_current*sin(mechanical_angle+(pid_output/(pi/2))
Current in Coil B= pid_output*max_current*cos(mechanical_angle+(pid_output/(pi/2))
So, i know that I have heard of mesa pci cards operating with a servo period of 5khz, but what is the real practical limit with low latency and jitter?
Also please let me know if i'm way off base.
Please Log in or Create an account to join the conversation.
- jmelson
- Offline
- Moderator
Less
More
- Posts: 817
- Thank you received: 151
28 Jun 2015 09:38 #60209
by jmelson
Jon
Replied by jmelson on topic Real Closed Loop Steppers
Actually, 2 poles is possible, 4 is most common, and 6 and 8 poles are also seen. The Fanuc "red cap" motors are 8 pole. The way motor poles are counted on 3-phase motors, the minimum is 2 poles, which actually means there would be 6 windings. But, these are called a "2 pole" motor.Yes, from what I have seen using both current and phase advance is key to making it work well. It is good to know that softDMC has this function. I didn't really know much about softDMC till I just went and read some of the manual. I noticed that softDMC typically runs at between 15-30 kHz sample rate, this fast sample rate would help with the task of commentating a high pole count stepper motor.
So from what I understand most 3 phase BLDC or AC servo motors have 3, 6, 9, or 12 poles.
No, 50. The common 200 step/rev motor goes through 4 states of winding current to make a full step. So, the cycle of coil phases repeats every 4 full steps. 200 / 4 = 50.I think that a common stepper motor with 200 steps per revolution has 40 poles, right?
Jon
Please Log in or Create an account to join the conversation.
- geo01005
- Offline
- New Member
Less
More
- Posts: 18
- Thank you received: 1
28 Jun 2015 09:44 #60210
by geo01005
Replied by geo01005 on topic Real Closed Loop Steppers
Yes, you are right, 50 poles, I transposed a number in my spreadsheet. . So the RPMs I stated should have been 300, 600 and 1200 respectively. Certainly it is more difficult to control a motor with a pole count that high in comparison to typical AC servo motor, or at least it will require a faster control loop.
Please Log in or Create an account to join the conversation.
Moderators: PCW, jmelson
Time to create page: 0.153 seconds