◢ Installed CyberwareSYS::NS
NSNervous System/Common
Rayfield

Motorsports Steering Wheel PCB

Redesign of Duke Motorsports' steering wheel electronics. Every paddle, pot, and switch on the wheel reads into one ESP32-C3, which republishes all of it onto the car's CAN bus. Two-layer board, about half the footprint of the previous year's.

ESP32-C3
MCU
67 x 76mm, 2-layer
Footprint
CAN 2.0B
Bus
PCB DesignAltium DesignerESP32-C3CAN BusDuke Motorsports

Context

As a member of the Duke Motorsports team (Duke's Formula SAE program), I've worked on a lot of different projects here and there, but I wanted to mention this one specifically. It was one of the first PCB design projects I worked on and actually oversaw from design through print and assembly. The goal was to take everything electrical that lives on the steering wheel (paddle shifters, clutch bite-point sensors, an auxiliary switch bank, push-to-talk) and get it onto the car's CAN bus from a board that actually fits inside the new, smaller wheel body. The previous year's board covered all the same functionality but on a much larger, more awkwardly shaped PCB. That shape was a pain to design around, and it made the wheel itself miserable to assemble. I was the fourth person on the team to attempt soldering the switch connections onto it, and it still took me nearly three tries to get clean, well-separated contacts and thread the board and actuators into the wheel shell without snapping a connection at one of its odd mounting angles.

This year's board shrinks that footprint to about half (a 2-layer, 67mm x 76mm board) while keeping the same functionality. The electronics themselves are down to two ICs and a handful of connectors.


Electronics

The whole board is just 14 designators: two ICs, two zero-ohm jumpers, six connectors, and four grounded M2 mounting standoffs at the corners.

  • U1 — ESP32-C3 (mini dev board). Reads the two shift paddles, the two clutch pots, and the five auxiliary switches directly on its GPIOs, and republishes the combined state onto the car's CAN bus over its onboard TWAI controller. It's the only thing on the board doing any logic.
  • U2 — WCMCU-1051 CAN transceiver board. Sits between the ESP32's logic-level CAN controller pins (CTX/CRX) and the physical bus, and drives the differential CANH/CANL pair out to the harness. Its S pin controls transceiver standby.
  • J2 / J4 — Down Shift / Up Shift. Right-angle 3-pin JST VH headers (3.96mm pitch, rated for 22–16AWG leads at 250V) that carry 3V3, GND, and the paddle signal out to the shift paddle switches, which mount directly behind the wheel rather than on the board itself.
  • J1 / J3 — Clutch 1 / Clutch 2. Matching 3-pin JST VH headers wired to the two clutch bite-point potentiometers (ClutchPot1/ClutchPot2), which feed straight into the ESP32's ADC inputs.
  • R1 / R3. Zero-ohm jumpers sitting inline with the clutch pot signal lines. They're leftover footprint from an earlier revision that used them as pull-downs; once we confirmed the ADC inputs didn't need pull-downs, we bridged the pads with 0-ohm jumpers instead of removing them, so a real resistor can go back in later without a respin.
  • J5 — Switch bank. One 8-pin right-angle JST XH header carrying SW1SW5, PTT+, PTT-, and GND: the five auxiliary buttons and the radio push-to-talk line.
  • J6 — CAN out. A 6-pin JST XH header breaking out GND, CAN_L, CAN_H, PTT-, PTT+, and 5V from the WCMCU-1051 to the car's harness. PTT+/PTT- actually route straight through from J5 to J6 without ever touching the ESP32. The board just carries the switch contact from the button to the car's radio gear.

CAN_H/CAN_L (labeled CAN_P/CAN_N in the schematic) is the only real differential pair on the board, so I set up an Altium matched-length rule on it with a 0.1 mil tolerance, about as tight as the rule allows. It's more precision than a couple inches of trace really needs, but matching diff pairs is a good habit regardless, and it was satisfying to watch the router confirm it.

2D layout of the finished board: paddle and clutch connectors flank the WCMCU-1051 CAN board and ESP32-C3, with grounded mounting holes at each corner2D layout of the finished board: paddle and clutch connectors flank the WCMCU-1051 CAN board and ESP32-C3, with grounded mounting holes at each corner

3D render of the assembled board, with the ESP32-C3 dev board and WCMCU-1051 CAN module in the lower right and center3D render of the assembled board, with the ESP32-C3 dev board and WCMCU-1051 CAN module in the lower right and center


Assembly

The big rectangular keepouts labeled "Down Shift," "Up Shift," "Clutch 1," and "Clutch 2" aren't components. They're mechanical clearance for the actual paddle and potentiometer bodies, which bolt onto the wheel itself rather than the board. All the board carries for each one is a small JST pigtail. That's what made assembly the hard part: the switches and pots get wired in with loose leads at whatever angle the wheel geometry forces on them, and then the whole assembly has to get threaded into the shell without stressing a joint enough to crack it. Getting clean, separated contacts that survive that install took a few tries, even with a smaller and better-laid-out board than last year's.