Möglich, STM32 Nucleo-Boards mit USB-Akkupack zu betreiben?

Ich habe ein Wireless-Transmitter-Modul, das mit einem Nucleo-Board verbunden ist. Der Sensor zieht Strom (~200 mA) vom 3,3-V-Ausgangspin der Nucleo-Platine.

Fall A (erfolgreich): Wenn ich das Nucleo-Board mit einem Standard-USB-Kabel (5 V) an meinen PC anschließe/mit Strom verbinde, dann:

  • Das Sendermodul sendet erfolgreich (ich empfange erfolgreich Pakete auf der Remote-Einheit)

Fall B (erfolglos): Aber wenn ich die Nucleo-Platine mit einem USB-Kabel an einen Akkupack anschließe/mit Strom versorge (einen dieser Telefon-Backup-Akkupacks mit 5-V-Ausgang bei 1A), dann:

  • Ich erhalte 1,1 V für den Multimeter-Messwert am 3,3-V-Ausgangsstift der Nucleo-Platine

  • das Sendemodul sendet nicht (ich empfange keine Pakete auf der Remote-Einheit)

  • Die LD1 (LED) der Nucleo-Platine blinkt einfach kontinuierlich mit 1 Hz

-

Frage: Muss ich eine physische Neukonfiguration vornehmen, damit der Nucleo von einem 5-V-Usb-out-Akkupack über USB mit Strom versorgt werden kann und erfolgreich Strom (in meinem Fall etwa 250 mA) von den 3,3 V der Platine bezieht Stift raus?

Hier ist der Schaltplan des Nucleo-Boards einschließlich seiner Leistungsschaltung: http://ds.arm.com/media/resources/db/platform/st/nucleo_f401re/MB1136.pdf

Es sieht so aus, als ob das jeweilige USB-Netzteil, das Sie verwenden möchten, nicht genügend Strom für Ihr Board liefern kann. Leider gibt es msny verschiedene USB-Netzteile zur Verfügung. Einige sind großartig, einige sind gut, einige sind schrecklich. Sie haben vielleicht eine der schrecklichen Einheiten.
@Dwayne: Scheint unwahrscheinlich, dass dies der Grund ist; Ich habe drei verschiedene Akkupacks ausprobiert, die alle 1 A oder mehr liefern können – und jedes Mal das gleiche Ergebnis.
Versuchen Sie, das Multimeter in Reihe mit der Platine zu schalten, um den verbrauchten Strom zu messen (sowohl mit dem Akkupack als auch mit dem Kabel zum PC), und versuchen Sie, wenn möglich, die höchste Spitze aufzuzeichnen. HF-Module können Stromstöße aufnehmen, die viel höher sind als der angenommene Durchschnitt (in Ihrem Fall 200 mA). Ich vermute, das ist der Grund, warum es nicht funktioniert, obwohl das nicht erklärt, warum Sie eine Niederspannungsmessung erhalten haben - es sei denn, es hat die Batterie irgendwie schnell entladen.
@fceconel: Aber wenn überhaupt, liefert der USB-Akku 1 A, was mehr als 500 mA ist, die in dem (erfolgreich) getesteten Fall mit dem USB-Anschluss des Computers geliefert werden.
Die Frage ist, wie lange das Pack 1A liefern kann. Der PC kann unbegrenzt 500 mA liefern (und manchmal sogar mehr, obwohl die USB-Spezifikation dies nicht erfordert). Hast du die Daten des Akkupacks?
@fceconel: Es ist ein typischer Telefonakku; Ich habe es mit Modellen mit verschiedenen Spezifikationen von verschiedenen Herstellern versucht; zum Beispiel dieses hier: amazon.com/15000mAh-External-Battery-Portable-Charger/dp/…
Nun, scheint in der Tat ziemlich mächtig zu sein. Ich habe eine Antwort mit meiner besten Vermutung geschrieben.
Wahrscheinlich ist die Stromaufnahme zu schnell und zu kurz, als dass der interne Regler des Batteriepacks mithalten könnte. Dies sind oft billige Aufwärtswandler. Ein großer Kondensator auf der VUSB-Leitung könnte helfen.
maximintegrated.com/en/app-notes/index.mvp/id/4803 Lesen Sie dies sorgfältig durch @boardbite
Welche Art von USB hast du auf die stm32-Karte gesteckt? (Host, OTG, Gerät)?
@MathieuL: Nur zu Ihrer Information: Das Problem wurde mithilfe der von Passerby vorgeschlagenen JP1-Brücke behoben.
@boardbite Aber können Sie trotzdem sagen, welche Art von USB-Code Sie implementiert haben? Ich bin wirklich daran interessiert zu wissen, ob ein USB-Gerät sich selbst mit Strom aus einer Batterie versorgen kann.
@MathieuL: Keine. Er hat den ST-LINK-USB-Anschluss (für die Programmierung entwickelt) angeschlossen, nicht den eigenen USB des Mikrocontrollers.

