Delta Tau Forums

Full Version: Circular Interpolation on Axes Other Axes
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello!
Pow1er PMAC firmware supports circular interpolation directly only using the X, Y, and Z axes of a system. There are occasions when users desire the capability on other axes as well.
In this example, we have a system with X, Y, U, and V axes. The U-axis is parallel to the X-axis; the Vaxis is parallel to the Y-axis. We desire the ability to do XY circular interpolation (which is a standard
capability), but also XV, UY, and UV. We write the example in G-code (RS-274) style, because of its
automatic use of subroutines in Turbo PMAC, but there are other ways to do this as well. We use the
standard G17 code to specify XY circles, and invent G17.1 for XV, G17.2 for UY, and G17.3 for UV.
This file describes an example of how to do this on TurboPMAC.
http://www.deltatau.com/Common/technotes...20Axes.pdf

How to make at PowerPMAC ?
Thank you!
I would always use XY circle commands. I would change which motors are assigned to the X, Y, U, and V axes.

These changes are most easily done with logic in kinematic subroutines. To support all of the possibilities, you would need 4 modes in each kinematic subroutine. This could be done with a switch statement.

It is very important that your forward and inverse kinematic subroutines match properly in all 4 modes. Whenever you change modes, you must do a PMATCH function before you command your next move. In Power PMAC, you do not need to do CMD"PMATCH" -- you can just do PMATCH in your program.
Thanks, I know about this method.
There is a such metod for PowerPMAC ?
Yes. The method I suggested is for Power PMAC. It's easier in the Power PMAC because you can use the "switch" statement. For example:

open inverse
switch (AxisMode) {
case 1: // Motor 1 and 2 as XY
KinPosMotor1 = KinPosAxisX
KinPosMotor2 = KinPosAxisY
KinPosMotor3 = KinPosAxisU
KinPosMotor4 = KinPosAxisV
break;
case 2: // Motor 1 and 4 as XY
KinPosMotor1 = KinPosAxisX
KinPosMotor2 = KinPosAxisV
KinPosMotor3 = KinPosAxisU
KinPosMotor4 = KinPosAxisY
break;
(etc.)

open inverse
switch (AxisMode) {
case 1: // Motor 1 and 2 as XY
KinPosMotorX = KinPosAxis1
KinPosMotorY = KinPosAxis2
KinPosMotorU = KinPosAxis3
KinPosMotorV = KinPosAxis4
break;
case 2: // Motor 1 and 4 as XY
KinPosMotorX = KinPosAxis1
KinPosMotorV = KinPosAxis2
KinPosMotorU = KinPosAxis3
KinPosMotorY = KinPosAxis4
break;
(etc.)
(12-20-2018, 01:06 PM)curtwilson Wrote: [ -> ]Yes. The method I suggested is for Power PMAC. It's easier in the Power PMAC because you can use the "switch" statement. For example:

open inverse
switch (AxisMode) {
case 1: // Motor 1 and 2 as XY
KinPosMotor1 = KinPosAxisX
KinPosMotor2 = KinPosAxisY
KinPosMotor3 = KinPosAxisU
KinPosMotor4 = KinPosAxisV
break;
case 2: // Motor 1 and 4 as XY
KinPosMotor1 = KinPosAxisX
KinPosMotor2 = KinPosAxisV
KinPosMotor3 = KinPosAxisU
KinPosMotor4 = KinPosAxisY
break;
(etc.)

open inverse
switch (AxisMode) {
case 1: // Motor 1 and 2 as XY
KinPosMotorX = KinPosAxis1
KinPosMotorY = KinPosAxis2
KinPosMotorU = KinPosAxis3
KinPosMotorV = KinPosAxis4
break;
case 2: // Motor 1 and 4 as XY
KinPosMotorX = KinPosAxis1
KinPosMotorV = KinPosAxis2
KinPosMotorU = KinPosAxis3
KinPosMotorY = KinPosAxis4
break;
(etc.)
Thank you!
I will work this way.