This is only a preview of the October 2026 issue of Silicon Chip. You can view 36 of the 104 pages in the full issue, including the advertisments. For full access, purchase the issue for $10.00 or subscribe for access to the latest issues. Articles in this series:
Items relevant to "Mighty USB-C Bench Supply, Part 1":
Items relevant to "Programmable USB-PD Modules":
Items relevant to "Audio Spot Frequency Oscillator":
Items relevant to "Phenomenal Pinball Machine, Part 5":
Purchase a printed copy of this issue for $14.00. |
Programmable
USB-PD and USB-PPS Modules
We’re starting to see inexpensive power sources that include modern USB-PD and USB-PPS
capabilities, making it an ideal time to experiment with compatible modules. This article presents
one that is commercially available and another we have designed, both being controlled over an I2C
serial bus.
By Tim Blythman
U
SB Power Delivery
(USB-PD) is a means for a
device to request a specific voltage and negotiate a current limit from
a USB-C power source. For example,
a USB-PD compatible device might
request 12V from a power supply
rather than 5V; if the supply doesn’t
support that voltage, the device can
choose another one that it does.
The USB Programmable Power Supply (USB-PPS) protocol goes even further, allowing a USB device to request
a voltage from 3.3V to 21V in 20mV
steps. As with USB-PD, both the source
(eg, a USB charger) and sink (device)
need to support this protocol for it to
work. These days, more and more USB
power supplies support both USB-PD
and USB-PPS.
We published an article titled
“How USB-C Power Delivery Works”
by Andrew Levido in our July 2021
issue (siliconchip.au/Article/14919).
It describes the electrical interface
and communication protocol used by
power sources that support USB-PD
and USB-PPS.
Jim Rowe looked at so-called
USB-PD triggers and decoy boards
back in August 2021 (siliconchip.au/
Article/14996). These are modules
that can be configured to request voltage and current levels from suitable
power supplies.
They incorporate an IC that manages
the signalling needed to communicate
with the power supply. They also have
an interface that allows a certain voltage (usually) to be directly selected by
a user. This might be something simple, like a solder jumper that can be
modified, or pushbuttons and a display for interactive operation.
One of the modules that we are presenting here has a solder jumper setting,
but the main thing we are interested in
is an interface (I2C or ‘inter-integrated
38
Silicon Chip
circuit’ in this case) that allows them
to be controlled programmatically by
something like a microcontroller.
That means we can build a USB-C
powered PSU with a controller that
can choose the best supply voltage for
efficient operation.
The glossary overleaf lists some terminology that is common to USB-PD
and USB-PPS. Next, we will review
a commercially available module.
Then we will follow with our design,
which keeps the same physical outline but allows the use of USB-PPS.
Using the same outline allows them
to be mechanically interchangeable,
so either can be used in our USB-C
PSU design.
Adafruit HUSB238
PD Breakout
This module is made by the Adafruit company and can be found on
their website at www.adafruit.com/
product/5807
The photo below shows the module
and Fig.1 its circuit diagram. This is one
of the modules we used for testing our
USB-C Power Monitor prototype for
the project in the September 2025 issue
(siliconchip.au/Series/445).
Jaycar sells a module (Cat PP2081)
that appears to be identical, and we
tested some of these alongside the
Adafruit parts.
This module also functions as a trigger module, since it can be configured
via solder jumpers to provide one of
several preset voltages or current settings. Of course, these features depend
on the attached power supply being
able to provide the requested levels.
The module is shipped with settings
of 5V and 1A. The jumper settings
are used until a different command is
received on the I2C bus.
Fig.1: like many such modules, the circuit is simple but provides sufficient
support circuitry to explore the features of the HUSB238 chip. Original source:
https://learn.adafruit.com/assets/124712
Australia's electronics magazine
siliconchip.com.au
It is based on the Hynetek Semiconductor Company HUSB238 chip
(https://en.hynetek.com/2421.html),
which is only available in a DFN
leadless package. This chip supports
USB-PD but not USB-PPS, so it can
only supply one of the six voltage levels prescribed by the older USB-PD
standards.
The voltage levels are 5V, 9V, 12V,
15V, 18V and 20V, which you can see
marked on the solder jumpers on the
module. Interestingly, none of the
USB-C power sources we used for
testing these modules supported 18V.
Apart from some passive components, there is a P-channel Mosfet
that is controlled by an open-drain
output on the HUSB238 chip. This
version of the chip simply switches
on the Mosfet when power is applied,
although the data sheet notes that
other chip variants may support different behaviours.
Module connections
The package for the module includes
a two-way screw terminal header and
a 0.1-inch (2.54mm) pitch pin header;
the screw terminal can be fitted to connect the power (VUSB and GND) pads.
The header pads break out the I2C bus,
power and USB2.0 (D+ and D−) connections, allowing the module to be
integrated into a peripheral.
There is also a pair of mounting
holes near the USB-C socket. The
chip is directly powered from the
USB supply (which could be up to
20V) and lacks I2C pull-up resistors,
requiring these to be fitted externally
to suit the desired logic level. The I2C
slave address (7-bit) of the HUSB238
is 0x08 (8 in decimal).
Interface
Internally, the HUSB238 has ten
control registers, shown in Table 1.
Control and monitoring of the module
is achieved by reading from and writing to the registers. Like many such
chips, it includes internal resistors to
signal an implicit 5V contract when
the source is first connected to ensure
that the device powers up.
The chip appears to automatically
make source capability requests to
populate the SRC_PDO (0x02-0x07)
registers, although this can also be
commanded through the I2C bus. After
this, the general mode of operation
is to read out the SRC_PDO registers
to confirm the modes that the power
source offers.
Register 0x08 can then be written
with a value to select a PDO, and the
GO command is written to register
0x09. The PD_STATUS0 register can
be read to confirm that the new contract is in force. Scope 1 shows a typical timing whilst switching from a
5V PDO to a 9V PDO. The I2C activity consists of writes to registers 0x08
and 0x09.
There appear to be numerous
HUSB238 libraries available for the
Arduino IDE that can be found by
searching for “HUSB238”. One of
these is developed by Adafruit for this
specific module; it can be found at
https://github.com/adafruit/Adafruit_
HUSB238
Interestingly, this library was written with the help of an AI agent. The
library webpage above has links to the
chat sessions, so you can see how it
was done.
USB-PPS module
We found that many of the modern USB-C power sources we tested
featured PPS. The finer granularity
of PPS means that we can reduce the
necessary headroom and thus the dissipation in our USB-C PSU. We discuss these advantages in detail in the
project article.
We were not able to find a suitably
compact prebuilt module that was
able to use PPS. The lack of USBPPS support on the HUSB238 is the
main reason that we developed our
own USB-PPS Module, which we’ll
describe now.
Our research found the MikroElektronika range of USB-C Sink Click
modules, which work with MikroElektronika’s mikroBUS socket; they
have a much larger footprint than the
Adafruit part.
One of these uses the Diodes Incorporated AP33772 USB-PD sink controller IC, which led us to the newer
AP33772S chip.
Table 1: HUSB238 control registers
Just 25mm long, the HUSB238 Power
Delivery Breakout (shown enlarged)
can be controlled over an I2C
interface, making it handy for devices
that need to request different voltages
from a USB-C source. Source www.
adafruit.com/product/5807
siliconchip.com.au
Register
Notes
PD_STATUS0 (0x00)
Read-only register with information about the
current and voltage available after an explicit
contract is established.
PD_STATUS1 (0x01)
Read-only register with other status information,
including that relating to an implicit (5V) contract.
SRC_PDO_5V (0x02)
Read-only registers with information about
capabilities (presence or absence and allowable
current) for the indicated voltage.
SRC_PDO_9V (0x03)
As above
SRC_PDO_12V (0x04)
As above
SRC_PDO_15V (0x05)
As above
SRC_PDO_18V (0x06)
As above
SRC_PDO_20V (0x07)
As above
SRC_PDO (0x08)
Read/write register, used to select a PDO for
activation by the Go command.
GO_COMMAND (0x09)
Read/write register, used to request a contract per
the Source PDO or issue other commands such as
checking source capabilities or resetting.
Australia's electronics magazine
October 2026 39
Fig.2: similar to the HUSB238 PD Module, our circuit consists of little more than
the components required by the data sheet. The external connection at CON2
has been laid out to match the other module, although it lacks the USB data
lines due to the limited space available.
Like all the other USB-PD chips we
investigated, it is in a leadless package; QFN-24 in this case. We would
have liked to use a hand-solderable
part, but it is available amongst JLC
PCB’s parts catalog, so we were able
to design a PCBA (PCB assembly) for
manufacture by JLCPCB.
The AP33772S
Information about this part can be
found at siliconchip.au/link/accy – it
can handle VBUS voltages up to 31V
and USB-PD modes up to 28V. The circuit for our USB-PPS Module is based
on the typical configuration diagram in
the data sheet, which you can download from siliconchip.au/link/accz
Since we plan to use this module
interchangeably with the HUSB238
module, we have adopted the same
layout and external connections.
While it is electrically and mechanically interchangeable, it requires different communications over the I2C
bus. Size restrictions have also limited
the features that we have provided.
Its operation is otherwise similar to
the HUSB238, with reads and writes to
the various registers needed to monitor and configure the state of the chip.
The AP33772S has 13 PDO registers,
seven of which are for SPR mode (up
to 20V) and the remaining six are for
EPR modes.
Support for PPS modes means that
there are more options to be selected
and configured; for example, checking
and setting the voltages and currents
for the PPS modes. The AP33772S also
has a load switch control, which can
be configured to shut off VBUS in the
Inspired by the HUSB238 PD module
(black PCB), we have created our own
USB-PPS Module (green PCB) using
the more advanced AP33772S chip.
As well as being usable as standalone
modules, either can be used in the
USB-C PSU we have designed.
event of a fault such as a voltage mismatch or overcurrent.
USB-PPS Module circuit
Fig.2 shows the circuit of our USBPPS Module. CON1 on the left is the
standard power-only USB-C socket
we use for many applications. We
have opted not to add the USB data
lines, since the necessary traces would
occupy precious space on the small
PCB and also necessitate a USB-C
socket with more pins to solder.
Connections are made directly to
IC1, the AP33772S, with the CC lines
having external 5.1kW pulldown resistors to ground, required for legacy 5V
operation, which is needed to bootstrap the chip. The VBUS line goes
via a 5mW shunt resistor that has an
upstream tap at the ISENP pin for
V
10
8
6
4
2
0
-80
ms
-60
-40
-20
0
20
Scope 1: The red and blue traces here show the I2C traffic, while the green
trace shows the VBUS level changing after the HUSB238 PD Module receives a
command. It’s interesting to note the time taken for the change to occur and the
slow ramping applied by the power source.
40
Silicon Chip
Australia's electronics magazine
One of the advantages of having the
module assembled by JLCPCB is that
smaller components can be used. Note
the use of very small M1608 (imperial
0603) parts.
siliconchip.com.au
USB-PD and USB-PPS Glossary
APDO (Advanced Power Data Object): A PDO that includes variable and programmable
modes such as SPR PPS, SPR AVS and EPR AVS.
AVS (adjustable voltage supply): The voltage is not fixed but can be varied in 100mV
increments
EPR (extended power range): Modes that range above 100W – up to 48V and thus
240W when capable of 5A.
EPS (external power supply): A device such as a plug pack or battery bank that is used
to supply DC voltage.
Explicit power contract: A mode that is provided after negotiation between the source
and sink.
Implicit power contract: The default 5V mode that is provided when a source detects
that a sink has connected due to the CC lines being pulled down.
PD (Power Delivery): The USB specification that allows compatible devices (sources,
Fig.3: since the modules will be
offered fully assembled, this overlay
diagram is provided for reference
only. Note that R2 and R3 at top right
are the I2C pull-up resistors, which
should be removed if you wish to
interface to logic levels other than 5V.
current sensing. The downstream tap
at VCC provides power to the chip.
Downstream power (to the power
sink) is switched by dual N-channel
Mosfet Q1 in the standard bidirectional blocking configuration, with
its sources commoned and gates commoned. The drains provide the external switch connections.
In this configuration, the body
diodes are back-to-back and prevent current flow in both directions
when the Mosfets are off. To control
the N-channel Mosfets as a high-side
switch, the AP33772S features an
internal boost circuit to drive the gate
voltage high enough above VBUS; this
signal is fed via a 5.1kW resistor.
The switched VBUS circuit is taken
to the output at CON2, which is laid out
to match the output connection on the
HUSB238 module. This also breaks out
ground and the I2C SDA and SCL lines,
which have 5.1kW pull-up resistors to
an internally generated 5V rail (V5V).
Where possible, 5.1kW resistors
have been used in lieu of nearby values. For example, the I2C resistors are
usually 4.7kW and the value of the
resistor on the gate of Q1 is not critical.
This choice was intended to simplify
the BoM (bill of materials) for PCB
assembly, since each different component reel loaded into the pick and
place machine incurs an extra cost.
The capacitors are as per the typical
system configuration in the data sheet,
with these providing bypassing on different power rails.
siliconchip.com.au
cables and sinks) to deliver higher voltages and currents than previous specifications.
PDO (Power Data Object): A configuration of the power source that can be selected by a
sink. The PDO will include a voltage level and current capability.
PPS (programmable power supply): A mode where the source output voltage can be
controlled in 20mV increments up to 21V and current in 50mA increments.
SPR (standard power range): The PD mode that supports 5V to 20V.
The circuit is quite simple; it just
exposes the features of the AP33772S
chip. We had originally intended to
incorporate the AP33772S directly
into the USB-C PSU, but considered
that readers may find other uses for
it as a separate module. This way it’s
also easier to source it pre-soldered
to the board.
If you need to use the USB-PPS Module with a 3.3V (or lower) I/O voltage microcontroller, we recommend
removing the onboard I2C pull-up
resistors and using pullups to the
logic level being used elsewhere. The
I2C pullups are the two 5.1kW resistors marked R2 and R3 near IC1. Fig.3
shows the PCB overlay diagram.
Assembly
Since the module has been fully
assembled by JLCPCB, you only need
to fit the requisite headers for your
application before use. If you are using
it for the USB-C PSU, there are instructions for preparing it in that series.
You can test the USB-PPS Module
by powering it from a USB-C power
source. It should provide a 5V output
between the VBUS and ground connections. This test isn’t comprehensive, but at least establishes that the
AP33772S chip is requesting 5V and
driving the Mosfet switch.
Testing and use
Scope 2 shows a similar test to Scope
1 but using our AP33772S module and
its PPS features. Despite the AP33772S
having larger (16-bit) registers, only
one packet is needed to request a new
PDO from the source, so the transmission is briefer, as is the delay before the
voltage change commences.
Parts List – USB-PPS Module
1 double-sided 21 × 24mm PCB coded 04107265
1 USB-C socket (CON1) [GCT USB4135 or similar]
1 AP33772S USB-PD interface chip, QFN-24 (IC1)
1 BSO150N03 dual N-channel Mosfet, SOIC-8 (Q1)
2 10μF X5R MLCC M3216/1206 SMD capacitors
1 1μF X7R MLCC M2012/0805 SMD capacitor
2 100nF X7R MLCC M1608/0603 SMD capacitors
5 5.1kW M1608/0603 ±1% 100mW SMD resistors
1 200W M1608/0603 ±1% 100mW SMD resistor
1 5mW M1608/0603 ±1% 100mW SMD resistor
Note: the parts listing is provided for reference since the modules will be supplied fully
assembled. You just need to supply and solder headers to suit your application.
Preassembled USB-C PPS Control Module (SC7740, $25 + P&P)
Australia's electronics magazine
October 2026 41
Ideal Bridge Rectifiers
Choose from six Ideal Diode Bridge
Rectifier kits to build: siliconchip.
com.au/Shop/?article=16043
28mm spade (SC6850, $30)
Compatible with KBPC3504
10A continuous (20A peak),
72V
Connectors: 6.3mm spade
lugs, 18mm tall
IC1 package: MSOP-12
(SMD)
Mosfets: TK6R9P08QM,RQ (DPAK)
21mm square pin (SC6851, $30)
Compatible with PB1004
10A continuous (20A peak),
72V
Connectors: solder pins on
a 14mm grid (can be bent
to a 13mm grid)
IC1 package: MSOP-12
Mosfets: TK6R9P08QM,RQ
5mm pitch SIL (SC6852, $30)
Compatible with KBL604
10A continuous (20A peak), 72V
Connectors: solder pins at
5mm pitch
IC1 package: MSOP-12
Mosfets: TK6R9P08QM,RQ
mini SOT-23 (SC6853, $25)
Width of W02/W04
2A continuous, 40V
Connectors: solder
pins 5mm apart
at either end
IC1 package: MSOP-12
Mosfets: SI2318DS-GE3 (SOT-23)
D2PAK standalone (SC6854, $35)
20A continuous, 72V
Connectors: 5mm screw
terminals at each end
IC1 package:
MSOP-12
Mosfets:
IPB057N06NATMA1
(D2PAK)
TO-220 standalone (SC6855, $45)
40A continuous,
72V
Connectors:
6.3mm spade lugs,
18mm tall
IC1 package: DIP-8
Mosfets:
TK5R3E08QM,S1X
(TO-220)
See our article
in the December
2023 issue for more details:
siliconchip.au/Article/16043
42
Silicon Chip
V
10
8
6
4
2
0
-40
ms
-20
0
20
Scope 2: This shows the same as Scope 1, but for our USB-PPS Module. Only
one data packet is needed to effect a change and it is initiated much more
promptly after the command is given.
If you are using the USB-PPS Module in the USB-C PSU, you don’t need
to fit any headers until it is time to
attach it to the PCB in that project.
Otherwise, we found that a pair of
three-way socket headers was the best
way to experiment with the module,
allowing jumper wires to be fitted for
breadboarding.
Take care when working with this
module (and the HUSB238) because
it will expose voltages above 5V that
should not be directly connected to
the pins on a microcontroller.
The AP33772S data sheet does not
have much detail on the operation of
the I2C registers, but we found more
information in a user guide for an
AP33772S evaluation board (EVB) at
siliconchip.au/link/acd0
This guide has more detail on the
registers and I2C command format.
The AP33772S has a 7-bit I2C address
of 0x52.
There are also code examples using
an Arduino Uno with the EVB (which
we expect should also work with the
USB-PPS Module). The code can be
downloaded from siliconchip.au/
link/acd1
We found that the AP33772S
required a slow I2C bus to operate correctly. The data sheet reports a very
low requirement for a low-level (logic
zero) input of 0.4V, while the I2C specifications allow up to 30% of the logic
voltage to be recognised (eg, 1.5V for
a 5V system). We suspect this requirement means that extra time is needed
for the voltage levels to settle correctly.
Table 3 shows a very small subset of the registers available on the
AP33772S; these two registers (the
ones that we use in the USB-C PSU
project) are sufficient to check and
select power data objects and thus
request different voltages from a connected source.
Summary
Now we have two different USB-PD
modules that we can use with the
USB-C PSU, or as standalone parts to
be incorporated into other projects.
You can find the USB-C PSU project
starting on page 28 in this issue. SC
Table 2: a subset of AP33772S registers as used by the USB-C PSU
Register
Size (bytes) Notes
Get all
26
source PDOs
(0x20)
The 26 bytes contain 13 16-bit PDO entries with
information about the available voltage, current
and whether the PDO is a fixed or PPS type.
Select PDO
(0x31)
The PDO request includes information about the
PDO (1-13 from above) to be activated and what
voltage is being selected for a PPS PDO.
2
Australia's electronics magazine
siliconchip.com.au
|