Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Encoder and Feedback Signal Diagnostics for B&R ACOPOS Motion Systems

Overview

Encoder faults are the most common intermittent failure mode on B&R ACOPOS servo systems. On a CP1584 machine with defunct OEM support, you have no calibration data, no motor nameplate parameters, and no spare encoders with pre-loaded commutation offsets. This document provides everything needed to diagnose encoder faults, verify signal quality, replace encoders, and recover alignment without factory data.

The encoder is the sensor that closes the feedback loop in the servo drive. Without valid encoder data, the ACOPOS cannot commutate the motor (control which phase is energized) or close the position/velocity control loops. An encoder fault will immediately shut down the axis — and often the entire machine.

See also: acopos-drives.md for drive-level diagnostics, analog-calibration.md for signal measurement techniques, and grounding-emc.md for EMC troubleshooting of encoder signal quality.


Encoder Types Supported by ACOPOS

Supported Interface Standards

The ACOPOS drive family supports multiple encoder interfaces through plug-in option modules installed in the drive’s module slots. The encoder type is determined by the option module installed and the EncoderType parameter in the acp10sys configuration.

Encoder TypeACOPOS ModuleSignal CharacteristicsCable Requirement
ResolverBuilt-in (standard)Two sinusoidal outputs (sin/cos), passive, no battery4-wire + shield, unshielded OK for short runs
EnDat 2.18AC122.60-1Bidirectional digital, 1 MHz clock, absolute + incremental6-wire shielded, twisted pairs
EnDat 2.28AC122.60-2Bidirectional digital, up to 2 MHz (16 MHz w/ delay compensation), SIL 2 capable6-wire shielded, twisted pairs
HIPERFACE8AC122.60-3Bidirectional, RS-485 based, absolute + sin/cos incremental6-wire shielded, twisted pairs
HIPERFACE DSLModule-dependentAll-digital over 2 wires, 9.375 Mbaud, integrated in motor cable2-wire (with transformer)
BiSS-C8AC122.60-x (varies)Bidirectional, up to 10 MHz, CRC error checking4-wire + power
TTL (RS-422)Incremental module5V differential square wave, 1000+ lines minimumDifferential pair per channel + shield
Sin/Cos 1 Vpp8AC122.60-1 / built-inAnalog sinusoidal, 1 Vpp amplitude, incrementalShielded twisted pair per channel
SSIVia BiSS/EnDat modulesUnidirectional synchronous, up to 1.5 MHz, gray/binary code2 twisted pairs + power

How to Identify Your Encoder Type

When you have zero documentation, identify the encoder through these methods:

  1. Check the option module in the ACOPOS drive. Open the drive and look at the module in the encoder slot. The part number (e.g., 8AC122.60-2 = EnDat 2.2) identifies the interface. Record the full part number.

  2. Read the acp10sys configuration. In Automation Studio, open the drive configuration and look at the EncIf (Encoder Interface) parameter. The encoder type is defined here.

  3. Read the motor nameplate. B&R 8LS series motors encode the feedback type in the ordering code. For example, 8LSA66.E3030D100 — the E section encodes the encoder type. Cross-reference with B&R motor catalogs.

  4. Count the wires in the encoder cable. This gives a strong clue:

    • 2 wires: Hiperface DSL (or resolver with excitation shared)
    • 4-5 wires: Resolver or SSI
    • 6-8 wires: EnDat, Hiperface, or BiSS
    • 8+ wires: Incremental TTL with reference mark
  5. Measure the encoder supply voltage at the drive connector. EnDat encoders typically use 5V from the drive; Hiperface encoders use 5-9.5V; TTL encoders use 5V; resolvers use AC excitation (varies).

B&R Encoder Memory Architecture

B&R motors with EnDat 2.2 or Hiperface encoders store critical data in the encoder’s parameter memory (EEPROM/EEPROM). This memory contains:

  • Motor electrical nameplate — rated current, voltage, pole pairs, thermal constants
  • Commutation offset (MOTOR_COMMUT_OFFSET) — the angle between the encoder zero position and the motor’s electrical zero. This is the single most critical value.
  • Encoder resolution — lines per revolution, single-turn/multi-turn bits
  • Motor inertia and friction data

The ACOPOS drive reads this memory on every warm start. If the memory is corrupted or the encoder is replaced with a blank unit, the drive will not know the commutation angle and cannot drive the motor safely.

Critical fact (confirmed by B&R engineering, 2023): For motors with encoder memory, B&R does not align the encoder to any specific orientation during factory assembly. The encoder is mounted arbitrarily, and then the commutation offset is measured and stored in memory. The offset can be any value between -2pi and +2pi. There is no physical “zero mark” you can rely on without reading the encoder memory.


ACOPOS Encoder Error Codes

Primary Encoder Fault Codes

Error CodeCategoryDescriptionImmediate Action
31220ConfigurationEncoder not configuredEncoder interface module missing or EncIf parameter unset
31221SignalCable disturbance or signal disturbanceCheck cable, connectors, EMC; scope the signals
31222SignalSignal amplitude out of rangeMeasure encoder supply voltage, check cable length
31223SignalSignal quality insufficientScope signals, check for noise/degraded cable
31224HardwareEncoder interface HW module not OKReplace the encoder interface option module
31225CommunicationEncoder communication error (EnDat/BiSS/Hiperface)Check cable, try re-seating connector, test with known-good cable
31226CommunicationEncoder data read errorEncoder memory corruption; may need encoder replacement
31227PositionPosition tracking error / following error exceededMechanical binding, encoder slip, or tuning issue
15206PositionPosition feedback / encoder communication lossSame root causes as 31221/31225
15236ThermalPower stage overtemperature (can be caused by bad commutation)Verify commutation; if encoder gives wrong angle, drive fights itself

Interpreting the Info Field

ACOPOS encoder errors include an Info(UINT) value indicating the encoder interface index. On drives with multiple encoder interfaces (e.g., main encoder + secondary feedback), this tells you which interface faulted:

  • EncIf Index = 1 — Primary encoder interface
  • EncIf Index = 2 — Secondary encoder interface (if equipped)

