Forum: Mikrocontroller und Digitale Elektronik USB-C zum Laden und Programmieren


von Michael Z. (michael_z970)


Lesenswert?

Hi!
Sorry, ich weiß nicht, wonach ich noch suchen soll. Mag an mir liegen, 
aber ich finde nichts.

Also ich würde für ein Device mit integriertem Akku gerne einen USB-C 
Anschluss vorsehen, über den ich sowohl den Akku laden, als auch mit dem 
µC Board sprechen kann, zum programmieren oder für eine serielle 
Schnittstelle. Gibt es da Lösungen auf Breakout-Board, die beides 
ermöglichen?

Wenn ich google, dann finde ich nur Stromversorgung des µC über USB oder 
"Programm laden" oder was auch immer.

Danke!
      - Michael

von Εrnst B. (ernst)


Lesenswert?

Wo liegt denn das Problem?

Wenn dein USB-Gerät zur Kommunikation oder Firmware-Upload verbunden 
ist, stellt der Host auch Strom bereit, mit dem du z.B. deinen Akku 
laden könntest.

d.H., das was du dir wünscht und nicht finden kannst, ist eine 
elementare Grundfunktion die gefühlt jedes µC/USB-"Breakout-Board" 
mitbringt. Es wäre sehr aufwändig, das wegzubekommen.

Vermutlich findest du deshalb nichts im Internet.

von Chris V. (nagut)


Lesenswert?

Michael Z. schrieb:
> einen USB-C
> Anschluss vorsehen, über den ich sowohl den Akku laden, als auch mit dem
> µC Board sprechen kann

Dann nimmst Du am besten ein moderneres µC-Board, das den USB-C 
Anschluss und auch einen Ladecontroller für den Akku schon On-Board hat. 
Mögliche Kandidaten wären z.B. einige der Seeed XIAO-Boards, z.B. der 
hier:

https://www.seeedstudio.com/Seeed-XIAO-RA4M1-p-5943.html

von Michael Z. (michael_z970)


Lesenswert?

Εrnst B. schrieb:
> Wo liegt denn das Problem?
>

Danke für die Rückmeldung!
Das „Problem“, wenn man es so nennen will, liegt weniger an der 
grundsätzlichen Funktion, sondern eher an der praktischen Umsetzung: 
Viele der gängigen USB-zu-Seriell-Chips auf Breakout-Boards melden 
gegenüber dem Host keine höhere Stromaufnahme an (z. B. für USB-C 
>500 mA). Dadurch wird das Board zwar versorgt, aber ein angeschlossener 
Akku lässt sich nur sehr langsam laden, weil einfach nicht genug Strom 
zur Verfügung steht — selbst wenn die Stromquelle eigentlich mehr 
liefern könnte.
Mir geht es darum, beides sauber zu kombinieren: schnelle Ladefunktion 
und Datenverbindung über einen gemeinsamen USB-C-Port, idealerweise ohne 
gleich eine eigene USB-PD-Lösung oder Lade-IC-Schaltung aufbauen zu 
müssen.

von Michael Z. (michael_z970)


Lesenswert?

Chris V. schrieb:
> Michael Z. schrieb:
>> einen USB-C
>> Anschluss vorsehen, über den ich sowohl den Akku laden, als auch mit dem
>> µC Board sprechen kann
>
> Dann nimmst Du am besten ein moderneres µC-Board, das den USB-C
> Anschluss und auch einen Ladecontroller für den Akku schon On-Board hat.
> Mögliche Kandidaten wären z.B. einige der Seeed XIAO-Boards, z.B. der
> hier:
>
> https://www.seeedstudio.com/Seeed-XIAO-RA4M1-p-5943.html

Danke! Den schaue ich mir an! Aber es gibt ja auch noch andere Gründe 
sich für das eine oder andere Board zu entscheiden. Da wäre eine 
allgemeinere Lösung natürlich ganz nett.

von Frank K. (fchk)


Lesenswert?

Michael Z. schrieb:

> Mir geht es darum, beides sauber zu kombinieren: schnelle Ladefunktion
> und Datenverbindung über einen gemeinsamen USB-C-Port, idealerweise ohne
> gleich eine eigene USB-PD-Lösung oder Lade-IC-Schaltung aufbauen zu
> müssen.

Naja, einen Laderegler wird Du je nach Akku ohnehin brauchen, und wenn 
Du mehr Strom oder höhere Spannungen haben willst, wirst Du auch um PD 
nicht drumrum kommen. Aber da gibts Lösungen:

https://ftdichip.com/products/ft232hp/

Der kann nicht nur einen UART bereitstellen, sondern auch über die 
CC-Leitungen mehr Leistung aushandeln.

