In the field of industrial automation, the stability and flexibility of motion control systems directly affect equipment accuracy and production efficiency. ADLINK's PCI-8134 is a 4-axis servo/stepper motion control card based on the PCI bus. It adopts a dual ASIC (PCL5023) architecture and supports up to 2.4 Mpps pulse output, trapezoidal/S-shaped curve velocity curve, 2-axis linear/arc interpolation, incremental encoder feedback, and rich I/O interfaces. It is suitable for applications such as dispensing, cutting, XY platform, and robotic arm. This article provides a complete deployment and development reference for motion control system engineers from hardware installation, signal wiring, software configuration, function library calling to debugging and troubleshooting.
Overview of Card Board and Hardware Installation
PCI-8134 is a semi long PCI card with dimensions of 164 × 98.4 mm, compliant with PCI 2.1 specifications, and supports plug and play. Two PCL5023 motion control ASICs are integrated on the board, each controlling two axes, for a total of four axes. The main technical indicators include:
Pulse output frequency: 0~2.4 Mpps
Position counter: 28 bits (0~268435455 or ± 134217728)
Acceleration/deceleration setting: 1~65535 (16 bits)
Internal reference clock: 9.8304 MHz
External power supply:+24V DC ± 5%, 500mA (for I/O isolation)
Connectors: 100 pin SCSI-II (CN2), as well as CN1 (power supply), CN3 (handwheel), CN4 (synchronous start stop)
Installation steps:
Turn off the PC power and remove the chassis cover.
Select an available 32-bit PCI slot (white or ivory), insert and secure the card.
Connect the CN1 external+24V power supply (with accompanying power cord) and make sure to confirm the polarity.
If you need to connect the handwheel or synchronization signal, connect CN3/CN4 as needed.
After power on, the system BIOS automatically assigns I/O addresses and IRQs without the need for manual jumpers (only J1-J8 are used for pulse output mode selection, S1 is used for limit switch type).
Attention: If the system fails to start or runs abnormally, it may be caused by interrupt conflicts. It is necessary to check the PCI IRQ allocation in the BIOS or disable onboard serial and parallel ports to release resources.
Signal connection and interface configuration
CN2 is the main connector, which includes pulse output for all axes, encoder feedback, limit, origin, deceleration, servo interface, and universal I/O. The following is a detailed explanation of each key signal.
2.1 Pulse output (OUT ±, DIR ±)
Each axis has a pair of differential outputs (OUT+/- and DIR+/-), which can be configured in two modes:
Single pulse mode (OUT/DIR): OUT outputs pulses, DIR level indicates direction.
Dual pulse mode (CW/CCW): OUT is the forward pulse and DIR is the reverse pulse.
Select differential drive (default) or open set output through jumper J1~J8. In open mode, OUT - and DIR - output signals, with a current not exceeding 20mA, need to be externally pulled up to EX+5V (maximum 500mA).
Wiring example:
Differential drive: PULS+/PULS -, SIGN+/SIGN - directly connected to servo drives (such as Panasonic, Yaskawa).
Open set output: A current limiting resistor needs to be connected in series with the signal line (if an external power supply is used).
2.2 Encoder feedback (EA ±, EB ±, EZ ±)
Three pairs of differential inputs, supporting AB phase (1X/2X/4X) or CW/CCW modes. The input circuit requires a differential voltage of ≥ 3.5V and a driving current of ≥ 6mA. If the encoder has an open set output, an external pull-up resistor and power supply (refer to the recommended values in the manual) are required. The EZ signal (Z-phase) is used for precise indexing when returning to the origin.
2.3 Limit, deceleration and origin
PEL/MEL: Positive/negative direction limit switch, immediately stops pulse output upon triggering (and clears servo deviation counter).
PSD/MSD: Positive/negative deceleration switch, triggered to reduce the speed to the preset starting speed, used for early deceleration when approaching the limit.
ORG: Origin switch, used for returning to origin mode. It can be configured to stop only when ORG is triggered, or wait for EZ signal after ORG is triggered before stopping.
The above switches all use a+24V source with an input current of 6mA (internal optocoupler isolation). When wiring, it is necessary to ensure that the switch contact capacity is sufficient. S1 dip switch is used to select the type of limit switch: default OFF is normally open (contact A), ON is normally closed (contact B).
2.4 Servo interfaces (INP, ALM, ERC, SVON, RDY)
INP (In Place Signal): The servo drive deviation counter outputs zero and can be used to delay motion completion judgment.
ALM (Alarm Signal): Triggered in case of servo failure, configurable to immediately stop or decelerate to stop.
ERC (Deviation Counter Reset): Automatically outputs a 10ms pulse to clear servo position error when returning to the origin, triggering limit, alarm, or software emergency stop.
SVON (Universal Output): Can control servo enable.
RDY (Universal Input): Read the servo ready status.
2.5 Handwheels (PA, PB) and synchronous start stop (STA, STP)
CN3 provides handwheel input for each axis (PA/PB), supports AB phase or CW/CCW, and can be independent or shared (such as X/Y sharing one handwheel). The STA and STP signals of CN4 are used for simultaneous start/stop of multiple axes or cards, and the corresponding pins of each card's CN4 need to be connected in parallel (as shown in Figure 3.12).
Motion control mode and operating principle
PCI-8134 supports multiple motion modes, which can be achieved by calling function libraries or Motion Creator.
3.1 Pulse output mode
Select OUT/DIR or CW/CCW through set_pls_outmode(); Set_pls_iptmode() and set_cnt_strc() configure the encoder input mode and counting source (command pulse or external feedback).
3.2 Constant speed motion
Vwmov() accelerates the shaft in a trapezoidal shape to a constant speed and continues to run until vv_stop() or vvchange() changes speed. Sv_mave() uses S-curve acceleration.
3.3 Trapezoidal velocity positioning
Perform symmetrical acceleration/deceleration trapezoidal motion using either a_move() (absolute) or r_move() (relative). If asymmetric acceleration and deceleration are required, use ta_move() or t_move() (specify Tacc and Tdec). The completion of the motion can be queried or interrupted with motion_deone() notification.
3.4 S-curve positioning
The s_move() (absolute) and rs_move() (relative) provide smooth S-curve acceleration and deceleration, reducing mechanical impact. Linear acceleration time and S-curve acceleration time (Tlac, Tsacc) can be specified, and the asymmetric version tas_mave().
3.5 Linear/Arc Interpolation
Move-xy()/move-zu(): Two axis linear interpolation requires first mapping the axis pairs using map_oxes(), and then setting the vector velocity (set_cove_steed) and acceleration (set_cove_cecel).
Arc_xy()/arc_zu(): Arc interpolation, specifying the center coordinates and angle (positive values are clockwise, negative values are counterclockwise). Set the interpolation accuracy (angle step size) to 5 ° by set_arc-division (). Arc_optimize() can enable automatic acceleration optimization to ensure smooth arcs.
3.6 Return to Origin
Set the origin logic (effective level, whether ORG state is latched) and return to zero mode:
Mode 0: Only ORG signal stops.
Mode 1: Wait for EZ signal to stop (high speed) after ORG is triggered.
Mode 2: After triggering ORG, slow down to the starting speed and wait for EZ to stop.
Then call home_move() and specify the speed parameter. The direction is determined by the speed symbol.
3.7 Handwheel Control
Set_manu_iptmode() selects the handwheel input mode and independent/shared mode, manu_mave() starts following, maximum speed is limited by parameters, and x_stop() exits.
3.8 Multi axis synchronization and online speed change
Start_mave.all()/move-all() can simultaneously start multiple axes (connected to the CN4 synchronization line) to ensure that they start moving at the same time.
V_change() can change the maximum speed during motion (only in constant speed mode or before reaching the deceleration point), and is suitable for dynamic speed regulation based on external sensors.

