Controlador / transceptor de sincronización automática

Estoy buscando una forma de transmitir una señal de reloj y datos a través de una sola línea, tal vez usando una señal de sincronización automática como la codificación Manchester.

El diseño en el que estoy trabajando tiene varias unidades encadenadas, con datos que se introducen en la primera unidad de la cadena y se transmiten a los dispositivos posteriores. Para facilitar la conexión, estoy usando conectores USB, por lo que tengo cuatro líneas (VCC, GND, D+, D-) para las comunicaciones. Por lo general, solo usaría uno para el reloj y el otro para los datos, pero me preocupa la corrupción de datos y la diafonía en las distancias involucradas (1 pie más o menos). Como tal, estoy planeando combinar tanto la señal como el reloj en una línea, luego usar LVDS para mejorar la resistencia al ruido; después de todo, ¡USB es diferencial en primer lugar!

Esto probablemente sería trivial con un microcontrolador, pero estoy tratando de evitarlo por razones de complejidad y costo. ¿Existe tal cosa como un transceptor IC que se traduzca entre un reloj discreto y pines de datos y una señal de sincronización automática combinada? ¿Qué tipo de palabras clave debo buscar?

¿Necesita poner en cascada el reloj recuperado o está regenerando el reloj en cada etapa?
Cada etapa debe regenerar su propio reloj.
¿Cuál es la tarifa de datos?
Entonces, ¿cada etapa tiene una entrada de datos/entrada y una salida/salida de datos? Si cada etapa genera un reloj con un ciclo de trabajo del 50% y puede tolerar un reloj de entrada con un ciclo de trabajo variable, entonces debería ser posible construir codificadores y decodificadores Manchester con lógica discreta (compuerta XOR para codificador, compuerta XOR + flip-flop y retraso fijo para el decodificador)
@ThePhoton En algún lugar alrededor de 200-500KHz.
Entonces, ¿varía en un amplio rango? ¿Es por eso que no puedes simplemente usar el protocolo UART?
@DaveTweed No varía, pero estoy tratando de evitar un microcontrolador en cada nodo de la cadena y mantener el circuito/costo mínimo, al mismo tiempo que brindo cierta resistencia contra la corrupción de datos (por lo tanto, LVDS) y mantener 2 datos líneas máx.
Parece que no tendrías ningún problema con Manchester, según el comentario de alex.
@alex.forencich Sí, parece un buen enfoque. Una respuesta con tal diseño sería útil. He visto algunos diseños de circuitos en línea, pero parecen depender de generar un reloj en el circuito y algunas cosas de ciclo de reloj de 3/4 que parecen excesivamente complejas para este tipo de sistema.
No transmitiría el reloj y los datos por separado en D+ y D- ya que esos cables están retorcidos y es probable que se crucen fuertemente (aunque con 1 pie a 500 kHz probablemente podría salirse con la suya si limita la velocidad del borde)
Sí, por eso me decidí por LVDS.
Bueno, vas a tener que generar un retraso de alguna manera para muestrear el nivel en el punto correcto. Sin embargo, puede ser posible hacer esto con un circuito RC simple. Y es posible salirse con la suya con un retraso de 1/4 de ciclo + un inversor.
Incluso recuperar el reloj y los datos de una señal codificada en Manchester requerirá algunas puertas, un FF y algunos circuitos de sincronización. Un microcontrolador diminuto (6/8/14 pines) dedicado a esta función en realidad sería físicamente más pequeño (menos partes físicas) y sería más robusto que algo implementado con puertas discretas o un PLD de algún tipo. ¿Por qué exactamente lo descartas?
¿Es esto para Async, Sync, Simplex, Full Duplex, Half Duplex? ¿Hay un uC en alguna parte del sistema? o estas herramientas no son tu bolso?
@TonyStewart.EEsince'75 Es símplex. Se empuja un solo bit de estado a cada unidad, con un flip-flop que lo almacena y pasa el bit de entrada anterior que se envía a la siguiente unidad (como un registro de desplazamiento). Podría poner un micro en cada tablero pero realmente esperaba evitar programar cada unidad manualmente.
Oh, ¿el 'dispositivo' es solo un flip-flop? Eso significa que debe pasar a través del reloj recuperado a la siguiente etapa. En ese caso, puede tener problemas con el uso de la salida de un decodificador de Manchester simple para usar en el lado de transmisión. Recomiendo encarecidamente cambiar a un microcontrolador de bajo número de pines.
OK, entonces esta es una pregunta XY donde el problema real no está bien definido. Suena como una topología de bucle o estrella en serie síncrona simple en la que cada nodo recibe un bit de mensaje asignado por posición codificada para la entrada en el mensaje. No muy robusto en comparación con adlc o sdlc o cualquier otro protocolo
@TonyStewart.EEsince'75 Probablemente tengas razón. Estaba pensando demasiado en los detalles de la solución en lugar del problema básico. Volveré a publicar una nueva pregunta.
Sería mejor editar esta pregunta para agregar detalles adicionales, especialmente porque no se ha puesto en espera (todavía). Si decide iniciar otra pregunta en su lugar, asegúrese de eliminar esta para reducir el desorden en el sitio.
@DaveTweed Sí, eliminará este después de volver a preguntar. Creo que este es un lío suficiente que justifica una pregunta completamente nueva. ¡Evitará crearle un esfuerzo de moderación adicional!

