2024 - 2026 USB-C PD Dongle Design Document

2024 - 2026 USB-C PD Dongle Design Document

@Ishan Deshpande

Thanks to @Champers Fu , @Lakshay Gupta , @Dylan Kretschman , @Devin Kretschman for review & assistance with KiCAD and manufacturing!

Warning: this document is purely my notes from my own research. Don’t take everything in it for granted especially since I’m a beginner to this sort of stuff, and double check everything, especially if using it for design purposes. I am not purporting to be good at this or to get everything right or to know everything, since this is my first board for Solar.

If you have any corrections for this document, please feel free to comment with a correction. Try to keep the original material for a bit so that it is clear a correction is made/so that we preserve some history in case the correction is incorrect. - Ishan

Design Notes

Objective:

The purpose of this board is to be able to use a USB Type-C laptop charger to run one LV system (such as BPS or Controls). The dongle will act as a breakout; negotiating the power delivery at a fixed voltage with the laptop charger and delivering as much current as needed at a stable voltage of 12V/5V.

The dongle will (hopefully) also be able to supply the maximum amount of current necessary for any of our systems. @Lakshay Gupta wants to be able to handle the current spike that BPS has when the HV+, HV-, and HVARR contactors flip, so the design should potentially accommodate for that.

Block Diagram & Requirements:

  • Simultaneous 12V and 5V output

  • 12 for LeaderSOM, 5 for small sensor power or CANbus power

  • 5V needs to be isolated from 12V for CANbus power

  • Status LEDs

  • On/off toggle switch

  • Overcurrent/voltage and undervoltage protection

Preliminary Research Notes:

  • USBPD devices can either act as the source (charger) or sink (device) or DRP (both). For our purposes we probably want a sink-only chip since we'll be plugging a charger into this board and the output will be a 12V/GND line. We don't need this to act as a source from a wall outlet.

  • Compatibility with USBPD 2.0 and USBPD 3.0 would be nice to allow us to use a wider array of laptop chargers.

    • USBPD 2.0 allows for fixed voltage outputs of 5, 9, 12, 15, and 20V

      • USBPD 3.0 allows for incremental voltage outputs anywhere from 3.3V to 21V in increments of 20mV. This is called PPS (programmable power supply). We don't really need this since we only need to provide fixed 12V and 5V.

  • Perhaps considerations should be made for USBPD 3.1 as well, as that would allow for a higher power delivery of 240W and possibly support driving contactors.

    • 3.1 is backwards compatible so designing a 3.1 sink should allow for interfacing with 3.1/3.0/2.0 source

    • Since we want to max out current I think 3.1 makes the most sense as USBPD 3.1 EPR (Extended Power Rating) cables have the capability of providing up to 240W @ 48V

      • This may have to wait as there are not many 3.1 sink chips available

      • According to this reddit post, USBPD3.1 @ 240W probably isn't possible since the sink functionality of it is not well supported. I took a look at a few chips such as ST-ONEHP and TPS25730USB.