Software tools and function libraries
Comes with Borland C/C++library for DOS and DLL for Windows 95/98/NT, as well as VB based sample programs and programming guides. Recommend using Motion Creator (Windows graphical interface) for configuration and debugging.
4.1 Use of Motion Creator
Main menu: Display installed PCI-8134 cards and their axle numbers, base addresses IRQ。
Axis configuration window: Set pulse I/O mode, mechanical signal (origin/index/deceleration), servo signal (ALM/INP), handwheel mode, interrupt factor, zero return mode, etc. Click "Save Configurations" to generate 8134.cfg, and you can call _8134_Set_Config() in the user program to quickly load the configuration.
Axis operation window: Real time display of command position, actual position, error, I/O status (LED indication), can perform constant speed, absolute/relative positioning, zeroing, handwheel testing, and select trapezoidal or S-curve speed curves, supports repetitive motion.
2D motion window: Test line/arc interpolation, continuous/incremental point motion, and display motion trajectory (scalable translation).
4.2 Key API Functions (C/C++)
Initialization: _8134_initial() retrieves the number of cards and information; _8134_Close() releases resources.
Pulse configuration: set_pls_outmode(), set_pls_iptmode(), set_cnt_strc().
Motion functions: v-move, a_move, r_move, s_move, move-xy, arc_xy, home_mave, manu_mave.
Status query: motion_rone(), get_io-status(), get_position (), get_command().
Interrupt control: set_int_factor() sets the interrupt source (such as limit, in place, alarm, zero return completion, etc.), get_int_datus() reads the interrupt type. Under Windows, it is necessary to create a thread waiting event (see section 4.7 of the manual for an example).
Programming Example (Simplified):
c#include "pci_8134.h"int main() {U16 cards; PCI_INFO info;_8134_Initial(&cards, &info);
set_pls_outmode(0, 0); //Axis 0 OUT/DIR mode
set_cnt_src(0, 0); //The counting source is command pulses
a_move(0, 10000, 100, 1000, 0.1); //Absolute movement to 10000 pulses
while(!motion_done(0));_8134_Close(0);return 0;}
Wiring examples and debugging points
The manual provides a connection diagram with Panasonic servo drive (Figure 7.3), key wiring:
OUT+→PULS+,OUT-→PULS-; DIR+→ SIGN+, DIR - → SIGN -.
EA+/EA - connected to OA+/OA -, EB+/EB - connected to OB+/OB -.
ALM, INP, and RDY are respectively connected to the corresponding servo outputs; SVON connected to SRV-ON; ERC requires a conversion circuit (open set to differential).
External+24V and GND are connected to CN2's EX+24V and EXGND.
Debugging suggestions:
First, use Motion Creator to test each axis separately to confirm that the pulse output, direction, and limit/origin signals are normal.
Check the conversion of speed and position units: for example, if the encoder has 2000 lines per revolution, it will produce 8000 pulses per revolution after 4 times the frequency. If the motor is 3600 rpm, the maximum pulse frequency will be 480000 pps=3600/60 × 8000.
If the actual position does not match the command, check the set_mave_ratio() setting (feedback resolution/command resolution).
Use get_io-status() to monitor I/O status, especially limit and alarm signals.
When multiple cards are moving simultaneously, it is necessary to connect the CN4 synchronization signal line, otherwise it cannot be guaranteed to start simultaneously.
Common faults and troubleshooting
Possible causes and solutions for the phenomenon
Motor does not rotate, pulse output mode jumper error or external power supply not connected. Check J1~J8 jumper wires; Confirm that CN1 is connected to+24V; use an oscilloscope to measure OUT+/-
Direction error: DIR signal level is opposite or motor phase sequence is reversed. Change the DIR+/- wiring; Change the position symbol in the software
Stop the limit immediately. The S1 switch type does not match the actual switch. Set the S1 corresponding position according to the normally open/normally closed setting
Return to origin failed due to improper ORG logic or mode configuration. Check the effective level of ORG signal; Attempt Mode 0 Test
Abnormal encoder reading, insufficient differential voltage or wiring error. Ensure EA+/EA - differential voltage ≥ 3.5V; check if the connection is reversed
Stop ALM or limit triggering before completing the motion, or check the I/O status when the motion distance is too short; Reduce maximum speed or acceleration
The interpolation trajectory is not round and the arc step size is too large, or the optimization is not turned on to reduce the angle of set_rc_view(); Enable arc_optization (1)
Multiple axes are not synchronized and not connected to CN4 synchronization line. Connect CN4 of all cards according to Figure 3.12
Maintenance and upgrade suggestions
Regularly clean the golden fingers and heat dissipation holes to prevent poor contact.
If you need to upgrade to a higher version of Windows, please confirm that ADLINK provides the corresponding drivers (the original card mainly supports Win95/98/NT, and the new system may require the use of third-party PCI driver frameworks. It is recommended to consult the original factory).
For applications that require higher speeds (>2.4MHz) or more axes, updating the model (such as PCI-8136 or EtherCAT sports card) may be considered, but PCI-8134 still operates reliably in mature systems.
