Generated page — edit it in dv-hardware, not here
This is a verbatim copy of projects/kart-medulla/docs/pinout-cn-connectors.md in the dv-hardware
repo, which holds the KiCad schematic that defines these assignments. Changes
made here are overwritten. To update: edit the file in dv-hardware, then run
uv run python scripts/sync_pinout.py in kart-docs and commit the result.
Pinned to dv-hardware commit f31aee8909ad (2026-09-26). The link above is a permalink to that exact revision, so it keeps meaning what it meant when this copy was made; dv-hardware may have newer commits.
Related: Kart Medulla board · whole-kart wire list
· ESP32-S3 GPIO map in dv-hardware's pinout-esp32-s3.md.
Push-in connector pinout (CN1–CN10)
Authoritative source: the schematic in this same project folder (
../kart-medulla.kicad_sch+../kart-medulla_P1.kicad_sch). This document mirrors the per-CN pin assignments for human reading. When this doc and the schematic disagree, the schematic wins; fix this file. Re-verify before each fab release.
The medulla PCB has 10 three-pin push-in (1990012) connectors arranged around the ESP32-S3 dev module. Each CN is a 3-pin Wago-style cage-clamp terminal; wires terminate independently per pin (no per-CN cable grouping is required — see history.md 2026-05-08 for context).
Connectors are placed in a "chip-pinout" layout to minimize jumper-wire length to the ESP32 module:
- CN1–CN5 sit on the right side of the PCB, bottom→top (CN1 closest to USB, CN5 closest to the top edge). They map onto ESP32 pins 1–22 (right edge, RIGHT_HEADER).
- CN6–CN10 sit on the left side, top→bottom (CN6 closest to the top edge, CN10 closest to USB). They map onto ESP32 pins 23–44 (left edge, LEFT_HEADER).
Pin numbering within each CN (verified against kart-medulla.kicad_pcb, 2026-07-10 — this
used to read "pin 1/2/3 from top to bottom", which is only true of the right-hand side):
- CN1–CN5 (right, footprint rotation −90°): pin 1 at top, pin 3 at bottom.
- CN6–CN10 (left, footprint rotation +90°): pin 1 at bottom, pin 3 at top.
Note the consequence: on the right the CNs advance bottom→top while their pins advance
top→bottom; on the left the CNs advance top→bottom while their pins advance bottom→top. So on
both sides the pin numbering runs counter to the CN numbering, and on both sides the wire
entry faces inward, toward the middle of the board. See the "flip the connectors" task in
../tasks.md.
Footprint is CONN-TH_3P-P2.50-S5.00_1990012: 2.50 mm pitch, and the pads are staggered —
pins 1 and 3 in one row, pin 2 in a row 5.00 mm across. A 180° rotation therefore moves pin 2's
pad row to the opposite side and is not a free change; the copper under each connector must be
re-routed.
Silkscreen is the authority (v1, the only board that exists)
The table below is transcribed from the v1 PCB silkscreen — v1 is the only revision built, so this is what is physically in front of you:
CN1 CN2 CN3 CN4 CN5 CN6 CN7 CN8 CN9 CN10
1 +3V3 1 HALL3 1 EXP_P1 1 SCL 1 HYD2 1 PED_BRK 1 PRES1 1 SDC 1 STEER_PWM 1 CMD_ACC
2 +12V 2 HALL2 2 EXP_P2 2 SDA 2 PRES3 2 PED_ACC 2 PRES2 2 BUZZ 2 HYD1 2 CMD_BRK
3 GND 3 +5V 3 EXP_P3 3 REV 3 EXP_P4 3 +3V3 3 HALL1 3 STEER_DIR 3 GND 3 GND
Two naming traps, both of which have already caused confusion:
BUZZon CN8.2 is an OLD name. There is no buzzer on it. The net was repurposed toCMD_COMPRESSOR_PWM— GPIO 3 driving the EBS compressor MOSFET gate. WhereverBUZZERappears in this repo it should be read as (old name). Note this collides with the rules-mandated ASSI buzzer, which still needs a home — seeprojects/kart-medulla/tasks.md.EXP_P2is CN3.2, and always has been. A stale export ofprojects/kart-medulla/output/netlist.net(dated 7 May, re-exported 2026-08-10 and now current with the schematic) used to listCN8.2 → /EXP_P2and show Q3's and Q4's gates on no net at all — both artifacts of the schematic having moved on without a re-export. Re-exporting fixed both; the netlist now agrees with the silkscreen and this table. If a future edit makes them disagree again, trust the silkscreen and this table until the netlist is re-exported.- Designator mismatch: schematic vs the fabricated v1 board. An earlier draft of the schematic
(before the netlist above was current) put the pressure channels on
CN2.1/CN2.2/CN2.3. On the v1 silkscreen and PCB — the only board that physically exists — those pins areCN7.1/CN7.2/CN5.2, and PCBCN2is insteadHALL3/HALL2/+5V_REG(see the assignment table below). Anyone wiring the kart should read from the silkscreen/PCB, never from a schematic printout, in case a future schematic edit drifts from the fabricated board again before a new revision is built.
Assignment table
Each row is one independent terminal. CN5.2 means connector CN5, pin 2.
The three pins in a connector do not imply a shared device or cable.
“Board label” is the text printed on the built board; the function describes its current use.
| Terminal | Board label | Signal and function |
|---|---|---|
| CN1.1 | +3V3 |
+3V3 — 3.3 V supply output from the ESP32 module. |
| CN1.2 | +12V |
+12V — 12 V supply input from the kart battery. |
| CN1.3 | GND |
GND — Ground return. |
| CN2.1 | HALL3 |
MOTOR_HALL_3 — Motor Hall sensor 3 input, 5 V. |
| CN2.2 | HALL2 |
MOTOR_HALL_2 — Motor Hall sensor 2 input, 5 V. |
| CN2.3 | +5V |
+5V_REG — 5 V rail for the motor Hall sensors. |
| CN3.1 | EXP_P1 |
EXP_P1 — PCF8574 expander pin P1. |
| CN3.2 | EXP_P2 |
EXP_P2 — PCF8574 expander pin P2. |
| CN3.3 | EXP_P3 |
EXP_P3 — PCF8574 expander pin P3. |
| CN4.1 | SCL |
SCL — I²C (Inter-Integrated Circuit) clock, 3.3 V. |
| CN4.2 | SDA |
SDA — I²C data, 3.3 V. |
| CN4.3 | REV |
REVERSE_WIRE — Reverse command from PCF8574 P0; open-drain output shared with the manual reverse button. |
| CN5.1 | HYD2 |
HYDRAULIC_2 — Hydraulic pressure sensor 2 input, 0–5 V. |
| CN5.2 | PRES3 |
CMD_STEER_PWM_IN — MT6701 steering-angle input, pulse-width modulation (PWM). Repurposed pressure input; no pressure sensor here. |
| CN5.3 | EXP_P4 |
EXP_P4 — Spare PCF8574 expander pin P4. |
| CN6.1 | PED_BRK |
PEDAL_BRAKE — Brake pedal position input, 0–5 V. |
| CN6.2 | PED_ACC |
PEDAL_ACC — Accelerator pedal position input, 0–5 V. |
| CN6.3 | +3V3 |
+3V3 — 3.3 V supply output from the ESP32 module. |
| CN7.1 | PRES1 |
PRESSURE_1 — Pneumatic pressure sensor 1 input, 0–10 V through a divider. |
| CN7.2 | PRES2 |
PRESSURE_2 — Pneumatic pressure sensor 2 input, 0–10 V through a divider. |
| CN7.3 | HALL1 |
MOTOR_HALL_1 — Motor Hall sensor 1 input, 5 V. |
| CN8.1 | SDC |
SDC_IN_LOW_SIDE — Shutdown circuit (SDC) return, connected to Q3 drain. See voltage reference below. |
| CN8.2 | BUZZ |
CMD_COMPRESSOR_PWM — 3.3 V command to the external compressor transistor gate; not a buzzer or compressor power supply. |
| CN8.3 | STEER_DIR |
CMD_STEER_DIR — Cytron steering H-bridge direction output, 3.3 V. |
| CN9.1 | STEER_PWM |
CMD_STEER_PWM — Cytron steering H-bridge PWM output, 3.3 V. |
| CN9.2 | HYD1 |
HYDRAULIC_1 — Hydraulic pressure sensor 1 input, 0–5 V. |
| CN9.3 | GND |
GND — Ground return. |
| CN10.1 | CMD_ACC |
CMD_ACC — Throttle command to the motor controller, nominal 0–5 V. |
| CN10.2 | CMD_BRK |
CMD_PRES — Pressure setpoint for the Festo VPPM regulator, nominal 0–10 V. See output circuit notes below. |
| CN10.3 | GND |
GND — Ground return and reference for the VPPM setpoint; common with the 24 V supply’s 0 V. |
Bus and sensor connections
CN4.1 and CN4.2 expose the bus shared with the on-board PCF8574 (U25). The AS5600 connection used these bus lines; the MT6701 steering-angle PWM input is CN5.2. CN4.3 is an independent reverse command.
CN5.2 is silkscreened PRES3, but its current use is steering-angle capture on
ESP32 GPIO 1. See “As-built pin use — board 84d6dd0” in pinout-esp32-s3.md.
CN8.2 is silkscreened BUZZ, but GPIO 3 drives the gate resistor of the external
compressor MOSFET (metal-oxide-semiconductor field-effect transistor).
Output circuit notes (CN10)
Pin 1 = throttle command, to the motor controller: MCP4922 VOUTA (0–3.3 V) goes through the LM358 U1B non-inverting stage (gain 1.51, set by R37 5.1K / R38 10K, giving 4.99 V full scale) straight to CN10.1. Nothing is muxed on this path — the MAX4660 (U14) that used to sit here has been deleted from the schematic; the panel DPDT switch on the kart, downstream of this board, is what selects whether the motor controller listens to this command or to the driver's pedal.
Pin 2 = pressure command to the Festo VPPM proportional regulator, not to the motor controller — braking on this kart is pneumatic. It is VOUTB amplified ×3 by the LM358 (U1A) (R19 = 2K, R20 = 1K), so 9.9 V leaves the board, not 10 V exactly, since the DAC's full scale is 3.3 V rather than 5 V — the MCP4922 U13 was moved from +5V to +3V3 on 2026-08-01 (commit 16a35fb) to fix an SPI logic-threshold problem. The net was called CMD_BRAKE until 2026-07-31; it is CMD_PRES__0_10V now, because the signal is a pressure setpoint for a proportional regulator rather than a brake-force command. The silkscreen on the built board still reads CMD_BRK.
Pin 3 = GND, and it is also the return the VPPM's setpoint is measured against: the valve runs from a separate 24 V supply, so that supply's 0 V must be common with the medulla's GND or the commanded pressure shifts by whatever the offset is.
The pneumatic side — three devices, three supplies, only one of them on a medulla pin
Written 2026-07-31 because "the valve" was being used to mean different things. Sources:
~/dv/kart/pneumatics/README.md and ~/dv/kart/pneumatics/history.md (2026-05-30).
| Device | Festo part | Its own supply | What the medulla does |
|---|---|---|---|
| VPPM-8L proportional pressure regulator | 571293 | 24 V DC (21.6–26.4 V, 300 mA, 7 W) from a UENPO 9–36 V → 24 V buck-boost | Drives its 0–10 V setpoint out of CN10.2 (CMD_PRES__0_10V). GND on CN10.3 is the return that setpoint is measured against. The medulla does not supply its 24 V. |
| EBS emergency electrovalve (and the ASB valve) | 8035174 / 8035167, VUVS-LT25 | 12 V coils, switched by the shutdown relay | Nothing. No medulla pin touches it. |
| SDE5 pressure sensors | 567465 | 15–30 V, fed from the same 24 V rail | Reads their 0–10 V outputs on PRESSURE_1/PRESSURE_2 (CN7.1, CN7.2) through dividers |
The setpoint and the supply are different things on the VPPM: 0–10 V is the command, 24 V is what powers the valve. When a note here says a 24 V fault could reach a medulla pin, it means the VPPM's supply appearing on CN10.2 through a harness fault — not the EBS valve, which is 12 V and not wired to this board at all.
The VPPM setpoint is a signal input and the LM358 drives it directly; its input impedance was treated as an open question until 2026-07-31 and is not one.
Voltage levels — quick reference
| Suffix in signal name | Meaning |
|---|---|
__3V3 |
3.3 V logic level (ESP32 native) |
__5V |
5 V logic level (motor hall, level-shifted by U5 to 3V3 before reaching the ESP32) |
__0_5V |
analog 0–5 V (sensors, DAC outputs) |
__0_10V |
analog 0–10 V (pressure sensors) |
no suffix on power names (+12V, +3V3, +5V_REG) |
rail of that nominal voltage |
SDC_IN_LOW_SIDE is the drain of Q3 (IRLZ44N): nominally 0 V when Q3 conducts (no emergency), floats up to whatever the upstream SDC node sits at (≤ 12 V) when Q3 is off (emergency). Treat it as a 12-V-tolerant line.
Power architecture summary (where each rail comes from)
+12V— externally, from the kart battery, via CN1 pin 2.+5V_REG— on-board L7805CDT linear regulator (U19), or the external XW-1224 5 V rail tied in via the same net, feeds the+5V_REGglobal net.+3V3— generated by the ESP32-S3 module's on-board LDO from its 5 V input. Available on LEFT_HEADER pins 23/24 of the dev module.+5V_USB— independent 5 V rail from the medulla USB-C connector; powers only the ESP32 dev module (split-rail design, seepinout-esp32-s3.md).
The single power:+12V symbol that asserts the +12V rail name is placed at CN1 pin 2 (the entry point). Same convention applies to +3V3 and +5V_REG symbols on whichever CN exports them — the symbol just declares the rail and can sit anywhere on the net.
Cross-reference
- ESP32 module pinout →
pinout-esp32-s3.md(which GPIO drives which signal in the table above). - PCB physical layout / silkscreen → the
kart-medulla.kicad_pcbfile in this folder. The silkscreen legend that lists the 21 numbered external signals is being updated to match this assignment. - Decision history →
../../../history.mdentry2026-05-08 — kart-medulla CN1–CN10 pin assignments locked to ESP32 geometry.