Part-Speed PSO Functions

Part-Speed PSO (Position Synchronized Output) is a special feature that gives you access to PSO when encoder feedback is nonlinear or not available. This PSO is possible because the Automation1 controller uses the part-space vector speed to calculate the distance between firing events. Part-Speed PSO is available on one or more axes for different drive types.

Optional Purchase Necessary: On some Aerotech drives, Part-Speed PSO is a paid option. Refer to your ordering information to see if your drive supports Part-Speed PSO.

When Part-Speed PSO is enabled, a real or virtual axis (or axes) generates the velocity command that is tracked as virtual encoder counts. The virtual encoder counts pass to the drive axis that contains the PSO output and hardware. This axis tracks the virtual PSO counts and generates the PSO pulses. Although Part-Speed PSO might track many axes, the virtual encoder counts are a one dimensional input to the PSO distance tracking and PSO window blocks.

Use the DrivePulseStreamConfigure(), DrivePulseStreamOn(), PsoDistanceConfigureInputs(), and PsoWindowConfigureInput() functions to configure Part-Speed PSO.

  • To generate the virtual encoder counts, use the DrivePulseStreamConfigure() and DrivePulseStreamOn() functions. Then, you can configure them as an input to PSO. If you use Part-Speed PSO to track more than one axis with different CountsPerUnit parameters, use the $inputScaleFactors argument to scale the axes to have the same number of encoder counts per user unit.

    function DrivePulseStreamConfigure($outputAxis as axis, $inputAxes[] as axis, $inputScaleFactors[] as real)

    Configures pulse streaming mode.

    Arguments

    $outputAxis  The output axis on which to configure pulse streaming mode.

    $inputAxes  An array of one or more axes which will be tracked.

    $inputScaleFactors  An array of scale factors to apply to each axis in the $inputAxes array.

    function DrivePulseStreamOn($outputAxis as axis)

    Enables pulse streaming mode on an axis.

    Arguments

    $outputAxis  The axis on which to enable pulse streaming mode.

  • To use the pulse stream output, use the PsoDistanceConfigureInputs() and PsoWindowConfigureInput() functions.

    function PsoDistanceConfigureInputs($axis as axis, $inputs[] as PsoDistanceInput)

    Selects the source of each PSO distance counter.

    Arguments

    $axis  The axis on which to configure the distance counter sources.

    $inputs  An array of one to three input sources, one for each distance counter.

    function PsoWindowConfigureInput($axis as axis, $windowNumber as integer, $input as PsoWindowInput, $reverseDirection as integer)

    Selects the source of the specified window counter.

    Arguments

    $axis  The axis on which to select the window counter input source.

    $windowNumber  The window number for which to select the counter input source.

    $input  The window counter input source.

    $reverseDirection  Configures the window counter to count in the opposite direction of its input source.

See the Part-Speed PSO Fixed Distance Pulse Output Example Program.

Before you program Part-Speed PSO, read the information that follows.

  • The pulse generator output of the pulse stream has a maximum output rate of 95 MHz. The CountsPerUnit Parameter and programmed vector speed of the virtual axes determine the pulse stream output rate. To calculate the maximum allowable programmed vector speed, use the equation that follows.

    where CountsPerUnit is the number of scaled encoder counts per user unit set by the $inputScaleFactors argument of the DrivePulseStreamConfigure() function.

  • When you use the CountsPerUnit Parameter, the user counts for the PSO axis must equal an integer. In the example program, the UnitsToCounts() Function converts the user units of the virtual axis to counts. If one user unit is equal to 1000 counts, you must program the PSO to fire at a minimum of 0.001 user units. The PSO cannot fire at intervals that are not an integer multiple of one count.