Senden von Signalen an den USB-Anschluss mit C.

7

Ich möchte ein einfaches 5V-Signal an den USB-Port senden. Die Isolierung des USB-Kabels wird entfernt und an ein Relais angeschlossen, das an ein elektrisches Türsystem angeschlossen ist. Ich denke, ich sollte diesen Code in C schreiben. Kann mir jemand einen Hinweis geben?

user5369
quelle
3
5V Signal an den USB Port? Ich bin mir nicht sicher, was du willst.
Kellenjb
Okay, Elektronik ist nicht meine Spezialität. Ich muss ein Signal vom USB-Anschluss an das USB-Kabel senden. Das ist alles, egal was ich vorhin über 5V gesagt habe :)
user5369
Wie wäre es mit einem USB-zu-Seriell-Gerät und steuern Sie einfach eines der Signale wie "Bereit zum Senden" oder ähnliches?
Kenny

Antworten:

8

Sie können nicht das tun, was Sie wollen, indem Sie nur ein Relais an den USB-Anschluss anschließen.

Der USB ist ein Bus, auf dem ein serielles Protokoll ausgeführt wird. Sie müssen mit den richtigen Protokollen eine Schnittstelle zu diesem Bus herstellen.

Sie benötigen ein "Gerät", das so programmiert werden kann, dass es auf einen computergestützten Stimulus reagiert und ein externes Signal aktiviert.

Es gibt viele Möglichkeiten, dies zu erreichen, von vorgefertigten Produkten über DIY-Kits bis hin zu diskreten ICs, mit denen Sie Ihr eigenes System erstellen können.

Persönlich würde ich eines der vielen verfügbaren DIY-Kits empfehlen, z. B. das Velleman K8055 USB Experiment Interface Board . Es gibt viele andere, die es mögen.

Wenn Sie sich auf das Wesentliche einlassen möchten, müssen Sie sich beispielsweise Mikrocontroller (auf denen der Velleman basiert) ansehen, die so programmiert werden können, dass sie viele verschiedene Aufgaben ausführen. Einige von ihnen verfügen über eine integrierte USB-Unterstützung, aber es erfordert eine gründliche Kenntnis des USB-Protokolls, um diese in den Griff zu bekommen. Die meisten Leute verwenden einen "FTDI" -Chip, um den USB zuerst in RS-232 umzuwandeln.

Wenn Sie ein Produkt von der Stange wünschen, sollten Sie die Möglichkeit eines Produkts mit parallelem USB-Druckeranschluss prüfen, auf das Sie programmieren und zugreifen können, als wäre es ein paralleler Anschluss (Centronics), der direkt an Ihren Computer angeschlossen ist. Dies würde Ihnen 8 Ausgänge geben, die Sie ein- und ausschalten können.

Eine weitere Sache, auf die Sie achten sollten: Die meisten Computer- / Mikrocontroller-Ausgänge sind nicht leistungsfähig genug, um ein Relais direkt anzusteuern. Sie müssen das Signal über eine "Treiber" -Schaltung einspeisen, um genügend Leistung zu erzielen. Dies kann so einfach wie ein einzelner Transistor sein, oder Sie betrachten etwas Komplexeres wie einen MOSFET usw. Oh, und achten Sie auf "Gegen-EMK" - ein Relais ist eine "induktive Last".

Majenko
quelle
Ist es möglich, den RJ45 nur zum Senden eines Signals zu verwenden? oder muss ich einen Mikrocontroller verwenden?
user5369
Der RJ45 ist ein Ethernet-Port, der auch über Protokolle und Signale verfügt, über die Sie sich Sorgen machen müssen. Genauso komplex wie (wenn nicht mehr als) USB.
Majenko
1
@ user5369 - Der Ethernet-Anschluss ist wie der USB-Anschluss kein Single-Ended-Signalisierungssystem. Signale werden mit Differenzströmen über die Leitung gesendet, nicht indem die Leitung hoch oder niedrig gemacht wird. Parallele Druckeranschlüsse und serielle RS232-Anschlüsse sind die einzigen Anschlüsse, die Sie wahrscheinlich auf Ihrem PC finden und die Single-Ended-Signale verwenden, mit denen Sie je nach Wunsch "hoch" oder "niedrig" einstellen können.
Kevin Vermeer
6

USB ist nicht so einfach, wie Sie zu glauben scheinen. USB verfügt über ein Kommunikationsprotokoll, mit dem Sie nicht einfach hoch oder niedrig ausgeben können.

Der wahrscheinlich einfachste Weg, dies zu tun, ist die Verwendung eines Mikrocontrollers, der über USB mit einer Seriell-USB-Methode verbunden ist. Sie können dazu einen FTDI- Chip verwenden. Nach dem Anschließen an den FTDI-Chip installiert der Computer eine virtuelle serielle Schnittstelle. Sie können dann Daten an diese serielle Schnittstelle senden und der Mikrocontroller empfängt sie über UART. Der Mikrocontroller kann dann die von Ihnen gesendeten Pakete einlesen und Sie können 1 Paket für "Ein" und ein anderes für "Aus" haben. Der Mikrocontroller würde nur einen Pin hoch oder niedrig basierend auf dem zuletzt empfangenen Paket ausschalten.

