PD Micro - USB-C PD3.0 PPS Trigger

Arduino-compatible ATMega32U4 board with USB-C PD3.0 PPS Trigger

Public Chat
Similar projects worth following
USB PD3.0 introduces a new PPS (Programmable Power Supply) mode. If PD power source support PPS, It allows devices to negotiate precise voltage range from 3.3V to 5.9/11/16/21 V with 20 mV step. Being a programmable power supply, PPS supports a coarse current limit, with the value in 50 mA step.

PD Micro is the first Arduino-compatible board with USB Type-C Power Delivery and PD3.0 PPS support. The output voltage can be easily programmed with Arduino sketches.

The software library is newly-implemented, targeted for sink-only devices. It is compact enough to fit inside the ATmega32U4 controller and consumes less than half of the total memory and flash space.


This project was created with the goal of creating a compact, portable USB PD library for sink only devices. I went through all available open-source or vendor-provided PD libraries, they are enormous and difficult to implement on small projects. 

To tackle this, I study the PD specification, PD PHY chip datasheet, re-write everything without reference to any existing resource. The result is a 3 source file, 3 header library with less than 2000 lines of code in total, consume less than 8k Flash, and 1k RAM in ATmega32U4.


This project is small. Hardware and software codes are ready. I put all details in GitHub. I started a campaign in crowd supply. If you like the project, please support it. I will release all the design files in the last week of the campaign.


  • Power
    • USB PD2.0 Fixed Power of 5, 9, 12, 15, or 20 V at a maximum of 5 A (100 W at 20 V)
    • USB PD3.0 PPS provides 3.3V-21V output in 20mV step
    • USB Type-C port (for power delivery and programming)
      • FUSB302 USB Type-C PHY (USB PD communication on CC pins)
      • ESD protection on D+/D-/CC1/CC2 pins
    • TPS62175 DC-DC for efficient 5-20 V output
    • 3.5 mm, 2 position terminal block for power output
    • Four-layer PCB with ground plane and 3 mm wide VBUS trace
  • Microcontroller: ATmega32U4 running at 5 V and 16 MHz
  • I/O: pin-compatible with Pro Micro
    • 8x 10-bit ADC pins
    • 12x Free Digital I/Os
    • 5x GND pins
    • 3x VBUS pins (USB-C power)
    • 1x 5 V pin (DC-DC output)
  • PD Status LEDs:
    • TX / RX activity
    • 5 LED for power delivery voltage level
    • 3 LED for power delivery current level
  • Reset button
  • Size: 1.6 x 0.7 inches (extra 0.3 inches for power connector pins)
  • Programming: through USB via the Arduino IDE using the default Arduino Leonardo board setting

Adobe Portable Document Format - 84.70 kB - 01/04/2021 at 18:43


View all 3 project logs

Enjoy this project?



Wis wrote 05/09/2021 at 15:44 point

Can this be used to replace the M1 Mac Mini's comically large (relative to motherboard) AC/DC PSU, so I can power the Mac Mini off a USB-PD powerbank?

  Are you sure? yes | no

gyb_flying wrote 05/08/2021 at 13:41 point

Hi, I found the FUSB302 only support PD 2.0 ,are you sure the hardware  can support PPS 20mV

  Are you sure? yes | no

Ryan Ma wrote 05/09/2021 at 11:01 point

Yes, PD3.0 protocol can mostly be supported using PD2.0 physical layer, as most hand shake protocols are still short messages, including PPS.

  Are you sure? yes | no

gyb_flying wrote 05/10/2021 at 01:47 point

Got it ,you mean that you directly send the PD3.0 protocol just use the phy as pipe,so you need to analyze the protocol by yourself,is that right

  Are you sure? yes | no

Ryan Ma wrote 05/10/2021 at 02:26 point

FUSB302 is just a phy pipe. It does not handle protocol layer except CRC responses. The rest of the protocol are all handled in MCU side. Which is why you can extend FUSB302 to support most PD3.0 protocol.

  Are you sure? yes | no

gyb_flying wrote 05/10/2021 at 02:49 point

I see,thanks. i will consider transplanting to STM32 and merge these with current detect project.Since it is very useful.

  Are you sure? yes | no

Emre Özkan wrote 01/16/2021 at 21:43 point

Hi! Very nice design, I'm just starting to use type c and specs are very good. 

Might be off topic but your KiCad renders are looks very good. When I try to render from top view, the colors are gets brighter and looks bad. Can you share your render settings? 

  Are you sure? yes | no

Ryan Ma wrote 01/18/2021 at 10:19 point

I set it to top view / bottom view, disable orthographic projection, and run ray tracing render view.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates