Resolving R88D-GT20H Encoder Feedback on CP1E-N40DT-D PLC Inputs
The combination of an Omron R88D-GT20H G-Series AC servo drive and a CP1E-N40DT-D PLC is a common low-cost positioning architecture, but the apparent simplicity of "wire A+, B+, Z+ into the PLC high-speed counter" hides a fundamental protocol limitation. Engineers frequently wire the encoder signal pins directly to CP1E inputs 0.00, 0.01, and 0.04 and find that no pulses are registered, no error is flagged, and the high-speed counter remains at zero. This article explains why the wiring is electrically valid but functionally useless, and provides a complete working replacement architecture using incremental encoder feedback plus INP and ERR drive outputs.
1. Problem Statement
A CP1E-N40DT-D is being used as a positioning controller for an R88D-GT20H drive (typically paired with an R88M-G series servomotor) through the PLS2 (Pulsed Output 2) instruction. The drive moves correctly when commanded, but no encoder feedback pulses are visible to the PLC, even though the wiring is connected:
- Encoder
A+to CP1E input0.00 - Encoder
B+to CP1E input0.01 - Encoder
Z+to CP1E input0.04
The PLC program runs without a fault, but the high-speed counter (HSC) value never changes. There is no error code in the PLC, no alarm on the drive, and the motor continues to follow the PLS2 pulse train as expected. The application requires position verification between the commanded pulse count and the actual motor position.
2. Affected Hardware and Firmware
| Component | Catalog / Part Number | Notes |
|---|---|---|
| Servo Drive | R88D-GT20H | OMNUC G-Series, 200 W class, 1-axis position control |
| Servomotor (typical) | R88M-G02030H | 3,000 r/min incremental / absolute encoder, 200 W |
| PLC CPU | CP1E-N40DT-D | 40 I/O, transistor outputs, DC power supply |
| Programming Software | CX-Programmer 9.x (or Sysmac Studio CP1E support) | Used to configure built-in HSC inputs |
| Encoder Output Type | Line driver (RS-422 equivalent) | 5 V differential, not 24 V open-collector |
The fault class is the same across all R88D-GT__H (200 V class) and R88D-GP__H (100 V class) G-Series drives when paired with any CP1E/CP1L/CP1H PLC; it is not firmware-version dependent but is intrinsic to the G-Series encoder interface architecture.
3. Root Cause Analysis
3.1 The G-Series Does Not Expose Absolute Encoder Position as Pulses
The R88D-GT20H motor uses an absolute encoder internally, but the CN2 encoder output connector on the drive does not stream the absolute position as a quadrature pulse train. According to the G-Series user manual, the CN2 pinout is wired to a duplicated channel of the motor encoder and is intended to be used as an incremental feedback signal for an external motion controller. The drive itself holds the absolute multi-turn and single-turn information internally and uses it for homing retention only.
There is no serial bus (such as SSI, BiSS, or EnDat) on the CN2 connector. The G-Series architecture assumes that any "absolute" position is held by the drive and exposed to the controller only through the INP (in-position) discrete output and the deviation-counter alarm behavior. Therefore, even a perfectly wired, perfectly terminated, perfectly configured CP1E HSC will count 0 pulses on a drive that is at rest and correctly positioned, because no incremental pulses are generated while the motor is stationary.
3.2 The Drive Encoder Output Is a Line-Driver Signal
The CN2 encoder output on the R88D-GT20H is a 5 V RS-422 line driver signal. The CP1E-N40DT-D's built-in inputs are 24 V DC sinking/sourcing, with a typical ON threshold of approximately 17 V. Directly wiring a 5 V differential signal into a 24 V input is electrically incompatible: the line driver will be unable to drive the input above its ON threshold, and the high-speed counter will never see a transition.
| Parameter | R88D-GT20H CN2 Output | CP1E-N40DT-D Built-in Input |
|---|---|---|
| Output type | RS-422 line driver | DC voltage input (sinking or sourcing) |
| Differential level | ±3.3 V (typ) into 100 Ω | Single-ended |
| Common-mode range | 0 to 5 V | N/A |
| ON threshold | N/A (output) | 17 V DC minimum (24 V input) |
| OFF threshold | N/A | 5 V DC maximum |
| Maximum input voltage | N/A | 26.4 V DC |
3.3 The CP1E HSC Inputs Must Be Explicitly Enabled
Even when an HSC-compatible input is physically wired, the CP1E ships with all built-in high-speed counter functions disabled. The 0.00, 0.01, and 0.04 terminals can be assigned to HSC0, HSC1, or HSC3, but only after the configuration is downloaded and the PLC is power-cycled. Until then, those inputs behave as ordinary DC inputs and may register 0/1 transitions at the standard scan rate, not as HSC counts.
4. Encoder Signal Architecture of the G-Series
Understanding the encoder data path is essential for selecting a workable architecture. The R88D-GT20H receives the raw encoder signal from the R88M-G motor over the CN2 cable and:
- Decodes the absolute single-turn and multi-turn counts for internal servo control.
- Reproduces an incremental quadrature (A/B) plus index (Z) signal on the CN2 output pins for external use.
- Generates the
INPdiscrete output when the deviation counter is below the configured threshold (Pn522 on the G-Series). - Asserts the
ALM(alarm) output when a position, overcurrent, overspeed, or encoder fault occurs.
Therefore, the only feedback signals that are reliably accessible to a CP1E are the discrete INP and ALM/ERR outputs. The quadrature signal is available but is the wrong voltage for direct CP1E input use.
5. Recommended Solution Architecture
The reliable, documented way to verify position on a CP1E-controlled G-Series axis is:
- Disable the absolute encoder mode in the drive (parameter Pn001 = 0 for incremental, or the equivalent G-Series incremental selection).
- Add an external home proximity switch wired to a CP1E standard input.
- Use the
INPdrive output as the in-position verification flag. - Use the drive
ALMoutput as a position-error indicator. - Issue
ORG(Origin Search) andPLS2instructions to move the axis. - Confirm the
INPsignal is asserted after every move before issuing the next command.
This approach trades the goal of "read raw encoder count" for the more practical goal of "confirm the axis reached the commanded position," which is what the application actually requires.
6. Wiring and Termination
6.1 Drive to PLC Control Wiring
| Drive Terminal (CN1) | Signal | CP1E Terminal | Notes |
|---|---|---|---|
| 7 (PULS+) | Pulse + | Output 100.00 | Pulse train CW |
| 8 (PULS-) | Pulse - | Output 100.00 common | Differential return |
| 11 (SIGN+) | Direction + | Output 100.01 | Direction |
| 12 (SIGN-) | Direction - | Output 100.01 common | Differential return |
| 37 (INP+) | In-position + | Input 0.02 | 24 V sourcing output from drive |
| 36 (INP-) | In-position - | 24 V common (0 VDC) | Return |
| 29 (ALM+) | Alarm + | Input 0.03 | Open on alarm by default |
| 28 (ALM-) | Alarm - | 24 V common | Return |
| External | Home prox PNP | Input 0.05 | Mechanical home reference |
6.2 Encoder Output Wiring (Optional, If HSC Verification Is Required)
If a closed-loop count is required (for example, for a registration application), a line-receiver board must be inserted between the drive's CN2 output and the CP1E HSC input. A typical implementation uses a TI AM26LS32 or equivalent RS-422-to-TTL receiver, followed by a 24 V level-shifter to drive the CP1E input. The Z (index) channel is wired to 0.04 as a count reset.
For most positioning applications, this hardware addition is unnecessary. The combination of PLS2 plus INP assertion provides equivalent functional verification at a fraction of the wiring cost.
7. CX-Programmer Configuration Steps
The following procedure configures the CP1E-N40DT-D to use outputs 100.00 and 100.01 as the PLS2 pulse output channel, and input 0.02 as the in-position verification flag.
7.1 Configure the Pulse Output Channel
- Open the project in CX-Programmer and double-click Settings in the project tree.
- Select the Built-in Input/Output tab.
- On the Pulse Output 0 row, set Use =
Used, Output Mode =CW/CCW, and confirm the assigned outputs (100.00 and 100.01). - Click Transfer to PLC, confirm the dialog, and wait for the transfer to complete.
- Cycle power to the CP1E. The new pulse output assignments do not take effect until a cold start.
7.2 Configure the In-Position Input as an Interrupt
- In the same Settings dialog, click the Built-in Input tab.
- Map input
0.02(the INP input) to the desired interrupt task, for example Interrupt Task 140. - Write the in-position handling routine into the interrupt task: set a completion flag, latch the current
PLS2target register, and clear the busy flag. - Transfer and power-cycle the PLC again.
7.3 Sample PLS2 Ladder
| W0.00 --[ ]--+--[PLS2(887) D0 D10 D20]--|
| (Move Cmd) | S: D0 = Pulse Frequency (Hz)
| | N: D10 = Pulse Count
| | Accel: D20 = Acceleration rate
| | Decel: D22 = Deceleration rate
| |
| 0.02 (INP) --[ ]--( W1.00 )--| In-Position OK
| 0.03 (ALM) --[/]--( W1.01 )--| Alarm clear
After the PLS2 instruction is executed, the program monitors W1.00 for completion. The next move is gated on W1.00 = ON and W1.01 = ON (no active alarm).
8. Drive Parameter Settings
The G-Series drive must be configured for the CP1E command interface. The relevant parameters are:
| Parameter | Value | Description |
|---|---|---|
| Pn001 | 0 (or as required) | Control mode selection; for PLS2 set to position control |
| Pn010 | 0 | Position command pulse type = CW/CCW pulse train |
| Pn011 | 1 (or as required) | Command pulse multiplier (electronic gear numerator) |
| Pn012 | 1 | Command pulse divider (electronic gear denominator) |
| Pn520 | User-defined | Deviation counter overflow level (position-following error limit) |
| Pn522 | User-defined (pulses) | Positioning completion window (INP threshold) |
| Pn524 | 0 | INP output signal selection = positioning complete |
9. Verification Procedure
After wiring and configuration, perform the following verification sequence:
- Power the drive and PLC. Confirm the drive front panel shows
bb(base block) orrunwith no alarm code. - From CX-Programmer, force
W0.00ON. The drive should rotate at the commanded frequency for the commanded pulse count. - Monitor
W1.00. It should transition ON within the positioning window defined by Pn522. - Move the load manually and verify that
W1.01(alarm) does not assert unless the deviation counter exceeds Pn520. - Issue a series of varying
PLS2commands and confirm thatW1.00consistently asserts within the expected time window. - If
W1.01asserts, read the drive's alarm code from the front panel and consult the alarm list in the G-Series user manual.
10. Alternative: Motion Controller Architecture
If true position feedback is required rather than in-position verification, the application is using the wrong controller category. The CP1E is a programmable logic controller with pulse-output capability; it is not a motion controller with servo-loop closure. For closed-loop position control, use one of the following:
| Controller | Capability | Typical Use |
|---|---|---|
| CP1H-XA40DT-D | 4-axis pulse output, 1 MHz max | Mid-range point-to-point with HSC verification |
| CP1L-M40DT-D | 2-axis pulse output, 100 kHz | Low-end point-to-point |
| NJ/NX Series | Up to 64 axes via EtherCAT | Synchronized multi-axis motion with absolute feedback |
| CK3E/CK5M | Standalone motion controller | Standalone high-axis-count applications |
| 1S-Series (R88D-1SN) | Native EtherCAT drive with absolute multi-turn encoder | Direct position feedback via process data |
For G-Series replacement in new applications, the 1S-Series is the modern equivalent and provides native absolute encoder data through EtherCAT, eliminating the position-feedback problem at its source. For a 1S-Series tuning and commissioning walk-through, the Omron 1S-Series Multi-axis Setup and Tuning Getting Started Guide (I827) provides step-by-step procedures. A broader view of the Omron servo and inverter product family is available on the Servos and Inverters category page.
11. Troubleshooting Matrix
| Symptom | Probable Cause | Resolution |
|---|---|---|
| HSC stays at 0 with motor running | 5 V line-driver signal into 24 V CP1E input | Add RS-422 receiver + level shifter, or use INP feedback instead |
| HSC counts up only briefly, then freezes | Drive in absolute encoder mode; CN2 only outputs pulses during motion | Switch Pn001/Pn011 to incremental, add home prox |
| HSC counts only Z, not A/B | Wiring of differential pairs reversed on A+ vs A- | Verify A+/A- and B+/B- paired wiring per CN2 pinout |
| PLS2 runs but no INP signal | Pn524 not set to positioning complete, or wiring of INP+/INP- reversed | Check Pn524, verify INP wiring polarity |
| INP chatters at end of move | Pn522 (positioning window) too tight for application | Increase Pn522 to a value larger than the position ripple |
| Alarm A.CC or A.EC at first move | Electronic gear (Pn011/Pn012) mismatch with command pulse rate | Set Pn011/Pn012 to 1:1 and re-test; then tune to mechanical ratio |
| INP never asserts after move | Deviation counter overflow; Pn520 too tight | Increase Pn520 or reduce command acceleration |
| PLC input LED flickers but HSC does not increment | HSC not enabled in CX-Programmer Settings | Configure Built-in Input tab, transfer, and power-cycle |
12. Safety and Commissioning Notes
- Always confirm the
ALM(alarm) output is wired into a PLC input that participates in the safety stop logic. The G-Series alarm output is open-collector and must be configured as normally-closed or normally-open according to the application. - Set Pn520 (deviation counter overflow) to a value that is well above the normal following error at maximum acceleration. A value of
8192pulses is a typical starting point for a 200 W axis. - After any drive parameter change, cycle the drive control power (
SERVO OFFthenSERVO ON) for the new value to take effect. - Do not hot-plug the CN2 encoder cable. The R88M-G encoder is sensitive to ESD and supply rail disturbances during insertion.
- When migrating from G-Series to 1S-Series, replace the CN1 wiring scheme entirely. The 1S-Series uses EtherCAT on CN1 and does not accept pulse-train commands.
Why do I see no pulses on the CP1E high-speed counter even with the encoder wired correctly?
The R88D-GT20H encoder output is an RS-422 line-driver signal at 5 V differential. The CP1E-N40DT-D inputs require a single-ended 24 V signal with an ON threshold of about 17 V. The level mismatch prevents the CP1E from recognizing any transition. Use the drive's INP (in-position) output instead, or add a line-receiver and level-shifter.
Can the G-Series absolute encoder be read as a continuous position by a CP1E?
No. The G-Series drive holds the absolute position internally and does not stream it as a serial or pulse-train signal. The CN2 connector only provides a duplicated incremental quadrature output that is useful during motion, not at standstill. For absolute position readback, migrate to the 1S-Series on EtherCAT, where absolute data is exposed in the cyclic process image.
How do I enable the CP1E high-speed counter for inputs 0.00, 0.01, and 0.04?
In CX-Programmer, open the project tree, double-click Settings, and select the Built-in Input tab. Assign HSC0, HSC1, or HSC3 to the chosen input terminals, transfer the project to the PLC, and cycle PLC power. The HSC will not function until the cold restart completes.
What is the correct drive parameter to enable the INP (in-position) output on the R88D-GT20H?
On the G-Series, the INP output is controlled by Pn522 (positioning completion window) and Pn524 (output signal selection). Set Pn524 to 0 for "positioning complete" and set Pn522 to a pulse count that is slightly larger than the position ripple you observe at rest, for example 10 to 50 pulses for a 200 W axis.
Should I upgrade from the R88D-GT20H to a 1S-Series drive to get true position feedback?
Yes, if closed-loop position readback is required rather than in-position verification. The 1S-Series (R88D-1SN_ECT) provides native multi-turn absolute encoder data over EtherCAT and is supported by NJ/NX-series controllers. For applications that only need in-position confirmation, the G-Series with INP feedback is sufficient and avoids the cost of a controller upgrade.