Transmisión de datos a través de la luz con USB

Estoy trabajando en un proyecto que utiliza la luz como medio para la transmisión de datos. Me gustaría lograr alrededor de 2-3 MB/s. Se supone que se comporta virtualmente como cualquier cable LAN. Me gustaría saber si es adecuado construir un dispositivo alrededor de un microcontrolador como Arduino. He estado buscando en la pila y descubrí que el procesador ARM de 32 bits se ve favorecido por sobre Arduino de 8 bits en tecnología WiFi ( aquí ). No estoy seguro si esto se aplica también a la comunicación ligera.

Por cierto, he experimentado antes con el microcontrolador FTDI y no puede alcanzar más de 200 KHz sin generar muchos errores. Intenté conectar un loopback (salida directamente a la entrada) y descubrí que todavía hay errores de lectura a 300 KHz. Por lo tanto, asumo que el microcontrolador no es adecuado para este experimento. Entonces, ¿cuál sería el hardware adecuado para este experimento?

Un controlador periférico USB 3.0.
¿Está intentando implementar fibra óptica o simplemente desea transmitir datos mediante infrarrojos como trans-receptor?
El transceptor @Deamon Visible Light sería la definición correcta para mi experimento.
No estoy seguro de lo que quiere decir con "microcontrolador FTDI", pero mi sensación es que si "todavía lee errores a 300 kHz" con, por ejemplo. un FT232RL estás (¿todavía?) haciendo algo mal.
¿Qué está usando para transmitir la luz y qué está usando para recibir la luz (se espera una respuesta no trivial)?

Respuestas (2)

Bueno, una solución fácil para usted podría ser no usar un microcontrolador. En su lugar, puede usar un dispositivo USB a UART que suba hasta 3 MB/s, como un chip FTDI. Luego, todo lo que tiene que hacer es modular su señal UART en una portadora de frecuencia más alta. Finalmente, debe enviar su señal modulada por aire.

Para realizar su modulación, puede consultar esta publicación mía. El circuito era para un transmisor IR simple, pero el circuito podría funcionar con su chip FTDI sin MCU.

Lo que puede hacer para lograr tasas de datos muy altas es usar un circuito analógico para generar su onda portadora. Ni siquiera tiene que ser una onda sinusoidal si no le importa mucho contaminar una gran cantidad de espectro: con una onda cuadrada, su señal contaminaría todos los armónicos de su frecuencia portadora. Con las ondas electromagnéticas, esto sería problemático/ilegal en algunos países, pero con la luz visible, a nadie le importa, ya que se necesita una línea de visión para recibir los datos.

Suponiendo una onda cuadrada, puede usar un oscilador muy simple, como un multivibrador lógico, que puede obtenerse de un chip lógico básico HEF4047B montado como un oscilador astable.

En la primera referencia que publiqué, el "portador" sería la salida de su oscilador astable y su flujo de "datos" sería la línea TX del chip FTDI.

Para recibir datos, necesita un demodulador. Eso será conceptualmente fácil, pero más difícil en la práctica: debe multiplicar su portador con la señal de entrada obtenida de un fototransistor con alta sensibilidad a la longitud de onda de su diodo emisor. Como no conozco su experiencia técnica, no entraré en muchos detalles, pero la multiplicación analógica provocará un cambio de frecuencia de su portadora, de modo que podrá filtrarla con un filtro de paso bajo.

Cuanto mayor sea la frecuencia del operador, más fácil será eliminarlo de su flujo de datos entrantes. Una frecuencia portadora que es 8 veces más alta que su flujo de datos parece apropiada en su situación, ya que debe esperar muchas colisiones. El filtro suavizará sus datos, por lo que podría ser una buena idea recuperar su señal con un inversor activado por Schmitt. Usted puede preguntarse por qué un inversor? Porque UART tiene un alto nivel lógico cuando está inactivo, lo cual no es deseable, porque haría que su circuito siempre transmita en blanco. El circuito que propuse por primera vez en la otra publicación logró revertir la señal, por lo que debe invertirla de nuevo a la UART normal en el lado del receptor.