fchk

von Frank K. (fchk)


Lesenswert?

Chris V. schrieb:
> Michael Z. schrieb:
>> einen USB-C
>> Anschluss vorsehen, über den ich sowohl den Akku laden, als auch mit dem
>> µC Board sprechen kann
>
> Dann nimmst Du am besten ein moderneres µC-Board, das den USB-C
> Anschluss und auch einen Ladecontroller für den Akku schon On-Board hat.
> Mögliche Kandidaten wären z.B. einige der Seeed XIAO-Boards, z.B. der
> hier:
>
> https://www.seeedstudio.com/Seeed-XIAO-RA4M1-p-5943.html

Das ist aber ein schlechtes Beispiel. Hast Du Dir den Schaltplan 
angesehen? Die CC-Pins sind nur mit den üblichen 5.1k gegen Gnd 
beschaltet. Mehr nicht. Das Board ist schon von der Hardware her nicht 
in der Lage, mehr Strom oder höhere Spannungen auszuhandeln, und mehr 
wie 500mA kann man im USB-Deskriptor bei USB 2.0 eben nicht angeben.

Es gibt STM32-Bausteine, die die CC-Pins direkt ansteuern können:
https://www.st.com/content/st_com/en/ecosystems/stm32-usb-c.html

fchk

von Michael Z. (michael_z970)


Lesenswert?

Frank K. schrieb:
> Naja, einen Laderegler wird Du je nach Akku ohnehin brauchen, und wenn
> Du mehr Strom oder höhere Spannungen haben willst, wirst Du auch um PD
> nicht drumrum kommen. Aber da gibts Lösungen:
>
> https://ftdichip.com/products/ft232hp/

Perfekt! Ja, den Laderegler brauche ich natürlich. Aber mit zwei 
Anschlüssen, einen zum Laden und einen zum Flashen, find ich unschön. 
Schaue ich mir an!

von Chris V. (nagut)


Lesenswert?

Frank K. schrieb:
> Chris V. schrieb:
>> Michael Z. schrieb:
>>> einen USB-C
>>> Anschluss vorsehen, über den ich sowohl den Akku laden, als auch mit dem
>>> µC Board sprechen kann
>>
>> Dann nimmst Du (...) z.B. der hier:
>> https://www.seeedstudio.com/Seeed-XIAO-RA4M1-p-5943.html
>
> Das ist aber ein schlechtes Beispiel. Hast Du Dir den Schaltplan
> angesehen? Die CC-Pins sind nur mit den üblichen 5.1k gegen Gnd
> beschaltet. Mehr nicht. Das Board ist schon von der Hardware her nicht
> in der Lage, mehr Strom oder höhere Spannungen auszuhandeln, und mehr
> wie 500mA kann man im USB-Deskriptor bei USB 2.0 eben nicht angeben.

Ja. Zum Zeitpunkt meines Posts hatte Michael noch nicht mit der 
Information herausgerückt, dass er für sein Gerät offenbar sehr viel 
Leistung braucht und daher USB-PD erforderlich ist. USB-C kann man sich 
ja auch noch aus einigen anderen Gründen wünschen.

von Michael Z. (michael_z970)


Lesenswert?

Ich brauche jetzt auch gar kein PD im Moment, aber das wäre ja ein 
Anwendungsfall. Mehr als 500mA bei 5V würde ich aber schon gerne 
verwenden können, wenn die Quelle das bereitstellen kann.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Michael Z. schrieb:
> Ich brauche jetzt auch gar kein PD im Moment, aber das wäre ja ein
> Anwendungsfall. Mehr als 500mA bei 5V würde ich aber schon gerne
> verwenden können, wenn die Quelle das bereitstellen kann.

Früher(tm) wurde der Strombedarf des Geräts mittels des Device 
Descriptors angemeldet, und zwar in 2 mA-Schritten bis maximal 500 mA. 
Das war ein ganz normaler Bestandteil des USB-Datenprotokolls.

Neuerdings, d.h. seit dem Steckertyp USB C, laufen das Aushandeln der 
Stromversorgung und der Datenverkehr jedoch völlig separat. Im 
einfachsten Fall sieht man einfach die 5,1 kOhm-Widerständen an den 
beiden CC-Pins vor, beim Wunsch nach mehr Spannung oder noch mehr Strom 
hängt man eben einen PD-Controller an die CC-Leitungen. Dieser 
Controller kann, aber muss nicht separat vom normalen USB-Controller 
laufen. Hierfür sehr zu empfehlen ist z.B. ein STM32G0, für den es von 
ST auch die entsprechenden PD-Bibliotheken gibt. (Tipp: nicht die 
veraltete und verkorkste Version verwenden, die STM32CubeMX generiert, 
sondern die jeweils neueste direkt vom Github-Repository verwenden!)

