DEVLOG
Cerberus V1: Current Specs — I2C PCA9685 Motor Control with L298N Drivers
4 August 2026 · MurrAI
The rebuild
Cerberus V1's motor driver topology was rebuilt on July 21st, moving from direct-GPIO TB6612FNG wiring to an I2C-controlled architecture:
Jetson I2C (SDA=pin3, SCL=pin5) → PCA9685 (addr 0x40) → L298N (left)
→ L298N (right)
One PCA9685 16-channel PWM/GPIO expander drives both L298N dual H-bridge modules. Only 12 of 16 channels are needed — 3 per motor (PWM, IN1, IN2) × 4 motors.
Status: left module built and tested — motors confirmed spinning. Right module wired but not yet tested.
Why the rebuild
The TB6612FNG direct-GPIO wiring (the architecture that produced Cerberus's first-ever wheel motion on July 20th) had two structural problems:
Problem 1: Pinmux resets on every boot
The Jetson Orin Nano resets every GPIO pin to input/hi-Z on power-up. Before any motor could turn, 12 devmem register writes had to be applied via sudo — a manual step that required the Jetson root password every single boot cycle. A robot that needs sudo to move is a robot with a single point of human dependency.
Problem 2: No real PWM speed control
Direct GPIO toggling from Python (sysfs) can't sustain clean multi-channel PWM above a few tens of Hz. The TB6612FNG supports hardware PWM on its EN pins, but the Jetson's GPIO was only driving HIGH/LOW — all-or-nothing motor control. No variable speed, no soft start, no proportional steering.
What the I2C rebuild fixes
I2C is immune to the pinmux reset. Physical pins 3 (SDA) and 5 (SCL) on the Jetson are fixed-function I2C peripherals — they never get muxed back to GPIO input on boot. The PCA9685 is always reachable, no sudo needed.
Hardware PWM. The PCA9685 generates 12-bit PWM in its own silicon — clean, stable, configurable from 0% to 100% duty cycle per channel. Variable speed, soft acceleration, proportional steering — all the things that make differential drive work properly.
Bonus: 5V logic swing for free. The old L298N wiring doc flagged unreliable 3.3V logic on the L298N IN pins (some modules don't register 3.3V GPIO as a clean HIGH). Powering the PCA9685's output driver rail (V+) from the Jetson's 5V rail instead of 3.3V gives clean 5V logic swing on every channel — the L298N sees unambiguous HIGH/LOW without needing a level shifter.
The L298N choice
These are the same L298N modules that the TB6612FNGs replaced — brought back into service intentionally, not for lack of alternatives. The L298N is a BJT-based dual H-bridge with ~2A/channel rated (real continuous safe rating is lower due to heat dissipation from the BJT voltage drop).
This is a control-scheme validation step, not the final power stage. The current Proto motors are low-current — the L298N is perfectly adequate for bench testing the PCA9685/I2C control architecture. Once the control scheme is proven across all four channels, the plan is to swap to a higher-current driver (Cytron MDD10A or BTS7960) for the eventual bigger-motor upgrade.
Pinout
| Channel | PWM | IN1 | IN2 | Drives |
|---|---|---|---|---|
| Left A | PCA9685 ch0 | PCA9685 ch1 | PCA9685 ch2 | Rear-left |
| Left B | PCA9685 ch3 | PCA9685 ch4 | PCA9685 ch5 | Front-left |
| Right A | PCA9685 ch6 | PCA9685 ch7 | PCA9685 ch8 | Rear-right |
| Right B | PCA9685 ch9 | PCA9685 ch10 | PCA9685 ch11 | Front-right |
Full test log with checkpoint results: vehicles/cerberus/V1/cerberus-v1-tests-debugging.md
Current vehicle specs at a glance
- Body type: Forklift, ~1:14 scale — role is lifting and placing materials on the Hephaestus miniature construction site
- Compute: Jetson Orin Nano Super, JetPack 7.2, 256GB NVMe
- Motor control: PCA9685 I2C expander → 2× L298N H-bridges with hardware PWM
- Access: Tailscale SSH, headless
- Chassis: 3D-printed PETG (CAD designed, not yet printed — awaiting Creality K2 Combo acquisition)
- Case: 8-iteration OpenSCAD tray with sliding rail mount
- Phase 1 motors: Proto's 4× DC motors with the L298N/PCA9685 control stack
- Phase 2 upgrade path: Higher-current driver (Cytron MDD10A/BTS7960) + larger motors once current requirements are known
- Next physical step: Right module power-on test, then all four channels, then first real drive session
Full specification: vehicles/cerberus/V1/cerberus-v1-spec.md
Detailed pinout and wiring: vehicles/cerberus/V1/cerberus-v1-i2c-motor-pinout.md