Retrospective: charger compatibility, variable input power, and user experience

A project log for Solder Ninja

A 40W Portable USB-Powered Soldering Iron for Makers and Professionals compatible with Weller RT Tips

Nicolas SchurandoNicolas Schurando 08/25/2019 at 10:110 Comments

About two years ago, when I first started working on this project, USB Type-C was slowly becoming a thing, and with it along came Power Delivery that was promising power up to 100W. There was a real potential there!

But, USB chargers being nowadays ubiquitous, I decided it didn't make sense both on an environmental point of view, and on a business one to go trough the hassle of stocking and selling USB chargers with the device. Instead people would use their own.

That meant adding support for current non USB Type-C chargers as well. Phone manufacturers have long ago realized that the traditional [1] 5V 0.5A is not enough, and came up with various solutions including the Apple way of using resistors on data lines to allow for up to 5V 2.4A, or the Qualcomm Quick Charge way [2] of using varying voltage levels on the data lines to allow for up to 12V 1.5A.

I wanted that whatever the type of power supply the user plugs into the device, it should always try to negotiate the maximum amount of power. But with that, arose a problem. It meant that the same device could now perform differently based on the amount of power available (for example, heating to 300°C takes around 10 seconds at 18W, but around 15 seconds at 12W). So to ensure a better user experience, I decided that the device should provide visual feedback on the display indicating both the voltage and maximum current negotiated with a potentially smart charger.

I also wanted to maintain the ability to update the product's firmware through USB, which meant that on top of using the data lines for sensing resistors, or changing voltage levels, they should remain available for traditional USB communication.

The current retained solution uses a Diodes Incorporated PI3USB9281 charger detection integrated circuit on the data lines, then a multiplexer that redirects those data lines to either the onboard DACs of the STM32 for HVDCP negotiation or the onboard USB PHY of the STM32. And finally a ON Semiconductor FUSB302 Type-C controller for USB Power Delivery. 

Since the initial hardware design, I have stumbled upon multiple other proprietary non-standard charging protocols (OnePlus Dash Charge, Oppo Super Vooc, Huawei SuperCharge, Motorola TurboPower, MediaTek Pump Express) of which little reverse engineering seems to exist. Provided the current hardware design allows for it, I am definitely interested in adding support for those through future firmware updates.