# The system

> One Windows PC, a PCIe link card, and a serial link to each board. The servo loop runs at 20 kHz in DM's kernel driver. Your .NET program runs beside it and calls DMSerialMotion.

<!-- directmotion.com, written for AI agents. Canonical: https://www.directmotion.com/system.md . Index: https://www.directmotion.com/llms.txt . Updated 2026-11-08. Publisher: Direct Motion, Inc. -->

A Direct Motion control is a Windows PC and a set of DM boards. The PC runs your program, plans the
motion and closes every servo loop. The boards switch the motor power, read the encoders and handle
the inputs and outputs. There is no separate motion controller and no PLC.

```text
Windows PC
│  your .NET program  ──calls──▶  DMSerialMotion (.NET library, planner, IO, trace)
│  DM kernel driver: servo loop every 50 µs (20 kHz) on a reserved CPU core
│
└─ PCIe link card (in the PC, or remote over an OCuLink cable) · up to 16 links
      ├─ link ─▶ power board      AC in · DC bus · precharge · brake resistor · e-stop
      ├─ link ─▶ amplifier        one per motor · reads the motor's encoder
      ├─ link ─▶ amplifier
      ├─ link ─▶ IO board         inputs · relay outputs · handwheel
      └─ …
```

## The parts

| Part | Job | Page |
|---|---|---|
| Link card | Sits in a PCIe slot, or at the far end of an OCuLink cable. Gives up to 16 serial links, one per board. | [power and IO](https://www.directmotion.com/hardware/power-and-io.md#link) |
| Power board | Takes the AC line, charges the shared DC bus through a precharge relay, closes the main relay, switches the brake resistor, drops everything on e-stop. One per machine. | [power and IO](https://www.directmotion.com/hardware/power-and-io.md) |
| Amplifiers | One per motor. 30 A and 75 A for axes, 150 A and 300 A for spindles. Each reads its motor's encoder and returns position on the same link. | [amplifiers](https://www.directmotion.com/hardware/amplifiers.md) |
| IO boards | 16-input boards, a 16-relay output board, and a multi-IO board with a handwheel input. | [power and IO](https://www.directmotion.com/hardware/power-and-io.md#io) |
| Motors | AC servo and induction motors from other makers, set up by one-touch setup. | [motors](https://www.directmotion.com/hardware/motors.md) |
| DMSerialMotion | The .NET library your program calls, from C# or any other .NET language. | [software](https://www.directmotion.com/software/dmserialmotion.md) |

## What runs where

- **On each board**, an FPGA does the fast work: PWM, current sampling on all three phases, encoder
  reading, fault lines. The PC exchanges one packet with each board every cycle.
- **In the kernel driver**, the servo loop runs every 50 µs on a CPU core set aside for it. It is
  Microsoft-signed and ships with the library, as a matched pair.
- **In your program**, you call the library to home, jog, run programs, read IO and record traces. Your
  code is ordinary .NET code in the language you choose; the planner fills a buffer ahead of the driver,
  so your code never has to hit a deadline.

## Built in

- **Field-oriented control** for servo and induction motors, with per-phase dead-time compensation and,
  for induction spindles, field weakening above base speed.
- **One-touch setup.** Pick the motor from a catalog of 1,180, or type the nameplate. Setup finds the
  poles and commutation, measures resistance and inductance where the catalog lacks them, sets current
  limits and tunes the servo loop.
- **Tracing.** A 20 kHz record per axis of commanded and actual position, following error, phase
  currents, bus voltage, temperatures and fault bits, kept on a fault or on demand.
- **Protection.** Module fault lines decoded into a cause, an over-temperature stop at 85 °C, timed
  bus precharge, encoder error counting, AC range and ground checks on the power board.
- **Fleet support.** A machine can report its software version, settings and traces to DM, and DM can
  schedule its updates.

## Facts for sizing and design

| Fact | Value | Note |
|---|---|---|
| Servo cycle | 50 µs (20 kHz) | fixed in practice |
| PWM frequency | 20 kHz | default; a setting |
| Links per card | 16 | one board per link; an older 8-link card exists |
| Boards per machine | up to 16: 1 power board + N amplifiers + IO boards | more than 16: ask DM |
| Amplifier per motor | 1 | some compact "cube" boards carry several power modules |
| DC bus | one, shared by all amplifiers, from the power board | capacitance on the power board plus each amplifier's own |
| Encoder types read by the amplifiers | incremental A/B/index, sin/cos, BiSS, BiSS-C | which revision reads which: `[unverified]` |
| Encoder DM uses most | Hengstler ACURO BiSS | |
| Cannot be read | proprietary serial encoders (for example Yaskawa Sigma) | |
| Motor types | 3-phase PM AC servo; induction (with or without encoder); DC open loop | no steppers |
| Over-temperature stop | 85 °C on the power module | |
| PC | Windows; the application runs as administrator; .NET 10 | |
| Safety rating | none published | use rated parts for rated functions |
| Current ratings (A rms), DC bus limit, AC input range | **not published** | do not estimate; ask DM |

Machine-readable: [hardware.json](https://www.directmotion.com/data/hardware.json), [fit.json](https://www.directmotion.com/data/fit.json).