Record the full error code and Info field. This is essential for targeted troubleshooting.

Error Escalation Pattern

Encoder faults typically follow this escalation:

  1. Intermittent signal glitches — Error 31221 appears during high-speed operation or when adjacent equipment is running. Machine recovers after reset.
  2. Frequent communication timeouts — Error 31225 appears with increasing frequency. Cable or connector is failing.
  3. Persistent fault at startup — Error 31220 or 31224. Hardware module failure or complete cable disconnect.
  4. Thermal fault — Error 15236 follows encoder problems because incorrect commutation causes excessive current draw, overheating the power stage. This is a cascading failure — fix the encoder before the drive is destroyed.

Signal Quality Analysis

Oscilloscope Diagnostic Techniques

An oscilloscope is the essential tool for encoder diagnostics. A multimeter cannot capture dynamic signal problems. Use a 2-channel or 4-channel digital oscilloscope (preferably a portable ScopeMeter rated for industrial use, such as Fluke 190 Series III or equivalent).

Probe Setup and Safety

WARNING: Encoder signals are referenced to drive electronics ground. Improper grounding of the oscilloscope can inject noise or create ground loops. Use differential probes or isolated probes whenever possible.

  1. Set the oscilloscope to use isolated/differential probing mode
  2. Connect the probe ground to the encoder signal ground (not chassis ground)
  3. Use 10x attenuation probes to minimize loading on the encoder signal
  4. For digital encoder signals (EnDat, BiSS, TTL): set time base to show 5-20 complete pulses
  5. For analog encoder signals (Sin/Cos 1 Vpp, resolver): set time base to show 2-4 complete cycles

Expected Waveforms by Encoder Type

TTL Incremental (RS-422):

Channel A:  ┌──┐    ┌──┐    ┌──┐
           │  │    │  │    │  │
      ─────┘  └────┘  └────┘  └────

Channel B:     ┌──┐    ┌──┐
               │  │    │  │
      ─────────┘  └────┘  └───────

Channel /A: (inverse of A)
Channel /B: (inverse of B)
Reference: ────────┐         ┌─────── (one pulse per revolution)
                  │         │
      ────────────┘         └─────────
  • Amplitude: 4.5-5.5V differential (2.25-2.75V single-ended)
  • Phase relationship: Channel B leads Channel A by 90 degrees (quadrature) in one direction of rotation
  • Duty cycle: 50% ±5% at any speed
  • Rise/fall time: < 100 ns for short cables; slower for long cables but must be < 1/4 of pulse period

Sin/Cos 1 Vpp:

Channel A (sin):    ╱╲    ╱╲    ╱╲
                   ╱  ╲  ╱  ╲  ╱  ╲
                  ╱    ╲╱    ╲╱    ╲
Channel B (cos): ╱╲    ╱╲    ╱╲
                ╱  ╲  ╱  ╲  ╱  ╲
               ╱    ╲╱    ╲╱    ╲
  • Amplitude: 1.0 Vpp ±10% (peak-to-peak)
  • DC offset: typically 0.5V (midpoint)
  • Phase: B leads A by 90 degrees
  • Signal-to-noise ratio: should be > 40 dB (noise < 10 mVpp)

Lissajous Test (Sin/Cos encoders):

Connect Channel A to the X input and Channel B to the Y input of the oscilloscope. Display in X-Y mode. A healthy encoder produces a perfect circle:

        ╭─────╮
       ╱       ╲
      │    o    │    ← Circle centered at origin
       ╲       ╱
        ╰─────╯
  • Circle indicates correct amplitude balance and 90-degree phase
  • Ellipse = amplitude imbalance (one channel stronger) or phase error
  • Figure-8 or other distortion = serious encoder damage (disk contamination, head misalignment)
  • Oval that shifts = bearing wear or mechanical runout

Resolver:

Resolver output requires a demodulator to view the position signal. On ACOPOS drives, the resolver interface module handles this internally. To check resolver signals with a scope:

  1. Measure the excitation signal at the encoder connector: should be a clean sine wave at the drive’s excitation frequency (typically 5-10 kHz), amplitude per motor spec (usually 2-7 Vrms)
  2. Measure the sin and cos output signals: two sinusoidal signals whose amplitude varies with rotor angle
  3. The envelope of the resolver outputs should modulate smoothly as the shaft rotates
  4. Check for excitation signal distortion — if the excitation is noisy, the resolver outputs will be corrupted

EnDat / BiSS / Hiperface Digital:

These are bidirectional digital serial protocols. On a scope, you will see:

  • Clock signal: clean square wave from the drive to the encoder (typically 1-16 MHz)
  • Data signal: bidirectional digital bursts during communication windows
  • Between communication windows: the incremental sin/cos signals (on EnDat 2.2 and Hiperface)

Diagnostic approach for digital encoders:

  1. Verify the encoder supply voltage (5.0V ±0.25V for EnDat, typically 5-9.5V for Hiperface)
  2. Check the clock signal integrity — clean edges, correct frequency
  3. Look for data corruption: CRC errors reported by the drive indicate bit-level errors on the data line
  4. Verify the incremental sin/cos signals between communication frames — same criteria as analog Sin/Cos above

Signal Quality Checklist

ParameterHealthyFailingLikely Cause
AmplitudeWithin ±10% of specLow or droppedCable resistance, bad connector, failing encoder
Duty cycle (TTL)50% ±5%SkewedUnbalanced differential pair, failing comparator
Rise/fall time (TTL)< 100 ns> 500 nsExcessive cable capacitance, long cable, damaged driver
Noise floor< 5% of signal> 20% of signalPoor shielding, ground loop, EMI from VFD/power cables
Pulse jitter< 2% of period> 10% of periodBearing wear, mechanical play, signal degradation
Lissajous shapeCircleEllipse/distortedAmplitude imbalance, phase error, encoder damage
Common-mode noiseNegligibleVisible on both channelsGround loop, shield not connected

