Difference between revisions of "Tuning velocity controller"

From Granite Devices Knowledge Wiki
Jump to: navigation, search
[checked revision][checked revision]
(Current/torque saturation)
m (Text replacement - "\[\[([A-Z]{2,3})\]\]" to "{{/param\|\1/}}")
Line 12: Line 12:
 
*Attach motor to the target load and ensure it can rotate in both directions '''infinitely'''
 
*Attach motor to the target load and ensure it can rotate in both directions '''infinitely'''
 
*Make following parameter changes to Granity and click apply afterwards:
 
*Make following parameter changes to Granity and click apply afterwards:
**Set drive in velocity control mode [[CM]]
+
**Set drive in velocity control mode {{/param\|CM/}}
**Choose ''Serial only'' setpoint input [[CM]]
+
**Choose ''Serial only'' setpoint input {{/param\|CM/}}
 
**Make other necessary adjustments to have drive powered and enabled  
 
**Make other necessary adjustments to have drive powered and enabled  
**Untick Setpoint smoothing [[CIS]]
+
**Untick Setpoint smoothing {{/param\|CIS/}}
**Set Goals tab [[DIV]] and [[MUL]] to 50
+
**Set Goals tab {{/param\|DIV/}} and {{/param\|MUL/}} to 50
**Set acceleration [[CAL]] & velocity [[CVL]] limits reasonably to the levels that motor is expected to handle
+
**Set acceleration {{/param\|CAL/}} & velocity {{/param\|CVL/}} limits reasonably to the levels that motor is expected to handle
 
*Set-up the test stimulus and capture settings from Testing tab (an example, may be varied):
 
*Set-up the test stimulus and capture settings from Testing tab (an example, may be varied):
**Set target setpoint 1 [[TSP1]] between 1000 and 16383 (16383 equals the max speed that is configured via [[CVL]])
+
**Set target setpoint 1 [[TSP1]] between 1000 and 16383 (16383 equals the max speed that is configured via {{/param\|CVL/}})
 
**Set delay 1 [[TSD1]] to 0.25 seconds
 
**Set delay 1 [[TSD1]] to 0.25 seconds
 
**Set target setpoint 2 [[TSP2]] to same, but ''negative'', value of TSP1
 
**Set target setpoint 2 [[TSP2]] to same, but ''negative'', value of TSP1
 
**Set delay1 [[STD2]] to 0.25 s
 
**Set delay1 [[STD2]] to 0.25 s
**Choose sample rate [[TSR]] of 500 to 2500 Hz
+
**Choose sample rate {{/param\|TSR/}} of 500 to 2500 Hz
 
**Choose ''Capture setpoint change in positive direction'' from the dropdown
 
**Choose ''Capture setpoint change in positive direction'' from the dropdown
 
**''Tick Continuously repeating capture''
 
**''Tick Continuously repeating capture''
 
**Tick ''Velocity setpoint'' and ''Velocity achieved'' from signals
 
**Tick ''Velocity setpoint'' and ''Velocity achieved'' from signals
 
**Tick ''Start capture'' to begin continous capture.  
 
**Tick ''Start capture'' to begin continous capture.  
**Tick Enable test stimulus [[TSE]] to begin a continuous position back and forth spinning motion generation
+
**Tick Enable test stimulus {{/param\|TSE/}} to begin a continuous position back and forth spinning motion generation
  
 
Once the steps above are done, motor should be generating direction reversing spinning and velocity response graphs should appear on the right side of Granity about once in 3-5 seconds.
 
Once the steps above are done, motor should be generating direction reversing spinning and velocity response graphs should appear on the right side of Granity about once in 3-5 seconds.
Line 43: Line 43:
 
[[File:Veltuning4.png|800px]]
 
[[File:Veltuning4.png|800px]]
  
Begin tuning by increasing [[KVP]] gain. This makes motor follow velocty setpoint much better.  
+
Begin tuning by increasing {{/param\|KVP/}} gain. This makes motor follow velocty setpoint much better.  
  
 
To try different gains, go to Tuning tab, change value and click the Apply settings button.
 
To try different gains, go to Tuning tab, change value and click the Apply settings button.
Line 50: Line 50:
 
[[File:Veltuning3.png|800px]]
 
[[File:Veltuning3.png|800px]]
  
When [[KVP]] has been increased too much, the system becomes unstable and may start oscillating. In such case, you may hit Esc button to disable drive, reduce the gain and enable drive again.
+
When {{/param\|KVP/}} has been increased too much, the system becomes unstable and may start oscillating. In such case, you may hit Esc button to disable drive, reduce the gain and enable drive again.
  
Tip: torque bandwidth has significant effect on the behavior of KVP value and the point where it goes unstable. One may experiment different [[TBW]] settings to find the optimum.
+
Tip: torque bandwidth has significant effect on the behavior of KVP value and the point where it goes unstable. One may experiment different {{/param\|TBW/}} settings to find the optimum.
  
 
[[File:Veltuning6.png|800px]]
 
[[File:Veltuning6.png|800px]]
  
