RM_AxisSpline – Commanded values interpolation
Block SymbolLicensing group: MOTION CONTROL
Function Description
The purpose of the block is to connect a virtual axis (represented by the RM_Axis block) to the motor or rather the servo drive and transform virtual axis into physical one. It includes some independent functions that are covered by this block.
The block has commanded and actual (feedback) signals to connect feedback controller. It includes inputs ActualPosition, ActualVelocity, ActualTorque and outputs Position, Velocity, Acceleration, Torque.
The feedback controller or servo drive usually works with different units (position unit is usually in encoder’s tick that is transformed by gear ratio). The RM_AxisSpline block transforms drive unit into axis logical unit. The function is controlled by the DriveUnits and AxisUnits parameters.
The servo drive often uses integer types for compute or communicate position, velocity and torque. Position can overflow range of integer value when motor is running one direction long time. The RM_AxisSpline block expects this situation and set correct position if feedback signal overflow from maximum integer value to minimal integer value. This feature is controlled by the DriveBits and must be also supported by the servo drive to work correctly.
The servo drive has different working state and operation mode and require some sequence to switch into operation mode where motor follow requested position. The most common standard for the mode and sequencing is CiA402. The RM_AxisSpline block support the CiA402 standard by the StatusWord input, the ControlWord output and the DriveMode, DriveTimeout parameters. The servo drive must be set to Cyclic Synchronous Position Mode (or mode with similar functionality). There is also possible to use Velocity Mode, but position loop regulator must be realized in control system (typically by a PIDU block).
There are a lot of motion control blocks which implement complicated algorithms so they require bigger sampling period (typical update rate is from 10 to 200 ms). On the other side, the motor driver usually requires small sampling period for smooth/waveless movement. The RM_AxisSpline block solves this problem of multirate execution of motion planning and motion control levels. The block can run in another task than other motion control blocks with highest possible sampling period. It interpolates commanded position, velocity, acceleration and torque and generates smooth curve which is more suited for motor driver controllers.
There are many possibilities how to compute position (and velocity, acceleration, torque) between sampled points by slower task. This could be chosen by the InterpolationMode parameter, but torque is interpolated always by linear function. Most simple is linear interpolation, but it leads to steps in velocity. Better possibility is higher order polynom (e.g. 3th or 5th order). It generates a smooth curve, but leads to a huge acceleration if the original trajectory isn’t the same polynomial. Drawback of polynomial interpolation could be solved by Bspline approximation, but it requires more samples and therefore bigger delay. Some original position values can be changed with this method.
Note 1: Because the execution time of motion blocks is varying in time, the block uses one or two step prediction for interpolation depending on actual conditions and timing of the motion blocks in slower tasks. The use of predicted values is signalized by states Run1, Run2, Run3.
Note 2: The interpolation functionality requires to put the block into different (faster) task than RM_Axis. For this reason, the block RM_AxisSpline has an internally safe solution for connecting axis references by the block Inport and Outport between different tasks.
Input
uAxis | Axis reference (only RM_Axis.axisRef–uAxis or yAxis–uAxis connections are allowed) | Reference |
ActualPosition | Current position of the axis (feedback) [drive unit] | Double (F64) |
ActualVelocity | Current velocity of the axis (feedback) [drive unit/s] | Double (F64) |
ActualTorque | Current torque in the axis (feedback) | Double (F64) |
LIMN | Limit switch in negative direction | Bool |
LIMZ | Absolute switch or reference pulse for homing | Bool |
LIMP | Limit switch in positive direction | Bool |
StatusWord | Status register for drive control according CiA402 specification | Long (I32) |
FAULT | External fault signal | Bool |
Outputs
yAxis | Axis reference (only RM_Axis.axisRef–uAxis or yAxis–uAxis connections are allowed) | Reference |
Position | Commanded interpolated position [drive unit] | Double (F64) |
Velocity | Commanded interpolated velocity [drive unit/s] | Double (F64) |
Acceleration | Commanded interpolated acceleration [drive unit/s/s] | Double (F64) |
Torque | Commanded interpolated torque/force | Double (F64) |
State | Interpolator state/error | Long (I32) |
|
|
|
ControlWord | Control register for drive control according CiA402 specification | Long (I32) |
Parameters
InterpolationMode | Algorithm for interpolation 2 | Long (I32) |
|
|
|
ReverseLimit | Invert meaning of LIMN, LIMZ and LIMP inputs | Bool |
InterpolationMode | Drive control mode 2 | Long (I32) |
|
|
|
DriveTimeout | Drive control response timeout [s] (for Strict CiA402 mode only) | Double (F64) |
DriveBits | number of valid bits (negative value means signed number) in the Position output and the ActualPosition input -64 63 -32 | Long (I32) |
DriveUnits | Distance in drive units for position transformation (value correspond to AxisUnits) | Double (F64) |
AxisUnits | Distance in axis units for position transformation (value correspond to DriveUnits) | Double (F64) |
VelocityCalculate | if checked, the input ActualVelocity is ignored and velocity is calculated by actual position difference | Bool |
[Previous] [Back to top] [Up] [Next]
2023 © REX Controls s.r.o., www.rexygen.com