Antworten (2)

Einige Optionen von einfach bis komplex:

  1. JP1 ist der Bypass-Jumper für die USB-Strombegrenzung. Wenn es AUS ist, versucht der ST/Link-Teil der Platine, mit einer hohen Leistungsanforderung aufzuzählen. Wenn es die angeforderte Leistung erfolgreich auflistet, aktiviert es das USB-Leistungs-Mosfet. Wenn es eingeschaltet ist, signalisiert es dem ST/Link, dass externe Stromversorgung verwendet wird, und sollte das Power-Mosfet trotzdem aktivieren. Einfach diesen Pullover anzuziehen sollte ausreichen.

  2. Schneiden Sie ein USB-Kabel ab und verdrahten Sie V+ entweder mit dem E5V-Pin (stellen Sie sicher, dass JP5 auf Pins 2-3 eingestellt ist, für externe Stromversorgung.) oder dem 5V-Pin, je nachdem, ob Sie die ST/Link-Seite des möchten Board auch eingeschaltet sein oder nicht. Wenn Sie den Programmierer und das Debugging nicht benötigen, während Sie sich auf einem USB-Akku befinden, verwenden Sie den 5-V-Pin. Andernfalls ist es eine Energieverschwendung, so klein sie auch sein mag. (Entfernen Sie außerdem den JP5-Jumper, um sicherzugehen.)

  3. Löten Sie das SB1 (USB Power Management Bypass). Dies ist eine normalerweise offene Jumper-Spur. Wenn es gelötet wird, umgeht es physisch das USB-Power-Management-Mosfet und verbindet USB 5V direkt mit der Zielplatine und dem 3,3-V-Regler.

Der JP1-Vorschlag hat es geschafft! (Meine Antwort darauf ist überfällig ; Entschuldigung.)

[Anmerkung: User Passerby hat das Datenblatt anders interpretiert als ich, und er hat recht. Meine Antwort wird funktionieren, aber seine ist der bessere Weg, dies zu tun. Meine Antwort enthält jedoch einige gute Informationen! ]


Die schnelle Antwort ist, dass Sie einen Kurzschluss über SB1 ("Solder-Blob 1") erstellen müssen. Wie Sie am Namen sehen können, beabsichtigen sie, dass Sie nur etwas Lötzinn zwischen die beiden Kontakte fallen lassen.

Hier ist der Grund:

Zuerst die Regeln von USB:

Die USB-Spezifikation schreibt vor, dass ein Gerät (in diesem Fall der Nucleo) nur maximal 100 mA zieht, wenn es zum ersten Mal an einen Host (den Computer oder die Stromquelle) angeschlossen wird. Wenn das Gerät nach dem Anschließen feststellt, dass es mehr Strom aufnehmen darf, kann es dies tun. Im Allgemeinen beträgt dieser höhere Strom 500 mA (max), obwohl es weitere Ausnahmen gibt, die mehr Strom zulassen.

Das Host-Gerät gibt dem Gerät vor, wie viel Strom es ziehen kann. Es liegt in der Verantwortung des Geräts, nicht des Hosts, den Stromverbrauch zu begrenzen.

Es gibt verschiedene Methoden, mit denen das Gerät weiß, wie viel Strom es ziehen darf. Hier ist ein schönes Dokument von Maxim, das die Details beschreibt. Hier ist meine kurze und unvollständige Zusammenfassung:

  • Wenn das Gerät an einen Computer, USB-Hub usw. angeschlossen ist, findet eine intelligente Konversation zwischen Gerät und Host statt. Dies wird als „Aufzählung“ bezeichnet. Während der Aufzählung kann das Gerät dem Host mitteilen, dass es mehr als 100 mA möchte. Der Host kann dann dem Gerät die Erlaubnis erteilen, mehr zu zeichnen.

  • Wenn das Gerät an einen nicht-intelligenten Anschluss angeschlossen ist (Steckdose, Akkupack usw.), kann keine Aufzählung stattfinden. Es gibt einige Schemata, bei denen das Gerät feststellen kann, dass Hochstrom verfügbar ist. Sie werden in diesem Maxim-Dokument gezeigt.

