Acceleration and Deceleration Ramping

Acceleration and deceleration ramping lets the speed of the motion ramp cleanly between two different setpoints. The Automation1 controller uses acceleration and deceleration ramping when it creates the velocity profile for moves generated by MoveAbsolute(), MoveIncremental(), MoveFreerun(), MoveRapid(), MoveLinear(), MoveCw(), and MoveCcw(). The controller also uses acceleration and deceleration ramping during home moves and when it aborts moves.

Velocity Profile of a Move

When an axis is commanded to move, the controller generates a velocity profile, which is used to calculate position and velocity values at the time interval specified by the MotionUpdateRate Parameter and send these values to the position loop of the servo loop. The velocity profile usually includes the ramp segments that follow.

  • Acceleration segment - the portion of the velocity profile in which the velocity ramps between the starting velocity and the target velocity.
  • Constant velocity segment - the portion of the velocity profile during which the velocity stays at the target velocity.
  • Deceleration segment - the portion of the velocity profile in which the velocity ramps between the target velocity and the ending velocity.

Ramp Types

The Automation1 controller lets you select one of three different ramp types to use when you generate a velocity profile for a move.

  • Linear
  • Sinusoidal (Half-Sine)
  • S-Curve

For each ramp type, the ramp rate that you specify is the average acceleration value of the full ramp. Thus, different ramp types have different peak accelerations, as in the above figure.

Linear Ramp Type

For a linear ramp, the controller uses a constant acceleration value, the configured ramp rate, to ramp the velocity from one setpoint to another. A linear ramp has these properties:

  • The peak acceleration value is equal to the average acceleration value throughout the ramp.
  • This type of ramping causes the lowest possible peak acceleration.
  • The ramp immediately gets to peak acceleration.
  • High jerk values can occur at the ramp boundaries.

To set the ramp type to Linear, specify the Linear ramp type in the SetupCoordinatedRampType() function.

SetupCoordinatedRampType(RampType.Linear)

Sinusoidal (Half-Sine) Ramp Type

A half-sine ramp type uses an acceleration value that follows a half-cycle of a sine wave whose amplitude is set so that the average value across the ramp is equal to the configured ramp rate. A half-sine ramp has these properties:

  • The peak acceleration value is 1.57 times the average acceleration value.
  • This type of ramping causes higher peak accelerations than the linear ramp type.
  • The ramp gradually gets to peak acceleration.
  • Jerk values are lower than those of the linear ramp type.

To set the ramp type to Sinusoidal, specify the Sine ramp type in the SetupCoordinatedRampType() function.

SetupCoordinatedRampType(RampType.Sine)

S-Curve Ramp Type

An S-Curve ramp type uses a percentage value to find how much of the acceleration ramp is non-constant acceleration.

During the curved portions of the acceleration ramp, the jerk is constant. A larger S-Curve percentage causes a lower constant jerk value.

An S-Curve ramp with 0% curvature is the same as a Linear ramp and has a peak acceleration of 1.0 times the average acceleration. An S-Curve ramp with 100% curvature has a peak acceleration of 2.0 times the average acceleration.

An S-Curve ramp has these properties:

  • The peak acceleration value is 2.0 times the average acceleration value at the maximum curvature percentage.
  • This type of ramping causes higher peak accelerations than the linear ramp type.
  • The ramp gradually gets to peak acceleration.
  • The S-Curve percentage supplies some control over how high the jerk value will be.

To set the ramp type to S-Curve, specify the SCurve ramp type and the curvature percentage that you want in the SetupCoordinatedRampType() function.

SetupCoordinatedRampType(RampType.SCurve, 50.0)

Ramp Modes

The Automation1 controller supports two ramp modes:

  • Rate-based ramping
  • Time-based ramping

These modes affect how the controller generates acceleration and deceleration ramps.

Rate-based Ramping

When the ramp mode of the controller is set to rate-based ramping, the controller generates acceleration and deceleration ramps based on the ramp rate that the user gives. This ramp rate is in user units/s2. The average acceleration across each acceleration and deceleration ramp is equal in magnitude to the user-supplied rate, no matter what the target velocity is.

To set the ramp mode to rate-based ramping, specify the Rate ramp mode and the ramp rate that you want in the SetupCoordinatedRampValue() function.

SetupCoordinatedRampValue(RampMode.Rate, 2000.0)

Time-based Ramping

When the ramp mode of the controller is set to time-based ramping, the controller generates acceleration and deceleration ramps based on the ramp time supplied by the user. This ramp time is given in seconds, with a resolution of 0.001 seconds (1 millisecond).

When time-based ramping is active, the controller calculates an acceleration or deceleration rate that causes the acceleration or deceleration segment to take the fixed amount of time given by the user. Thus, the average and maximum acceleration across these ramps change based on the target velocity.

If a move does not have enough distance to reach full speed, a shorter ramp time can occur. The ramp rate will be the same as if there was enough distance in the move, but the ramp is cut short because the distance is not sufficient. The result is a ramp time that is shorter than the user-specified ramp time.

Aerotech recommends using rate-based ramping so that average and maximum acceleration values do not change because of the target velocity.

To set the ramp mode to time-based ramping, specify the Time ramp mode and the ramp time that you want in the SetupCoordinatedRampValue() function.

SetupCoordinatedRampValue(RampMode.Time, 0.5)		

Ramping Functions and Parameters

The Automation1 controller supplies AeroScript API functions and controller parameters to configure the ramping behavior.

Configure Ramping for Independent Axis Motion

For independent axis moves such as MoveAbsolute(), MoveIncremental(), MoveFreerun(), and MoveRapid() use the functions at the end of this section to configure ramping. Because the controller does motion on each axis independently, you must configure ramping for each axis.

The controller also supplies the axis parameters that follow to configure the default ramping behavior of axis-based moves:

Refer to Motion Setup Functions for more information on the available functions.

Configure Ramping for Coordinated Motion

For coordinated moves such as MoveLinear(), MoveCw(), MoveCcw(), use the functions in this section to configure ramping. Because coordinated motion synchronizes motions on multiple axes, you must configure ramping for each task instead of for each axis.

The controller supplies the task parameters that follow to configure the default ramping behavior of coordinated moves:

Refer to Motion Setup Functions for more information on the available functions.

Configure Ramping for Home Motion

For motion that occurs during a Home() sequence, the controller uses the value specified by the HomeRampRate Parameter for each axis. If this parameter is set to 0, the controller uses an infinite value. Because the controller homes each axis independently, you must configure ramping for each axis.

Configure Ramping for Abort Motion

The abort deceleration rate and deceleration behavior is based on the type of motion being executed.

To abort coordinated motion, the controller uses the task defined deceleration parameters to decelerate along the programmed path. Each axis does not decelerate independently.

For most other types of motion, the controller uses the AbortDecelRate Parameter to find the abort deceleration value. Because the controller can abort each axis independently, you must configure ramping for each axis. Refer to the AbortDecelRate Parameter for more information on the abort deceleration value that the controller uses.