Feedback Cable Diagnostics

Cable Construction Requirements

B&R encoder cables are precision-manufactured assemblies designed for drag chain installations. Key construction features:

  • Shielded twisted pairs — each differential signal pair is individually twisted and shielded
  • Overall foil + braid shield — provides both high-frequency and low-frequency EMI protection
  • Drag-chain rated jacket — designed for millions of flex cycles
  • Molded connectors — IP67 rated, with locking mechanisms

Cable Inspection Procedure

Follow this procedure whenever an encoder fault is reported:

  1. Visual inspection at the drive connector (X3/X3A/X3B on ACOPOS):

    • Check connector is fully seated and locked
    • Look for bent pins or damaged contacts
    • Verify the cable strain relief is intact
    • Check for heat damage (discolored connector housing)
  2. Visual inspection along the cable run:

    • Look for kinks, sharp bends, or crushed sections (minimum bend radius is typically 10x cable diameter)
    • Check for abrasion damage, especially at cable carrier entry/exit points
    • Look for oil or coolant contamination on the cable jacket
    • Check cable carrier for proper routing and tension
  3. Visual inspection at the motor connector:

    • Same checks as drive-side
    • Critical: verify the motor-side shield termination is intact (shield connected to motor housing via the connector)
    • Check for contamination ingress into the connector
  4. Continuity testing:

    • Measure resistance of each signal pair end-to-end: should be < 1 ohm per wire
    • Measure resistance between each signal wire and shield: should be > 10 Mohm (open circuit)
    • Measure resistance between adjacent signal pairs: should be > 10 Mohm
    • Measure resistance between signal wires and motor power wires (U/V/W): should be > 10 Mohm
  5. Shield continuity:

    • Verify the overall shield is continuous from drive connector to motor connector
    • The shield should connect to the drive’s PE terminal at the cabinet end
    • Ground the shield at one end only (typically the cabinet/drive end) to prevent ground loops. The motor end connects to the motor housing, which connects to PE through the motor cable shield.

Cable Routing Rules

Improper cable routing is the number one cause of encoder signal problems. Enforce these rules:

RuleRequirementRationale
SeparationEncoder cables ≥ 300 mm from motor power cablesPrevents capacitive and inductive coupling
Parallel runsNever run encoder cables parallel to power cablesEven with separation, parallel runs couple noise
CrossingCross power cables at 90 degrees onlyMinimizes coupling length
Cable traysSeparate encoder and power in different traysPhysical barrier prevents EMI
Ferrite coresInstall ferrite cores on encoder cables near the driveAttenuates high-frequency common-mode noise
Cable lengthDo not exceed maximum cable length for encoder typeSignal degradation and timing issues on long cables

Maximum Cable Lengths by Encoder Type

Encoder TypeMaximum Recommended LengthNotes
Resolver50 mPassive sensor; less sensitive to length
TTL (RS-422)30-50 mDifferential, but rise time degrades with length
Sin/Cos 1 Vpp30 mAnalog signal attenuates with cable resistance/capacitance
EnDat 2.150 m (at 1 MHz)Degrades at higher clock rates
EnDat 2.2100 m (with delay compensation)Propagation delay compensation extends useful range
Hiperface50 mRS-485 based, reasonably robust
Hiperface DSL100 m (integrated in motor cable)Requires transformer for noise rejection
BiSS-C50 m (at 10 MHz)Speed depends on cable quality

Interference Isolation Test

When encoder errors are intermittent and correlated with machine operation (other axes running, pumps cycling, etc.), perform this test:

  1. Monitor the encoder signals on an oscilloscope while triggering the suspect equipment
  2. If noise appears on the encoder signals when the other equipment operates, you have EMI coupling
  3. Systematically: a. Disconnect and re-connect the encoder cable shield at the cabinet PE bar b. Add ferrite cores at the drive end of the cable c. Temporarily run the encoder cable outside the cable tray (in air) to test if the tray itself is coupling noise d. If the problem resolves when the cable is outside the tray, re-route the cable with proper separation

Encoder Replacement Procedures

Before You Start: Assess the Situation

When replacing an encoder on a B&R servo motor, you are facing one of two scenarios:

Scenario A: The encoder memory is readable (encoder partially functional)

  • You can read the commutation offset from the old encoder before removing it
  • You may be able to write the same offset to a new encoder (if the new encoder supports it and you have the B&R EPROM function block — see notes below)

Scenario B: The encoder is completely dead (no memory access)

  • You have lost the commutation offset
  • You must either: (a) run the ACOPOS phasing procedure on every power-up, (b) configure the motor as a third-party motor with manual offset, or (c) send the motor to B&R repair for re-phasing

Physical Encoder Replacement Steps

WARNING: Servo motor encoder replacement requires precision mechanical work. The encoder is typically mounted to the motor’s rear shaft extension. Shaft runout of more than 0.01 mm can cause signal quality problems. If you are not experienced with servo motor repair, consider sending the motor to a qualified service center.

  1. Remove the motor from the machine — Do not attempt encoder replacement with the motor installed. You need a clean work area and the ability to rotate the shaft freely.

  2. Remove the motor end bell — This exposes the encoder assembly. On B&R 8LS motors, the encoder is typically mounted on the non-drive end (NDE). The end bell is secured with socket head cap screws.

  3. Record the encoder orientation — Before removing the old encoder:

    • Mark the encoder housing relative to the motor end bell with a scribe or punch mark
    • Photograph the encoder mounting from multiple angles
    • If the encoder has a reference mark on the shaft, record its position relative to the housing
  4. Disconnect the encoder cable at the motor connector.

  5. Remove the encoder — The encoder is typically secured to the shaft with a set screw or clamp, and to the housing with screws. Remove carefully to avoid damaging the shaft or housing bore.

  6. Inspect the shaft and housing bore — Clean any debris, check for burrs or corrosion. The mounting surfaces must be pristine.

  7. Install the new encoder — Reverse of removal. Ensure:

    • The encoder is fully seated against the housing shoulder
    • The shaft coupling is secure (set screw torqued to spec, or clamp tightened)
    • The connector is oriented correctly for cable routing
    • No debris is trapped between the encoder and housing
  8. Test before closing — Before reinstalling the end bell:

    • Connect the encoder cable (temporarily) to the drive
    • Power on the drive
    • Verify the drive can communicate with the encoder (no 31220/31224 errors)
    • Rotate the shaft slowly by hand and verify position changes in Automation Studio