Zweitens: Wie der Nucleo diese Regeln umsetzt:

Das Nucleo-Board implementiert die zweite Option jedoch nicht. Es wird den Hauptmikrocontroller einfach nicht einschalten, bis eine Aufzählung stattfindet. Dies ist im Benutzerhandbuch , Abschnitt 5.3.1 beschrieben. Es gibt einen Jumper (JP1), mit dem Sie den Hauptmikrocontroller ohne Aufzählung aktivieren können. Leider begrenzt dieser Jumper auch die Stromaufnahme auf 100mA! Sie können nicht gleichzeitig Hochstrom und Nichtaufzählung haben. Hier ist ein Teil dieses Abschnitts:

Handbuch

Es gibt jedoch eine Lösung! Finden Sie T2 auf dem Schaltplan. Es ist der MOSFET unten links auf der ersten Seite. SB1 ist direkt daneben. Wenn Sie SB1 kurzschließen, wird der Hauptmikrocontroller immer mit Strom versorgt. Es liegt jetzt in Ihrer Verantwortung, immer an einen 500-mA-fähigen Anschluss anzuschließen :)

Beachten Sie auch, dass das Dokument sagt, dass 300 mA alles sind, was möglich ist. Vielleicht haben sie einen Spannungsregler verwendet, der nicht die vollen 500 mA regeln kann, oder vielleicht reservieren sie den zusätzlichen Stromaufwand für die nicht für den Benutzer zugänglichen Funktionen des Nucleo ... Wie auch immer, ich würde es nicht versuchen überschreiten.

Nein, ich glaube, Sie interpretieren das falsch. Die aufgeführten 100 mA max sind eine Warnung an den Benutzer, worauf sie ihr Board beschränken sollten. Es wird in keiner Weise vom Vorstand durchgesetzt. JP1 ermöglicht der Aufzählung, nur nach 100 mA zu fragen, was per USB-Spezifikation immer angegeben ist, sodass das Gerät dann den USB-Mosfet aktiviert. Wenn JP1 entfernt wird, fordert das Gerät mehr an, und wenn der USB-Host dies ablehnt (was er kann), aktiviert es den Mosfet nicht.
Das Schema auf Seite 56 zeigt, dass JP1 den Pin „Ext_Pwr“ hochzieht. Dieser Hinweis impliziert, dass Sie lediglich JP1 einschalten müssen, um die Stromversorgung zu aktivieren. Aber wie Sie bereits erwähnt haben, kann SB1 übersprungen werden, sodass "USB-Energieverwaltung deaktiviert ist".
@boardbite versuchen Sie es mit einem Jumper auf JP1. Wenn das nicht funktioniert, versuchen Sie DANN, SB1 zu löten.
@Passerby True, es gibt keine Hardware-Strombegrenzung auf der Platine. Aber es erreicht ein weiches Limit, indem sichergestellt wird, dass die Benutzerhardware nicht ohne Aufzählung eingeschaltet wird. JP1 liefert einen Eingang zu U2, das nicht der benutzergesteuerte Mikrocontroller ist. U2 zählt auf und sendet dann eine Ausgabe an den FET, wodurch die Benutzerschaltung (einschließlich des Benutzermikrocontrollers) eingeschaltet wird. Ich gehe davon aus, dass J1 bereits vorhanden war, oder es hätte den Strom begrenzt, selbst wenn es an einen Computer angeschlossen wäre ... Zumindest habe ich es so gelesen ...
@boardbite Bitte teilen Sie uns mit, ob JP1 ausreicht. Wenn ja, sollte Passerby eine Antwort erstellen und das Kopfgeld erhalten :)
Nur wenn der Computer die höhere Leistungsanforderung abgelehnt hatte. In diesem Fall würde der Mosfet nicht aktiviert, sodass die Zielplatine nicht mit Strom versorgt würde. So wie der Schaltplan und die Notiz zeigen, lässt JP1 den ST / Link denken, dass die externe Stromversorgung angelegt ist, und (ich gehe davon aus), dass das wiederum den Mosfet unabhängig von der Aufzählung aktiviert.
Eine andere Möglichkeit wäre, einfach das V + eines USB-Kabels an den E5V-Pin anzuschließen. (und bewegen Sie JP5 zu den Pins 2-3)
@Passerby: Dein 2. Vorschlag (E5V-Pin) hat auch funktioniert; Ihr erster Vorschlag, JP1 zu überbrücken, war jedoch offensichtlich bequemer und erwies sich als erfolgreich.