Actuator modules
AXA-003 — Motor encoder interface PMOD module
Catalog #3 in the AruviX actuator line, level L2. Six conditioned digital inputs — two quadrature pairs for N20/JGA25-class gearmotor encoders plus two spare hall/limit inputs — through a 74HC14 hex Schmitt inverter.
Circuit review & bench-test guide →
Components#
Every placed component, with the reason it is on the board. Extracted directly from the schematic, so this cannot drift from the design.
| Ref | Value | What it does on this board | Part number | Footprint |
|---|---|---|---|---|
C1 |
10nF 50V X7R | E1A RC filter capacitor (with 1k: fc ~16 kHz) | GRM188R71H103KA01DMurata |
C_0603_1608Metric |
C2 |
10nF 50V X7R | E1B RC filter capacitor (with 1k: fc ~16 kHz) | GRM188R71H103KA01DMurata |
C_0603_1608Metric |
C3 |
10nF 50V X7R | E2A RC filter capacitor (with 1k: fc ~16 kHz) | GRM188R71H103KA01DMurata |
C_0603_1608Metric |
C4 |
10nF 50V X7R | E2B RC filter capacitor (with 1k: fc ~16 kHz) | GRM188R71H103KA01DMurata |
C_0603_1608Metric |
C5 |
10nF 50V X7R | H1 RC filter capacitor (with 1k: fc ~16 kHz) | GRM188R71H103KA01DMurata |
C_0603_1608Metric |
C6 |
10nF 50V X7R | H2 RC filter capacitor (with 1k: fc ~16 kHz) | GRM188R71H103KA01DMurata |
C_0603_1608Metric |
C7 |
100nF 16V X7R | 74HC14 supply decoupling | GRM188R71C104KA01DMurata |
C_0603_1608Metric |
J1 |
PMOD PLUG 2x6 | PMOD peripheral plug (Digilent spec 1.2) | not selected generic |
PinHeader_2x06_P2.54mm_Horizontal |
J2 |
ENCODER 1 (3V3/GND/A/B) | Motor 1 encoder socket: 1 3V3, 2 GND, 3 phase A, 4 phase B | not selected generic |
PinSocket_1x04_P2.54mm_Vertical |
J3 |
ENCODER 2 (3V3/GND/A/B) | Motor 2 encoder socket: 1 3V3, 2 GND, 3 phase A, 4 phase B | not selected generic |
PinSocket_1x04_P2.54mm_Vertical |
J4 |
SPARE IN (H1/H2/GND) | Spare conditioned inputs: 1 H1, 2 H2, 3 GND (hall, limit switch, index) | not selected generic |
PinHeader_1x03_P2.54mm_Vertical |
R1 |
10k | E1A pull-up (open-collector encoder output) | RC0603FR-0710KLYageo Datasheet ↗ |
R_0603_1608Metric |
R2 |
10k | E1B pull-up (open-collector encoder output) | RC0603FR-0710KLYageo Datasheet ↗ |
R_0603_1608Metric |
R3 |
10k | E2A pull-up (open-collector encoder output) | RC0603FR-0710KLYageo Datasheet ↗ |
R_0603_1608Metric |
R4 |
10k | E2B pull-up (open-collector encoder output) | RC0603FR-0710KLYageo Datasheet ↗ |
R_0603_1608Metric |
R5 |
10k | H1 pull-up (open-collector encoder output) | RC0603FR-0710KLYageo Datasheet ↗ |
R_0603_1608Metric |
R6 |
10k | H2 pull-up (open-collector encoder output) | RC0603FR-0710KLYageo Datasheet ↗ |
R_0603_1608Metric |
R7 |
1k | E1A RC filter series element | RC0603FR-071KLYageo Datasheet ↗ |
R_0603_1608Metric |
R8 |
1k | E1B RC filter series element | RC0603FR-071KLYageo Datasheet ↗ |
R_0603_1608Metric |
R9 |
1k | E2A RC filter series element | RC0603FR-071KLYageo Datasheet ↗ |
R_0603_1608Metric |
R10 |
1k | E2B RC filter series element | RC0603FR-071KLYageo Datasheet ↗ |
R_0603_1608Metric |
R11 |
1k | H1 RC filter series element | RC0603FR-071KLYageo Datasheet ↗ |
R_0603_1608Metric |
R12 |
1k | H2 RC filter series element | RC0603FR-071KLYageo Datasheet ↗ |
R_0603_1608Metric |
R13 |
100R | Series protection on the module-driven E1A line | RC0603FR-07100RLYageo Datasheet ↗ |
R_0603_1608Metric |
R14 |
100R | Series protection on the module-driven E1B line | RC0603FR-07100RLYageo Datasheet ↗ |
R_0603_1608Metric |
R15 |
100R | Series protection on the module-driven E2A line | RC0603FR-07100RLYageo Datasheet ↗ |
R_0603_1608Metric |
R16 |
100R | Series protection on the module-driven E2B line | RC0603FR-07100RLYageo Datasheet ↗ |
R_0603_1608Metric |
R17 |
100R | Series protection on the module-driven H1 line | RC0603FR-07100RLYageo Datasheet ↗ |
R_0603_1608Metric |
R18 |
100R | Series protection on the module-driven H2 line | RC0603FR-07100RLYageo Datasheet ↗ |
R_0603_1608Metric |
U1 |
74HC14 | Hex inverting Schmitt trigger | 74HC14D,653Nexperia Datasheet ↗ |
SOIC-14_3.9x8.7mm_P1.27mm |
U1 |
74HC14 | Hex inverting Schmitt trigger | 74HC14D,653Nexperia Datasheet ↗ |
SOIC-14_3.9x8.7mm_P1.27mm |
U1 |
74HC14 | Hex inverting Schmitt trigger | 74HC14D,653Nexperia Datasheet ↗ |
SOIC-14_3.9x8.7mm_P1.27mm |
U1 |
74HC14 | Hex inverting Schmitt trigger | 74HC14D,653Nexperia Datasheet ↗ |
SOIC-14_3.9x8.7mm_P1.27mm |
U1 |
74HC14 | Hex inverting Schmitt trigger | 74HC14D,653Nexperia Datasheet ↗ |
SOIC-14_3.9x8.7mm_P1.27mm |
U1 |
74HC14 | Hex inverting Schmitt trigger | 74HC14D,653Nexperia Datasheet ↗ |
SOIC-14_3.9x8.7mm_P1.27mm |
U1 |
74HC14 | Hex inverting Schmitt trigger | 74HC14D,653Nexperia Datasheet ↗ |
SOIC-14_3.9x8.7mm_P1.27mm |
Signals#
Net labels used in the schematic, which are also the names the HDL top level should use.
3V3 E1A E1A_F E1A_INV E1A_RAW E1B E1B_F E1B_INV E1B_RAW E2A E2A_F E2A_INV E2A_RAW E2B E2B_F E2B_INV E2B_RAW GND H1 H1_F H1_INV H1_RAW H2 H2_F H2_INV H2_RAW
Production status#
| Schematic ERC | 0 violations |
|---|---|
| PCB layout | complete |
| DRC | 0 violations |
| Fab package | exported (24 gerbers + drill + CPL + BOM) |
| Fabricated | no — design stage only |
Source: boards/actuator-modules/axa-003-encoder
Catalog #3 in the AruviX actuator line (../README.md), level L2. Six conditioned digital inputs — two quadrature pairs for N20/JGA25-class gearmotor encoders plus two spare hall/limit inputs — through a 74HC14 hex Schmitt inverter.
Status: schematic generated, ERC clean (0/0), netlist reviewed. PCB layout not started. Not released.
What it teaches#
Hardware quadrature decode at MHz edge rates — the signature FPGA-beats-MCU demo. A software loop polls; fabric counts every edge of both phases with a glitch filter, at any speed the motor can produce. Pairs with AXA-001 (dual DC driver) for the closed-loop PID lab.
Design#
- 74HC14D,653 (Nexperia), SOIC-14. One gate per channel, powered from 3V3, 100 nF decoupling.
- Per channel: 10 kΩ pull-up to 3V3 (encoder outputs are often open-collector), 1 kΩ + 10 nF RC filter (fc ≈ 16 kHz, strips motor-wire noise), Schmitt input squares the slow RC edge, inverter output → 100 Ω series resistor → PMOD (all six lines are module-driven).
- Every channel is INVERTED by the Schmitt stage. Quadrature decoding doesn't care (A/B inversion preserves the code sequence), but level-sensitive uses of H1/H2 (hall, limit switches) must invert in fabric.
- J2/J3: 1x04 pin sockets, pin order 3V3 / GND / A / B — verify your encoder breakout's wire order before plugging (breakouts vary; swapping 3V3/GND kills the hall sensors).
- J4: 1x03 pin header for the spare inputs (H1 / H2 / GND).
| PMOD pin | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Net | E1A | E1B | E2A | E2B | GND | 3V3 | H1 | H2 | NC | NC | GND | 3V3 |
Regenerate#
python3 generate_design.py
Remaining for release#
- [ ] PCB layout (20 × 40 mm actuator outline), DRC, fab outputs
- [ ]
hdl/:quad_decoder(4×-count with glitch filter), testbench, demo - [ ] BOM export and availability check, design-review checklist