Schnittstelle für USB -Typ -C -Ladegeräte mit PD/PPS
Dieses Projekt stammt aus einer Kolaboration mit Embrand GmbH.
Sie haben einen tollen Job gemacht
Es gibt einige interessante Boards, die USB -Stromversorgungsquellen ausgelöst haben. Wie der zy12pdn.
Sie können viele Details bei Manuel BL finden. Mit diesen Modulen können Sie die verfügbaren Fixprofile durchlaufen, die 5 V, 9 V, 12 V, 15 V und 20 V enthalten. Es gibt viele andere da draußen, einige haben eine ausgewählte Spannung durch Widerstände oder Springer.
Ich habe es geschafft, einen in die Hände zu bekommen. Dieser ist entweder durch Widerstände oder einen Mikrocontroller mit I2C programmierbar.
Leider liegt dies weit unter den Fähigkeiten eines PD 3.0 -konformen Netzteils. Alle diese Module verwenden nur sogenannte Fixprofile. Es gibt jedoch den PPS -Modus (porgrammierbare Stromversorgung). Dies verwendet das erweiterte Profil. Die erweiterten Profile werden von 3,3 V bis 21 V und bis zu 5 A durchgeführt. Die Spannung kann in 20 mV -Schritten ausgewählt werden und der maximale Strom kann in 50 mA -Schritten ausgewählt werden.
Und hier ist meine Idee: Haben Sie jemals einen dieser klobigen Laborversorgungen benutzt, die den größten Platz auf Ihrem Schreibtisch einfressen? Diese Netzteile reichen oft zwischen 0 und 30 V und 0 - 5 A. für mich verwende ich meistens 5 - 15 V bei einigen Verstärkern.
Was ist, wenn wir dieses erweiterte Profil verwenden können, um ein Labor -Netzteil nachzuahmen? Wir würden einen Chip benötigen, der dieses Profil von einem geeigneten PPS -fähigen USB -Netzteil des Typs C anfordern kann.
Nun, da ist der einfache und der harte Weg:
Der einfache Weg wäre, einem Chip zu sagen, dass er das gewünschte Spannungsformular für die Stromversorgung anfordern soll.
Ein solcher Chip ist der AP33772, der bei Dioden erhältlich ist. Sie können ein dediziertes Bewertungsausschussformular Dioden oder andere Hersteller z. Microe. Dies ist die USB-C-Spüle 2 Klicken Sie auf Formular Microe: 
Dieser Chip wurde als NRND markiert und durch die AP33772 ersetzt. Die "S" -Version ist noch einfacher zu bedienen, hat aber einen großen Nachteil: Sie ermöglicht nur 100 MV- und 250 -mA -Schritte.
Die harte Möglichkeit besteht darin, einen dieser USB-C-PD-Phys zu verwenden. Sie bieten eine OSI 0 + 1 -Schnittstelle zur Stromversorgung. Höhere Ebenen müssen in SW implementiert werden. Der am häufigsten verwendete Chip scheint die FUSB302 -Form des Halbleiters zu sein. Dieser Chip wurde im ursprünglichen ZY12PDN verwendet.
Und hier ist es: 
Dies ist der von Ryan MA verzeichnete PD-Micro. Es ist Aruuduino Pro Micro mit dem FUSB302, einigen LEDs, einem Netzschalter und einem Spannungsregler. Ryan hat es einfach gemacht, angemessene Profile auszuwählen. Kai Clemens Liebich hat einige Verbesserungen an Ryans FUSB302 Lib vorgenommen.
Das einzige Problem ist die Spannungsstabilität. Auch bei Verwendung von 5 A -USB -C -Kabeln ist der Spannungsabfall ziemlich signifikant. Möglicherweise müssen wir die Ausgangsspannung messen, um die Netzteilspannung zu fannen. Die Fristsidee bestand darin, den internen ADC mit einer externen 2,048 -V -Spannungseferenz zu verwenden. Das Problem ist, dass dies nur ein 10 -Bit -ADC ist, aber wir müssen Spannungen bis zu 21 V messen. Unter der Annahme, dass wir bei 20,48 V einschneiden, werden wir eine Auflösung von 20 mV haben. Dies scheint gerade genug zu sein, aber wir können es leicht besser machen. Bei Verwendung eines dedizierten ADC, z. B. ina219
Wir können die Präzision auf 4 mV verbessern. Dies liegt weit unterhalb der 20 -MV -Schritte. A Wir bekommen einen aktuellen Sensor oben.
Warnung vor dem aktuellen Sensor ACS712
Der ACS 712 ist ein einfach zu bedienender isolierter Stromsensor. Aber:
Jetzt können wir eine Spannung einstellen, den Ausgang aktivieren und die Ausgangsspannung und den Strom messen. So können wir ein paar Codezeilen schreiben, um eine konstante Spannung / Stromquelle zu implementieren. Nun, die Reaktionszeit des Reagulators wird durch die Geschwindigkeit der Stromversorgung begrenzt, liegt jedoch innerhalb angemessener Grenzen, die von Ihrem USB -Netzteil abgeschlossen werden. Mein PS ist ein veralteter ugreen Nexode 2 mit 100W, der ~ 40 schaltet. 50 ms.
Aber wie ist die Spannung und das Strom -Slectet? Nun, wir könnten eine serielle Schnittstelle und einen Computer verwenden, um die Schaltung zu "Fernsteuerung". Aber was ist mit einem LCD, einem Drehschalter als UI?.
Und das führt mich zu meinem ersten Prototyp.