Post-Replacement Configuration

If Using a B&R Replacement Encoder with Blank Memory

A new B&R encoder ships with blank memory. The commutation offset must be established:

Option 1: ACOPOS Phasing Procedure (runs at every power-up)

The ACOPOS drive has a built-in phasing function (MC_Phasig / drive identification) that measures the commutation offset each time the drive starts. This is documented in Automation Studio help under “Phasing the Encoder” (einphasen).

Steps:

  1. In Automation Studio, enable the phasing function for the axis
  2. On each drive power-up, the axis will perform a phasing sequence (the motor will briefly move to find the electrical zero)
  3. The measured offset is stored in the MOTOR_COMMUT_OFFSET parameter for the duration of the session
  4. The offset is not written to the encoder memory — it is recalculated every power-up

Caveat: This means the axis will not be immediately ready after power-up. It must complete the phasing sequence before it can accept motion commands. This adds startup delay.

Option 2: Manual Third-Party Motor Configuration

Configure the motor as a generic motor in the ACOPOS parameter table (Automation Studio → Motor Parameters). Enter the commutation offset manually as a fixed parameter. This offset must be determined once through the phasing procedure, then recorded and entered permanently.

Steps:

  1. Run the phasing procedure once (Option 1)
  2. Read the resulting MOTOR_COMMUT_OFFSET value from the drive parameters
  3. Enter this value in the motor parameter table as a fixed offset
  4. Disable the startup phasing sequence
  5. The drive will use the fixed offset from the parameter table

Option 3: B&R Repair Service (recommended for critical axes)

Send the motor to B&R’s repair facility in Eggelsberg, Austria (or the regional repair center). They will:

  1. Run a precision phasing procedure
  2. Write the commutation offset to the encoder memory
  3. Return the motor ready to run with auto-recognition

This is the only way to restore the factory behavior where the commutation offset is stored in encoder memory and automatically read on power-up.

Writing to Encoder Memory (Advanced)

B&R provides an EPROM function block that can write data to encoder memory. However:

  • B&R has removed public documentation for this functionality from newer Automation Studio help files
  • The memory address offsets can change without notice between B&R firmware versions
  • Using this function block requires internal B&R knowledge
  • B&R does not publicly recommend this approach for field use

If you have access to the function block and documentation (e.g., through a B&R support contract), the general procedure is:

  1. Run the phasing procedure to measure the commutation offset
  2. Use the EPROM function block to write the offset to the encoder memory at the correct address
  3. Verify the write by power-cycling the drive and confirming it reads the correct offset

For engineers without OEM support: Do not attempt to write to encoder memory without the correct address map. Writing to the wrong address can corrupt the entire encoder memory, making the encoder permanently unusable.


Verifying Encoder Alignment Without Original Calibration Data

The Core Problem

When you have no documentation, no calibration data, and possibly a replaced encoder, you must verify that the encoder’s electrical position reading matches the motor’s actual electrical position. If these are mismatched, the drive will commutate at the wrong angle, causing:

  • Excessive current draw (motor fights itself)
  • Overheating (error 15236)
  • Reduced torque (possibly 50% or less of rated torque)
  • Vibration and acoustic noise
  • Possible immediate fault on enable

Method 1: ACOPOS Phasing Procedure

This is the safest and most reliable method for establishing encoder alignment without calibration data.

  1. Ensure the axis is free to move (no mechanical interference, no load that could be dangerous)
  2. In Automation Studio, configure the axis for phasing:
    • Set MOTOR_COMMUT_OFFSET to 0 (or unknown)
    • Enable the phasing function (MC_Phasing or equivalent)
  3. Enable the drive power stage
  4. The ACOPOS will: a. Energize the motor with a known current vector b. The rotor will align to a known electrical position c. The drive compares the encoder reading to the expected position d. The difference is the commutation offset
  5. Read the measured MOTOR_COMMUT_OFFSET from the drive parameters
  6. Record this value permanently

Important: During phasing, the motor shaft will rotate to the alignment position. Ensure this movement is safe for your application (axis not in a position where movement could cause collision or injury).

Method 2: DC Current Injection (Manual Alignment)

If you cannot use the ACOPOS phasing function (e.g., the drive firmware doesn’t support it, or the axis cannot be freed), you can perform a manual alignment:

  1. Disconnect the motor from the machine mechanically (if possible)
  2. Disconnect the encoder from the ACOPOS drive
  3. Apply DC current to two motor phases (e.g., U and V, with W open)
  4. The rotor will snap to a defined electrical position (the d-axis aligns with the applied field)
  5. Mark the rotor position (or record the mechanical angle)
  6. Reconnect the encoder and read its position at this rotor angle
  7. The difference between the encoder reading and the known electrical zero gives you the commutation offset

Safety warning: Applying DC current to motor phases requires a controlled current source. Use a suitable DC power supply with current limiting, or use the ACOPOS drive’s manual current injection mode if available. Never apply full DC bus voltage directly to motor windings.

Method 3: Back-EMF Measurement

For permanent magnet synchronous motors (most B&R 8LS motors):

  1. Rotate the motor shaft manually (or with another motor) at a known, constant speed
  2. Measure the back-EMF voltage on the three motor phases (U, V, W) with an oscilloscope
  3. The zero-crossings of the back-EMF correspond to the electrical commutation points
  4. Compare these zero-crossings to the encoder position readings
  5. The offset between back-EMF zero-crossings and encoder zero gives the commutation offset

