PCB Layout Design for PCA9685 Servo Controller


  • Added 2x PCA9685PW as U1, U2 (Pins: LED6, SDA, A3, LED1, LED2, VDD, LED12, LED15, LED9, A0, A2, LED7, SCL, LED0, A1 ... and 13 more)
  • Added 1x TXS0102DQER as U3 (Pins: OE, A2, B1, B2, A1, GND, VCCA, VCCB)
  • Added 1x PPPC202LFBN-RC as J1 (Pins: Pin_11, Pin_29, Pin_35, Pin_20, Pin_23, Pin_33, Pin_39, Pin_38, Pin_3, Pin_18, Pin_13, Pin_34, Pin_30, Pin_5, Pin_16 ... and 25 more)
  • Added 1x Pin Socket 01x08 2.54mm Vertical MPU6050 as J2 (Pins: VCC, INT, XDA, XCL, SDA, GND, ADO, SCL)
  • Added 17x Pin Header 01x03 2.54mm Vertical for Servo Motor as J3, Servo1, Servo2, Servo3, Servo4, Servo5, Servo6, Servo7, Servo8, Servo9, Servo10, Servo11, Servo12, Servo13, Servo14, Servo15, Servo16 (Pins: Data, 5v, Gnd)
  • Added 2x KF128-5.08-2P-AA as J20, J21 (Pins: 2, 1)
  • Added 20x Generic Resistor as R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20 (Pins: P2, P1)
  • Added 5x Generic Capacitor as C1, C2, C3, C4, C5 (Pins: P1, P2)
  • ⚠️ Requested designator J3 was unavailable, assigned Servo1 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo2 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo3 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo4 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo5 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo6 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo7 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo8 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo9 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo10 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo11 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo12 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo13 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo14 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo15 instead
  • ⚠️ Requested designator J3 was unavailable, assigned Servo16 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R2 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R3 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R4 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R5 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R6 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R7 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R8 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R9 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R10 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R11 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R12 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R13 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R14 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R15 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R16 instead
  • ⚠️ Requested designator R1 was unavailable, assigned R17 instead
  • ⚠️ Requested designator R19 was unavailable, assigned R20 instead
  • ⚠️ Requested designator C1 was unavailable, assigned C2 instead
  • ⚠️ Requested designator C1 was unavailable, assigned C3 instead
⚠️ Newly added components are not automatically placed on the PCB layout. If the project has a PCB layout, use @rewriteLayoutComponentPlacement to place them on the board.
Work done
  • Created and populated the project specification: Project Specification.
  • Renamed the project to Pi Nucleo PCA9685 Servo Controller and set the project description.
  • Added the core schematic parts: 2× PCA9685PW, 1× TXS0102DQER, Raspberry Pi 40-pin header, STM32 Nucleo header, 17 servo headers, 5.1 V and 6.0 V power terminals, 17× 220 Ω PWM series resistors, OE 10 kΩ pull-up, VSENSE divider resistors, and rail/IC capacitors.
  • Verified datasheets: TXS0102 includes internal 10 kΩ pull-ups on A/B I/O pins, so the optional external 4.7 kΩ I2C pull-ups were intentionally not added; PCA9685 OE is active-low, so the 10 kΩ pull-up implements the requested default-disabled servo safety behavior.
Success criteria review
  • ✅ Component set selected and added to schematic.
  • ✅ Datasheet decisions captured for TXS0102 pull-ups and PCA9685 OE/address behavior.
  • ❌ Schematic wiring is not complete yet.
  • ❌ 4-layer stackup, 2 oz copper layout rules, placement, routing, and ERC/DRC validation are not complete.
Next steps
  • Wire all nets: Pi 3.3 V I2C → TXS0102 A-side, TXS0102 B-side → PCA9685 + Nucleo I2C, OE safety net, PCA9685 addresses, 17 PWM resistor chains, servo +6 V/GND rails, decoupling, and VSENSE divider.
  • Then proceed to PCB layout: configure 4-layer/2 oz stackup, size the board, place components, route power/signal nets, and review ERC/DRC.

Schematic of Pi Nucleo PCA9685 Servo Controller

Pi Nucleo PCA9685 Servo Controller

Pi Nucleo PCA9685 Servo Controller thumbnail