Und hier sind die Komponenten im Uhrzeigersinn mit der oberen linken.

Dies ist der Spannungs- und Stromsensor. Der Shunt -Widerstand wurde auf R015 reduziert, um eine 5 -Skala -Lektüre zu erhalten.
Es gibt einen seriellen EEPROM 24C256 im Vorstand. Dies wird für den Parameterspeicher verwendet. Ich hätte den Atmel's on Chip Eeprom verwenden können, aber dies hat viel weniger Verschleißfestigkeit. Ich wusste nicht, wie viele Schreibzyklen benötigt werden, also entschied ich mich für ein externes Eeprom

Dies ist das Herz der Schaltung.
Der USB -C -Anschluss des PD -Micro ist von der Stromversorgung besetzt. Die USB -Oberfläche kann nicht für die Kommunikation verwendet werden. Die serielle HW -Schnittstelle ist daher mit einem ft232 -USB -an -Serienchip verkabelt.

Dies ist ein 20x4 HD44780 -kompatibler Display mit PCF8574, Spannungswechselrichter und Stromquelle für Kontrast, wie in meiner LCD -Bibliothek beschrieben.
Links zum Display gibt es einen KY-040-Rotary-Encoder-Schalter. Direkt über dem Schalter befindet sich nur eine I2C- und VCC -Bus -Bar.
Welche Funktionen braucht ein Labor -Netzteil?












