Skip to the content
PCBKitNew board
4 layers20.6 × 51.1 mmPicoPD V1.2, the printed circuit board in 3D

Repo for PicoPD hardware/software and documentation

Size
20.6 × 51.1 mm
Copper layers
4
Thickness
1.61 mm
Parts
52
Nets
80
Pads
283
Tracks, vias
558, 96
Pours
16
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
7 Feb 2024
Updated
4 Dec 2024

Overview

PicoPD V1.2 is an open-source printed circuit board by centydev, from the centydev/PicoPD repository on GitHub, published under the MIT licence. It is a 4-layer board of 20.6 × 51.1 mm with 52 parts on 80 nets, routed with 558 tracks and 96 vias.

It is built around the RP2040, AP33772DKZ and DTC143EETL, with the MSK3419DF and TPD4E05U06DQAR among its other parts. Its parts include 19 capacitors, 16 resistors, 4 ICs, 4 diodes and 3 connectors. It belongs with the power boards and the RP2040 boards of this library.

Main components

5

README

README.md

PicoPD

Pico PD is a development board for USB Power Delivery development with Raspberry Pi Pico footprint. The board can help you negotiate voltage from USB PD 2.0, 3.0, and 3.1 with PPS (programable power supply) up to 5A of current at 20V max. The board feature input current/voltage/temperture reading as well as power switch to cut of the current to external devices.

Quick links

AP33772 Library

PicoPD Pinout

Setup for AP33772 objects

Basic AP33772 functions

Important note

Arduino IDE setup

VSCode PlatformIO setup

Enable Serial print for debugging

Pin out

pinout

Setup for AP33772 objects

To use AP33772 IC with the library, first you need to create a usbpd object. Then set up your I2C pins and start collecting the power profiles from your charger. Ensure your delay after Wire.begin() is more than 500ms for stable PDOs request. Enable pin 23 to allow VBUS pass-through.

text
AP33772 usbpd; // Automatically wire to Wire0

void setup()
{
  Wire.setSDA(0); // Set the correct SDA0 pin
  Wire.setSCL(1); // Set the correct SCL0 pin
  Wire.begin();
  Serial.begin(115200);
  delay(1000); 		// Delay is needed for the IC to obtain PDOs
  usbpd.begin(); 	// Start pulling the PDOs from power supply

  pinMode(25, OUTPUT); // Built in LED
  pinMode(23, OUTPUT); // Load Switch
  digitalWrite(23, HIGH); // Turn on VBUS pin

  usbpd.printPDO(); //Print out PDO to Serial port
}

Basic AP33772 functions

Common functions are:

text
setVoltage(int targetVoltage)       //Set voltage, unit in mV, read libary for logic flow
setMaxCurrent(int targetMaxCurrent) //Allow current limit if source has that capability
readVoltage()                       //Return voltage in mV
readCurrent()                       //Return current in mA
printPDO()                          //Print out PDOs in Serial

Set over tempearture protection

text
usbpd.setOTPTHR(100);               //Turn off output if NTC detect 100C or above
usbpd.setMask(OTP_EN);              //Enable Over Temp Protection flag

Important note

After flashing, the latest AP33772-CPP has been updated to auto request PDO after bootup without reconnecting the charger. Thank to @Patronics contribution.

Calling usbpd.printPDO() without Serial.begin() can soft-brick your PicoPD. Causing the IC to be non-recognizable by your computer. You will have to use PicoProbe to reflash the chip. Check out @Patronics PicoProbePCB if you would like to make a stable fixture for firmware debugging.

Enable Serial Debug

To enable Serial debug, there are 3 main methods:

Using USB-C Power/Data splitter (easiest): Use a USB-C Splitter that separates the USB 2.0 signal into another USB-C port. You only need USB 2.0 FullSpeed (12Mbps) for the job, but never hurts to get extra speed if needed later.

Using the provided solder pads at the back: Desolder the front "USB Jumper" resistors. They are just 2x 0 Ohm resistors that bridge between the RP2040 IC and the USB-C port. Then use a USB Type A Plug Breakout Cable, or make your own from any USB cable and connect to the existing pad at the back of PicoPD

Using UART communication: Make sure you are not using GP0 and GP1 as they are reserved for I2C0 channel for AP33772 IC. Check out Youtube tutorial: Talk to Your Pico Over Serial

Arduino IDE setup

Open Arduino IDE, select File -> Preference Preference

Copy this line below and place in "Aditional Boards Manager URLs" -> OK. This will allow you to pull the Earlephilhower Pico core that work with the AP33772 library.

text
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

boardmanagerURL

From Board Manager, search for "Pico" and install the "Raspberry Pi Pico/RP2040" core by Earlephilhower

boardmanager

Now from Tool -> Board -> Raspberry Pi Pico/RP2040 -> Raspberry Pi Pico

boardmanager

Now download the latest AP33772 library as a Zip file

text
https://github.com/CentyLab/AP33772-Cpp

ap33772lib

Import the AP33772 library into your Arduino IDE. Sketch -> Include library -> Add .ZIP Library ...

importlib

Now you start using the Example code in File -> Examples -> AP33772-Cpp-main. The example is ready to compile and flash on to your PicoPD. importlib

Now you can plug in your USB-C cable with Power Delivery 2.0/3.0/3.1. If you also like to have serial print out, check out Enable Serial print for debugging.

VSCode PlatformIO setup

After VSCode installation, you will need to install PlatformIO extension.

installplatform

