One day I was digging through a box of wall warts, trying to find one that would work for my latest project. I needed one with 12-16 V output at no less than 0.5 A, and with a reasonable output connector. Untangling cords and checking labels was taking a while, and I started thinking. "If I could use USB Power Delivery, I wouldn't ever have to do this again." Since USB PD power supplies can provide a multitude of voltages at sizable currents, all you'd need is a little circuit board that takes the place of a power jack and tells the power supply what your project needs.
I searched the web, and to my surprise, no such device was available! I realized that I would have to create it myself, so I started figuring out the device's requirements. It would be a small circuit board with a USB Type-C connector on one side and a screw terminal block for power output on the other. When plugged in, an on-board microcontroller would negotiate the power for your project. For simplicity and flexibility, the configuration should be done by USB. To avoid drawing excessive power, the output would have to be controlled by a MOSFET so as to only turn on once negotiation is complete.
A couple days later, I had a hardware design. A couple weeks later, I built a prototype, and the first PD Buddy Sink was born.
PD Buddy Sink
PD Buddy Sink is a smart power jack for USB Power Delivery. Configure it with the voltage and current your project needs, then plug it into any USB PD power supply with a high enough power capability. It negotiates with the power supply and turns on its output, giving your project up to 3 A at 5, 9, or 15 V, and up to 5 A at 20 V. With the latest firmware release, the Sink can also make requests from USB PD programmable power supplies, providing any voltage from up to 4-21 V at 20 mV increments.
PD Buddy Sink is simple to configure. Just plug it into a computer while holding the setup button, and connect to the USB CDC console interface. Alternatively, use the (still experimental) configuration GUI. The configuration interface works with Linux, Mac OS X, and Windows 10.
I developed the first PCB prototypes (v0.1) in early February 2017, and built them mid February. This design had a few errors, which were fixed in v0.2. The next revision (v0.3) was a complete redesign for automated assembly. This got a few more optimizations for the first stable release, v1.0, released in mid-July 2017.
The PD Buddy Sink's firmware is stable, with a few more features planned. It provides a USB serial console interface for editing and saving configuration, and is able to negotiate with power supplies to request fixed voltages and currents. An option for GiveBack is available, which allows the power supply to reduce power temporarily if another device needs more. The firmware allows users to control PD negotiations and show the power supply's capabilities while in Setup mode. In support of these features, I designed a splitter board which allows users to connect the Sink to their computer and an external USB power supply simultaneously. The firmware also allows requests from USB PD programmable power supplies, which offer a wide range of voltages (20 mV increments at up to 3-21 V, though the Sink can't run at less than about 4 V). To the best of my knowledge, the PD Buddy Sink is compliant with the USB Power Delivery Specification, Revision 2.0, Version 1.3, and with Revision 3.0, Version 1.1.
Documentation for the configuration API is available, allowing developers to produce libraries and applications for configuring the PD Buddy Sink. I have written a small Python library for this purpose, providing both direct and abstracted access to the serial configuration API. A basic configuration GUI has been implemented using this library and GTK+, allowing users to edit and save configuration, control the Sink's output, and view the power supply's capabilities in an easier way than the console interface. It also displays a list of all connected PD Buddy devices, in case several are plugged in to the computer at once.
With the 1.2.0 release out, it's now a lot easier to upgrade the device's firmware than it was before! Just type "boot" at the configuration shell and the device runs the DFU bootloader. Now I can work on the second part of my better-upgrade plan, adding support for the PD Buddy Sink in fwupd.
One more big-ish firmware feature is planned currently, but not yet targeting a specific firmware release: support for variable and battery PDOs. This would allow the Sink to draw power from poorly-regulated sources or directly from batteries. It would be entirely up to the user whether to enable this or not, as well as what voltage ranges are acceptable. I plan to implement this once I can buy hardware that supports it, so if you know of such a USB Power Delivery source, please let me know.
The configuration GUI needs to be distributable for multiple operating systems in a reasonable way. Right now there is no way to run it besides manually installing dependencies, checking out the Git repository, and running a Python script from the right directory. This works for now, but in the long run it will not do.
I've been interested in USB Power Delivery for years, and am excited to be able to work with it more! Sink is the first and simplest PD Buddy product I have envisioned, and is currently being used to gauge interest in further products. Sales of prototype units have been enough to make me feel comfortable making a larger order of v1.0 boards, and if those sell well I'll be able to order even larger batches in the future. I don't expect this project to ever have enough interest for me to be able to live off PD Buddy Sink sales, but I will keep selling them as long as people want to buy them from me.
The next device I plan to design is the PD Buddy Dev, which will be a USB Power Delivery-enabled microcontroller development board based on the PD Buddy Sink. The microcontroller will be more powerful, and will have more I/O capabilities. The extra pins will be broken out to 0.1 in. headers, and there will probably be several power MOSFETs on-board for controlling multiple high-power devices. The Dev will also have a switching voltage regulator capable of higher currents than the Sink's linear regulator. For firmware, I will refactor the PD Buddy Sink's firmware as a library and an application, allowing users of the PD Buddy Dev to write new applications using the same library. PD Buddy Dev development will be funded by PD Buddy Sink sales, and will begin when and if interest is high enough.
The electronic hardware design is licensed under the CERN OHL 1.2. The firmware and software are licensed under the GNU GPL v3.0+, with the firmware library licensed under the Apache License 2.0. The 3D models are licensed CC BY-SA 4.0. Full licenses for each portion of the project are available in the corresponding Git repositories.