This method requires access to the motor phases (before the drive output stage) and is most useful when the motor is disconnected from the drive.

Verification: How to Confirm Correct Alignment

After establishing a commutation offset (by any method), verify it with these checks:

TestExpected ResultIf Wrong
Motor hums/vibrates when stationary (enabled, zero velocity)Quiet, minimal vibrationLoud humming or vibration = wrong commutation angle
Current draw at zero speed, zero torqueNear zero (only magnetizing current)High current draw = wrong commutation angle
Torque productionSmooth, full rated torque availableReduced torque, cogging = wrong commutation angle
Temperature rise at rated loadWithin motor specRapid overheating = wrong commutation angle
Move 1 mechanical revolution, monitor position readingPosition changes by exactly encoder_counts / pole_pairs × electrical_ratioPosition jumps or discontinuities = encoder or commutation problem

Common Encoder Failure Modes and Symptoms

Failure Mode 1: Cable and Connector Degradation

Symptoms:

  • Intermittent error 31221 (cable disturbance)
  • Errors that appear only during specific machine operations (cable flexing in carrier)
  • Errors that go away when the cable is wiggled
  • Gradual increase in error frequency over weeks/months

Root causes:

  • Broken conductor inside the cable (especially at strain relief points)
  • Corroded or oxidized connector pins
  • Damaged cable shield (shield continuity broken)
  • Connector not fully seated
  • Cable crushed in cable carrier

Diagnosis:

  • Wiggle the cable at connector points while monitoring for errors
  • Measure continuity of each wire while flexing the cable
  • Inspect connector pins under magnification for corrosion or bent pins
  • Check cable resistance end-to-end (should be < 1 ohm for each wire)

Failure Mode 2: Bearing Wear in Encoder

Symptoms:

  • Increasing position jitter at all speeds
  • Noise or roughness when rotating the shaft by hand
  • Lissajous pattern becomes irregular or shifts
  • Error 31221 appearing more frequently
  • Position errors that change with motor temperature (thermal expansion)

Root causes:

  • Normal wear over operating hours
  • Side loading on motor shaft (misaligned coupling)
  • Vibration from adjacent equipment
  • Contamination ingress through worn shaft seal

Diagnosis:

  • Rotate the motor shaft slowly by hand and feel for roughness at the encoder end
  • Scope the encoder signals — look for amplitude modulation that correlates with one revolution (indicates eccentricity)
  • Lissajous test — bearing wear causes the circle to become an ellipse or figure-8

Important: Encoder bearing wear can appear as an encoder error, but the root cause may be motor bearing wear transferring vibration to the encoder. Check both.

Failure Mode 3: Optical Disk Contamination (Optical Encoders)

Symptoms:

  • Random pulse drops (missed counts)
  • Position drift in one direction
  • Errors that worsen in dirty or humid environments
  • No visible cable or connector problems

Root causes:

  • Dust or particulate contamination on the optical disk or reading head
  • Condensation inside the encoder housing
  • Oil mist or coolant ingress
  • Degraded shaft seal allowing contamination entry

Diagnosis:

  • Look for environmental contaminants near the encoder
  • Check if errors correlate with machine cleaning cycles or seasonal humidity changes
  • The only definitive fix is encoder replacement with a sealed (IP67) unit

Failure Mode 4: Encoder Electronics Failure

Symptoms:

  • Complete loss of encoder communication (error 31224 or 31225)
  • No signals at all on the encoder lines (measured at the drive connector)
  • Error persists after cable replacement
  • Encoder supply voltage is correct at the drive connector

Root causes:

  • Power surge or transient damaging encoder electronics
  • Thermal aging of encoder ICs
  • Moisture-induced corrosion on encoder PCB
  • Manufacturing defect

Diagnosis:

  • Measure encoder supply voltage at the drive connector (not at the encoder — if the voltage is good at the drive, the problem is in the cable or encoder)
  • Disconnect the encoder at the motor end and measure the cable end-to-end
  • If cable is good and supply voltage reaches the encoder connector, the encoder electronics have failed

Failure Mode 5: Resolver-Specific Failures

Symptoms:

  • Signal amplitude dropping over time
  • Position error that changes with temperature
  • Error 31221 or 31222

Root causes:

  • Resolver winding insulation degradation
  • Resolver excitation signal distortion (from the drive’s resolver interface)
  • Mechanical damage to resolver rotor/stator (air gap change)

Diagnosis:

  • Measure resolver excitation signal at the encoder connector — should be clean sine wave at expected frequency and amplitude
  • Measure sin/cos output amplitudes — should be equal and within spec
  • Check resistance of resolver windings — compare to spec or to readings from a known-good motor of the same type

Failure Mode 6: Encoder Memory Corruption

Symptoms:

  • Motor runs but with wrong commutation (vibration, overheating, reduced torque)
  • Error 31226 (encoder data read error)
  • Motor parameters are wrong after power cycle
  • ACOPOS reports unexpected motor type or parameters

Root causes:

  • Power interruption during encoder memory write
  • EEPROM cell degradation (age-related)
  • Voltage transient damaging memory cells
  • Electromagnetic interference during communication

Diagnosis:

  • In Automation Studio, read the motor parameters from the encoder memory and compare to the motor nameplate
  • If parameters don’t match, the memory is corrupted
  • Verify by reading the MOTOR_COMMUT_OFFSET — if it has changed from the last known good value, the memory is unreliable

Resolution:

  • Run the phasing procedure to establish a new commutation offset
  • Configure the motor as a third-party motor with manual parameters (if memory cannot be trusted)
  • Replace the encoder if memory corruption is recurrent

Quick-Reference Diagnostic Flowchart