Respuestas (4)

Los protocolos seriales de sincronización automática existen en mil variaciones en todas partes, desde la grabación magnética hasta la comunicación ethernet primitiva, desde la telefonía hasta la comunicación industrial y SCADA. Estos protocolos y sus diseños han existido durante más de 40 años en mi uso, así como en otros.

Hay muchas implementaciones dependiendo de la tasa de bits y BER, SNR esperados.

Los codificadores más simples usan intervalos de transición 1T, 2T donde 2T = es la tasa de baudios 1/f y se han definido como códigos bifásicos o Manchester para marca, espacio e inversión que definen la alternancia en las transiciones de bits centrales o Bi-Φ{M ,SI}. Las primeras unidades de disco duro y los disquetes actuales conservaban el ancho de banda usando MFM que usaba 2T, 3T. Esto se expandió a los códigos Run-Length Limited (RLL) utilizados en ethernet y muchas otras comunicaciones en serie. enlaces que estiran el intervalo entre transiciones de reloj.

Una vez que elige un protocolo de bits, para sincronización de reloj y datos, debe elegir una sincronización de cuadros, sincronización de bytes y orientación de bits y protocolo de mensajes, de los cuales hay miles, entonces, ¿por qué reinventar la rueda?

ingrese la descripción de la imagen aquí

La codificación utiliza el reloj y los datos en una puerta XOR para marcar (1) o espacio (0) (de los primeros términos telegráficos) para utilizar un reloj normal o invertido. Según la longitud del cuadro y el número de 0, 1 o transiciones, se elige el mejor enfoque.

Simple Decoding utiliza una recuperación de reloj con un borde de pulso creado a partir de cada borde con un retardo de puerta XOR de <5%T y luego un disparo de 3/4T para muestrear el valor de los datos. Los discriminadores Rx sofisticados integrarán toda la energía del bit en un intervalo de 1T.

El filtrado es esencial para evitar el retraso de grupo en la banda de la señal que provoca el desplazamiento de bits y la interferencia entre símbolos. Los Rx críticos usan un filtro de coseno elevado, mientras que los Rx no críticos usan LPF 5xf aprox. La señalización diferencial es mejor para la inmunidad al ruido de CM cuando la señal es baja en comparación con EMI.

Hay muchas implementaciones disponibles gratuitamente en HDL, AVR y lógica programable, así como puertas XOR y one-shots discretas de "tecnología antigua". Los filtros pueden ser analógicos, pero algunos usan un filtrado digital más sofisticado para minimizar la ISI y maximizar la SNR para obtener la tasa de error de bits (BER) más alta, que, como sabemos por la Ley de Shannon, está directamente relacionada con la SNR.

Se han escrito volúmenes sobre este tema hace décadas, así que si buscas, encontrarás.

