The project is built with the AP33772S USB-C PD sink controller, an ESP32 microcontroller, and an INA226 power monitor. Together, these components allow PowerPD to negotiate PD/PPS voltages, measure voltage and current in real time, and provide a simple user interface through an OLED display and rotary encoder.

HARDWARE

Main Components

  1. ESP32-WROOM-32E Module
  2. AP33772S USB-C PD Sink Controller
  3. INA226 Voltage/Current Monitor
  4. MP1584 Buck Converter
  5. AP2204K 3.3V Regulator
  6. USB Type-C Connector
  7. 5 mΩ Current Sense Resistor
  8. MOSFET Output Switch
  9. 1.3-inch SH1106 OLED Display
  10. Rotary Encoder
  11. Push Buttons
  12. Status LEDs
  13. Assorted resistors, capacitors, diodes, and other passive components

PCB DESIGN

The PCB was designed in EasyEDA.

The AP33772S was placed close to the USB-C connector to keep the CC traces short and clean. The INA226 was positioned directly beside the current shunt resistor to improve measurement accuracy.

Since the design uses several fine-pitch components, including the USB-C connector and PD controller, I decided to have the boards professionally assembled rather than hand soldering everything.

The finished PCB contains the ESP32 module, AP33772S PD controller, INA226 monitor, buck converter, 3.3V regulator, MOSFET output stage, OLED interface, and programming header.

PCB ASSEMBLY

For fabrication and assembly, I used NextPCB.

After generating the Gerber files, BOM, and pick-and-place data, the files were uploaded for assembly. Before shipping, assembly photos were provided so the component placement could be verified.

Once the boards arrived, the only remaining step was flashing the firmware and beginning hardware testing.

FIRMWARE

The firmware was developed using the Arduino framework.

A custom AP33772S library was written specifically for this project to simplify USB-C PD and PPS communication.

The firmware handles:

  • PD/PPS voltage negotiation
  • INA226 measurement 
  • OLED display 
  • Rotary encoder 
  • Output switching
  • Adafruit IO communication
  • System monitoring

On startup, the ESP32 reads the available PD profiles from the connected charger and presents them through the user interface.

If you'd like to build your own PowerPD, I've included the Gerber files, BOM, and schematic in the GitHub repository.

ENCLOSURE

The enclosure was designed in Autodesk Fusion 360 and consists of three main parts:

  • Front panel
  • Main housing
  • Rotary encoder knob

The design was kept compact while still providing access to the OLED display, USB-C connector, output terminals, and controls.

All enclosure parts can be printed using standard PLA on a desktop 3D printer.

TESTING

Testing was performed using several USB-C PD chargers supporting different power profiles.

After powering the board, I verified the negotiated output voltages using a multimeter. The measured values closely matched the values reported by the INA226 and displayed on the OLED.

I also tested PPS operation by selecting intermediate voltages through the rotary encoder and confirming the resulting output voltage.

For load testing, I connected a 12V cooling fan and a BLDC motor to the output. During testing, the system remained stable while continuously reporting voltage, current, and power measurements.

The ESP32 simultaneously published measurement data to Adafruit IO, allowing remote monitoring through a web dashboard.