Position Scaling for AKD drive with EtherCAT Communication
This article discusses AKD EtherCAT scaling for Position command and Actual Position
PP = Profile Position
IP = Interpolated Position
CSP = Cyclic Synchronous Position
You have two choices for defining the position scaling for EtherCAT:
Option A: Specify the scaling based on user unit via AKD parameters (Workbench)
Option B: Specify the scaling via DS402 objects for Feed Constant and Gear Ratio (CAN/EtherCAT)
Summary - by mode of operation
The following tables list the AKD parameters/objects that define the number of units per motor revolution. The preferred methods are highlighted in red.
IP mode:
| FBUS.PARAM05 bits | 60C1h sub1 | 6063h PDO | 6063h SDO | 6064h PDO | 6064h SDO |
|---|---|---|---|---|---|
| Bit4=0, Bit9=0 | 2^FB1.PSCALE | 2^FB1.PSCALE | N/A | UNIT.PIN* | UNIT.PIN/UNIT.POUT** |
| Bit4=0, Bit9=1 (512) | 2^FB1.PSCALE | 2^FB1.PSCALE | 2^FB1.PSCALE | UNIT.PIN* | UNIT.PIN/UNIT.POUT** |
| Bit4=1, Bit9=0 (16) | 2^FB1.PSCALE | 2^FB1.PSCALE | N/A | 6092h/6091h | 6092h/6091h |
| Bit4=1, Bit9=1 (528) | 2^FB1.PSCALE | 2^FB1.PSCALE | 2^FB1.PSCALE | 6092h/6091h | 6092h/6091h |
CSP mode:
| FBUS.PARAM05 bits | 607Ah PDO | 6063h PDO | 6063h SDO | 6064h PDO | 6064h SDO |
|---|---|---|---|---|---|
| Bit4=0, Bit9=0 | UNIT.PIN* | 2^FB1.PSCALE | N/A | UNIT.PIN* | UNIT.PIN/UNIT.POUT** |
| Bit4=0, Bit9=1 (512) | UNIT.PIN* | 2^FB1.PSCALE | 2^FB1.PSCALE | UNIT.PIN* | UNIT.PIN/UNIT.POUT** |
| Bit4=1, Bit9=0 (16) | 6092h/6091h | 2^FB1.PSCALE | N/A | 6092h/6091h | 6092h/6091h |
| Bit4=1, Bit9=1 (528) | 6092h/6091h | 2^FB1.PSCALE | 2^FB1.PSCALE | 6092h/6091h | 6092h/6091h |
PP mode:
| FBUS.PARAM05 bits | 607Ah PDO | 607Ah SDO | 6063h PDO | 6063h SDO | 6064h PDO | 6064h SDO |
|---|---|---|---|---|---|---|
| Bit4=0, Bit9=0 | UNIT.PIN* | UNIT.PIN/UNIT.POUT** | 2^FB1.PSCALE | N/A | UNIT.PIN* | UNIT.PIN/UNIT.POUT** |
| Bit4=0, Bit9=1 (512) | UNIT.PIN* | UNIT.PIN/UNIT.POUT** | 2^FB1.PSCALE | 2^FB1.PSCALE | UNIT.PIN* | UNIT.PIN/UNIT.POUT** |
| Bit4=1, Bit9=0 (16) | 6092h/6091h | 6092h/6091h | 2^FB1.PSCALE | N/A | 6092h/6091h | 6092h/6091h |
| Bit4=1, Bit9=1 (528) | 6092h/6091h | 6092h/6091h | 2^FB1.PSCALE | 2^FB1.PSCALE | 6092h/6091h | 6092h/6091h |
* Note: The PDO values for 607Ah and 6064h use UNIT.PIN regardless of UNIT.POUT, UNIT.PROTARY, and UNIT.PLINEAR.
** Note: The SDO values for 607Ah and 6064h use UNIT.PIN/UNIT.POUT only for UNIT.PROTARY = "3-Custom (mechanics dependent)" or UNIT.PLINEAR = "3-Custom (mechanics dependent)". For other units selections, they will use the specific scaling for those selections. For example: "Counts 16bit" will use 65536 counts/rev; "Degrees" will use 360 degrees/rev, regardless of UNIT.PIN and UNIT.POUT.
Note: 6091h and 6092h sub 1 and 2 are not PDO mappable. They must be set using SDO’s or drive parameters.
Note: DS402 scaling defined by 6092h/6091h is actually:
- 1 gearbox rev = (6092h sub 1 / 6092h sub2) / (6091h sub 1 / 6091h sub2), or
- 1 gearbox rev = (6092h sub 1 * 6091h sub2) / (6091h sub 1 * 6092h sub2)
Default Values:
- Default value of FBUS.PARAM05 = 0 (Bit4=0, Bit9=0).
- Default value of FB1.PSCALE = 20, so 2^FB1.PSCALE = 2^20 or 1048576.
- Default values of 6091h and 6092h subindexes 1 and 2 all =1, so these need to be set appropriately for the mechanical system.
Option A: Specify the scaling based on user units via AKD parameters (Workbench)
Set FBUS.PARAM05 bit4=0
Target position is 607A (CSP and PP modes) or 60C1 Sub 1 (IP mode)
Actual position is 6063 or 6064 (All modes)
Object 607A: Target Position (CSP and PP modes)
PDO:
PDO value = Target in user units, based on 1 rev = UNIT.PIN (UNIT.POUT does not apply)
In relation to PL.CMD,
PDO value = PL.CMD, if UNIT.POUT = 1
SDO:
For CSP mode: Does not apply.
For PP mode: SDO value = Target in user units, based on 1 rev = UNIT.PIN / UNIT.POUT
Object 60C1 Subindex 1: Target Position (IP mode)
PDO:
PDO value = Target position, based on 1 rev = 2^(FB1.PSCALE)
PDO value = (number of revs) * 2^(FB1.PSCALE)
- In relation to PL.CMD, PDO value = PL.CMD * UNIT.POUT * 2^(FB1.PSCALE) / UNIT.PIN
Or, PL.CMD = (PDO value) * UNIT.PIN / (UNIT.POUT * 2^(FB1.PSCALE))
- In terms of physical units, (number of revs) = (PDO value) / 2^(FB1.PSCALE)
Or, (number of inches) = (Physical in/rev) * (PDO value) / 2^(FB1.PSCALE)
SDO: Does not apply.
Object 6063: Actual Position (CSP, PP, IP modes)
For FBUS.PARAM05 = 0 (bit9=0):
PDO:
PDO value = Feedback position, based on 1 rev = 2^(FB1.PSCALE)
PDO value = (number of revs) * 2^(FB1.PSCALE)
- In relation to PL.FB, PDO value = PL.FB * UNIT.POUT * 2^(FB1.PSCALE) / UNIT.PIN
Or, PL.FB = (PDO value) * UNIT.PIN / (UNIT.POUT * 2^(FB1.PSCALE))
- In terms of physical units, (number of revs) = (PDO value) / 2^(FB1.PSCALE)
Or, (number of inches) = (Physical in/rev) * (PDO value) / 2^(FB1.PSCALE)
SDO: Does not apply.
For FBUS.PARAM05 = 512 (bit9=1):
PDO: Same as FBUS.PARAM05 = 0 (bit9=0)
SDO: Same as PDO.
Object 6064: Actual Position (CSP, PP, IP modes)
PDO:
PDO value = Feedback position in user units, based on 1 rev = UNIT.PIN (UNIT.POUT does not apply)
SDO:
SDO value = Target in user units, based on 1 rev = UNIT.PIN / UNIT.POUT
Option B: Specify the scaling via DS402 objects for Feed Constant and Gear Ratio (CAN/EtherCAT)
Set FBUS.PARAM05 = 16 (bit4=1):
Target position is 607A (CSP and PP modes) or 60C1 Sub 1 (IP mode)
Actual position is 6063 or 6064 (Actual Position)
Object 607A: Target Position (CSP and PP modes)
PDO and SDO:
Fieldbus value is in "counts" or "physical units" (mm, inches, etc.) based on feed constant and gear ratio. Meaning, the feed constant and gear ratio define the number of units per motor rev.
Scaling is in units of (feed constant) / (gear ratio).
Fieldbus value = number of physical units
Or, Fieldbus value = number of revs * (feed constant) / (gear ratio)
Or, (number of revs) = Fieldbus value * (gear ratio) / (feed constant)
Feed constant is 6092sub1 / 6092sub2.
Gear ratio is 6091sub1 / 6091sub2.
(The gear ratio can be ignored. Set gear ratio to 1 (6091sub1 = 1 and 6091sub2 = 1). Set feed constant to the number of units per rev you want to use.)
Example:
Feed constant = 10 mm / 1 rev : 6092h sub1 = 10, 6092h sub2 = 1
Gear ratio = 5:1 : 6091h sub1 = 5, 6091h sub2 = 1
Scaling is in 10mm/5revs.
For a Physical Target Position of 2mm: Set the Fieldbus value to 2.
Number of revs = 2mm * 5revs / (10mm/rev) = 1 rev
Object 60C1 Subindex 1: Target Position (IP mode)
PDO: Same as for FBUS.PARAM05 = 0 (bit4=0).
SDO: Does not apply.
Object 6063: Actual Position (IP mode)
For FBUS.PARAM05 = 16 (bit4=1, bit9=0):
PDO: Same as for FBUS.PARAM05 = 0 (bit4=0, bit9=0).
SDO: Does not apply.
For FBUS.PARAM05 = 528 (bit4=1, bit9=1):
PDO: Same as for FBUS.PARAM05 = 512 (bit4=0, bit9=1).
SDO: Same as for FBUS.PARAM05 = 512 (bit4=0, bit9=1).
Object 6064: Actual Position (CSP, PP, IP modes)
PDO and SDO:
Fieldbus value is in "counts" or "physical units" (mm, inches, etc.) based on feed constant and gear ratio. Meaning, the feed constant and gear ratio define the number of units per motor rev.
Scaling is in units of (feed constant) / (gear ratio).
Physical Feedback Position = Fieldbus value
Or, Fieldbus value = number of revs * (feed constant) / (gear ratio)
Or, (number of revs) = PDO value * (gear ratio) / (feed constant)
Feed constant is 6092sub1 / 6092sub2.
Gear ratio is 6091sub1 / 6091sub2.
Example:
Feed constant = 10 mm / 1 rev : 6092h sub1 = 10, 6092h sub2 = 1
Gear ratio = 5:1 : 6091h sub1 = 5, 6091h sub2 = 1
Scaling is in 10mm/5revs.
For a Fieldbus Feedback value of 2: Physical Feedback Position = 2mm
Number of revs = 2mm * 5revs / (10mm/rev) = 1 rev
Note: In TwinCAT, the NC actual position and target position are scaled using the “Encoder Scaling”. This setting is found under Axis 1 / Axis 1_Enc / Parameter tab / Encoder Evaluation / Scaling Factor. Set this scaling factor to 1 to make the NC position values have the same scaling as the 607A and 6064 PDO values.
Back to top
Home >
Knowledge Base >
FAQs >
Downloads >