Beim Start zeigt das System eine Version an und erstellt die Nachricht, bevor Sie im Hauptmenü beginnen.
PD/PPS-Controller
====================
Ver. : 3.3 nbl
Build: mmm dd yyyy
Nach Abschluss der Initialisierung wird das Hauptmenü angezeigt
Mode (x:...) [UI^] !
UU.UU V I.II A
OUT UU.UU V I.II A
[i i i i i] (i)
Letzte Zeile I: Menü -Symbole
Um ein Menüelement auszuwählen, drücken Sie die Taste, wird ein Cursor angezeigt. Drehen Sie den Drehschalter, bis der Cursor an der Position des gewünschten Elements liegt. Drücken Sie erneut die Taste, um das Menü auszuwählen. In diesem Menü sind "V" und "A" in der zweiten Zeile auch Menüelemente. Wählen Sie, um die gewünschte Spannung oder den gewünschten Strom einzustellen.
In diesem Menü wird das gewünschte PD -Profil ausgewählt.
# 1 / n (...)
U= UU.UU V - UU.UU V
I= I.II A max
[i i i] (i)
Letzte Zeile I: Menü -Symbole
Um ein Profil auszuwählen, drücken Sie die Taste Navigieren Sie zum Symbol "#" in der ersten Zeile und drücken Sie erneut, um die Profilauswahl einzugeben. Das Drehen wird durch Avalabla -Profile treten. Um ein Profil auszuwählen, drücken Sie erneut und navigieren Sie zum Überprüfen Sie die BUTHOM -Zeile oder wählen Sie "x" aus, um abzubrechen.
In diesem Menü wird der Betriebsmodus oder den Kalibrierungswert geändert.
(i)=auto (*)=. *
(i)=auto
(i)=auto
[i i i x] (i)
[i] oder (i) Symbole in Klammern
I= I.III A: I.III A
[i i i x] (i)
[i] oder (i) Symbole in Klammern
Um die Strommesskalibrierung einzustellen, aktivieren Sie die Ausgabe mit einer Last und verwenden Sie ein kalibriertes Ampere -Messgerät, um den Strom zu messen.
Geben Sie das Einstellungsmenü ein und gehen Sie zum Kalibrierungsmenü. Geben Sie den gemessenen Strom ein und wählen Sie das Checkmark aus, das empfohlen wird, um einen Strom so hoch wie möglich zu wählen, um maximale Genauigkeit zu erhalten.
Der AVR SW ist mit Arduino IDE geschrieben. Während der Entwicklung des SW habe ich ein paar Dinge über das System herausgefunden:
Nach anfänglicher Erfolge lief ein schneller Probleme mit Flash und RAM. Möglicherweise können Sie den AVR -Code ausführen, aber ich empfehle, die Funktionalität des freien Speichers zu verringern.
Und das führt mich zum zweiten Prototyp unter Verwendung von ATSAMD21G18.
Die Software im AVR -Ordner ist wie sie sind. In diesem Zweig wird es keine weitere Entwicklung sein. Es arbeitet, aber auf eigenes Risiko verwendet. Es wird nur ohne Bootloader kompiliert. Sie müssen die Datei boards.local.txt über den Konfigurationsordner zu Toy hinzufügen
C:Users_user_AppDataLocalArduino15packagesarduinohardwareavr1.8.6
(mindestens unter Windows -Maschinen) und wählen Sie Arduino Leonardo mit Bootloader aus den verfügbaren Boards.
Sie benötigen AvrDude und eine USBASP
Hinweis: Seien Sie vorsichtig, wenn Sie eines der billigen Klone kaufen. Sie kommen oft mit veraltetem SW und funktionieren nicht. Es ist kein Problem, diese zu aktualisieren, aber Sie benötigen einen funktionierenden USBASP -Adapter.
Programmierer, um die SW zu blinken. Für Non -CLI -Benutzer: Avrduess ist eine großartige GUI für AvrDude.
Sie können genauso gut eine Arduino Uno als USB -zur ISP -Brücke verwenden.
Nach meinen Rückschlägen probierte ich einen Arduino Zero. Diese Karte verwendet den ATSAMD21G18, ein Kortex M0+ Arm Controller, der bei 48 MHz ausgeführt wird. Es hat 256 KB Blitz und 32 KB RAM und viele Schnittstellen. Ein kurzer Anschluss zeigte, dass die SW leicht von AVR zu ARM portiert werden konnte, ohne dass keine Probleme sind.
Dies war der Punkt, an dem wir uns entschlossen haben, unsere erste benutzerdefinierte PCB zu starten, um alle Probleme mit dem ersten Portotyp zu vermeiden.
Einige Kopfschmerzen verursachen die VCC -Versorgung. Die meisten Buck -Wandlerschaltungen benötigen eine Spannungs -Kopffreiheit, um einen Unterspannungssperrkreis zu bedienen und zu "aufzeigen". Aber dies ist ein No -Go -für diese Schaltung. Es muss bis zu 3,3 V VBUs arbeiten. Wir benötigen einen Unterspannungsbypass -Curcuit, um den Betrieb von 3,3 V VBUS zu garantieren. Andernfalls würde die Schaltung aussperrt, wenn VBUS unter den Schwungstholt fällt, der normalerweise 4 V - 4,7 V bei 3,3 V -Ausgang beträgt.
Dieses Problem wurde leicht übergreicht. Wir haben zwei 3,3 V -Regulatoren verwendet, die von idealen Dioden oriert werden.
Der TPS62932 ist so konfiguriert, Der LDO ist ein NCV2951ACDMR2G auf 3,3 V. Die Ausfallspannung beträgt max. 450 mV bei 100 mA. Der aktuelle Verbrauch der Schaltung liegt unter 50 Ma, sodass wir einen geschätzten maximalen Abfall von 300 mV haben.
Wenn die Eingangsspannung über 5,06 V liegt, ist der LDO im Leerlauf und der VCC 3,45 V. Wenn der Eingangsspannung unter 4,55 V fällt, ist der Buck -Konverter deaktiviert und der LDO nimmt OVE, was zu einem VCC von 3,3 V führt. Wenn der Eingangsvoltoge weiter fällt, sinkt VCC auf ~ 3 VBUs.
Die CPU wird je nach den Brownout -Einstellungen auf 2,7 V ausgeführt.
Die PCBA: 
Ein funktionierender Prototyp:
Current Calibration
internal I.III A
reference I.III A
[i i i x] (i)
Der aktuelle Messwert und der Referenzwert wurden neu organisiert.
Das SW wurde neu gestaltet und ist jetzt USB-PD2. Im ersten SW wurde die Steuerung des Netzteils in der Menüklasse implementiert. Dies wurde in eine eigene Controller -Klasse verschoben.
Ein Header für Todo -Erinnerungen wurde hinzugefügt, dass eine Netztest -Testklasse hinzugefügt wurde, um Profiländerungen zu testen.
Um den SW zum ersten Mal zu blinken, benötigen Sie eine JTAG -Debug -Schnittstelle wie z. B.
Sie können Atmel Studio oder die Arduino -IDE verwenden, um den Arduio Zero Bootloader zu blinken.
Sie können auch die Blink -Demo verwenden. Wählen Sie Skizze -> Binär exportieren. Die IDE erstellt eine Datei xxx.ino.with_bootloader.arduino_zero.bin. Flash die Datei einfach. Möglicherweise müssen Sie die Sicherungsbits aus einem Arduino Zero kopieren.
Es gibt einige Proben im Fusesordner. Einige der Sicherungen sind fabrikstimmig und können nicht überschrieben werden.
Sobald der Bootloader funktioniert, können Sie SW über den Sam-Ba-Bootloader flashen. Der von Microchip bereitgestellte SW verfügt über eine CLI, die für alle SAM-Geräte geeignet ist, die SAM-Ba unterstützen, und daher etwas schwierig zu bedienen ist. Ein viel einfacheres Werkzeug ist Bossa von Shumatech.
Mein Ladegerät unterstützt 5 V / 9 V / 12 V / 15 V @ 3A und 20 V @ 5A Fixprofile und 3,3 V - 21 V @ 5 A erweitertes Profil. Achten Sie darauf, dass viele mit 100W (sogar UGreen) markierte Ladegeräte nur 65 -W -PPS (3,25 a) mit begrenztem Spannungsbereich unterstützen. Sie können Spannungen unter 3,3 V nicht unterteilen. Einige haben sogar zwei PPS -Profile mit Differnet -Spannung / Strom -Bewertungen.
UGREEN NEXODE 2 PORT 100W PD-Lader (Modell CD254 #50827) unterstützte Profile:
UGreen Nexode 100W Desktop -Ladegerät (Modell CD328 #90928) unterstützte Profile:
Anker Powerport I 30W PD
Unterstützte Profile:
Ilepo USB C Schnelles Ladegerät 65 W
Unterstützte Profile
INIU Power Bank 20000mah, 22,5W
Unterstützte Profile
Einige Stromversorgung scheinen die Leistung zurückzusetzen, wenn kein Strom gezogen wird.
Mein "Nexode 100W Desktop -Ladegerät" P/N 90928 wird nach ~ 1 h ohne Last zurückgesetzt. Andere Ladegeräte nicht.
Meine INIU Power Bank wird ohne Last innerhalb von ~ 10s zurückgesetzt
Protokoll bei laden 20R
0006: FUSB302 ver ID:B_revA
0118: USB attached CC1 vRd-3.0
0172: RX Src_Cap id=1 raw=0x53A1
0172: obj0=0x2A01912C
0172: obj1=0x0002D0E9
0172: obj2=0x0003C096
0172: obj3=0xC076323C
0172: obj4=0xC0DC3228
0172: [0] 5.00V 3.00A
0172: [1] 9.00V 2.33A
0172: [2] 12.00V 1.50A
0172: [3] 5.00V-5.90V 3.00A PPS *
0172: [4] 5.00V-11.00V 2.00A PPS
0176: TX Request id=0 raw=0x1082
0176: obj0=0x42022628
0186: RX GoodCRC id=0 raw=0x0121
0192: RX Accept id=2 raw=0x05A3
0210: RX PS_RDY id=3 raw=0x07A6
0212: PPS 5.50V 2.00A supply ready
0214: Load SW ON
5214: TX Request id=1 raw=0x1282
5214: obj0=0x42022628
5222: RX GoodCRC id=1 raw=0x0321
5228: RX Accept id=4 raw=0x09A3
5246: RX PS_RDY id=5 raw=0x0BA6
5246: PPS 5.50V 2.00A supply ready
10248:TX Request id=2 raw=0x1482
10248: obj0=0x42022628
10256:RX GoodCRC id=2 raw=0x0521
10262:RX Accept id=6 raw=0x0DA3
10280:RX PS_RDY id=7 raw=0x0FA6
10280:PPS 5.50V 2.00A supply ready
...
Protokoll ohne Laden:
0006: FUSB302 ver ID:B_revA
0118: USB attached CC1 vRd-3.0
0172: RX Src_Cap id=1 raw=0x53A1
0172: obj0=0x2A01912C
0172: obj1=0x0002D0E9
0172: obj2=0x0003C096
0172: obj3=0xC076323C
0172: obj4=0xC0DC3228
0172: [0] 5.00V 3.00A
0172: [1] 9.00V 2.33A
0172: [2] 12.00V 1.50A
0172: [3] 5.00V-5.90V 3.00A PPS *
0172: [4] 5.00V-11.00V 2.00A PPS
0176: TX Request id=0 raw=0x1082
0176: obj0=0x42022628
0186: RX GoodCRC id=0 raw=0x0121
0192: RX Accept id=2 raw=0x05A3
0210: RX PS_RDY id=3 raw=0x07A6
0212: PPS 5.50V 2.00A supply ready
0214: Load SW ON
5214: TX Request id=1 raw=0x1282
5214: obj0=0x42022628
5222: RX GoodCRC id=1 raw=0x0321
5228: RX Accept id=4 raw=0x09A3
5248: RX PS_RDY id=5 raw=0x0BA6
5248: PPS 5.50V 2.00A supply ready
10250:TX Request id=2 raw=0x1482
10250: obj0=0x42022628
10258:RX GoodCRC id=2 raw=0x0521
10264:RX Accept id=6 raw=0x0DA3
10284:RX PS_RDY id=7 raw=0x0FA6
10284:PPS 5.50V 2.00A supply ready
==> The Power bank resets and defaults to 5V only.
0006: FUSB302 ver ID:B_revA
0118: USB attached CC1 vRd-3.0
0352: TX Get_Src_Cap id=0 raw=0x0087
0704: TX Get_Src_Cap id=0 raw=0x0087
1056: TX Get_Src_Cap id=0 raw=0x0087