Embedded Hardware & Firmware

Motor-controller PCB and wireless 8 kHz mouse/dongle firmware

Mouse PCB hardware

Motor Controller PCB

Four-layer board designed in Altium: an STM32G431 commutating six N-channel MOSFETs through a DRV8350F gate driver, with AS5247U magnetic rotor feedback, INA240 phase current sensing, and a TCAN337 transceiver for the CAN bus. Schematic capture, layout with tight power-plane routing, DFM review, and hand bring-up. Debugging involved oscilloscope validation of PWM timing, current-sense signal integrity, and thermal behavior under load. First spin required minor rework on a pull-up configuration; second spin ran clean.

My contribution

End-to-end PCB ownership: component selection, schematic, layout, gerber review, assembly, and bring-up. Wrote the embedded firmware to drive the motor outputs and validate the hardware.

Motor Controller · drag to rotate, scroll to zoom
Motor Controller schematic

Mouse & Dongle PCBs

Both boards run an nRF52820 against a meandering inverted-F antenna etched into the copper, so the radio needs no module. The mouse adds a PMW3360 optical sensor, USB-C charging through an MCP73831, and a TPS2110 power mux that hands the rails between the battery and the bus without dropping the link. The dongle is the same radio stripped to its USB-C interface and regulator. Both program over Tag-Connect footprints rather than paying board area for a header.

My contribution

Designed both boards start to finish: RF layout and antenna tuning, power path, sensor and switch placement around the mouse shell, and bring-up of the assembled units.

Mouse · drag to rotate, scroll to zoom
Dongle · drag to rotate, scroll to zoom
Mouse schematic
Dongle schematic

Mouse Firmware

Wireless mouse and dongle targeting 8 kHz HID polling over RF. The main challenge was keeping the interrupt-driven USB stack and the RF link synchronized without jitter that would show up as cursor irregularity. Timing was validated with logic analyzer traces confirming consistent report intervals under load.

My contribution

Wrote the low-level HID stack, RF communication layer, and polling loop. Tuned interrupt priorities to maintain 8 kHz report rate with no dropped packets under continuous movement.