Encoder Selection for Rotary Axes on S7-1500T
The SIMATIC S7-1500T controller family (CPU 1511T-1 PN, 1515T-2 PN, 1516T-3 PN, 1517T-3 PN, 1518T-4 PN) extends the S7-1500 platform with high-end motion control functionality, including camming, gearing, and synchronized axes on PROFINET IRT. The TO_Encoder technology object on these CPUs digitizes external encoders, including the absolute encoders integrated in SINAMICS V90 servo motors, and makes their measured value available as a load-side actual position.
When a V90 motor drives a rotary load through a reduction gearbox, the encoder is mounted on the motor shaft, not the load shaft. The controller's technology object must therefore model the mechanical relationship between motor revolutions and load revolutions. With a 100:1 ratio (100 motor revolutions per load revolution), the axis traversing range, the number of unique load positions the application must distinguish, becomes the primary selection criterion for the encoder, not the load's rotational speed.
Three selection cases dominate field practice:
- Single-turn encoder: the load never completes a full rotation, or it rotates in only one direction over a limited sub-revolution range (e.g., ±180°). The controller treats the encoder as a relative device and must be homed on every power-up, or an absolute single-turn value plus a retentive position offset is used.
- Multi-turn encoder in absolute mode: the load's total traversing range fits within the encoder's unique revolution count. The load position is uniquely determined by the encoder value at any time, including immediately after power-up, with no homing run.
- Multi-turn encoder in cyclic absolute mode: the load's total traversing range exceeds the encoder's unique revolution count, but the axis is limited-modulus (rotary axis with modulo arithmetic) or the operator accepts that overflow events occur. The TO counts how many times the encoder has wrapped and adds this to the position value.
For a 100:1 geared V90 application, the V90's 4096-revolution (12-bit) multi-turn range corresponds to only 40.96 load revolutions before wrap. That is the threshold that defines absolute vs. cyclic absolute on the S7-1500T.
Single-Turn vs Multi-Turn Encoder Fundamentals
An absolute encoder outputs a unique digital code for every measurable mechanical position. The code has two components:
- Single-turn resolution: the number of unique positions within one shaft revolution (the angular resolution). Common values: 2^13 = 8192, 2^16 = 65536, 2^20 = 1,048,576, 2^24 = 16,777,216.
- Multi-turn range: the number of full revolutions the encoder can count and retain across power cycles. Common values: 2^12 = 4096 revs, 2^16 = 65536 revs, 2^24 = 16,777,216 revs.
The total bit count of the encoder equals the sum of the two: a 32-bit encoder commonly means 20 bits single-turn plus 12 bits multi-turn.
| Encoder Type | Single-Turn Bits | Multi-Turn Bits | Positions per Rev | Total Revolutions | Total Unique Codes |
|---|---|---|---|---|---|
| V90 standard (20+12) | 20 | 12 | 1,048,576 | 4,096 | 4.29 × 10^9 |
| V90 high-resolution (24+12) | 24 | 12 | 16,777,216 | 4,096 | 6.87 × 10^10 |
| V90 high-resolution (25+12) | 25 | 12 | 33,554,432 | 4,096 | 1.37 × 10^11 |
| 12-bit multi-turn only | varies | 12 | varies | 4,096 | varies |
| Same Sky AMT21/22/24/25 | 14–20 | 12–16 | 16,384–1,048,576 | 4,096–65,536 | up to 1.07 × 10^11 |
Multi-turn counting is implemented in two physical ways:
- Mechanical gear multi-turn: a gear train inside the encoder housing counts revolutions. Used by V90 absolute encoders; no battery is required because the gear reduction maintains counts even without power, and absolute position is recovered on power-up by reading the gear position. Typical supported revolution count is 4096 (12-bit).
- Battery-backed electronic multi-turn: a buffered counter in the encoder electronics stores revolution count. Requires periodic battery replacement; if the battery dies, the multi-turn counter is lost.
The SINAMICS V90 absolute encoder is mechanical-gear multi-turn. The IFM absolute multi-turn encoder product line and the Same Sky AMT21/AMT22/AMT24/AMT25 series illustrate the same 4096-revolution tier and higher (up to 65536 for the AMT25), typically with RS-485 or SSI interface.
SINAMICS V90 Absolute Encoder Specifications
The V90 family has two encoder variants:
| Motor Type | Encoder Designation | Resolution | Multi-Turn | Interface | Cable |
|---|---|---|---|---|---|
| V90 low inertia (FL / FL2) | Absolute multi-turn, 20+12 bit | 1,048,576 inc/rev | 4096 revs | EnDat 2.2 / SSI | Single-cable OCC |
| V90 high inertia (FS) | Absolute multi-turn, 20+12 bit | 1,048,576 inc/rev | 4096 revs | EnDat 2.2 / SSI | Single-cable OCC |
| V90 high-resolution (option) | Absolute multi-turn, 24+12 or 25+12 bit | 16,777,216 or 33,554,432 inc/rev | 4096 revs | EnDat 2.2 | Single-cable OCC |
| Incremental V90 (legacy) | Incremental, 2500 ppr + commutation | 10,000 inc/rev (4x) | n/a | TTL + Hall | Two-cable |
Key practical numbers when sizing a 100:1 rotary axis:
- Increments per motor revolution: 1,048,576 (standard) → increments per load revolution = 1,048,576 × 100 = 104,857,600 (1.05 × 10^8).
- Multi-turn range at the motor: 4096 revolutions.
- Multi-turn range at the load with 100:1 ratio: 4,096 / 100 = 40.96 unique load revolutions before encoder wrap.
- If the load runs at 60 rpm continuously in one direction, wrap occurs every 40.96 / 60 h = 0.683 h ≈ 41 minutes. Cyclic absolute is mandatory for this case.
These are the numbers that drive the TIA Portal encoder configuration choice on the S7-1500T.
TO_Encoder Technology Object on S7-1500T
The TO_Encoder object captures the raw encoder position from a SINAMICS drive via PROFINET IRT, applies the mechanical gear ratio, the modulo operation (if any), and the absolute/cyclic-absolute logic, and provides the resulting load-side actual position to the higher-level axis technology object (TO_SpeedAxis, TO_PositioningAxis, or TO_SynchronousAxis).
The tag structure of TO_Encoder and its associated Sensor data block is documented in the SIMATIC S7-1500T Motion Control function manual. The most relevant tags for absolute-encoder commissioning are:
| Tag | Data Type | Description |
|---|---|---|
<TO>.ActualPosition |
LREAL | Current load-side position in configured axis units (after mechanical conversion and offset). |
<TO>.StatusSensor[1].AbsEncoderOffset |
LREAL | Absolute position offset stored at the time of homing; subtracted from the raw encoder value to yield load position. |
<TO>.StatusSensor[1].AbsEncoderRange |
DINT | Configured range of the absolute encoder in encoder increments; for V90: 1,048,576 × 4096 = 4,294,967,296 (2^32). |
<TO>.StatusSensor[1].AbsHomingEncoder |
BOOL | TRUE if the axis is homed to the absolute encoder reference. |
<TO>.StatusSensor[1].CycleCounter |
DINT | Number of complete measuring-range cycles the controller has counted in cyclic absolute mode (can be negative). |
<TO>.StatusWord |
DWORD | Bit-encoded status; bits 4 and 5 indicate homing state. |
<TO>.ErrorWord |
DWORD | Bit-encoded pending error from the TO. |
Configuration of the technology object is done in TIA Portal (V18, V19, V20) under Technology objects > Add new > Motion Control > Encoder. The Encoder dialog under Configuration > Encoder parameters is where the absolute/cyclic-absolute selection and the sensor interface are set.
Absolute vs Cyclic Absolute Configuration Modes
The S7-1500T distinguishes three absolute-encoder handling modes for TO_Encoder:
| Mode | Axis Traversing Range vs Encoder Range | Behavior on Power-Up | Overflow Behavior |
|---|---|---|---|
| Relative (non-absolute) | Any | Position = 0 until homed | Counter wraps, position becomes ambiguous |
| Absolute | Traversing range ≤ encoder measuring range | Position valid immediately | None expected; if overflow occurs, error is raised |
| Cyclic Absolute | Traversing range > encoder measuring range | Position valid immediately, modulo applied | TO counts cycles internally; no error, unique position retained as long as controller stays in RUN and power is not lost |
Decision rule:
- Compute the encoder's unique measuring range in load units. For V90 standard at 100:1:
R_encoder_load = (2^20 × 4096) / 100 = 4,294,967,296 / 100 = 42,949,672.96load units (if load unit = 1 load increment). - Compute the maximum total mechanical travel of the load across its lifetime (or across power cycles if the application cares about retaining position across power loss).
- If the total travel is strictly within the encoder's range → Absolute mode. If the load is a modulo axis (rotates continuously) or the total travel exceeds the encoder range → Cyclic Absolute mode.
For the 100:1 V90 case with a continuously rotating load, the answer is unambiguous: Cyclic Absolute is required.
AbsEncoderOffset and reconstructs a valid position as long as no more than one encoder revolution cycle has elapsed.Gear Ratio Modeling in the Mechanical System
For a 100:1 ratio (100 motor revolutions per 1 load revolution), the mechanical system configuration in the technology object must reflect this. Under Configuration > Mechanics in the TO_Encoder (or directly on the TO_PositioningAxis):
| Parameter | Setting | Effect |
|---|---|---|
| Motor revolutions per load revolution (load gear) | 100 | Each 100 encoder increments = 1 load unit (raw). |
| Increments per motor revolution | 1,048,576 (V90 standard) | Encoder resolution applied to the load gear ratio. |
| Modulo value (axis) | e.g., 360° or 1.0 load rev | Position wraps at the configured value; required for rotary axes. |
Once the gear is configured, the load position is computed as:
LoadPosition = (RawEncoderValue × GearRatio) / EncoderResolution − AbsEncoderOffset
For a 100:1 ratio with V90 standard encoder and 1 load unit = 1 load increment:
LoadPosition = (RawEncoderValue × 100) / 1,048,576 − AbsEncoderOffset
The number of load revolutions traveled since the last homing event is:
LoadRevs = LoadPosition / (EncoderResolution × LoadGear) = LoadPosition / 104,857,600
Equivalently, the number of motor revolutions is RawEncoderValue / 1,048,576, and dividing by 100 yields load revolutions.
Position Calculation and AbsEncoderOffset
The AbsEncoderOffset tag is the heart of the absolute-encoder logic on the S7-1500T. It is set automatically the first time the axis is homed in absolute mode, and is stored retentively in the technology object's data block.
The relationship between the raw encoder value, the offset, and the load position is:
Position = RawEncoderValue × GearFactor − AbsEncoderOffset
where GearFactor combines the load-gear ratio and the inversion flag (sign of direction).
To find the absolute number of motor revolutions since the last homing (or the last cycle in cyclic-absolute mode):
- Read
<TO>.ActualPositionin axis units (load-side). - Multiply by the configured inverse:
MotorRevs = LoadPosition × LoadGear / (EncoderResolution per motor rev). - For 100:1:
MotorRevs = LoadPosition × 100 / 1,048,576.
For a V90 high-resolution (24-bit) encoder, replace 1,048,576 with 16,777,216 in the formula.
The AbsEncoderRange tag is informational: it shows the configured range in raw encoder increments. For the V90 standard 20+12: 2^32 = 4,294,967,296. For high-resolution 24+12: 2^36 = 68,719,476,736. In cyclic-absolute mode, the controller wraps this internally and exposes the cycle count through StatusSensor[1].CycleCounter.
Multi-Turn Overflow Behavior and Cycle Counter
An absolute multi-turn encoder has a finite revolution count. The V90 standard encoder counts 4096 motor revolutions before the multi-turn code wraps from 4095 back to 0. For a 100:1 geared load, this wrap occurs every 40.96 load revolutions.
The math for the wrap interval as a function of load speed:
| Load Speed (rpm) | Wrap Interval (40.96 revs ÷ speed) | Wrap Interval (HH:MM:SS) |
|---|---|---|
| 10 | 4.096 h | 04:05:46 |
| 30 | 1.365 h | 01:21:55 |
| 60 | 0.683 h | 00:40:58 |
| 120 | 0.341 h | 00:20:29 |
| 1000 | 0.041 h | 00:02:28 |
If the controller is configured in Absolute mode and the encoder wraps, the TO raises error 20005 (encoder error: absolute value out of range) and the axis enters ERRORSTOP state. Recovery requires a re-homing run.
If the controller is configured in Cyclic Absolute mode, the wrap is detected silently: the TO increments StatusSensor[1].CycleCounter (signed DINT) and continues producing a unique load position. CycleCounter can be observed in the TIA Portal online watch table; the same value is also reflected in the trace.
CycleCounter is not a retentive value on the S7-1500T. It is rebuilt on power-up by comparing the current raw encoder value with the value expected from the last saved AbsEncoderOffset. If the axis moved by more than one full encoder measuring range while the controller was powered off, the position cannot be reconstructed and homing is required again.Reading the Number of Revolutions
There is no direct tag exposing "number of motor revolutions" or "number of load revolutions" on TO_Encoder. The number must be derived in user code from the position and the configured mechanical parameters. The recommended implementation in Structured Text (SCL) inside the user program:
n0 = "TO_Encoder_1".ActualPosition;
LoadRevs := LREAL_TO_REAL(n0 / 100.0); // 100:1 gear
MotorRevs := LREAL_TO_REAL(n0 / 1.0) * (100.0 / 1.0); // axis units are already load units
A more robust implementation normalizes by the load-side increments per load revolution configured in the technology object. If the axis uses 1,048,576 × 100 increments per load revolution (V90 standard, 100:1):
IncrPerLoadRev := 1.048576e8;
LoadRevs := "TO_Encoder_1".ActualPosition / IncrPerLoadRev;
For a modulo axis with modulo value 360° (1 revolution = 360°), the displayed position already wraps every 360°, so the integer part of LoadRevs shows the running revolution count since the last homing only in non-modulo axes. For modulo axes, the running count is obtained by adding StatusSensor[1].CycleCounter to the modulo-position-derived count.
The cycle counter is read directly:
Cycles := "TO_Encoder_1".StatusSensor[1].CycleCounter;
The total motor revolutions since homing (for 100:1 ratio, V90 standard):
TotalMotorRevs := LREAL_TO_REAL(("TO_Encoder_1".ActualPosition +
DINT_TO_LREAL("TO_Encoder_1".StatusSensor[1].CycleCounter) * 4.294967296e9)
/ 1.048576e6);
This formula correctly accounts for both the within-encoder-range portion and the wrapped cycles.
Step-by-Step TIA Portal Configuration
The following procedure commissions a V90 absolute multi-turn encoder on a 1511T-1 PN in cyclic-absolute mode for a 100:1 geared rotary axis. TIA Portal V18 or later is assumed; S7-1500T CPUs support the technology objects from firmware V2.0 onward.
- Add V90 drive to project. In the project tree, navigate to Devices & networks, add a SINAMICS V90 PN from the catalog, and assign it to the PROFINET subnet of the 1511T-1 PN. Set the drive's telegram to Standard telegram 3 (or SIEMENS telegram 105 for the extended setpoint channel) in the device properties.
- Configure the V90 encoder. Open the V90 device configuration and verify the encoder type in Parameters > Encoder. The drive must be set to the absolute-multi-turn mode, not the incremental fallback. Save and download to the drive.
-
Add TO_Encoder. In the technology objects of the 1511T, add a new Encoder object. Assign the data block name (e.g.,
TO_Encoder_1) and select the V90 as the data source. -
Set encoder parameters. In Configuration > Encoder parameters:
- Encoder type: Absolute.
- Measuring system: Cyclic absolute (because the 100:1 load can travel more than 40.96 revs).
- Increments per revolution: 1,048,576 for V90 standard, 16,777,216 for V90 high-resolution.
- Number of revolutions: 4,096.
-
Configure mechanical system. In Configuration > Mechanics, set:
- Motor revolutions per load revolution: 100 (matches the 100:1 gearbox).
- Load direction inversion: 0 or 1 depending on the physical sense of rotation.
-
Set axis modulo (if rotary axis). If the axis is a continuous rotary axis, set the modulo value in the higher-level
TO_PositioningAxisorTO_SynchronousAxisconfiguration. Common values: 360 (one revolution = 360°), 1.0 (one revolution = 1.0 axis unit), or a process-defined value such as 4000 (one revolution = 4000 user units). -
Assign to axis. In the axis technology object, link the
Sensor[1]toTO_Encoder_1under Configuration > Encoder connection. - Configure homing. Under Configuration > Homing of the axis, set Home position mode to Absolute encoder adjustment. The Absolute encoder offset can be set explicitly or auto-acquired. For a 100:1 geared axis, the home position is typically entered in load units (e.g., 0°).
- Compile and download. Compile the project (Ctrl+B) and download the hardware configuration plus the technology objects to the 1511T.
-
Run the homing command. From the TIA Portal axis control panel, issue Axis > Commissioning > Home, or call
MC_Homefrom the user program with Mode = 5 (absolute encoder adjustment) on the first commissioning. The controller reads the current encoder value, computes theAbsEncoderOffset, and stores it in the TO data block. - Verify cyclic-absolute behavior. Rotate the load manually through more than 40.96 revolutions, then power-cycle the CPU. On power-up, the axis position must be valid immediately (no homing required) and match the position before power-down. This validates that cyclic-absolute is functioning.
Commissioning Verification and Diagnostic Tags
Use the TIA Portal online watch table and trace to confirm the configuration is correct.
| Check | Tag to Monitor | Expected Result | Action if Not Met |
|---|---|---|---|
| Encoder communication active | StatusSensor[1].State |
3 (Valid) | Check PROFINET connection, telegram selection, drive encoder setting. |
| Absolute position valid | StatusSensor[1].AbsHomingEncoder |
TRUE | Run MC_Home mode 5 once after first commissioning. |
| Cycle counter increments on wrap | StatusSensor[1].CycleCounter |
Increments by 1 every 40.96 load revs at 100:1 | Verify encoder mode is Cyclic absolute in TO config. |
| Position stable at standstill | ActualPosition |
No jitter > 1 LSB | Check PROFINET IRT topology, sync domain configuration. |
| Direction matches mechanics |
ActualPosition vs physical rotation |
Position increases for positive direction | Toggle Load direction inversion. |
Common SINAMICS V90 fault codes observed during absolute-encoder commissioning:
| Fault Code | Meaning | Remedy |
|---|---|---|
| F31100 | Encoder 1 internal error | Check encoder cable shielding; replace motor if persistent. |
| F31110 | Encoder 1 communication error | Inspect connector; verify SSI/EnDat protocol in drive parameter p0425. |
| F31117 | Encoder 1 inversion error | Toggle inversion parameter p0410. |
| F31800 | Encoder 1 error (general) | Check drive buffer for details; clear with acknowledge. |
| A01900 | Encoder parameterization inconsistent | Verify p0400, p0421, p0422 match the connected encoder. |
S7-1500T technology-object-level errors observed:
| Error Code | Meaning | Remedy |
|---|---|---|
| 20005 | Encoder error, absolute value out of range | Switch to Cyclic absolute or expand encoder revolution count. |
| 20006 | Encoder configuration error | Verify TO parameters match the drive configuration. |
| 13171127 | Homing error | Check homing configuration, sensor validity, motion limits. |
For a complete reference, consult the Siemens Industry Online Support portal and search for the S7-1500T Motion Control function manual, the SINAMICS V90 operating instructions, and the TO_Encoder parameter reference. The V90 product documentation is also available from Siemens directly: search the support portal for the order number 6SL3210-5FE10-xUAx (V90 PN) and the matching function manual.
What encoder type should I select for a 100:1 geared V90 rotary axis on a 1511T?
Use a multi-turn encoder. For a continuous rotary load, the V90 standard encoder (20+12 bit, 4096 motor revolutions range) gives only 40.96 unique load revolutions at 100:1. Configure the TO_Encoder in Cyclic absolute mode so the controller can handle wrap events and retain a unique load position across many revolutions.
How do I read the number of motor revolutions from the S7-1500T technology object?
There is no direct tag. Compute it in user code: MotorRevs = ActualPosition × LoadGear / EncoderIncrPerRev. For 100:1 and V90 standard: MotorRevs = ActualPosition × 100 / 1,048,576. To include the wrapped cycles, add CycleCounter × 4,294,967,296 / 1,048,576 to the result.
Does cyclic absolute mode lose position when the CPU is powered off?
No, as long as the axis has not moved by more than one full encoder measuring range while the controller was off. The encoder itself stores the revolution count mechanically (V90 uses a gear-train multi-turn, no battery). On power-up, the controller reads the raw encoder value and rebuilds the cycle counter from the stored AbsEncoderOffset. If the move during power-off exceeds one encoder range, re-homing is required.
Can I use the V90 incremental encoder (2500 ppr) as a multi-turn absolute encoder?
No. The incremental V90 has no multi-turn memory. On every power-up the controller must perform a homing run to a reference mark or zero pulse. For applications that cannot tolerate the homing run, use the V90 absolute-multi-turn variant (single-cable OCC, EnDat 2.2 / SSI interface).
What happens if I select Absolute mode and the encoder wraps?
The technology object raises error 20005 and the axis enters ERRORSTOP state. You must clear the error and re-home the axis. Switch the configuration to Cyclic absolute if the application can mechanically travel beyond the encoder's range, or use a higher-resolution or higher-revolution-count encoder.
Is there a difference between 20-bit and 24-bit V90 encoders for the 100:1 application?
Both have the same 4096-revolution multi-turn range, so wrap occurs at the same 40.96 load revolutions. The 24-bit (high-resolution) encoder gives 16 times finer single-turn resolution (16,777,216 vs. 1,048,576 increments per motor revolution), which improves positioning precision and trace smoothness on the load side. For 100:1, that is 1.6 × 10^9 increments per load revolution. Choose the high-resolution variant if your application requires sub-arcsecond load positioning.
How do I verify that cyclic-absolute is working correctly during commissioning?
Rotate the load manually or by a jog command through more than 40.96 revolutions (100:1 ratio, V90 standard encoder), then power-cycle the CPU. On power-up, the ActualPosition must be valid immediately (no homing required) and must match the pre-power-down value. Observe StatusSensor[1].CycleCounter in the watch table; it should have incremented at least once.