Now create a new PlatformIO project

  • Name:WhatEverYouWantToCallit
  • Board: Pico (RasberryPi)
  • Framework: Arduino (default)

Click "Finish"

newproject

boardandframework

In your new project, copy this and replace everything in platformio.ini. This is how you ask PlatformIO to compile using Earlephilhower Pico core, and enable upload via USB.

text
[env:pico]
platform = https://github.com/maxgerhardt/platform-raspberrypi.git
board = pico
framework = arduino
board_build.core = earlephilhower

;; If directly upload from PC
upload_protocol = picotool

Now download the latest AP33772 library as a Zip file. Unzip and place the folder in lib

text
https://github.com/CentyLab/AP33772-Cpp

ap33772lib

Your lib folder should look like this

libstructur

To try out example code, you copy the content inside lib/Compiled for PicoPD/PPSCycling/PPSCycling.ino, And replace everything in your src/main.cpp

maincpp

Now you can plug the PicoPD to your computer via USB-C and hit the upload button. After this, you will have to connect a charger to PicoPD to see the voltage cycling example. If you also like to have serial print out, check out Enable Serial print for debugging.

maincpp

Parts

52
QtyValueFootprintReferences
11100nFCapacitor_SMD:C_0402_1005MetricC2, C3, C4, C6, C7, C8, C9, C10, C18, C20, C21
55.1kResistor_SMD:R_0402_1005MetricR1, R3, R4, R7, R16
41kResistor_SMD:R_0402_1005MetricR2, R13, R14, R17
20RResistor_SMD:R_0402_1005MetricR18, R19
210kResistor_SMD:R_0402_1005MetricR6, R12
21uCapacitor_SMD:C_0603_1608MetricC15, C22
22.2uFCapacitor_SMD:C_0402_1005MetricC5, C11
227RResistor_SMD:R_0402_1005MetricR10, R11
230pFCapacitor_SMD:C_0402_1005MetricC16, C17
110mRResistor_SMD:R_0805_2012MetricR5
112MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
11uFCapacitor_SMD:C_0603_1608MetricC12
12.2uFCapacitor_SMD:C_0603_1608MetricC14
1AP2204K-3.3Package_TO_SOT_SMD:SOT-23-5U4
1AP33772Package_DFN_QFN:QFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mmU1
1DDiode_SMD:D_SOD-123D4
1DTC143EETLPackage_TO_SOT_SMD:SOT-416Q2
1GREENLED_SMD:LED_0603_1608MetricD2
1MSK3419DFAON7403:TRANS_AON7403Q3
1PICO_PINOUTPICO_PinOut:PICO_ThruJ3
1REDLED_SMD:LED_0603_1608MetricD1
1RP2040Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mmU3
1SW_BOOTButton LCSC:SW_PTS810_SJM_250_SMTR_LFSSW4
1SW_RESETButton LCSC:SW_PTS810_SJM_250_SMTR_LFSSW2
1TPD4E05U06DQARIP4292CZ10-TBR:SON50P100X255X50-10ND3
1Thermistor_NTCResistor_SMD:R_0402_1005MetricTH1
1USB-BreakoutBao_CustomFootPrint:1x4_2.54mmHorizontalSMDJ1
1USB_C_ReceptacleUSB_C_YTC-TC16S-28:YTC-TC16S-28J2
1W25Q16JVUXIQ_TRW25Q16JVUXIQ_TR:IC_W25Q16JVUXIQ_TRU2

Questions

How big is the PicoPD V1.2 PCB?

It measures 20.6 × 51.1 mm and has 4 copper layers, 1.61 mm thick.

What parts does the PicoPD V1.2 use?

52 parts, built around the RP2040, AP33772DKZ, DTC143EETL and MSK3419DF. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the PicoPD V1.2 KiCad files?

From the centydev/PicoPD repository on GitHub, at the commit this page was made from: the board is Hardware/PicoPD V1.2.kicad_pcb and its schematic Hardware/PicoPD V1.2.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the PicoPD V1.2 design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 4 layers43.1 × 37.7 mmMachine Controller, the printed circuit board in 3D

    Machine Controller

    FinnKrass/MX-Break-In-Machine

    64 Slot Break In Machine for MX Style Switches

    84 parts15CERN-OHL-S-2.0
  • 2 layers278.7 × 107.5 mmGecko choc, the printed circuit board in 3D

    Gecko choc

    DaneEvans/Gecko-keyboard

    Gecko split keyboard

    194 parts2CC-BY-4.0
  • 4 layers43 × 95 mmOe commutator controller, the printed circuit board in 3D

    Oe commutator controller

    open-ephys/commutator-controller

    Open Ephys commutator PCB and firmware

    107 parts2
  • 2 layers70 × 50 mmStorage failed, the printed circuit board in 3D

    Storage failed

    IgorCulafic/PCBSmith

    Open-source PCB design tools: KiCad workflows, automatic routing, design review and laser fabrication. Working toward plain-language circuit-to-board design.

    104 partsAGPL-3.0
  • 4 layers48.1 × 41.6 mmRp2040, the printed circuit board in 3D

    Rp2040

    IslamHUFE/rp2040

    RP design with rp2040

    33 partsMIT
  • 2 layers277.2 × 107.5 mmCorne chocolate, the printed circuit board in 3D

    Corne chocolate

    JackUlbrichBaker/Split_keyboard

    A modified corne keyboard project

    180 parts
  • 2 layers60 × 50 mmMRev, the printed circuit board in 3D

    MRev

    MrFriedOk/flickerflame

    osu optimization attempt

    70 parts