|
KiCADKicad
|
|
|
Raspberry Pi Pico SDKRaspberry Pi
|
|
|
Fusion 360Autodesk
|
Tiny Programmable Power Supply (tinyPPS) - version 2
TinyPPS is a pocket-sized programmable power supply built on the USB Power Delivery (PD) standard and the USB Programmable Power Supply (PPS) feature. It transforms a standard USB-C PD charger into a flexible bench-style power source by negotiating selectable output voltages and current limits directly with the charger.
Key features:
- Single firmware supports AP33772 and AP33772S PD sink ICs
- Support for fixed PDO and PPS profiles
- Operating voltage range: 3.3V to 21V
- Fine-grained voltage adjustment via PPS negotiation
- 100mV/step with AP33772S
- 20mV/step with AP33772
- Output current up to 5A (charger and cable dependent)
- Programmable current limit
- 250mV/step with AP33772S
- 50mV/step with AP33772
- Short-circuit protection
- Over temperature protection (OTP)
- Over Voltage Protection (OVP)
- Over Current Protection (OCP)
- Under Voltage Protection (UVP) - with AP33772S only
- User-switchable output
- Input/output TVS protection
For a detailed look at the schematics, PCB design and firmware, visit the GitHub repository.
Idea
Everything started with buying a 15$ USB powered mini SMD hot plate that required a supply with the following capabilities: PD65W 20V 3.25A. By acquiring a 100W power supply I have found out something called PPS, beside regular voltage/current values, on the label.
PPS 3.3V-21.0V - 5.0A 100W max - tickled my brain. What is PPS? It turned out it is a neat USB-C feature. To be more precise, it is an advanced feature of the USB Power Delivery (USB PD) 3.0 standard that allows chargers to dynamically adjust voltage and current in real time. Unlike standard PD, which uses fixed voltage “steps” (e.g., 5V, 9V, 15V, 20V), PPS allows for fine-grained adjustments - typically in 20mV voltage increments and 50mA current steps.
Knowing this, I came up with the idea of using USB PPS to build a small “lab” power supply as a proof of concept. Before jumping in to realisation, I explored existing solutions and stumbled upon PocketPD by Centylab. Although it’s a great product, I wanted to add my own twist and use the project as a learning experience by implementing my own solution.
Hardware
Changes in version 2:
- Switched to a 4-layer PCB stackup
- Added TVS diodes at input and output
- Added support for AP33772 (older sibling of AP33772S)
- Replaced back-to-back NMOS switch with LM73100
- This change adds short-circuit protection
- The output enable is controlled via AND gate
- This solves compatibility with AP33772
- Added test points for the VOUT traces and the AND gate inputs/outputs to simplify debugging and measurement.
- Added placeholders for I2C pull-up resistors to enable testing without OLED.
Firmware
- Bare metal.
- C++ with modern features (C++17).
- CMake is used for build system.
- No external dependencies other than picoSDK.
- Firmware is built around a cooperative scheduler.
- The control logic is implemented in an event driven state machine based on std::variant and std::visit.
- Hardware Abstraction Layer (HAL) is used to decouple the hardware from the solution, enabling mock testing.
User inputs
- rotary encoder increment/decrement: Select target voltage or max current fields. Increment/Decrement target voltage or max current values.
- rotary encoder button press: If target voltage or current limit field is selected enter value editing mode.
- rotary encoder long button press: enable/disable output.
- rotary encoder double press: Go back to menu state/screen if there are more than one PDO available.
Case
For TinyPPS, I wanted to create a simple and minimalistic box-shaped case with rounded corners. The case features a snap-in lid that hides the mounting screws used to secure the OLED and PCB to the bottom part of the case.
The case is printed with ABS so it can handle higher temperatures.
Here are some photos of the building blocks and the case:


Tiny Programmable Power Supply (tinyPPS) - version 2
*PCBWay community is a sharing platform. We are not responsible for any design issues and parameter issues (board thickness, surface finish, etc.) you choose.
Raspberry Pi 5 7 Inch Touch Screen IPS 1024x600 HD LCD HDMI-compatible Display for RPI 4B 3B+ OPI 5 AIDA64 PC Secondary Screen(Without Speaker)
BUY NOW- Comments(0)
- Likes(0)
- 0 USER VOTES
- YOUR VOTE 0.00 0.00
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
More by Daniel Knezevic
-
Tiny Programmable Power Supply (tinyPPS) - version 2
TinyPPS is a pocket-sized programmable power supply built on the USB Power Delivery (PD) standard an...
-
Tiny Programmable Power Supply (tinyPPS)
TinyPPS is a pocket-sized programmable power supply built on the USB Power Delivery (PD) standard an...
-
Single Digit Nixie Clock
A small project combining ESP32 with a vintage Soviet Nixie tube from the 70’ to create an artistic ...
-
-
-
-
ARPS-2 – Arduino-Compatible Robot Project Shield for Arduino UNO
2637 0 5 -
-
A Compact Charging Breakout Board For Waveshare ESP32-C3
3115 3 8 -
AI-driven LoRa & LLM-enabled Kiosk & Food Delivery System
3351 2 1 -
-
-