USBPD Controller Chip Evaluations:

  • Mouser USBPD Search

  • USB Type-C PD 3.0 Specification, Charging and Design

  • Guide to USB-C Pinout and Features

  • USB Type-C and USB power delivery power path design considerations

  • Phil's Lab video

  • Designing a USB PD (Power Delivery) Trigger Board For My Devices

  • Infineon CYPD3177-24LQXQT

    • Used in this Phil's Lab video

    • In stock on Mouser as of 5/22/24

    • Price: $2.20

    • Operates on USB-PD 3.0 Standard

    • Capable of 100W (20V @ 5A)

    • Evaluation Kit Guide

    • Pretty simple to set VBUS Min/Max and Current Min/Max; just use voltage dividers on four config pins as shown above

    • Offers a fault indicator

    • Falls back to 5V in case negotiation fails

    • QFN package (more difficult to solder, but still manageable at Pickle esp. with someone with experience)

  • INJONIC IP2721

    • Used in this isaac879 video

    • Available for order on JLCPCB or AliBaba

    • In-stock at JLC and Alibaba as of 5/8/24

    • Price: $0.69

    • Capable of 20V

    • Connecting high to SEL pin will make it output 20V, which makes configuration easy

    • The downside of this (as according to this Hackaday post) is that even though USB-PD supports current negotiation (sink asking source what current it supports), the IP2721 doesn't. So if a charger is plugged in that doesn't support 5A, which we are ultimately going to request, then we still may not get the current we want and perhaps trigger some overcurrent condition on the source if we go over that amount.

    • TSSOP package, so easier to solder

  • Texas Instruments TPS25730

    • Price: $2.69

    • On backorder in Mouser as of 5/8/24

    • In TI's product selector for USBPD chips, this seems like the newest sink-only chip

    • It supports PD 3.1 in that you can do PPS (which we don't actually need anyways)

    • Capable of 100W (20V @ 5A)

    • It looks like an external microcontroller can be attached to I2C for configuration purposes, but doesn't have to be

    • Min/max voltage and operating current/max current configured through ADC1 through ADC4, can just hook up voltage divider

    • TPS25730D has an internal HV path, whereas S has a gate driver for an external HV path

    • QFN package; harder to solder as mentioned before

  • STMicroelectronics STUSB4500

    • In-stock as of 5/8/24

    • Price: $2.71

    • Reference schematic

    • Capable of 100W (20V @ 5A)

    • Configurable through programming non-volatile memory (NVM) through I2C

      • Would make initial configuration of anything above 5V a bit more difficult, but would only need to be done once at the beginning with a programmer of some sort (Nucleo?)

    • QFN package

Buck Converter Research:

  • I suppose we'll need a high-efficiency buck converter to step down from max 20V@5A to 12V@8.333A after the whole USB PD negotiation is complete.

  • Another design consideration was made in this area about the buck converter pipeline. The two possible options were 20V → 12V → 5V (e.g. having chained buck converters) or 20V → 12V AND 20V → 5V (independent buck converters)

    • Chaining buck converters means that we can use the same 12V → 5V buck converter we typically use, muRata MYLSM00502ERPL. However, this means that if 12V or above is not in a source’s capabilities, then 5V will also fail. Basically 5V is entirely dependent on the 12V working, which limits the set of USB Type-C chargers we can use with this board.

    • Independent buck converters means that 5V can function without 12V, so if a PD charger WITHOUT 12-20V support is used, we can still test a low voltage device. This seems better but also makes our job as circuit designers more difficult in terms of validation, cost, or efficiency.

  • Matthew Yu’s notes on LDO vs Buck Converters:

    • image-20240528-072100.png
  • Tips on Layout from Phil's Lab

  • Buck Converter Explained

    • Another one: Buck Converter 2: Electric Boogaloo 

    • Other typical forms of voltage step-down (Linear Voltage Regulator (LDO), Voltage Divider) dissipate power as heat to step down voltage. We lose power in some capacity as heat.

    •  Buck converters will decrease voltage AND increase current to maintain power (typically higher efficiency but less stability when compared to an LDO)

      • When the switch is closed, the inductor charges up

      • When the switch is opened, the inductor releases charge through the load resistor RL. The current flows through the diode and back into the inductor

      • We switch the switch (MOSFET) at a certain frequency and duty cycle in order to keep the average current relatively stable over one period

      • The capacitor is assumed to have a steady voltage over one period, so it just keeps the voltage drop across RL the same

      • Watch the Buck Converter 2 video for more explanation and the derivation for the following equation:

        • Vout = Duty Cycle x Vin (typically)

        • Datasheet will have more specific calculations for things such as voltage dividers which will ultimately set the duty cycle

      • A synchronous buck converter replaces the diode with another MOSFET so that there is less power loss since the MOSFET will have lower power loss while current is flowing thru it

  • Luckily for us, these buck converters come in convenient little ICs that will do all this switching for us

    • We need two of these, one for 12V and one for 5V

    • WEBENCH Power Designer

    • Integrated FET packages (the mosfet comes inside the IC)

      • Mouser Filter Link

      • TI Filter Link

      • Analog Devices Filter Link

        • Nothing on here that can do more than 6V output

      • TI TPS56A37

        • $2.87 on Mouser

        • 4.5V to 28V input

        • 0.6 to 13V output

        • Supports 10A continuous output current

        • Seems most appropriate for our 20V->12V use-case especially since other ICs can't supply as much current

        • QFN package

      • TI TPS62933ODRLR

        • $0.99 on Mouser

        • 3.8 - 30V input

        • 5V output

        • 3A

        • 12 uA quiescent current

        • @Champers Fu approved!

        • This one is really good, perhaps we should use it for more designs

    • External FET Buck Controller packages also exist and were looked into briefly (mosfet is outside the IC, might be more cost-effective and able to provide enough current)

Input Voltage Range

  • Originally the decision was made to have two buck converters both bucking from the source voltage of 5-20V. The reason this decision was made early on was because a heavy emphasis was being placed on this board working with a wide range of USB PD chargers for a larger applicability.

    • If your source charger doesn’t support anything from 12-20V, and only supports something 9V or lower, you could still originally operate on the 5V output.

  • However, this decision needs some reconsideration. First, an argument could be made for not supporting anything other than 20V.

    • 12V isn’t typical on these laptop chargers and is usually considered an “optional” voltage

    • While it would be cool to run on 5V/9V chargers, perhaps the design considerations necessary for them (such as a 5V buck bypass mosfet in case the voltage input is 5V to prevent voltage dropout, or a similar design on the 12V buck for an input 12V) isn’t worth it.

    • Most common is the 65W USB-C laptop charger, which usually is 20V at 3.25A (bucks down to approx. 12V at 5.41666667A).

    • We could even buy a few of these Anker 100W USB PD chargers for people to use with the device.

    • Also, we don’t need that much current for the 5V bus since it’s mainly for CAN, so we can safely fail negotiation and then just use SAFE_5V from the USB-PD chip

  • Additionally, supporting a wider range of voltage inputs is making development slightly more difficult for not all that much gain.

    • Supporting 5V and 12V requires us to have a bypass MOSFET around the buck converter in order to not lose a lot of power (12V into the 12V buck converter will not output 12V, and similarly with 5V) because if you put Vout into Vin of a buck converter there will be a voltage drop.

  • All in all, a larger variety of chargers supported may just make our lives harder. Thus, let’s decide to make it only operate if the USB-PD charger supports 15 or 20V.

  • This is easily modified during testing via placement of different resistors.

Buck Converter Pipeline

  • 15/20V → 12V → 5V, a series configuration, means we only have one unknown voltage input from the USB-PD chip, which is better than having an unknown voltage go into both the 12V and 5V converter.

 

Power Path & Flowchart:

PD Board Plan.png

A few notes on this:

  • The 5V output needs to be isolated from the 12V output for CANbus, since our CAN chip requires an isolated bus-side power

  • If the source does not support 15/20V, a safe 5V will be generated by the USB-PD chip that will then be input into an ORring diode configuration in order to output it to the same 5V port.

  • The triangles are ORring diodes.

PD Board Plan.png
  • A major benefit to this scheme would be to allow negotiating for 12V and either using a buck/boost converter that supports 12V input and 12V output; or bypassing the buck entirely.

    • In his review, Matthew Yu suggested having a buck-boost TPS55289 that cost $6 more than the previously selected TPS56A37. Additionally, using a buck-boost only to then input the same voltage that you are outputting does not make much sense.

    • One may think that a buck-boost converter would allow for 12V at even lower negotiated VBUS, such as 5V or 9V, but this may complicate the power path. If the negotiated voltage is 5V, then we boost to 12V and then buck again to 5V it’s not super optimal. Instead, keeping the “allowed' voltages to 12, 15, and 20 allows us to use the SAFE 5V output for 9V and 5V inputs, which is probably enough current for most purposes (900mA).

  • Maybe bypassing the 12V buck is an option. Here’s a TI forum post of someone attempting to do this exact thing.

    • On the post they recommend using their buck’s built-in 100% duty cycle mode. The TPS56A37 on the other hand only supports up to 98% duty cycle, probably with some efficiency losses.

      • Maybe 98% isn’t too bad? We can swap out the resistor once the board is ordered to see the voltage drop.

    • Most of these forum posts seem to suggest that it will require more development time to figure out switching circuitry for a bypass, and recommend simply purchasing a buck or buck-boost with a built in bypass or 100% duty cycle.

  • A third option is to just negotiate for 12V and allow the voltage drop over the buck converter.

    • This could be optimal. Our SOMs have an UVLO point of 10.4V. Assuming the voltage drop is not greater than a volt, this may be worth it.

    • The downside is that it may be bad for our spec if a power supply that says it outputs 12V doesn’t output highly regulated 12V. Plus, voltage droop from high current draws may drag it below the UVLO point.

Also added a transient voltage suppresion (TVS) diode after review (see https://github.com/lhr-solar/USBCPowerPCB/pull/1#issuecomment-2294664194 and https://www.ti.com/lit/an/slvaf82b/slvaf82b.pdf?ts=1723847436491)

PMOS Power Switch Configuration:

(Infineon CYPD3177-24LQXQT)

Question: What does this even do?

Answer:

  • https://www.homemade-circuits.com/bidirectional-switch/

  • TLDR; even if a MOSFET is not powered via the gate, the diode can still carry current if it flows into the gate. This double MOSFET configuration prevents current from flowing either way, so there is no power loss across the diode when inactive.

    • If both MOSFETs are on then current can pass either way, but if both are not on current cannot flow at all due to the diode.

    • Bidirectional switch

    • image-20240526-232130.png

Let's try to understand the configuration (this is a slightly more detailed version with specific part numbers as presented in the Evaluation Board Design):

  • SAFE_PWR_EN (or as referenced here SAFE5V_FET_EN) is driven to 0V if negotiation fails and USB PD falls back to 5V at 1A. Otherwise it is high impedance.

  • If negotiation fails, VBUS_OUT = 5V and SAFE_PWR_EN = 0V. The voltage divider drives the MOSFET's gates at ~0.098V.

    • When negotiation fails, the common source node (where S1 connects to S2 on the diodes) will be equal to VBUS_OUT (5V).

    • Therefore, VGS = 0.098 - 5 = -4.90200 V

    • As according to the datasheet, VGS(th) = -1.5V. Remember, since this is a P-channel MOSFET, it gets activated with a negative VGS.

    • So VGS > VGS(th), therefore the gate of both MOSFETS will allow current to flow and SAFE_5V_OUT will get 5V.

  • Why do we need the 49.9k and 1k resistors?

    • The 49.9k really acts more like a large pull-up resistor rather than a voltage divider from what I can tell. If negotiation of USB-PD succeeds, SAFE_PWR_EN is high impedance. This means that it will be easily influenced by whatever is connected to it, so it can be pulled up/down. Then, VBUS_OUT pulls it up to its voltage so that the gate is not triggered (since then source = gate)

      • This sort of pull up resistor from gate to source is common as protection circuitry in case the gate pin goes floating or gets fried or something. It will ensure that the gate goes to 0V if the pin goes high impedance.

    • The 1k is for protecting the gate inputs to the MOSFETs (see https://www.build-electronic-circuits.com/mosfet-gate-resistor/ )

  • Make sure that the sources are connected

    • For this sort of configuration, the sources need to be at the same voltage level since you want to control the gates via the same line. The MOSFET chooses to turn on when the gate-source voltage is above VGS(th) , so the source reference needs to be the same in both a PMOS or NMOS config.

A similar configuration is used for the main output of the board as well. The reason we use a PMOSFET controlled switch for VBUS_OUT instead of just directly outputting to the sink is shown below (see pg 10 of Evaluation Board Design)

TPS56A37RPAR Buck Converter Notes (15-20V → 12V)

See section 7.2.2 of the datasheet linked above.

 

image-20240829-191629.png

 

  • Undervoltage lockout calculations (see datasheet pg 13)

    • image-20240602-062418.png

    • According to this, the tolerance of USB PD with a fixed voltage charger (non PPS) is about 5%, which affects Vstart and Vinmin

  • R6/R7 calculations for output voltage

  • Using Table 7-2, recommended values are as follows for Output Voltage and Output Filter selection:

    • image-20240527-031623.png
  • Note: for this next set of calculations, I referenced this presentation and chose a safety factor for Vin of about 20%.

  • Equation 8 (inductor peak-to-peak ripple current):

    • image-20240527-035202.png
  • Equation 9 (peak current)

    • image-20240527-035512.png
  • Equation 10 (RMS current)

    • image-20240527-035857.png
  • When choosing an inductor, it seems like we want to pay attention to the following things:

    • Inductance must be as specified (5.6 uH)

      • SRF (self-resonant frequency) should be a good amount (at least 10x) higher than the operating frequency (500kHz)

    • Saturation current should be higher than peak current + ripple current, since as soon as the inductor reaches the saturation current it will drastically decrease in inductance (see this)

    • Rated current should be >= the typical DC current to make sure the inductor doesn’t heat up too much.

    • A shielded inductor keeps stray magnetic fields from screwing up your circuit

  • Equation 11 (rms current rating for output capacitor) (C5/C6 on diagram, Cout in table)

    • image-20240608-230313.png
    • Note: choosing max Vin of 25V for safety factor

    • Capacitor value is 2 22uF ceramic caps as listed in table above

  • Equation 12 (input voltage ripple)

    • C3’s voltage rating must be greater than the max input voltage, which is the max input voltage + any voltage input ripple. Voltage ripple is calculated as follows:

    • image-20240528-072516.png
    • Note that Cin = 20.1uF here since the total input capacitance on the input is two 10uF caps and one 0.1uF cap

    • So maximum Vin (without considering safety factor) = 20V + 0.27V = 20.27V

  • Equation 13 (input cap current ripple)

    • image-20240529-043942.png
  • Ensure that 0.1uF bootstrap capacitor (C4) has 10V or higher voltage rating, ceramic capacitor with X5R or better dielectric

From https://github.com/lhr-solar/USBCPowerPCB/blob/v1.0/BuckCalcs.xlsx , the appropriate component values are as follows.

image-20240829-191623.png

Note: calculations were done with Io = 10A since this buck is designed to carry that load.

15/20V → 12V

UVLO: Vstart at 14.25V, Vstop at 12.75V

Component

Value

Component

Value

R1

55479.45205

R2

4987.684729

R6

383k

R7

20k

L1

5.6uH

Cap Selection

  • Input caps:

    • need to be 50V or greater since input voltage can go up to 20V and we care about derating for bucks

    • Ripple current rating (Arms) > 3.646422753

    • Voltage ripple rating (Vrms) > 0.303

    • seems like larger capacitors have a better derating curve

Output Protection

  • This buck already has protections for overvoltage and overcurrent on the output, and undervoltage on the input, as well as a soft start time to prevent current inrush on startup. Really the only thing I’m going to add extra to the output is a mosfet to ensure that current doesn’t flow backwards into the buck.

TPS562231DRLR Buck Converter Calculations (12V → 5V):

Recommended component values have been provided in the datasheet:

 

image-20240829-043630.png

From https://github.com/lhr-solar/USBCPowerPCB/blob/v1.0/BuckCalcs.xlsx , the appropriate component values for a 5V output are as follows.

R1 = 73.2kOhms

R2 = 10kOhms

L1 = 4.7uH

Cout = 47uF

Additionally, bootstrap capacitor from BST to SW of 0.1uF, and Input Capacitor of 10uF for decoupling (and a 0.1uF from VIN to GND for high frequency filtering)

Inductor values

L

0.0000047

IL_PP

0.730079266

IL_PK

2.865039633

IL_RMS

2.508867868

TPS2116DRL Power Mux

A priority power mux like this one will allow me to switch between the 5V buck output and the safe 5V output from the USB Type-C PD chip all in an integrated package. It also includes reverse current blocking.

 

image-20240905-225737.png

 

5V → Isolated 5V converter:

ROE-0505S is a cheap option available on DigiKey/Mouser that outputs 1W (200mA), which is the most power we can get without jumping up by like $7. It’s very simple to use (V+in, V-in → V+out, V-out).

Additionally, I’ll include a PTC resettable fuse on the output here that protects the 5V ISO chip:

image-20241013-211456.png

This holds at 0.16 A and trips at 0.37 A, which seems more than suitable for the CAN bus usecase.

Development

GITHUB LINK

Version 1 Pull Request

Misc. Tips and Design Notes:

  • Originally I was using the downloaded symbols for the MOSFETs when creating the schematic, but then I realized KiCad has a large base of existing symbols for common device configurations. For example, Device:Q_Dual_NMOS_S1G1S2G2D2D2D1D1 models an NMOS FET similar to the 12V Output N-Channel MOSFET.

    • Additionally, the MOSFET symbols you might download for one of these things will just look like a rectangle:

      image-20240602-230318.png
    • vs the KiCAD dual mosfet symbol (far clearer in what it actually is):

      image-20240602-230420.png
    • So using the symbols from the Device library for a MOSFET, and then linking it later to the downloaded footprint for the desired FET, will make the schematic clearer.

  • This website is pretty good for resistor values: https://jansson.us/resistors.html

    • Choose E24 for most commonly available values

  • Originally I calculated inductors for max input of 20V, but in order to overspec it (as a safety measure) I’m going to redo the calculations for 25V and pick new inductors & ensure that the buck converters will still work as intended

  • According to this presentation, the voltage tolerance on USB PD is +-5%. The undervoltage lockout points have been set at exactly these values so that we can ensure proper operation.

  • Use wolfram alpha for conversions and calculations, it works pretty well.

  • Murata (and many other manufacturers) caps may not provide the DC bias curves for a capacitor on the datasheet directly, but have external design tools linked on the Mouser or Digikey page that will have the specific curve for the selected cap.

    • Digikey will often have more resources than Mouser, so make sure to check there.

    • See this reddit comment:

      That's just an example graph to show that ferroelectric dielectrics are shit. You need to look at the curves for the specific part number capacitor, which is not always available.