Encoder Fault Reported (Error 3122x / 15206)
│
├── Is the error persistent or intermittent?
│   ├── PERSISTENT:
│   │   ├── Check encoder option module is seated in drive → reseated? OK
│   │   ├── Check encoder supply voltage at drive connector (5V ±0.25V for EnDat)
│   │   ├── Disconnect encoder at motor end → measure cable continuity
│   │   ├── If cable OK → encoder electronics likely failed → replace encoder
│   │   └── If cable bad → replace cable first
│   │
│   └── INTERMITTENT:
│       ├── Scope encoder signals → noise present?
│       │   ├── YES: Check cable routing, shielding, grounding → fix EMC issue
│       │   └── NO: Check for mechanical causes (bearing wear, loose coupling)
│       ├── Check connectors → reseat, clean pins
│       └── Monitor temperature correlation → thermal failure?
│
├── After fixing hardware → Error cleared?
│   ├── YES: Run motor, verify:
│   │   ├── No vibration at standstill
│   │   ├── Current draw near zero at standstill
│   │   ├── Smooth motion at all speeds
│   │   └── No overheating
│   │
│   └── NO: Check configuration:
│       ├── EncoderType parameter matches actual encoder
│       ├── Motor parameters match nameplate
│       └── Commutation offset is correct (run phasing if unsure)
│
└── If encoder was replaced → Commutation alignment needed
    ├── Run ACOPOS phasing procedure → record offset
    ├── Verify motor runs smoothly → done
    └── If phasing unavailable → use manual DC injection method

Emergency Procedures

Encoder Fault During Production

  1. Do not force repeated reset attempts if the error recurs immediately. Each reset cycle with wrong commutation stresses the drive’s power stage.
  2. Isolate the axis — disable the axis in the PLC program so other axes can continue (if the machine supports partial operation).
  3. Check the obvious first — reseat the encoder connector at both ends (5 seconds, fixes 20% of problems).
  4. Swap cables — if you have a spare encoder cable of the correct type, try it.
  5. Swap drives — if you have a spare ACOPOS drive with the same option module, swap the drive (keep the original motor and encoder connected). If the error follows the drive, it’s a drive/option module problem, not an encoder problem.

Complete Loss of Encoder (Machine Down)

If the encoder is completely failed and you must get the machine running:

  1. Check if the axis is critical — can the machine operate (even in degraded mode) with this axis disabled?
  2. Source a replacement encoder — identify the exact encoder type and order a replacement (see encoder identification procedure above).
  3. While waiting for parts: install the replacement cable (if the fault is cable-related) and verify the encoder signals are dead (confirm it’s not a cable problem).
  4. When the replacement arrives: follow the encoder replacement procedure above, then run the phasing procedure to establish the commutation offset.

Thermal Cascade Protection

If you see error 15236 (overtemperature) combined with encoder errors:

  1. Stop immediately. The drive is fighting itself due to incorrect commutation. Continued operation will destroy the drive’s IGBT modules.
  2. Do not attempt to run the axis until the encoder problem is resolved.
  3. After fixing the encoder, verify DC link voltage stability before resuming operation.
  4. If the drive has been operating with wrong commutation for an extended period, have the drive inspected for IGBT degradation.

Preventive Maintenance for Encoder Systems

Schedule

IntervalAction
MonthlyVisual inspection of encoder cables and connectors; check for cable carrier damage
QuarterlyMonitor encoder error frequency in the alarm log; trend error rates
Semi-annuallyScope encoder signals on critical axes; compare to baseline
AnnuallyFull cable insulation and continuity test; replace cables showing degradation
As neededAfter any maintenance that disturbs cable routing or motor mounting

Baseline Recording

When the machine is running correctly, record these baselines for future comparison:

  1. Encoder signal waveforms — scope and save screenshots for each axis
  2. Lissajous patterns — for Sin/Cos and resolver encoders
  3. Noise floor levels — with machine running and stopped
  4. Position reading stability — record the standard deviation of position readings with the axis stationary
  5. Motor current at standstill — should be near zero; record the actual value
  6. Encoder error count — note the error counter values in the drive parameters

Having these baselines makes it possible to detect gradual degradation before it causes a failure.

Spare Parts Strategy

Maintain these spares for encoder-related failures:

ItemQuantityNotes
Encoder cable (each type on the machine)1 per typeMust match the encoder interface module
Encoder option module (each type)1 per typeThe module in the ACOPOS drive
Complete motor + encoder assembly (critical axes)1 per critical axisEliminates alignment issues — swap and run
Ferrite cores (cable diameter matched)10+For EMC troubleshooting

Automated Encoder Monitoring via OPC-UA

Reading Encoder Data from the PLC Without the Project

If OPC-UA is configured on the CP1584, encoder data from ACOPOS drives is typically exposed in the motion namespace. This enables continuous monitoring without Automation Studio.

OPC-UA Encoder Variable Patterns

B&R’s mapp Motion exposes encoder data through predictable node patterns in the OPC-UA address space:

Root → Objects → [Application] → mappMotion → Axes → [AxisName] →
  ├── Encoder
  │   ├── Position          (LREAL)  - Current encoder position in user units
  │   ├── RawPosition        (LREAL)  - Raw encoder counts (before scaling)
  │   ├── Velocity           (LREAL)  - Computed velocity in user units/s
  │   ├── Acceleration       (LREAL)  - Computed acceleration
  │   ├── Status             (UINT)   - Encoder status bits
  │   ├── Error              (UINT)   - Active encoder error code (0 = OK)
  │   ├── CommutOffset       (REAL)   - Current commutation offset value
  │   ├── Resolution         (UDINT)  - Encoder resolution (counts/rev)
  │   ├── InterfaceType      (USINT)  - Encoder interface type ID
  │   └── Temperature        (REAL)   - Encoder temperature (if supported)
  └── ...

The exact path depends on the OEM’s naming convention. Common axis name patterns:

  • gAxis1, gAxis2, gAxis3, … (sequential)
  • gAxisSpindle, gAxisFeed, gAxisConv (functional)
  • Axis_1, Axis_X, Axis_Y (underscore-separated)
  • Names matching the motor station label

