Energieversorgung per USB
USB Power Delivery
USB Power Delivery ist ein Standard innerhalb des USB 3.x-Protokolls, der die Stromversorgung und die Spannungspegel innerhalb des USB-Netzwerks festlegt.
Mit USB-PD ist es möglich, Verbraucher in Reihe zu schalten, die dann automatisch den Strombedarf mit der/den Quelle(n) aushandeln. Der Standard hat verschiedene Versionen, von denen die neueste (2021) bis zu 5 Ampère bei 3,3...48V
und maximal 240 Watt Leistung zulässt.
USB-PD-Rollen
Im USB-Power-Delivery-Standard gibt es verschiedene Rollen, die die Teilnehmer an den Enden eines USB-Kabels spielen können. Sie können Host oder Client für Datenzwecke und gleichzeitig Stromquelle, Stromsenke oder beides für andere Teilnehmer sein.
Rollenbegriffe
USB-C verwendet das Akronym DFP
oder “Down-Facing Port”, um zu verdeutlichen, dass es sich um den Port eines Host handelt. UFP
oder “Up-Facing Port” wird für Clients verwendet, die mit Hosts verbunden werden können. Es gibt aber noch eine dritte Rolle: DRP
oder “Dual-Role Port”. Dieser Anschluss kann entweder als Host oder als Client dienen, je nachdem, wer der Verbindungspartner auf der anderen Seite der Leitung ist und was das USB-Netzwerk aushandelt.
Im USB-PD-Kontext kann jeder dieser Ports so konfiguriert werden, dass er als Stromquelle oder Stromsenke dient. Beispiel: Obwohl die Rolle des USB-C-Anschlusses eines Laptops auf “DFP” konfiguriert sein kann, kann er, wenn er an eine Stromquelle angeschlossen ist, immer noch eine Stromsenke sein. Hmm.
In diesem Beitrag verwende ich nur die “UFP”-Rolle sowohl im Sinne des USB-C- als auch des USB-PD-Wortes. Also versuche ich, eine Stromsenke für mein Gerät zu konfigurieren, damit es die benötigte Eingangsspannung und den Strom erhält.
USB-PD Version
- Vor USB-PD Standard 2.0 unterstützten USB-C-Geräte nur sogenannte Power Profiles mit festen Spannungen von 5V, 12V, 20V und Strömen von bis zu 2A, 3A, oder 5A.
- Zwischen USB-PD Standard 2.0 und USB-PD 3.0 haben Power Delivery Objects die alten Power Profiles ersetzt, die es erlauben, verschiedene Spannungen/Stromstärken von der Senke auszuwählen je nach Angebot der Stromquelle. Die Spannungen sind auf 5V, 9V, 15V, 20V festgelegt, mit Strombegrenzungen von 2.25A, 3A, 5A, je nach Fähigkeit der Quelle und Spannungseinstellung.
PDO
s erlauben Fallback-Strategien, d. h. wenn eine Quelle die höchste Leistungsanforderung nicht unterstützen kann, kann die Senke ein anderesPDO
mit geringerer Spannung/Strom auswählen, das sowohl für die Quelle als auch für die Senke geeignet ist. - Mit USB-PD Standard 3.0
PPS
bietet das Protokoll mit Programmable Power Supply noch mehr Flexibilität. Hier fordert eine Stromsenke einen Spannungspegel zwischen3,3V
und21V
an, der in20mV
-Schritten und 0,2 bis 5A in50mA
-Schritten wählbar ist, wobei die volle Rückwärtskompatibilität zu den Power Delivery Objects von USB-PD 2.0 erhalten bleibt. - Der neueste USB-PD Standard 3.1 erweitert sogar die Grenzen der programmierbaren Stromversorgungen und erlaubt 3,3V - 48V und bis zu 5A mit AVS - Adaptable Voltage Files. Puh.
Nicht alle Quellen (Steckdosen, Powerbanks usw.) können alle Spannungspegel oder Stromstärken liefern oder haben überhaupt nur den gleichen Standard in der Umsetzung. Aber eine Reihe von Werten ist ziemlich üblich: 5V, 9V, 12V, 15V, 20V. Einige der Produkte, die ich auf dem Markt gesehen habe, bieten bis zu 4A, aber die meisten halten es mit bis zu 3A und Spannungen bis zu 15V sind am häufigsten (im Jahr 2021).
ASICs für die Stromversorgung
ASIC steht für Application Specific Integrated Circuit (anwendungsspezifischer integrierter Schaltkreis), und in diesem Beitrag versuche ich, ASICs mit der Funktion der Stromsenke zu beleuchten, die eigenständig arbeiten können, d. h. ohne ein externes Steuergerät wie einen Mikroprozessor. Ich habe drei Typen dieser ICs gefunden:
- USB-PD-Senke, Spannungs- und Stromeinstellung über eine Widerstandskaskade
- USB-PD-Senke, Spannungs- und Stromkennlinie über den Datenbus programmierbar (I2C/UART/SPI) in den nicht-flüchtigen Speicher des ASIC.
- USB-PD-Senke mit integriertem Mikroprozessor, der programmiert werden muss
Was alle ASICs gemeinsam haben: Sie benötigen periphere Schaltungen, um zu funktionieren - zumindest einige Widerstände, Kondensatoren und Leistungstransistoren, um die Stromversorgung zu schalten und mit angeschlossenen Stromquellen zu verhandeln.
USB-PD ist komplex: Versionierung und Vertragsverhandlungen
Sowohl die Abwärtskompatibilität als auch die Skalierbarkeit von USB-PD fordern ihren Tribut - die USB-PD-Spezifikation ist ein mehr als 600 Seiten starkes Monster und es ist nicht immer klar, welche Quelle oder Senke welche Protokollebene unterstützt.
Da sowohl die Quelle, die Senke als auch das Kabel einen Power-Delivery-Vertrag aushandeln müssen, der auf den Anforderungen der Senke, den Stromversorgungsoptionen der Quelle und den Möglichkeiten des Kabels basiert, kann man sich vorstellen, dass dieser Prozess sehr komplex ist. Dies gilt umso mehr, als dass alle Beteiligten möglicherweise einen anderen USB-PD-Standard, eine andere Revision oder eine andere Version implementiert haben. Kleiner Fakt am Rande: Der Zip-Ordner des USB-Power-Delivery-Spezifikationspakets auf der offiziellen Seite hat eine Dateigröße von >42MB
. Obwohl ich dieses Thema für sehr interessant halte, habe ich nicht die Zeit, mich in die Einzelheiten zu vertiefen 😅.
Lassen wir also all dieses Zeug hinter uns und versuchen, eine einfach zu implementierende Lösung zu finden.
Beispiel-ASICs
Ich habe willkürlich drei ICs aus dem Internet ausgewählt, die von verschiedenen Firmen angeboten werden, jeweils einen pro Gerätetyp:
- Cypress/Infinions CYPD3177, ein USB-PD-Sink-Controller mit Widerstandskonfiguration
- STMicroelectronics’ STUSB4500, ein USB-PD-Sink-Controller mit Speicher-Konfiguration
- Microchips UPD301C, ein voll programmierbarer USB-PD-Dual-Role-Controller
Ich werde mir zuerst den STUSB4500 genauer anschauen.
Chipkrise / IC-Knappheit
Für die Integration in meinen Entwurf wollte ich einige Muster kaufen. Leider war die Chip-Knappheit so groß, dass keiner der Distributoren, bei denen ich normalerweise Elektronikteile bestelle, für das nächste Jahr welche auf Lager hatte. Deshalb habe ich mich entschlossen, eine Entwicklungsplatine zu bestellen, auf der der ASIC bereits montiert ist. Das ist zwar 10x teurer als der Chip selbst, aber hier hatte ich keine Wahl.
Integration eines STUSB4500
Der STUSB4500 verwendet den USB-PD-Standard 2.0 - also nicht den neuesten und besten - aber die Abwärtskompatibilität mit späteren Standards macht ihn zu einem schnellen und einfachen Ausgangspunkt. Das Gerät wird mit drei Power Delivery Objects vorprogrammiert:
- PDO1 = 5V/1.5A
- PDO2 = 15V/1,5A
- PDO3 = 20V/1A
Für meine AnywhereAmps Alpha 1.1 evolution 1.2 kann ich das Ding also ohne Neuprogrammierung sofort verwenden. Wenn ich die Power-Delivery-Objekte ändern wollte, würde ich ein Arduino-Board mit I2C verwenden und die STUSB4500-Bibliothek installieren, die z. B. unter Platformio leicht erhältlich ist. Damit könnte ich sogar die programmierbare Stromversorgung von USB-PD 3.0 aktivieren, wenn ich wollte. Mal sehen, wenn ich die Zeit finde, werde ich einen speziellen Blogeintrag für die Programmierung des STUSB4500 vorbereiten.
Einschalten des Verstärkers
OK, also habe ich das Eval-Board an ein 15V-fähiges 30V USB-C-Netzteil angeschlossen. Die violette LED zeigt an, dass 15V auf der Ausgangsschiene verfügbar sind.
Jetzt habe ich meine Verstärkerschaltungen an den Ausgangsklemmen für einen ersten Test angeschlossen. Die STUSB-Auswertungsplatine leuchtet nicht mehr, Verstärker aus. Meh. Wenigstens habe ich einen Hinweis darauf, was die Ursache sein könnte: Es sind wieder kapazitive Einschaltströme! Um Geräte mit großen Kondensatoren mit Strom versorgen zu können, muss ich entweder den Strom im PDO auf abnorm hohe Werte einstellen, oder ich entscheide mich für die Konstruktion einer geeigneten, miniaturisierten Einschaltstrombegrenzerschaltung. Ich habe bereits einen Prototyp aufgebaut, den ich hier vorstelle.
Sollten Sie USB-PD für Ihre Projekte verwenden?
Die Antwort lautet eindeutig “es kommt darauf an”. Obwohl die Möglichkeiten von USB-PD großartig sind, gibt es ein paar Nachteile:
- Es wird ein zusätzlicher ASIC mit Peripherie benötigt, um die “Verträge” auszuhandeln. Dies benötigt Platz auf der Leiterplatte und erhöht die Projektkosten erheblich.
- Um vollständig abwärtskompatibel zu sein, ist es sinnvoll, einen ASIC zu kaufen, der sowohl den Standard 3.x unterstützt, als auch idealerweise programmierbar ist.
- Wenn Sie einen programmierbaren Baustein nehmen, gibt es eine zusätzliche Lernkurve für die Softwareentwicklung, die ASIC-spezifischen Bibliotheken, die Sie verwenden werden, und möglicherweise sogar die Notwendigkeit für Programmierhardware
- Sie müssen sicherstellen, dass die Stromversorgung und das Kabel mit den Anforderungen Ihrer USB-PD-Senke kompatibel sind. Zudem sind Kabel für hohe Ströme teuer
- Der USB-C-Anschluss ist miniaturisiert. SMD-Löten und Einsteiger-Lötstationen werden wohl nie Freunde werden, daher solltest etwas Erfahrung in diesem Bereich mitgebracht werden.
- Hochstecker sind viel einfacher in einem Gehäuse zu montieren als eine Platine mit aufgesetzter USB-C-Buchse, die zudem starken mechanischen Belastungen standhalten muss.
Andererseits ist die Verwendung von USB-PD sehr sinnvoll, wenn
- ein mobiles Gerät betrieben werden soll, das mitgenommen oder häufig an verschiedenen Stromquellen betrieben werden soll
- die Flexibilität batteriebetriebener Geräte gewünscht ist: Einfach eine kompatible Powerbank anschließen und los geht’s
- ohnehin eine Datenverbindung zu Ihrem Gerät benötigt wird
- besondere Anforderungen an Ihre Stromversorgung bestehen und ganz bestimmte Spannungen/Ströme geliefert werden sollen
- ein einfacher Überstrom- und Überspannungsschutz von Haus aus gewünscht ist