|
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
| 0x35 | Servo offset used when not settled and position error is positive
| | GetpzOffsetNeg | 0x3D | Servo offset used when not settled and position error is negatiove
| | GetzIntLimStl | 0x04
| integration limit (32-bit) used when settled
| | GetpzWindow | 0x05 | Location of primary Window boundary
| GetpzKp
| 0x08 | Proportional term when position error is in primary window.
| | GetpzKi | 0x09 | Integral Term “ “
| | GetpzKd | 0x0A | Derivative 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 |