Python Script for Continuous Encoder Monitoring

"""
Continuous ACOPOS encoder health monitor.
Requires: pip install opcua asyncua
Usage: python encoder_monitor.py <PLC_IP> [interval_seconds]
"""
import asyncio
import sys
import time
from datetime import datetime
from asyncua import Client

PLC_IP = sys.argv[1] if len(sys.argv) > 1 else "192.168.0.1"
INTERVAL = float(sys.argv[2]) if len(sys.argv) > 2 else 1.0
LOG_FILE = f"encoder_monitor_{datetime.now():%Y%m%d_%H%M%S}.csv"

HEADERS = [
    "timestamp", "axis", "position", "velocity", "encoder_status",
    "encoder_error", "cycle_time_ms"
]

async def monitor_encoders():
    url = f"opc.tcp://{PLC_IP}:4840"
    async with Client(url=url) as client:
        root = client.get_root_node()

        print(f"Connected to {url}. Scanning for encoder variables...")

        axes = await find_encoder_nodes(client, root)
        if not axes:
            print("No encoder nodes found. Check OPC-UA configuration.")
            return

        print(f"Found {len(axes)} encoder axes: {list(axes.keys())}")
        print(f"Logging to {LOG_FILE}")
        print(",".join(HEADERS))

        with open(LOG_FILE, "w") as f:
            f.write(",".join(HEADERS) + "\n")

        while True:
            try:
                for axis_name, nodes in axes.items():
                    row = await read_axis_data(nodes, axis_name)
                    print(",".join(str(v) for v in row))
                    with open(LOG_FILE, "a") as f:
                        f.write(",".join(str(v) for v in row) + "\n")
                await asyncio.sleep(INTERVAL)
            except KeyboardInterrupt:
                print("\nMonitoring stopped.")
                break
            except Exception as e:
                print(f"Error: {e}")
                await asyncio.sleep(5)


async def find_encoder_nodes(client, root):
    children = await root.get_children()
    axes = {}

    for child in children:
        browse_name = (await child.get_browse_name()).Name
        try:
            sub_children = await child.get_children()
            for sub in sub_children:
                sub_name = (await sub.get_browse_name()).Name
                sub_sub = await sub.get_children()
                for axis_node in sub_sub:
                    axis_name = (await axis_node.get_browse_name()).Name
                    encoder_nodes = {}
                    for node in await axis_node.get_children():
                        node_name = (await node.get_browse_name()).Name
                        if any(kw in node_name.lower() for kw in
                               ["position", "velocity", "encoder",
                                "status", "error", "commut"]):
                            encoder_nodes[node_name] = node
                    if encoder_nodes:
                        axes[axis_name] = encoder_nodes
        except Exception:
            continue
    return axes


async def read_axis_data(nodes, axis_name):
    row = [time.time(), axis_name]
    for key in ["Position", "Velocity", "Encoder Status",
                "Encoder Error", "CommutOffset"]:
        node = nodes.get(key) or nodes.get(
            next((k for k in nodes if key.lower() in k.lower()), None), None)
        if node:
            try:
                val = await node.get_value()
                row.append(val)
            except Exception:
                row.append("N/A")
        else:
            row.append("N/A")
    row.append(INTERVAL * 1000)
    return row


if __name__ == "__main__":
    asyncio.run(monitor_encoders())

Detecting Encoder Degradation from Position Jitter

A healthy encoder produces consistent position readings when the axis is stationary. Degradation manifests as increasing jitter:

"""
Encoder jitter analysis. Record position data at rest, compute
standard deviation to quantify signal quality degradation.
"""
import asyncio, statistics
from asyncua import Client
from collections import deque

PLC_IP = "192.168.0.1"
AXIS_POSITION_NODE = "gAxis1.Position"  # Adjust to match your namespace
SAMPLES = 1000
INTERVAL = 0.001  # 1 ms between samples

async def measure_jitter():
    url = f"opc.tcp://{PLC_IP}:4840"
    async with Client(url=url) as client:
        node = client.get_node(f"ns=2;s={AXIS_POSITION_NODE}")
        positions = deque(maxlen=SAMPLES)

        print(f"Collecting {SAMPLES} position samples at {INTERVAL*1000:.0f}ms intervals...")
        print("Ensure the axis is STATIONARY before starting.")
        await asyncio.sleep(3)

        for _ in range(SAMPLES):
            val = await node.get_value()
            positions.append(val)
            await asyncio.sleep(INTERVAL)

        vals = list(positions)
        mean = statistics.mean(vals)
        stdev = statistics.stdev(vals)
        p2p = max(vals) - min(vals)

        print(f"\n--- Encoder Jitter Analysis ---")
        print(f"Mean position:   {mean:.6f}")
        print(f"Std deviation:  {stdev:.6f}")
        print(f"Peak-to-peak:    {p2p:.6f}")
        print(f"Min:             {min(vals):.6f}")
        print(f"Max:             {max(vals):.6f}")

        print(f"\nHealth assessment:")
        if stdev < 0.0001:
            print("  EXCELLENT - Encoder signal quality is optimal")
        elif stdev < 0.001:
            print("  GOOD - Within normal operating range")
        elif stdev < 0.01:
            print("  DEGRADED - Schedule encoder cable inspection")
        else:
            print("  CRITICAL - Encoder signal quality severely degraded")
            print("  Action: Replace encoder cable immediately, scope signals")

asyncio.run(measure_jitter())

Reading Encoder Parameters via PVI

When OPC-UA is not available, PVI provides direct access to ACOPOS drive encoder parameters:

"""
Read ACOPOS encoder parameters via B&R PVI.
Uses Pvi.py (github.com/hilch/Pvi.py).
"""
from pvi import Pvi

PLC_IP = "192.168.0.1"

pvi = Pvi()
pvi.line_set(line_name="ANSL", ip=PLC_IP)
pvi.connect()

