Forum: Mikrocontroller und Digitale Elektronik USB Spannungsversorgung durch anderen Port ausschalten.


von Markus HatKeinenNachnamen (Gast)


Lesenswert?

Hallo,

Ich habe folgende Situation:

Ich habe ein kleines PC-Mainboard(samt Display, etc.), dass mit Batterie 
betrieben wird (mobiles Gerät). An die USB Ports sind verschiedene 
Endgeräte angehängt. Von den 5 USB Ports wird nur bei einem die 
Spannungsversorgung abgeschaltet wenn der PC heruntergefahren wird. Die 
anderen 4 Ports sind IMMER mit Spannung versorgt. Dies lässt sich auch 
nicht über Jumper oder das BIOS ändern.

Nun habe ich folgendes Problem:

Die angehängten Geräte verbrauchen nun Strom (und zwar nicht gerade 
wenig) obwohl der PC aus ist, was dazu führt, dass die Batterie 
innerhalb 1 1/2 Tage von voll auf leer ist obwohl das Gerät 
ausgeschalten ist.

Ich würde nun gern die Spannungsversorgung des abschaltenden USB Ports 
dazu nutzen, die Stromleitungen der anderen USB Ports zu unterbrechen.

Ich habe schon nach Lösungen gesucht (auch hier) aber die meisten 
Beiträge waren entweder sehr speziell auf ein anderes Problem 
zugeschnitten oder hatten 10 Lösungenvorschläge, aber keine Antwort 
welche benutzt wurde oder funktioniert hat. Bei den meisten Lösungen 
waren auch FETs angegeben, die man zumindest nicht bei den üblichen 
Verdächtigen (Conrad, Reichelt) bekommt.

Daher mache ich hier mal einen eigenen Thread auf und hoffe dass mir 
jemand helfen kann. Es wäre schön wenn die Schaltung mit möglichst 
wenigen Teilen auskommt und diese bei Conrad oder Reichelt bestellbar 
wären.

Von dem was ich bei anderen Posts gelesen habe, wäre es wohl sinnvoll 
die +5V Leitung mit einem FET zu unterbrechen. Ich hätte aber auch 
nichts gegen einen günstigen Treiberbaustein, wenn es einen passenden 
dafür gibt. Wichtig wäre mir, dass alle Ports die geschaltet werden, 
trotzdem die vollen 500mA der USB-Spezifikation liefern können.

Viele Grüße,
Markus

von Malte S. (maltest)


Lesenswert?

Markus HatKeinenNachnamen schrieb:
> Die angehängten Geräte verbrauchen nun Strom (und zwar nicht gerade
> wenig)

Was sind das denn für Geräte? Beleuchtung und co? Wenn die sich an den 
USB-Standard halten würden, müssten sie sich mit 2.5 mA begnügen.
Ansonsten könnte eine Lösung tatsächlich sein, in die Versorgungsleitung 
jedes Geräts einen kleinen FET (halt irgendwas, das 500 mA schalten 
kann, MOSFET-Übersicht). Die wiederum über die Versorgungsspannung 
des schaltbaren Ports ansteuern. Logic Level N-Kanal oder falls die 
Geräte noch irgendwie sonst untereinander verbunden sind und GND nicht 
getrennt werden soll einen P-Kanal in die +5V-Leitung.
Ob das so sinnvoll ist, da außerhalb des Hosts allerhand 
Querverbindungen zu bauen, weiß ich nicht. Evtl. stattdessen mit 
Opto-MOSFETS arbeiten.

Alternativ: kann das System auf dem Host nicht vor dem Standby den 
USB-Controller deinitialisieren und den Bus am BIOS vorbei ausschalten? 
Sieh Dir mal die Power-Management-Funktionen des Betriebssystems an.

von Markus HatKeinenNachnamen (Gast)


Lesenswert?

Hallo,

Danke schonmal für die Hinweise.

An den USB-Ports hängt eine Webcam, ein WLAN Stick und der 
Touchcontroller für das Display. Diese sind immer verbunden. Der vierte 
Port ist an eine USB-Buchse gelötet um beliebige Sachen anschliessen zu 
können.

Bist du sicher dass der USB Standard im abgeschalteten Zustand nur 2,5 
mA erlaubt. Alle Handys mit USB-Anschluss die ich kenne laden auch an 
abgeschaltenen PCs und das sicherlich nicht mit 2,5 mA. Es kann 
natürlich sein, dass die alle den Standard ignorieren.