Según lo especificado por Deamon, es bueno usar un diodo láser, pero definitivamente no es necesario. Alcancé velocidades como la tuya con un diodo IR estándar. Requiere un buen circuito de recepción, pero es factible. Sin embargo, el rango era bastante corto: ~3 m máx. para un diodo IR direccional de muy alta potencia.

En cuanto a la mala recepción que experimente, tenga siempre en cuenta que las conexiones por cable, como USB o LAN, tienen que hacer frente al ruido, las perturbaciones, etc., lo que provoca errores de transmisión. Es bastante común. En la tecnología inalámbrica electromagnética (WiFi et al.) es muy común experimentar este tipo de problemas. Tienes que hacer frente a los siguientes elementos:

  1. Interrupción de la señal: es posible que su señal transmitida no llegue al receptor en todo momento, especialmente si está transmitiendo en el espectro visible, ya que incluso el polvo puede interrumpir la señal si es demasiado débil.

  2. Puede ver objetos a su alrededor debido al reflejo de la luz. Esto puede ocurrir y ocurrirá. Como tal, no solo su señal puede "saltar" de su transmisor a su receptor, sino que su propia señal puede corromper la señal posterior debido al rebote. Esto es bastante improbable a una velocidad tan baja, pero aún es posible.

  3. Su comunicación probablemente sea full-duplex si espera una transmisión similar a USB/UART/LAN. Eso significa que dos o más dispositivos pueden comunicarse a la vez (dos configuraciones de uno a uno, pero también de uno a muchos o de muchos a muchos), por lo que su pila de protocolos tiene que manejar eso. Si realmente tiene una comunicación full-duplex, no puede simplemente deshabilitar el receptor cuando transmite para evitar el #2, por lo que necesita un circuito de demodulación más complejo.

  4. Es probable que su circuito no flote en un vacío ideal perfecto: hay muchas cosas que "emiten" en el espectro que ha elegido. Dependiendo de la longitud de onda que seleccione, su receptor se contaminará con muchas cosas que tal vez ni siquiera vea. Por ejemplo, una lámpara fluorescente emite una pequeña cantidad de IR y UV junto con la luz visible. Si bien siente que el fluorescente tiene una emisión constante de "CC", no es el caso. Es mucho más ondulatorio y lleno de armónicos, por lo que puede contaminar una gran parte del espectro visible. Los receptores IR baratos (38 kHz o similares) incluyen circuitos grandes para evitar estos problemas.

Ahora que tiene una buena visión general de todos los problemas que encontrará, solo agregaría un comentario final sobre el problema de su microcontrolador:

Su chip AVR probablemente sea lo suficientemente rápido para manejar su flujo de datos de 3 MB/s si solo está enrutando desde el chip FTDI al circuito del transceptor IR. Su problema es probablemente que el marco Arduino es demasiado fácil de usar y, por lo tanto, muy lento. De hecho, logré una velocidad de 2 MB/s (peek) a 750 kHz (continua) con un MSP430 (SPI) que es en su mayoría de la misma clase (rendimiento/MHz/características) y todavía tuve tiempo para realizar un pequeño procesamiento. Recibía comandos a esa velocidad, los decodificaba con mi pila de protocolos de 2 niveles y usaba los datos. Era muy ajustado, por lo que es posible que no tenga el conjunto de habilidades necesario para codificar rutinas de ensamblaje altamente optimizadas, pero incluso para el código C mal optimizado, 200 kHz es un rendimiento bastante lento.

El tipo de proyecto que estás haciendo tiene solo un problema.

Tienes que usar diodo LASER . Además, debe tener una conexión de línea de visión con el receptor.

Si no sigue estos e intenta usar una fuente normal de luz, la difracción causará la pérdida de datos en el aire.

(Si ya planeó usar un diodo LÁSER, ignore mi sugerencia anterior).

Ahora, preguntó qué tipo de controlador podría usar. Cualquier microcontrolador AVR de 32 bits haría su oferta dado que utiliza un tiempo de conmutación para el diodo LÁSER inferior a 200 ns.

También debe utilizar un receptor apropiado para que el pulso transmitido pueda reconstruirse correctamente.

Buena suerte.