def read_param(axis, param):
    var_name = f"acp10:{axis}.{param}"
    try:
        return pvi.variable_read(var_name)
    except Exception as e:
        return f"ERROR: {e}"

AXIS = "1"

params = {
    "EncIf":           "Encoder interface type",
    "EncResol":        "Encoder resolution (counts/rev)",
    "EncStat":         "Encoder status register",
    "EncError":        "Active encoder error code",
    "MOTOR_COMMUT_OFFSET": "Commutation offset (rad)",
    "EncAbsPos":       "Absolute encoder position",
    "EncIncPos":       "Incremental encoder position",
    "EncVelocity":     "Encoder velocity",
    "EncSupplyVolt":   "Encoder supply voltage",
    "MotorPolePairs":  "Motor pole pairs",
    "MotorRatedCurr":  "Motor rated current",
}

print(f"=== ACOPOS Axis {AXIS} Encoder Parameters ===\n")
for param, desc in params.items():
    val = read_param(AXIS, param)
    print(f"  {param:25s} = {val:>15}  ({desc})")

pvi.disconnect()

See pvi-api.md for complete PVI setup instructions and python-diagnostics.md for more Python diagnostic script patterns.


Automated Phasing Procedure via PVI

Triggering Phasing Remotely

When the commutation offset is lost or needs re-measurement, you can trigger the ACOPOS phasing procedure from a Python script without Automation Studio:

"""
Trigger ACOPOS encoder phasing procedure via PVI.
WARNING: The motor shaft WILL move during phasing. Ensure safe.
"""
from pvi import Pvi
import time

PLC_IP = "192.168.0.1"
AXIS = "1"

pvi = Pvi()
pvi.line_set(line_name="ANSL", ip=PLC_IP)
pvi.connect()

print("Pre-phasing checks:")
print(f"  Encoder error:    {pvi.variable_read(f'acp10:{AXIS}.EncError')}")
print(f"  Current offset:  {pvi.variable_read(f'acp10:{AXIS}.MOTOR_COMMUT_OFFSET')}")

print(f"\nStarting phasing procedure for axis {AXIS}...")
print("WARNING: Motor will move to find electrical zero.")

pvi.variable_write(f"acp10:{AXIS}.PhasingStart", 1)

for i in range(30):
    time.sleep(1)
    status = pvi.variable_read(f"acp10:{AXIS}.PhasingStatus")
    print(f"  Phasing status: {status}")
    if str(status) == "0" or str(status).lower() in ["done", "ready", "ok"]:
        break
    if str(status).lower() in ["error", "fault"]:
        error = pvi.variable_read(f"acp10:{AXIS}.EncError")
        print(f"  PHASING FAILED. Encoder error: {error}")
        break

new_offset = pvi.variable_read(f"acp10:{AXIS}.MOTOR_COMMUT_OFFSET")
print(f"\nPhasing complete. New commutation offset: {new_offset}")
print("Record this value for permanent configuration.")

pvi.disconnect()

Tools Required

ToolPurposeMinimum Spec
Digital oscilloscope (portable)Signal quality analysis2-channel, 100 MHz, isolated/differential probes
Digital multimeterContinuity, voltage, resistanceTrue-RMS, 0.1 ohm resolution
Insulation resistance testerCable insulation check250V/500V test voltage
Torque screwdriver setEncoder mounting hardwareMatches encoder mounting screw sizes
Dial indicatorShaft runout check0.001 mm resolution
Cable testerEncoder cable continuity4-wire minimum, can build from DMM + leads
Automation Studio (with SDM)Drive parameter monitoringCurrent version matching machine firmware
Label printer + heat-shrink labelsCable identificationFor documenting cable routing

Key Findings

  1. Encoder problems are the most common intermittent fault on ACOPOS systems. The combination of digital serial protocols, precision analog signals, and harsh industrial environments makes encoder systems the weakest link in the motion control chain.

  2. B&R encoders store the commutation offset in encoder memory, not in the drive. The physical alignment between the encoder and motor is arbitrary — B&R measures the offset at the factory and stores it in the encoder’s EEPROM. There is no mechanical reference mark you can use without this data.

  3. Writing to encoder memory is not publicly documented by B&R. The EPROM function block exists but its address maps are considered internal. Writing to the wrong address corrupts the encoder permanently. Do not attempt without B&R support or verified documentation.

  4. The ACOPOS phasing procedure is your primary recovery tool. When the commutation offset is lost (encoder replacement, memory corruption), the drive can re-measure it at startup. This adds startup delay but allows operation without B&R repair service.

  5. Error 15236 (overtemperature) following encoder errors indicates a cascading failure. Wrong commutation causes the drive to fight itself, generating excessive heat. Stop immediately — continued operation will destroy the IGBT modules.

  6. 80% of encoder “failures” are cable or connector problems. Always test the cable before condemning the encoder. Continuity testing, connector inspection, and scope analysis will usually identify the real problem.

  7. EnDat 2.2 and Hiperface are the most common interfaces on B&R 8LS motors. Identify your encoder type from the option module part number in the drive before ordering any replacement parts.

  8. Always maintain encoder signal baselines when the machine is healthy. Having waveform recordings and parameter readings from a known-good state makes it possible to detect degradation before it causes a failure, and dramatically speeds up fault diagnosis when problems occur.


Sources

  • B&R ACOPOS Servo Drive Technical Manual — encoder interface specifications, fault codes, and parameter references
  • B&R 8LS Three-Phase Synchronous Motor Documentation — motor and encoder option codes
  • B&R Automation Studio mapp Motion Online Help — McEncoderAxis, McPhasing function block references
  • B&R Community Forum (community.br-automation.com) — encoder fault discussions and troubleshooting
  • EnDat 2.2 Specification (Heidenhain) — encoder protocol and signal characteristics
  • Hiperface DSL Specification (SICK/Steute) — encoder protocol and diagnostic data format
  • BiSS Protocol Specification — encoder communication protocol reference
  • IEC 61800-5-1 — adjustable speed drive safety requirements