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?



a.vailcross wrote 08/22/2023 at 20:42 point

Hello Ryan, let's be modern people and adress the issue of how to transfer data with help such devices also. It seems clear that D+,D- pins are going to the main IC but what happens after?I need capability to provide 12V from laptop to portable synhesiser via USB c PD but also be able to send data back and forth from the synth to my computer via data pins. Is it possible to do that? What happens on data pins? 

  Are you sure? yes | no

CentyVin wrote 08/30/2023 at 07:48 point

Hi a.vailcross,

Since Ryan has not been active for sometimes. I am working to upgrade his idea to another IC and micro-controller. Check it out at:

  Are you sure? yes | no

CentyVin wrote 08/08/2023 at 17:50 point

As this board has been out for a while, I am working on something that hopefully suits as a better replacement. Hope to have the first test run in around 2 weeks.

  Are you sure? yes | no

Gustavo Laureano wrote 07/14/2023 at 10:06 point

Hi @Ryan Ma  o just found your project and it is exactly what I was needing, do you still have hardware available? I could not find to buy 😕

Thank you! 

  Are you sure? yes | no

CentyVin wrote 08/30/2023 at 07:50 point

I cant find his stock anywhere so I have decided to continue with his idea. Check it out at:

  Are you sure? yes | no

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