Enviando señales al puerto USB usando C

7

Quiero enviar una señal simple de 5V al puerto usb. El aislamiento de la cabina USB se retirará y se conectará a un relé que está conectado a un sistema de puerta eléctrica. Creo que debería escribir este código en C. ¿Alguien me puede dar una pista?

    
pregunta user5369

5 respuestas

8

No puede hacer lo que quiere con solo conectar un relé al puerto USB.

El USB es un bus, con un protocolo serie que se ejecuta en él. Es necesario que se conecte con ese bus utilizando los protocolos adecuados.

Necesitará un "dispositivo" de uso que se pueda programar para responder a un estímulo basado en computadora y activar una señal externa.

Hay muchas maneras de lograr esto, desde productos ya preparados, a través de kits de bricolaje y hasta circuitos integrados discretos que puede utilizar para construir su propio sistema.

Personalmente recomendaría uno de los muchos kits de bricolaje disponibles, como Placa de interfaz de experimentación USB Velleman K8055 . Hay muchos otros como este.

Si quieres entrar en el grano esencial, entonces debes estar mirando cosas como los microcontroladores (en los que se basa Velleman), que pueden programarse para hacer muchas cosas diferentes. Algunos de estos tienen soporte USB incorporado, pero se necesita bastante conocimiento profundo del protocolo USB para familiarizarse con estos. La mayoría de la gente usa un chip "FTDI" para convertir el USB en RS-232 primero.

Si desea un producto comercial, puede considerar la posibilidad de un producto de puerto de impresora paralelo USB, que puede programar y acceder como si fuera un puerto paralelo (Centronics) directamente conectado a tu computadora. Esto le daría 8 salidas que puede activar y desactivar.

Sin embargo, hay que tener cuidado con otra cosa: la mayoría de las salidas de computadora / microcontrolador no serán lo suficientemente potentes como para controlar directamente un relé. Deberá pasar la señal a través de algún circuito "controlador" para lograr suficiente potencia. Esto puede ser tan simple como un solo transistor, o puede que esté mirando algo más complejo, como un MOSFET, etc. Ah, y tenga cuidado con "Back EMF": un relé es una "carga inductiva".

    
respondido por el Majenko
6

USB no es tan simple como parece que lo es. USB tiene un protocolo de comunicación que no le permite simplemente dar salida alta o baja.

Probablemente, la forma más sencilla de hacer esto es usar un microcontrolador conectado a través de USB mediante un método serial a USB. Puede usar un chip FTDI para hacer esto. Después de conectarse al chip FTDI, la computadora instalará un puerto serie virtual. Luego puede enviar datos a este puerto serie y el microcontrolador lo recibirá a través de UART. Luego, el microcontrolador puede leer los paquetes que envía y puede tener 1 paquete para 'on' y otro para 'off'. El microcontrolador simplemente girará un pin alto o bajo según el último paquete que recibió.

Otra opción a considerar sería usar el puerto serie directamente. Muchas computadoras le dan el control sobre el claro para enviar pines de tipo. Si puedes obtener esta habilidad, entonces solo sería cuestión de tener un programa que cambiara el estado de envío.

    
respondido por el Kellenjb
2

USB es un sofisticado bus serie que permite la comunicación entre un host (su PC) y hasta 127 dispositivos (todo tipo de productos te conectas a tu PC). Así que parece que no tienes acceso directo al autobús, de todos modos no puedes simplemente encenderlo y apagarlo con él. Pero hay una serie de soluciones a esto.

Las

PC vienen con menos puertos EIA232 (a menudo referidos con su antiguo nombre RS232), pero a veces se necesita uno. Algunas empresas especializadas en interfaces, denominadas bridges , convierten el bus USB en EIA232. FTDI es un fabricante bien conocido de esos puentes, y en otras respuestas se sugiere usar señales de control EIA232 para controlar un relé. Esto puede funcionar, pero en realidad es un uso inadecuado de EIA232.

Un producto menos conocido de FTDI es el FT245R convertidor de USB a FIFO, que le permite controlar E / S de propósito general a través de USB. Este producto de DLP Design es un módulo listo para usar basado en el FT245R.

UseunadelasE/Sparacambiarunreléatravésdeuntransistor.(LasE/Snopuedenentregarlacorrienterequeridaparaconducirelrelédirectamente).

Consultetambién esta respuesta a una pregunta relacionada.

    
respondido por el stevenvh
0

Como han señalado otros, USB es un bus, por lo que necesita utilizar un dispositivo en el otro extremo para traducir los comandos del bus en acciones físicas. La forma más fácil de hacerlo es usar una cantidad de productos existentes diseñados para esto sin necesidad de escribir código para el extremo incorporado, por ejemplo, Phidgets tiene una amplia gama de dispositivos: esta placa de retransmisión es probablemente lo que desea.

Si estás preparado para aprender un poco de programación integrada, un Arduino o un teensy podría proporcionar opciones más asequibles y hackeables.

    
respondido por el Nick Johnson
0

Cambiar directamente 5v solo sería posible si tuviera información de programación de bajo nivel y derechos de acceso para el USB PHY o el chip hub, es decir, la capacidad de habilitar / deshabilitar el 5v VBUS (y hacerlo específicamente para un puerto en particular , si necesita mantener otros dispositivos como un teclado USB funcionando.

Definitivamente, hay sistemas en los que esto sería posible (por ejemplo, el único puerto USB de una tableta con la que estaba jugando recientemente), pero es un hack muy portátil y no específico para la implementación.

La mayoría de las veces, las sugerencias que todos los demás le dan para usar un chip de E / S USB, como un FT245 o un microcontrolador habilitado para USB o incluso una tarjeta de relé USB lista para usar, son preferibles, ya que funcionan a través de controladores que se basan en el protocolo USB estándar y no dependen del conocimiento íntimo de los chips particulares utilizados para implementar la interfaz del host o el hub.

EDITAR: Estoy tratando de recordar, en realidad puede haber comandos estándar para habilitar / deshabilitar VBUS de puertos descendentes específicos en un concentrador, pero en la práctica pocos concentradores tienen el dispositivo de conmutación de alimentación necesario para implementarlo. Encontrar uno que lo haga puede no ser más fácil / barato que comprar la placa de relés USB.

    
respondido por el Chris Stratton

Lea otras preguntas en las etiquetas