A data acquisition and telemetry board for Citrus Racing, started from a blank sheet and carried through architecture, schematic capture, part selection, and layout. The ESP32-S3 runs the real-time acquisition loop and doubles as the wireless telemetry link. Around it sit the analog front end, a multi-rail power tree, and a GNSS receive chain. A microSD slot logs each run to the board itself rather than only over the radio, and a coin cell keeps time across power cycles. It all fits on one small board, which is about to go out to the fab.

The ESP32-S3 is both the real-time core and the wireless telemetry link. It masters a shared SPI bus with an ASM330LHHX IMU and an ADS7038-Q1 ADC on it, and the ADC digitizes the suspension pots along with the rest of the analog sensor inputs. GNSS comes in over UART, and a CAN transceiver puts the MoTeC M130 ECU stream onto the same core. I grouped the buses and assigned pins around the real-time budget and signal integrity, rather than letting the easiest routing decide.
An SMA bulkhead feeds a u-blox NEO-M9N. A bias tee sends active antenna power up the same coax, and the receiver's hardware PPS output goes to the ESP32-S3 so samples can be time-stamped. The RF path is 50 Ω grounded coplanar waveguide, and the USB pair is 90 Ω differential. I sized both against JLCPCB's 7628 impedance-matched stackup.
An LMR36015 synchronous buck at 400 kHz supplies the 3.3 V rail and everything on the board runs from it, with one exception: the GNSS receiver sits behind a TPS7A2030 low-noise LDO, so switching noise stays off the receive chain. A P-channel MOSFET handles reverse polarity and a TVS clamps the input, because the board has to live with vibration and whatever the car's electrical system does.