Once a maximum perfectly stable [[KVP]] value has been found, start increasing [[KVI]] gain by a similar fashion. The higher KVI value is, the better servo stiffness.
+
Once a maximum perfectly stable {{/param\|KVP/}} value has been found, start increasing {{/param\|KVI/}} gain by a similar fashion. The higher KVI value is, the better servo stiffness.
  
 
[[File:Veltuning5.png|800px]]
 
[[File:Veltuning5.png|800px]]
  
If [[KVP]] is increased too much, the result is [[overshooting]] and even sustained oscillation. The cure is similar to the too high [[KVP]] gain as described earlier.
+
If {{/param\|KVP/}} is increased too much, the result is [[overshooting]] and even sustained oscillation. The cure is similar to the too high {{/param\|KVP/}} gain as described earlier.
  
 
[[File:velocitylowgain.png|800px]]
 
[[File:velocitylowgain.png|800px]]
Line 67: Line 67:
  
 
====Advanced tuning: Feed-forwards====
 
====Advanced tuning: Feed-forwards====
[[Feed-forward]] parameters may be used to boost motor responsiveness to setpoint change. Feed-forward gains [[VFF]] and [[AFF]] essentially compensate system friction and mass limiting the dynamic performance.  
+
[[Feed-forward]] parameters may be used to boost motor responsiveness to setpoint change. Feed-forward gains {{/param\|VFF/}} and {{/param\|AFF/}} essentially compensate system friction and mass limiting the dynamic performance.  
  
The recommended way to tune FF gains, is to start increasing velocity feed-forward [[VFF]] until the optimum level has been found. After that, increase acceleration feed-forward [[AFF]] until the optimum point has been reached.
+
The recommended way to tune FF gains, is to start increasing velocity feed-forward {{/param\|VFF/}} until the optimum level has been found. After that, increase acceleration feed-forward {{/param\|AFF/}} until the optimum point has been reached.
  
 
[[File:velocitylowgainff.png|800px]]
 
[[File:velocitylowgainff.png|800px]]
Line 87: Line 87:
 
The image above shows acceleration limited by insufficient torque produced by the motor. In this example the acceleration limit is set too high to be accelerated with the given motor torque limits (or current limits).
 
The image above shows acceleration limited by insufficient torque produced by the motor. In this example the acceleration limit is set too high to be accelerated with the given motor torque limits (or current limits).
  
To verify if the problem happens due to torque limit, tick also Torque achieved and Torque setpoint signals from the Testing tab settings. In such way also motor currents will be displayed simultaneously with the position response curves. If the torque curve is limited to the set peak current limit [[MMC]], then the problem is insufficient torque. In the image above we can see that the torque curves are saturated/clipping at 5A and -5A levels which matches the configured [[MMC]] value of 5A in this demonstration.
+
To verify if the problem happens due to torque limit, tick also Torque achieved and Torque setpoint signals from the Testing tab settings. In such way also motor currents will be displayed simultaneously with the position response curves. If the torque curve is limited to the set peak current limit {{/param\|MMC/}}, then the problem is insufficient torque. In the image above we can see that the torque curves are saturated/clipping at 5A and -5A levels which matches the configured {{/param\|MMC/}} value of 5A in this demonstration.
  
 
To help this, try:
 
To help this, try:
*Increasing current limits [[MMC]] and [[MCC]] if possible
+
*Increasing current limits {{/param\|MMC/}} and {{/param\|MCC/}} if possible
*Reducing acceleration [[CAL]] and/or velocity [[CVL]] limits
+
*Reducing acceleration {{/param\|CAL/}} and/or velocity {{/param\|CVL/}} limits
  
 
====Oscillation====
 
====Oscillation====
Line 103: Line 103:
  
 
===Steps to do after tuning finished===
 
===Steps to do after tuning finished===
*Stop test stimulus by unticking [[TSE]]
+
*Stop test stimulus by unticking {{/param\|TSE/}}
 
*Stop scope catpure by unticking ''Continuously repeating capture''
 
*Stop scope catpure by unticking ''Continuously repeating capture''
 
*Undo all temporary changes made to settings
 
*Undo all temporary changes made to settings
 
*Save settings to drive memory by clicking ''Save settings on drive non-volatile memory'' button
 
*Save settings to drive memory by clicking ''Save settings on drive non-volatile memory'' button
*Set preferred setpoint source [[CRI]], also consider the use of [[CIS]]
+
*Set preferred setpoint source {{/param\|CRI/}}, also consider the use of {{/param\|CIS/}}
*If setpoint signal scaling is needed, adjust [[MUL]] and [[DIV]] values
+
*If setpoint signal scaling is needed, adjust {{/param\|MUL/}} and {{/param\|DIV/}} values
  