Los controladores remotos a f baja utilizan una modulación de extensión o retardo de pulso o duración para 1 y 0, lo que compromete la relación SNR/BER pero puede funcionar en un entorno de bajo ruido.

No olvide incluir la detección de errores (paridad, código de Hamming, CRC o ECC) y detección de pérdida de sincronización del reloj. Luego necesita detección de sincronización de cuadros, lógica de detección de errores de reloj de sincronización de bytes, etc.

Aunque no es barato ni está bien surtido, utiliza un reloj de 16x o 32x hasta 1Mbps https://www.digikey.com/products/en/integrated-circuits-ics/specialized-ics/686?k=manchester&k=&pkeyword=manchester&v =20&FV=ffe002ae&mnonly=0&ColumnSort=0&page=1&quantity=0&ptm=0&fid=0&pageSize=25

> ¿ Es esto para decodificar señales CANBUS ISO 11898?

Si es así, mire el chip receptor SCAN921226H $ 10 con salida paralela de 8 bits y señales de sincronización.

Esto no es para CANBUS y creo que finalmente tendré que abandonar este enfoque; la complejidad de la decodificación hace que las cosas sean menos factibles. Esperaba una parte del transceptor directo, pero parece que esa parte no existe.
El flujo de información y el costo no están bien definidos en su pregunta, lo que la hace demasiado miope y desviada como una pregunta XY.

Quiere un 'serializador' y un 'deserializador'. Tenga en cuenta que para LVDS, probablemente no saldrá en serie de bits. Lo más probable es que sea una interfaz paralela de 8 o 16 bits. Tenga en cuenta que puede tener problemas para encontrar uno lo suficientemente lento para su aplicación.

El primer resultado de Google para 'lvds serializer' es ds92lv16. Esa parte tiene un serializador y un deserializador en un paquete con dos interfaces paralelas de 16 bits. Tenga en cuenta que la velocidad de reloj mínima es de 25 MHz, lo que corresponde a 400 Mbps.

Si los datos ya están disponibles en serie, como OP parece implicar en la pregunta, entonces no se necesita serializador/deserializador. La codificación y decodificación de Manchester se puede hacer con algunas puertas.
Sí, los datos ya son seriales. Es un tipo de modelo de comunicación previsto similar a cómo los LED WS2812 transmiten datos. Por lo que entiendo, los transceptores LVDS funcionan con granularidad a nivel de bits, ya que esencialmente no tienen estado.
@Polynomial, los transceptores LVDS son solo controladores de señalización diferencial de bajo voltaje, funcionan con cualquier señal digital que se les alimenta. No hay "granularidad a nivel de bits" ni estados inherentes. Debe estar confundiendo el término con algunos bloques lógicos más complejos (como SERDES u otros) que UTILIZAN niveles de señalización LVDS como entrada-salida.
@AliChen Eso es básicamente lo que dije, sí. No estoy seguro de que cualquier distinción de terminología importe aquí: estoy usando un TI DS90LV019 para LVDS y hace exactamente lo que necesito en ese sentido (entrada/salida simple)

Evalúe la modulación de la duración del pulso. Con un flanco ascendente para lanzar cada bit , active un disparo único para el tiempo de espera al 50 % y registre los datos en FF. Haga que la duración del bit sea del 33% o del 63%, trivialmente.

O 25% y 75%, para mayor inmunidad al ruido.

Evite duraciones cercanas al 100%, porque el bus (sus 2 cables) necesita tiempo para restablecerse a cero.

La parte realmente fácil es el lado de transmisión y la parte definitivamente más difícil es el lado de recepción y no lo has cubierto.

Parece que la tarea se encuentra en un área bien conocida de automatización industrial. Me temo que el desafío no es solo cómo crear datos de sincronización automática, sino que pueden surgir muchos otros problemas, arbitraje, decodificación de direcciones, etc. Por lo tanto, deberá dividir el protocolo en paquetes y mensajes, etc. Una de las soluciones Al problema de la comunicación entre los objetos distribuidos y los sensores se le llama "CAN bus" .