Motion Control Cards with special PIEZO (Ceramic) Motor Functions

Motion Control Cards with Special PIEZO (Ceramic) Motor Functions

Motion Control Chips with special functions to compensate PIEZO Motor behaviour

Products Names:

  • POSYS® 1800-PIEZO Series 
  • POSYS® 1900-PIEZO Series

Description:

The POSYS® 1800-PIEZO and POSYS® 1900-PIEZO are motion control cards (PC-104, PCI-bus) for servo and stepper motors and provide one to four axes of motion. The functionality of these series has been significantly improved by using a special motion control chip with enhanced PIEZO (Ceramic) control functions. It is now possible to compensate the special behaviour of PIEZO (Ceramic) motors like for example stiction.

Custom Features:

Piezo motor functionality is available on a given axis when the motor type is brushed or brushless. All standard POSYS® commands are available with the exception of those listed below. This document details the enhancements and changes for this release.

The piezo motor functionality that exists only in this special chip version centers around the ability to change the value of the servo parameters on the fly as a function of position error, distance left to move, or whether or not the axis is in motion. In Addition there is a user defined offset added to the output of the servo loop. The enhancements are detailed below. 

  • Two conditions must be present to activate the Piezo motor behaviour on a particular axis.  The axis’s motor type must be a “servo” motor (brushed or brushless) and the value of PzWindow must be set to non-zero by the user.  Otherwise, standard (non- custom) behaviour will occur and steps 2 to 6 do not apply.
  • All servo loop gains (kp, ki, kvff, etc) are updated immediately. The update command is not necessary to change these values and has no effect on them.
  • When the motor is settled into position, its integration limit is replaced by a new limit.
  • The value of the new integration limit is defined by the new user command, Get/SetIntLimStl. This integration limit value is only used when the axis is settled. When the axis is in motion (i.e. not settled) then the value used for the integration term constant will depend on the other factors (see #5) . The valid range of values for the Get/SetIntLimStl command are the same as for the Get/SetIntegrationLimit command.
  • When the motor is not settled into position, one of two offset values are applied to the Servo output (in addition to the standard torque offset if present). The offset used depends on several conditions. If the distance left to move in the profile is greater than pzWindow then a positive offset is used for positive profile velocities and a negative offset for negative velocities. Otherwise the positive offset is used when the position error is positive and the negative offset is used when the position error is negative.
  • Both offset values are programmed as positive numbers (ranging from 0 to 32k) but the negative offset is always applied as a negative number. These offsets are set by the user commands Get/SetpzOffsetPos and Get/SetpzOffsetNeg.
  • When the motor is in motion (not settled), the distance left to move in the profile is considered. If this distance is greater than pzWindow then a completely new set of Servo parameters (Piezo loop gains) are used. Otherwise the new set of servo parameters are still used if the absolute position error is greater than pzWindow. If neither of these cases are true than the standard servo parameters are active. Commands have been added to allow the user to define the new set of servo parameters for this window. The new commands are Get/SetpzKp, Get/SetpzKi, Get/SetpzKd, Get/SetpzKvff, Get/SetpzKaff, Get/SetpzIntLim and Get/SetpzKdPeriod. The new command that is used to specify the position error threshold for the new parameters to take effect is Get/SetpzWindow.
  • A second position error window has also been added. The value of the secondary window is defined by the Get/SetpzWindow2 command. If the motor is not settled, and the absolute position error is greater than the value defined by this command, then a new velocity feed forward (pzKvff2) value is used. The velocity feed forward value for this secondary window is defined by the user command Get/SetpzKvff2.

For clarity the behaviour of the modified firmware is explained below using pseudo-code.

If (motor type is “servo”) and (pzWindow > 0)
{

The UPDATE command is not needed to make a buffered position loop parameter active.
If ( settled )
{
Use the standard set of loop gains except for integration limit
Use the new 'in position' integration limit
Don't apply any extra offset to the motor output
}
else
{
if(abs(DestintationPos-CommandedPos)<pzWindow)
{
Apply the extra offset to the motor output based on sign of position error
if( abs(position error) < pzWindow ) use standard set of loop gains.
else use Piezo loop gains.
}
else
{
Apply the extra offset to the motor output based on the sign of CommandedVelocity
Use Piezo loop gains.
}
if(abs(position error) > pzWindow2) use PzKvff2 instead of PzKvff.
}

}
else

use standard behavior

 

Command Usage:

The usage of the new custom commands is consistent with the usage of the standard commands. For instance the SetpzKp command has the exact usage, in terms of packet format, parameter range and return codes, as the SetKp command. The only difference would be the OpCode specified in the command packet.

All values for the new commands will default to zero.

The Op-Codes associated with the new commands are listed below.

COMMAND
OPCODE
DESCRIPTION
GetpzOffetPos
0x35Servo offset used when not settled and position error is positive
GetpzOffsetNeg0x3DServo offset used when not settled and position error is negatiove
GetzIntLimStl0x04
integration limit (32-bit) used when settled
GetpzWindow 0x05Location of primary Window boundary
GetpzKp
0x08Proportional term when position error is in primary window.
GetpzKi0x09Integral Term “    “
GetpzKd0x0ADerivative Term “    “
GetpzKvff
0x0B
Velocity Feed Forward Term “    “
GetpzKaff
0x0C
Acceleration Feed Forward Term “    “
GetpzIntLim
0x0D
Integration Limit “    “
GetpzKdPeriod
0x0E
Derivative Time “    “
GetpzWindow2
0x4E
Location of secondary Window boundary
GetpzKvff2
0x4F
Velocity Feed Forward Term when position error is in secondary window.
SetpzOffsetPos
0x16
See above for corresponding “Get” command.
SetpzOffsetNeg
0x17
“    “
SetzIntLimStl
0x18
“    “
SetpzWindow
0x19
“    “
SetpzKp
0x1B
“    “
SetpzKi
0x1C
“    “
SetpzKd
0x1F
“    “
SetpzKvff
0x20
“    “
SetpzKaff
0x23
“    “
SetpzIntLim
0x24
“    “
SetpzKdPeriod
0x28
“    “
SetpzWindow2
0x29
“    “
SetpzKvff2
0x2E
“    “

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

This table is for information only. All commands (DLL) use the description as it appears in the column COMMAND.
The following commands have been replaced by the new opcodes and are no longer available:

Set/GetBiQuadCoefficient
0x04/0x05
Set/GetAuxiliaryEncoderSource
0x08/0x09
Set/GetSPIMode
0x0A/0x0B
Set/GetPWMFrequency
0x0C/0x0D

 

 

 

 

If any of the above commands are required please ask for a modified version.

Date: 11 August 2008

servo Halbeck GmbH & Co. KG