Overview
The PDSink PD Decoy Fast Charging Test Board is a tiny USB Type-C breakout that negotiates with USB Power Delivery (PD) chargers to request a specific high-voltage output: 5V, 9V, 12V, 15V, or 20V. Set the output voltage by flipping three DIP switches on the board, plug a USB-C PD charger into the Type-C port, and the requested voltage appears on the screw terminal — perfect for powering laptops, monitors, 12V LED strips, lab benches, e-bike accessories, and other DC projects that need 5V to 20V from a regular USB-C charger.
At 28 x 11 x 12 mm and 3.9 g, the board is small enough to embed inside almost any project enclosure. It draws no current of its own beyond the PD negotiation handshake and passes the full charger output current straight through to the screw terminal — typically 3A at any voltage (60W chargers) or 5A at 20V (100W chargers).
At a Glance
Specifications
| Parameter | Value |
| Input Connector | USB Type-C (PD 2.0 / 3.0) |
| Output Voltages | 5V, 9V, 12V, 15V, 20V |
| Voltage Selection | 3 DIP switches (1, 2, 3) |
| Maximum Output Current | 5A (limited by charger) |
| Maximum Output Power | 100W (20V x 5A, charger-dependent) |
| Output Connector | 2-pos 3.81 mm screw terminal |
| PD Protocol | USB PD 2.0 / 3.0 (CC1 + CC2) |
| Negotiation Time | < 500 ms after connect |
| Quiescent Current | < 5 mA (after negotiation) |
| Operating Temperature | -20 to +70 C |
| Physical Dimensions | 28 x 11 x 12 mm |
| Weight | 3.9 g |
Pinout Diagram
Wiring Guide
DIP Switch Voltage Selection
Three DIP switches on top of the board select which voltage the decoy requests from the PD charger. Set them BEFORE plugging in the charger. If a setting is invalid (no PD profile matches), the board falls back to 5V.
| Output Voltage | SW1 | SW2 | SW3 |
|---|---|---|---|
| 5V | OFF | OFF | OFF |
| 9V | ON | OFF | OFF |
| 12V | OFF | ON | OFF |
| 15V | ON | ON | OFF |
| 20V | OFF | OFF | ON |
Output Wiring
The green 2-position screw terminal is the voltage output. The terminal is labeled VBUS (+) and GND (-). Use a small flathead to loosen the screws, insert your wires, and tighten.
| Terminal | Connection |
|---|---|
| VBUS | Load Positive (+) — 5/9/12/15/20V |
| GND | Load Negative (-) / Ground |
Choosing a USB-C PD Charger
Not every USB-C charger supports PD. Look for the "PD" or "Power Delivery" logo, and check the printed voltage / current profile list. Common PD profiles are 5V/3A, 9V/3A, 12V/3A, 15V/3A (45W chargers), 20V/3A (60W), and 20V/5A (100W).
| Charger Wattage | Available Profiles | Use Case |
|---|---|---|
| 18W (PD) | 5V/3A, 9V/2A, 12V/1.5A | Small projects, phone chargers |
| 30-45W | 5V, 9V, 12V, 15V, 20V/2.25A | Most DIY projects |
| 60W | 5V, 9V, 12V, 15V, 20V/3A | LED panels, 12V motors |
| 100W | 5V, 9V, 12V, 15V, 20V/5A | Laptops, high-power loads |
Powering Projects
The PD Decoy turns any USB-C PD charger into a switchable bench supply. Common uses include powering 12V LED strips, 19V laptops, 12V solenoids and relays, charging hobby battery packs, and giving 3D printers a portable USB-C power option.
| Output | Project | DIP Setting |
|---|---|---|
| 5V | Arduino Uno / 5V LED strip / Pi 4 | All OFF |
| 9V | Arduino barrel jack / small DC motor | SW1 ON |
| 12V | 12V LED strip / fan / car accessory | SW2 ON |
| 15V | 3S Li-ion charger input (with 16.8V converter) | SW1 + SW2 ON |
| 20V | Laptop charging / 4S Li-ion charger | SW3 ON |
Code Examples
The PD Decoy is a hardware-only voltage selector with no software interface — the DIP switches do all the configuration. The examples below show how to safely interface its high-voltage output with a microcontroller using a buck converter, plus how to monitor the output voltage with an ADC.
Arduino (Output Voltage Monitor)
// PD Decoy Output Voltage Monitor for Arduino
// Voltage divider sized for 20V max: VBUS -- 1M -- A0 -- 100k -- GND
// Max ADC voltage: 20 * (100 / 1100) = 1.82V (safely under 5V)
const int adcPin = A0;
const float dividerRatio = (1000.0 + 100.0) / 100.0; // = 11.0
const float vRef = 5.0;
void setup() {
Serial.begin(9600);
}
void loop() {
int raw = analogRead(adcPin);
float vAdc = (raw / 1023.0) * vRef;
float vOut = vAdc * dividerRatio;
Serial.print("Output: ");
Serial.print(vOut, 2);
Serial.println(" V");
// Identify which PD profile is active
if (vOut > 18.5) Serial.println(" Profile: 20V");
else if (vOut > 13.5) Serial.println(" Profile: 15V");
else if (vOut > 10.5) Serial.println(" Profile: 12V");
else if (vOut > 7.5) Serial.println(" Profile: 9V");
else if (vOut > 4.0) Serial.println(" Profile: 5V");
else Serial.println(" Profile: none / disconnected");
delay(1000);
}
ESP32 (Voltage Monitor with Safety Cutoff)
// ESP32 PD Decoy monitor with relay cutoff
// VBUS -- 1M -- GPIO34 -- 100k -- GND (20V max -- 1.82V at ADC)
// Relay on GPIO25 opens load if voltage exceeds expected setting
const int adcPin = 34;
const int relayPin = 25;
const float dividerRatio = 11.0;
const float vRef = 3.3;
const float expectedV = 12.0; // We set DIP for 12V
const float toleranceV = 2.0; // +/- 2V tolerance
void setup() {
Serial.begin(115200);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW);
analogReadResolution(12);
}
void loop() {
int raw = analogRead(adcPin);
float vOut = (raw / 4095.0) * vRef * dividerRatio;
if (vOut > expectedV + toleranceV) {
digitalWrite(relayPin, HIGH); // Open relay -- disconnect load
Serial.printf("FAULT %.2f V (expected %.0f) -- relay opened\n", vOut, expectedV);
} else {
digitalWrite(relayPin, LOW);
Serial.printf("Output: %.2f V (OK)\n", vOut);
}
delay(1000);
}
Raspberry Pi Pico (MicroPython)
# Pico PD Decoy voltage monitor
# VBUS -- 1M -- GP26 (ADC0) -- 100k -- GND
from machine import ADC
import time
adc = ADC(0)
divider_ratio = 11.0
v_ref = 3.3
while True:
raw = adc.read_u16()
v_adc = (raw / 65535) * v_ref
v_out = v_adc * divider_ratio
if v_out > 18.5: profile = "20V"
elif v_out > 13.5: profile = "15V"
elif v_out > 10.5: profile = "12V"
elif v_out > 7.5: profile = "9V"
elif v_out > 4.0: profile = "5V"
else: profile = "none"
print("Output: {:.2f} V ({})".format(v_out, profile))
time.sleep(1)