Ich habe erst kürzlich ein Gerät entwickelt, bei dem zuerst ein G0 das 
USB PD aushandelt und nach erfolgreichem Aushandeln von mindestens 
12V/3A die Spannungsregler für die anderen Schaltungsteile aktiviert, so 
auch den STM32H7 für die Hauptfunktionalität, der an den 
USB-Dateileitungen hängt.

Früher(tm) hatte man ja immer das Problem, dass der "dicke" Prozessor 
mit den maximal 5 V/100 mA auskommen musste, die während der 
USB-Enumeration zur Verfügung standen. Das ist seit PD-Zeiten somit viel 
besser gelöst. Viele Geräte halten sich aber auch nicht an die 100 
mA-Grenze, sondern saugen von Anfang an schon deutlich mehr, in der 
Hoffnung, die z.B. 500 mA auch wirklich zugeteilt zu bekommen.

von Harald K. (kirnbichler)


Lesenswert?

Möglicherweise lassen sich zwei Fliegen mit einer Klatsche erschlagen, 
wenn man als µC den CH32X035 einsetzt. Der enthält einen 
USB-Device-Controller und weiß mit USB PD umzugehen.

Softwareunterstützung für den gibt es mit ch32fun von cnlohr.
https://github.com/cnlohr/ch32fun

Zwei (allerdings nur auf USB PD bezogene) Beispiele für die Anwendung 
gibt es vom wagiminator:
https://github.com/wagiminator/CH32X035-USB-PD-Tester
https://github.com/wagiminator/CH32X035-USB-PD-Adapter

Kaufen kann man den Chip von WCH selbst, die betreiben bei aliexpress 
einen eigenen "Store" (der allerdings immer zum Wochenende hin 
ausverkauft ist).

Von "weact studio" gibt es eine fertige Platine damit
https://github.com/WeActStudio/WeActStudio.CH32X035CoreBoard

von Torsten R. (tom365)


Lesenswert?

USB-PD-Controller:   FUSB302 , FUSB303, FUSB307..
Lässt sich mit βC relaiv einfach konfigurieren und die entsprechende 
Ladespannung(5V,9V,12V,15V,20V) und Stromstärke anfordern.(bis 3A)
Auch eine Umschaltung der Stromrichtung ist möglich.

: Bearbeitet durch User
von Michael Z. (michael_z970)


Lesenswert?

Super! Danke, das sind erstmal ausreichend Infos! Auf einen spezifischen 
µC zu schwenken, "nur" um die Stromversorgung auszuhandeln, mag in 
Einzelfällen ok sein, aber wie ich schon schrieb hängen die 
Entscheidungen an anderen Eigenschaften. Die CC Leitungen durch eine 
separaten Controller zu bedienen, das ist genau, was mir nicht klar war.

Danke
- Michael

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Michael Z. schrieb:
> Super! Danke, das sind erstmal ausreichend Infos! Auf einen spezifischen
> µC zu schwenken, "nur" um die Stromversorgung auszuhandeln, mag in
> Einzelfällen ok sein, aber wie ich schon schrieb hängen die
> Entscheidungen an anderen Eigenschaften. Die CC Leitungen durch eine
> separaten Controller zu bedienen, das ist genau, was mir nicht klar war.

Das ist heutzutage kein Einzelfall. Viele Geräte enthalten heutzutage 
eigenen Power-Management-Controller, die nur für das zeitlich korrekte 
Aktivieren der Versorgungsspannungen zuständig sind. Und dementsprechend 
ist es SEHR ratsam, auch das USB PD darüber laufen zu lassen. Und der 
Hauptprozessor startet erst dann, wenn der PMC festgestellt hat, dass 
der Ladezustand des Akkus ausreicht, diese oder jene externe 
Spanungsversorgung hinreichend stabil anliegt und/oder der nötige Saft 
per USB PD ausgehandelt wurde und tatsächlich als Vbus auch anliegt. Und 
den separaten Resetgenerator spart man sich ggf. auch. Neben dem 
Hochfahren geht es ja auch noch ums kontrollierte Ausschalten und ggf. 
um die Akkuüberwachung und -ladung in ausgeschaltetem Zustand. Wenn man 
versucht, das alles auf dem Hauptprozessor zu erledigen, muss man 
schlechte Kompromisse eingehen oder einen Bauteilemehraufwand eingehen, 
der deutlich über dem für einen winzigen Zusatzcontroller liegt. 
Mittlerweile gibt es ja auch schon einige dedizierte Spannungswandler, 
die solch einen programmierbaren Controllerkern integriert haben.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.