Difference between revisions of "Axis Setup Procedure"
(→Step #4:Position Units definition) |
(→Step #4:Position Units definition) |
||
Line 88: | Line 88: | ||
:*Rotary axes: | :*Rotary axes: | ||
::For position in degrees PositionFactor is:PFAC = Pos_Units *(M/N)/360 | ::For position in degrees PositionFactor is:PFAC = Pos_Units *(M/N)/360 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
:*Linear axes: | :*Linear axes: | ||
::For position in milli-meters PositionFactor is:PFAC = Pos_Units)/MPITCH | ::For position in milli-meters PositionFactor is:PFAC = Pos_Units)/MPITCH |
Revision as of 08:32, 3 August 2014
Contents
- 1 Introduction
- 2 Step#1: declare axis
- 3 Step#2: Setting user friendly axis name
- 4 Step#3: Preparing general axis setup
- 5 Step #4:Position Units definition
- 6 Step#5: Moving Direction
- 7 Step#6: Velocity, Acceleration, Jerk units
- 8 Step#7:Units summary
- 9 Step#8:Position Limits
- 10 Step#9: Motion Bus Units Setup
- 11 Step#10: Motion Parameters
- 12 Step#11: Safety Parameters
- 13 Step#11: Smoothness
- 14 Step#12: Axis Setup Complete Example - the SetAxis subroutine
- 15 Step#13: Motion-Bus EtherCat example
- 16 Step#14: Extra - Dynamic model
Introduction
This series of slides will explain how to create and set an axis in the softMC controller. For that you will need:
- Running softMC (either a real, or virtual)
- User interface (Control.Studio)
Step#1: declare axis
In the first line of CONFIG.PRG file write the number of axes that will be in use:
Sys.Naxes = <number> … Program … End Program
Send this file to MC and run it by issuing these two lines from terminal window:
send config.prg reset all
Now you have your axes defined, it is easily to check issuing this command from terminal window:
->?axislist A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17
Step#2: Setting user friendly axis name
System default axis name are not very user friendly (a1,a2,a3, …) It is a good practice to rename them into something more meaningful. This is done in CONFIG.PRG file only , assigning to each axis now name (no double quotes sign) to <axis>.AxisName property.
Sys.Naxes = <number> … Program a1.AxisName = Xaxis a2.AxisName = Lift … End Program
Step#3: Preparing general axis setup
In order to set-up system axes one need to prepare setup program. Let’s call it SETUP.PRG. It is important to know:
- In order to access (write to) an axis property axis needs to be attached.
- For some of the properties axis needs to be disabled
SETUP.PRG
Program Call SetAxis(a1) Call SetAxis(a2) … End Program Sub SetAxis(ax as generic axis) With ax Attach En = 0 … <stuff goes here> … Detach End With End Sub
Step #4:Position Units definition
<axis>.PositionFactor defines the position units that will be used in all position variables of the specified axis (pcmd, pfb, …) it consist of:
- Motor encoder resolution seen through the motion-bus (See EtherCAT, SERCOS, CanOPEN). How many counts are there in one motor revolution - stored in pos_units global variable (for each axis differently).
- Gear ratio (M:N) and/or the pitch of the linear screw (mm/rev).
- Rotary axes:
- For position in degrees PositionFactor is:PFAC = Pos_Units *(M/N)/360
- Linear axes:
- For position in milli-meters PositionFactor is:PFAC = Pos_Units)/MPITCH
See Motion Bus setup for pos_units and MPITCH setup
Step#5: Moving Direction
Positive direction of drive's position increments does not have to match the desired positive direction of user axis (Upwards, Left-Right, Counterclockwise). Therefore <axis>.direction flag is to be used:
<axis>.Direction = {1|-1}
Value of -1 indicates direction inversion.
Step#6: Velocity, Acceleration, Jerk units
Velocity units do not have to match position units (same for acceleration, jerk). User is free to select his/hers own units. For all the derivative units (velocity, acceleration, jerk) the default time scale is in milli-seconds, therefore scaling is needed.
To use position units per second for velocity one needs to define:
<axis>.VelocityFactor = <axis>.PositionFactor/1000
In this case if the user set the position in mm the velocity will be in mm/sec
To define velocity in RPM of the motor:
<axis>.VelocityFactor = Pos_Units /1000/60
For acceleration and jerk units is the same, their default values are expressed in velocity and acceleration units per milli-seconds. So in order to set them per seconds one needs to set them as:
<axis>.AccelerationFactor = <axis>. VelocityFactor /1000 <axis>.JerkFactor = <axis>. AccelerationFactor /1000
Step#7:Units summary
Position, velocity, acceleration and jerk units are set by:
<axis>.PositionFactor = … <axis>.Direction = … <axis>.VelocityFactor = .. <axis>.AccelerationFactor = .. <axis>.JerkFactor = …
Step#8:Position Limits
Setting position range of an axis. Setting max position:
<axis>.Pmax = … and enabling /disabling it: <axis>.PmaxEn = {0|1}
Setting min position:
<axis>.Pmin = … and enabling /disabling it: <axis>.PminEn = {0|1}
Setting the axis type:
<axis>.AxisType = 0 ‘ For linear axes <axis>.AxisType = 1 ‘ For rotary axes
For rotary axes rollover can be defined: Enabling/Disabling it:
<axis>.PositionRollOverEnable = {0|1}
Setting the whole range:
<axis>. PositionRollOver
Setting the low value:
<axis>. PositionRollOverMin
Not that if the enable flag is not set the correspondent value does not need to be set.
Step#9: Motion Bus Units Setup
Depending on the type of Motion-Bus (EtherCAT, SERCOS, CanOpen) and drive used there are several parameters available for the user to be adjusted (not necessarily needed):
In case micro-interpolation is turned on in the drive, the velocity sent to drive must be properly scaled, this is done with (for counts per ms):
<axis>.MotionBusVelocityScale = 0 <axis>.MotionBusVelocityBase = 1
In case a limited drive’s position range is used (other then integer 32 bits):
<axis>.CountMin = < drive min position value> <axis>.CountMax = < drive max position value>
Step#10: Motion Parameters
Motion parameters are grouped into velocity, acceleration and jerk values. They all have their max values for overall limitations, and their motion-default values that are used when motion is executed.
Motion default value is: | <axis>.VelocityCruise |
Velocity is set according to maximum axis physical limit (drives/motor capabilities and mechanical limitations):
<axis>.Vmax
Motion default values are: | <axis>.Acceleration <axis>.Deceleration |
Acceleration is set according to maximum axis physical limits (Max drive/motor current, axis load) in user units:
<axis>.Amax <axis>.Dmax
Motion default value is: | <axis>.Jerk |
Jerk is the third time-derivation of position, if smooth profiles are used it needs to be defined a good rule of thumb is to set J=BW*A, where J – jerk, A – acceleration, BW- control Bandwidth (Hz).
<axis>.JerkMax
Step#11: Safety Parameters
Maximum allowed position error (PE). PE is defined as a difference between the position command and position feedback. Due to communication delay of the motion bus and processing time of the drive (micro-interpolation) position command of the several samples before the current is compared to the currently obtained position feedback of the drive:
<axis>.PositionErrorMax – max allowed position error during in user units. <axis>.PositionErrorDelay – number of samples used for delay computation.
Velocity (Runaway) Protection, the feedback velocity of the motor is checked every sample (recommended to be set to 120% of the <axis>.VelocityMax)
<axis>.VelocityOverSpeed
Sanity Threshold, as a final protection against unintentional jumps (recommended to be set to 1000% of <axis>.VelocityMax):
<axis>.VelocitySafetyLimit
Torque Error – only if axis dynamic model is turned on
<axis>.TorqueMaxError
Step#11: Smoothness
Different profile types are available from very smooth S-curves (Acceleration Trapeze, Sine Acceleration) to less smooth by faster Velocity Trapeze, to totally edgy profiles (Constant Velocity) by setting these two parameters:
<axis>.Smooth defined automatic (0-100) or manual smoothing (-1) <axis>.PrfType specifies profile more precisely (Velocity Trapeze, Acceleration Trapeze, Sine Acceleration)
Step#12: Axis Setup Complete Example - the SetAxis subroutine
sub SetRotAxis(ax as generic axis, byval minval as double , byval maxval as double) with ax attach En = 0 AxisType = 1 PositionFactor = pos_unit/360 VelocityFactor = PositionFactor /1000 AccelerationFactor = VelocityFactor /1000 Jerkfactor = AccelerationFactor /1000 VelocityMax = 1000 AccelerationMax = 10000 DecelerationMax= 10000 JerkMax = 20*amax VelocityCruise = 0.5*VelocityMax Acceleration = AccelerationMax Deceleration = DecelerationMax Jerk = JerkMax PrfType = -1 Smooth = -1 VelocityOverspeed = 1.2*VelocityMax VelocitySafetyLimit = 10*VelocityMax PositionErrorDelay = 2 PositionErrorMax = 1 PositionMax = maxval PositionMin = minval PositionMaxEn = 1 PositionMinEn = 1 PositionRolloverEnable = 0 detach end with end sub
Step#13: Motion-Bus EtherCat example
Position Units
- First read the motor encoder resolution (MENCRES – SDO:0x20F1:0)
- MENCRES = EC_SDO_READ(<addr>,0x20f1,0)
Then set (value of 1) the configured number of motor shaft revolutions and number of driving shaft revolutions. The gear ratio is calculated by the following:
- Fieldbus CANopen Gear Motor Shaft Scaling (FBGMS – SDO0x2091:0)
- Fieldbus CANopen Gear Driving Shaft Scaling (FBGDS – SDO0x2091:1)
- gear ratio = FBGMS / FBGDS
Step#14: Extra - Dynamic model
Torque Scaling
- <axis>.TorqueFactor – according to the Motor KT parameter
Limits
- <axis>.TorqueMax – maximum motor torque
Dynamic Model Parameters
- axis.DYNAMICMODEL[..] = <…>