{{tip|'''Important:''' if drive will be controlled by an external motion [[controller]] with acceleration & velocity limits, such as CNC controller programs like [[Mach3]] or [[LinuxCNC]], then its highly recommended to increase acceleration limit [[CAL]] to the maximum value of 32767 to prevent drive's internal acceleration limiter modifying the trajectory. Instead, set acceleration limit from the controller (i.e. settings of CNC software).}}
+
{{tip|'''Important:''' if drive will be controlled by an external motion [[controller]] with acceleration & velocity limits, such as CNC controller programs like [[Mach3]] or [[LinuxCNC]], then its highly recommended to increase acceleration limit {{/param\|CAL/}} to the maximum value of 32767 to prevent drive's internal acceleration limiter modifying the trajectory. Instead, set acceleration limit from the controller (i.e. settings of CNC software).}}
  
 
==Using drive in velocity control mode==
 
==Using drive in velocity control mode==

Revision as of 19:58, 28 August 2015

Velocity controller tuning means finding the correct drive settings and feedback gain values to achieve a proper Servo stiffness and response to a velocity setpoint change.

This tuning guide is for you if the final application uses the motor in velocity control mode such as spindle or as position mode with external closed loop position controller such as LinuxCNC.

Velocity control tuning method

Preparations

An example of Testing tab settings for velocity controller tuning. Different settings should be experimented during the process to observe the stability and behavior of the settings.
Initial settings on Goals tab before beginning the example in this tuning guide.

Steps to do to begin position tuning:

Once the steps above are done, motor should be generating direction reversing spinning and velocity response graphs should appear on the right side of Granity about once in 3-5 seconds.

Finding velocity control gain values

Tuning protocol

Tuning is begun with low or medium target speeds (TSP1 & 2 values below 5000).

Veltuning2.png

Initial velocity response with the default settings. As seen from the achieved velocity graph, it follows the setpoint velocity lazily and exhibits overshooting. In such state motor servo stiffness is low can be easily decelerated by adding load to the shaft.

Veltuning4.png

Begin tuning by increasing Tuning velocity controller/param\ gain. This makes motor follow velocty setpoint much better.

To try different gains, go to Tuning tab, change value and click the Apply settings button.


Veltuning3.png

When Tuning velocity controller/param\ has been increased too much, the system becomes unstable and may start oscillating. In such case, you may hit Esc button to disable drive, reduce the gain and enable drive again.

Tip: torque bandwidth has significant effect on the behavior of KVP value and the point where it goes unstable. One may experiment different Tuning velocity controller/param\ settings to find the optimum.

Veltuning6.png

Once a maximum perfectly stable Tuning velocity controller/param\ value has been found, start increasing Tuning velocity controller/param\ gain by a similar fashion. The higher KVI value is, the better servo stiffness.

Veltuning5.png

If Tuning velocity controller/param\ is increased too much, the result is overshooting and even sustained oscillation. The cure is similar to the too high Tuning velocity controller/param\ gain as described earlier.

Velocitylowgain.png

Once stable and stiff gains has been found, increase setpoint values (TSP1 & 2) to test the settings with higher speeds. If necessary adjust the gains experimentally to find the optimum tuning that works satisfactory on all needed speeds.

Advanced tuning: Feed-forwards

Feed-forward parameters may be used to boost motor responsiveness to setpoint change. Feed-forward gains Tuning velocity controller/param\ and Tuning velocity controller/param\ essentially compensate system friction and mass limiting the dynamic performance.

The recommended way to tune FF gains, is to start increasing velocity feed-forward Tuning velocity controller/param\ until the optimum level has been found. After that, increase acceleration feed-forward Tuning velocity controller/param\ until the optimum point has been reached.

Velocitylowgainff.png

In the image above a sharp response has been achieved even with low feedback gains as feed-forward gains help motor to accelerate as demanded.

Velocitystable.png

The image above shows similar response without feed-forwards but using high feedback gain values (optimally tuned according to the previous chapter).

Problem cases

Current/torque saturation

In the following test we run motor with higher speeds (TSPn > 10000) to illustrate a typical problem case.

Currentsaturatin.png

The image above shows acceleration limited by insufficient torque produced by the motor. In this example the acceleration limit is set too high to be accelerated with the given motor torque limits (or current limits).

To verify if the problem happens due to torque limit, tick also Torque achieved and Torque setpoint signals from the Testing tab settings. In such way also motor currents will be displayed simultaneously with the position response curves. If the torque curve is limited to the set peak current limit Tuning velocity controller/param\, then the problem is insufficient torque. In the image above we can see that the torque curves are saturated/clipping at 5A and -5A levels which matches the configured Tuning velocity controller/param\ value of 5A in this demonstration.

To help this, try:

Oscillation

Velocityunstable.png

The above example shows instability and oscillation with high speeds even when the system was stable at lower speeds with the same parameters. In such case tune the system again at the most unfavorable conditions and speeds to achieve stability over all required operating conditions.

Low resolution velocity feedback

Veltuning lowres.png

The above example shows another kind of problem: low resolution of velocity graph. This happens if feedback device resolution is low, and/or test velocity setpoint is low. However tuning is still possible. Tune KVP up until you find instability (you can hear it), and then take it down for 30-50% from that. Then adjust KVI up until graph looks best (no overshooting or oscillations). You may do this procedure with several torque bandwidths (TBW param) to see which gives best result.

Steps to do after tuning finished

Using drive in velocity control mode

If velocity control mode is the final desired operating mode, set-up the setpoint signal source from Granity Goals tab. Also see Signal path of motor drive for explanation of velocity setpoint scale.