Hast du eine Information oder einen Link dazu, wie man den 
USB-Controller deinitialisieren kann und den Bus(bzw die 
Stromversorgung) softwaremäßig lahm legt? Ich habe dazu nichts gefunden.

Viele Grüße,
Markus

von Malte S. (maltest)


Lesenswert?

Markus HatKeinenNachnamen schrieb:
> Bist du sicher dass der USB Standard im abgeschalteten Zustand nur 2,5
> mA erlaubt. Alle Handys mit USB-Anschluss die ich kenne laden auch an
> abgeschaltenen PCs und das sicherlich nicht mit 2,5 mA. Es kann
> natürlich sein, dass die alle den Standard ignorieren.

Ja, ja und ja :-)
War eher ein allgemeines Seufzen darüber, dass die meisten Devices da 
sehr freizügig mit dem Stromverbrauch umgehen "weil es auch so 
funktioniert".

Ein Verbundgerät (für den Host ein Hub mit diversen weiteren Geräten 
dran) darf pro Komponente 2.5 mA ziehen, sollte auf Deine Geräte aber 
nicht zutreffen. s. http://www.testusb.com/power_issue.htm letzter 
Abschnitt

Das Problem ist, dass die meisten (Root)Hubs eben durchaus mehr Strom 
liefern und sehr viele Geräte das gnadenlos ausnutzen. Sauber ist das 
nicht.

Die einfachste Klasse solcher Geräte sind die Gadgets, die den USB auch 
oder nur zur Stromversorgung nutzen, wie Beleuchtung, Ventillator, 
Heizung, Tastaturstaubsauger, etc. die haben oft einfach alles fest an 
die +5V/GND-Lines angeschlossen und überhaupt keinen Devicecontroller 
drin, der sich ums Power-Management scheren könnte.
Die Dinger ziehen dann gerne auch mal mehr als 100 mA, was eigentlich 
nur nach Aushandlung erlaubt ist oder auch mehr als 500 mA, was 
eigentlich gar nicht erlaubt ist. Es geht halt oft gut.

Je nach Hub kann das allerdings auch zu einer overcurrent condition 
führen und auch andere Devices am selben Hub werden ggFs. zurückgesetzt 
oder kriegen einfach nicht mehr genug Saft.

Markus HatKeinenNachnamen schrieb:
> Hast du eine Information oder einen Link dazu, wie man den
> USB-Controller deinitialisieren kann und den Bus(bzw die
> Stromversorgung) softwaremäßig lahm legt? Ich habe dazu nichts gefunden.

Sorry, hatte ich falsch im Kopf. Unter 
http://marc.info/?l=linux-usb&m=127162615232234&w=2 gibt es ein 
Testprogramm, das das theoretisch kann. Allerdings unterstützen die 
meisten (Root)Hubs das leider hardwareseitig gar nicht.
Da es sich aber eben nicht um "dumme" Geräte handelt, könnte es klappen, 
explizit den Suspend-Mode zu aktivieren, würde ich aber nicht allzuviel 
drauf setzen, da passiert wahrscheinlich nicht mehr als eh schon, wenn 
der Host im Standby ist. Das sollte unter Linux durch schreiben eines 
kleinen Wertes in /sys/bus/usb/devices/usb*/power/autosuspend_delay_ms 
gehen.

Ansonsten vielleicht doch eher die Variante mit externer Hardware. 
Reicht ein Bus powered Hub aus, um alle drei Geräte zu versorgen? Dann 
könnte man auch sowas nehmen und müsste nur die Versorgung des Hub 
trennen statt einen Schalter für jedes der drei Geräte zu bauen. Oder 
direkt mit einem Hub Controller nen eigenen Hub bauen, der das 
implementiert.
Wenn der Schalter nicht direkt vor/im Hub sein kann oder soll, würde ich 
eher die Variante mit OptoMOS nehmen, das vermeidet Ärger, nicht zuletzt 
falls doch mal das zu schaltende Gerät an einem extern gespeisten Hub 
hängt. PVG612 z.B. oder AQY212EH, 550 mA, bisschen knapp, sonst 
AQY212GH. Conrad hat die AQY, aber anscheinen nur in DIP und ist nicht 
ganz billig.
Oder das gute alte mechanische Relais...

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.