Eine weitere in Betracht zu ziehende Option wäre die direkte Verwendung der seriellen Schnittstelle. Bei vielen Computern haben Sie die Kontrolle über das Senden von Pins. Wenn Sie diese Fähigkeit erhalten können, ist es nur eine Frage eines Programms, das den Status "Klar zum Senden" umschaltet.

Kellenjb
quelle
2

USB ist ein hoch entwickelter serieller Bus, der die Kommunikation zwischen einem Host (Ihrem PC) und bis zu 127 Geräten (alle Arten von Produkten, die Sie an Ihren PC anschließen) ermöglicht. Es scheint also, dass Sie keinen direkten Zugang zum Bus haben, trotzdem können Sie damit nicht einfach Dinge ein- und ausschalten. Dafür gibt es jedoch eine Reihe von Lösungen.

PCs verfügen über immer weniger EIA232-Anschlüsse (oft mit dem alten Namen RS232 bezeichnet), aber manchmal benötigen Sie einen. Einige Unternehmen haben sich auf Schnittstellen spezialisiert, sogenannte Bridges , die den USB-Bus auf EIA232 umstellen. FTDI ist ein bekannter Hersteller dieser Brücken, und in anderen Antworten wurde vorgeschlagen, EIA232-Steuersignale zur Steuerung eines Relais zu verwenden. Dies mag funktionieren, aber tatsächlich ist es die missbräuchliche Verwendung von EIA232.

Ein weniger bekanntes Produkt von FTDI ist der USB-FIFO-Wandler FT245R , mit dem Sie Allzweck-E / A über USB steuern können. Dieses Produkt von DLP Design ist ein gebrauchsfertiges Modul, das auf dem FT245R basiert.

USB245-Modul

Verwenden Sie eine der E / A, um ein Relais über einen Transistor zu schalten. (Die E / A können nicht den erforderlichen Strom liefern, um das Relais direkt anzusteuern.)


Siehe auch diese Antwort auf eine verwandte Frage.

stevenvh
quelle
0

Wie andere bereits betont haben, ist USB ein Bus. Sie müssen daher ein Gerät am anderen Ende verwenden, um Busbefehle in physische Aktionen umzusetzen. Der einfachste Weg, dies zu tun, besteht darin, eine Reihe vorhandener Produkte zu verwenden, die dafür entwickelt wurden, ohne Code für das eingebettete Ende schreiben zu müssen. Beispielsweise verfügen Phidgets über eine ganze Reihe von Geräten. Diese Relaisplatine ist wahrscheinlich genau das, was Sie möchten.

Wenn Sie bereit sind, ein wenig Embedded-Programmierung zu lernen, bietet ein Arduino oder ein Teensy günstigere und hackbarere Optionen.

Nick Johnson
quelle
0

Ein direktes Umschalten von 5 V wäre nur möglich, wenn Sie über Programmierinformationen auf niedriger Ebene und Zugriffsrechte für den USB-PHY- oder Hub-Chip verfügen, dh die Möglichkeit, den 5-V-VBUS zu aktivieren / deaktivieren (und dies speziell für einen bestimmten Port, wenn Sie dies tun) müssen andere Geräte wie eine USB-Tastatur funktionsfähig halten).

Es gibt definitiv Systeme, auf denen dies möglich wäre (zum Beispiel der einzige USB-Anschluss eines Tablets, mit dem ich kürzlich gespielt habe), aber es ist ein sehr implementierungsspezifischer und nicht portabler Hack.

In den meisten Fällen sind die Vorschläge, die alle anderen Ihnen zur Verwendung eines USB-E / A-Chips wie eines FT245- oder USB-fähigen Mikrocontrollers oder sogar einer sofort einsatzbereiten USB-Relaisplatine geben, vorzuziehen, da sie über diese Funktion funktionieren Treiber, die auf dem Standard-USB-Protokoll basieren und nicht auf genaue Kenntnisse bestimmter Chips angewiesen sind, die zur Implementierung der Host-Schnittstelle oder des Hubs verwendet werden.

BEARBEITEN: Ich versuche mich zu erinnern, dass es möglicherweise Standardbefehle zum Aktivieren / Deaktivieren von VBUS für bestimmte Downstream-Ports auf einem Hub gibt, aber in der Praxis verfügen nur wenige Hubs über das erforderliche Leistungsschaltgerät, um dies zu implementieren. Eine zu finden, die dies tut, ist möglicherweise nicht einfacher / billiger als der Kauf der USB-Relaisplatine.

Chris Stratton
quelle