6 votos

Reconstrucción de reloj para señal serial

Supongamos que tengo una serie de señales (ejemplo abajo), la cual es transmitida sin un acompañante de la señal de reloj, me gustaría encontrar un circuito (utilizando componentes discretos / ICs, posiblemente un FPGA, pero no un microcontrolador) para reconstruir el reloj para esta señal.

El principal reto es que la frecuencia de esta serie de la señal varía con el tiempo. Se recibe la señal de una conexión inalámbrica de ASIC. Cuando el ASIC transmisor está activado, el receptor produce una señal, como lo que se muestra a continuación.

Además, el ASIC intermitentemente puede (y asincrónica) corte después de un par de segundos, y una diferente transmisor vendrá en línea. Cualquier transmisor de la frecuencia nominal puede estar en cualquier lugar de 35 a 65 KHz debido a problemas de diseño.

Dependiendo de cuánta potencia del transmisor tiene, he visto un solo ASICs reloj a la deriva por tanto como 2 KHz a partir de un valor nominal de 50 khz durante la operación continua. Nunca he medido un notable cambio de frecuencia dentro de menos de 20 frames de datos, pero no tengo una figura real de la tasa de cambio en la frecuencia de reloj....

enter image description here

Hay un bit de inicio en cada fotograma, y un bit de paridad y bit de parada al final. No puede haber tantos como 13 ceros consecutivos en el marco. Siempre hay 4 cero entre los ciclos de los marcos que proviene de una sola ASICs transmisor. Fotogramas consecutivos vienen de un solo transmisor, pero como he mencionado, el transmisor periódicamente se puede cortar, y otro puede venir en línea en una diferente frecuencia de reloj.

Lo que estoy buscando es un circuito para recuperar el reloj, utilizando una combinación de lógica digital, y la discreción de los componentes analógicos (no un microcontrolador!) que es muy robusto, que puede adaptarse a la deriva del reloj, y se puede bloquear en las frecuencias en que la amplia gama. También me gustaría encontrar un diseño que funciona bien a altas frecuencias, porque el futuro de ASICs tendrá un transmisor de reloj que es mucho más rápido (he escuchado tanto como 20 veces más rápido).

Un FPGA será utilizado para decodificar la secuencia de datos (y el uso de la recuperación de reloj, de hecho esto ya ha sido implementado antes de asumir la disponibilidad del reloj), y como tal, puede ser utilizado como parte de la recuperación de reloj del circuito si que ayuda.

Muy perdón por la confusión, espero que todo ha sido aclarado.

7voto

GSerg Puntos 33571

La recuperación de un reloj desde un intermitentes secuencia de pulsos es un no-trivial ejercicio de diseño. Normalmente intento centro al borde del reloj en los pulsos, entonces el borde de reloj puede ser utilizado para la captura de la presencia/ausencia de pulso en un flip-flop. Un híbrido analógico/digital de circuito se muestra el concepto más claramente:

schematic

simular este circuito – Esquema creado mediante CircuitLab

La idea general es utilizar un par de puertas para generar una "bomba" de pulso y una "bomba" de pulso para cada impulso de entrada. Mientras estos dos pulsos son de la misma longitud (el borde de reloj se produjo exactamente en el medio de la entrada de pulso), no habrá ningún cambio neto de la frecuencia VCO. Pero si el pulso viene un poco más temprano con respecto a la del reloj (lo que significa que el reloj es lento), la "bomba" pulso será más ancha que la "bomba" del pulso, aumento de la VCO de control de voltaje. Lo contrario ocurre si la entrada de pulso es tarde, la disminución de la tensión de control. El VCO debe ser configurado de manera que el rango de frecuencias que se pueden producir en el rango de la tensión de control coincide con el de la gama prevista de las tasas de datos.

Puesto que usted está trabajando con un FPGA, algo muy similar puede ser realizada exclusivamente en el dominio digital. Vamos a suponer que usted tiene una alta velocidad de reloj (por ejemplo, 10 - 50 MHz) disponible. Vamos a reemplazar la bomba de carga con un binario arriba/abajo del contador, reemplace el VCO con un DDS, y en lugar de confiar en analógico anchos de pulso, nos muestra la fase de la DDS en la subida y la caída de los bordes de los pulsos de entrada.

En el siguiente diagrama, todos los de la "colgando" del reloj de las entradas están conectadas a la FPGA de alta velocidad de reloj interno. Alguna de las patillas con [] en los extremos de sus nombres representan multi-alambre de autobuses.

schematic

simular este circuito

El asincrónica RZ de entrada pasa a través de un 2-etapa de sincronizador y, a continuación, un detector de bordes. Registros U3 y U4 de captura de la fase superior de los bits de la DDS (U2) en los flancos ascendente y descendente de la RZ pulso, respectivamente. Si tratamos a la fase de valor como un binario con signo de número, el flanco de subida de captura de un valor negativo, mientras que el flanco de bajada de captura de un número positivo. Añadimos estos dos números juntos, y si estamos perfectamente sincronizados, que van a cancelar y el resultado será cero. Sin embargo, si el reloj es tarde, el número negativo será mayor y la suma es negativa. Por lo tanto, acaba de tomar el bit de signo en la salida del sumador (U5), y el uso de puertas para aumentar o reducir el valor en nuestro contador (U1) para acelerar o ralentizar el reloj. Tenga en cuenta que usted desea configurar este contador, por lo que únicamente cubre el rango de frecuencia de interés. En otras palabras, va a tener tanto un valor mínimo y un valor máximo que no cuenta más allá.

El "llevar a cabo" desde el DDS es un uno-reloj-de ancho (reloj del sistema) pulso que se produce en la tasa de la RZ datos, de acuerdo con los centros de los bits.

3voto

Sammo034 Puntos 26

Si el reloj puede variar, y necesitas recuperarlo, definitivamente, usted debe crear un reloj circuito de recuperación.

Con el RZ de la señal que puede ser bastante fácil, ya que como dices el reloj está presente en la señal todo el tiempo. Si usted está recibiendo todos los que realmente están recibiendo la señal de reloj... Pero cuando un cero recibido usted está recibiendo la negados reloj. Primero de todo quiero sugerir un detector de bordes, que es un cirtuito que genera un pulso cada vez que la señal de entrada cambia de polaridad. Un ejemplo trivial es un filtro de paso alto, que es un condensador en serie con una resistencia a tierra. Los pulsos todavía son de polaridad mixta, pero sólo se puede utilizar un rectificador de onda completa para que usted obtenga un pulso positivo cada vez que su señal hace una transición. Ahora que es casi un reloj, usted sólo tiene que dividir por dos, con un par de chanclas y listo.

Para detectar todos los bordes también puede utilizar una puerta XOR: uno a la entrada de la señal RZ, la otra a la misma señal retardada "un poco". Cuando y sólo cuando las entradas son diferentes, lo que sucede cuando usted está teniendo una transición, la salida será alta. Usted todavía necesita para dividir por dos.

Sé que no he propuesto una solución práctica, pero espero que mis entradas te puede ayudar.

2voto

Alex Andronov Puntos 178

Dado que las frecuencias que usted está mirando, yo sugeriría tratando de resolver el problema en el dominio digital. Si hay algo de "buena" manera de identificar a los dos pulsos que se supone que un cierto número de ranuras de tiempo de diferencia (por ejemplo, la inter-frame gap se supone debe ser más largo que cualquier brecha dentro de un marco, y el tiempo desde el inicio de un marco para el inicio de la siguiente, siempre se supone que debe ser exactamente veinte ranuras de tiempo), entonces si una muestra de datos de entrada con un reloj que al menos dos veces tan rápido como la velocidad de los datos, usted debe ser capaz de averiguar dónde está el marco de los límites. A partir de eso, usted debe ser capaz de averiguar la ubicación del individuo ranuras de tiempo dentro de un marco.

Una de las principales ventajas de trasladar este tipo de cosa para el dominio digital es que los datos pueden ser analizados de forma retrospectiva. Por ejemplo, si cada cuadro es de veinte ranuras de tiempo, la primera y xvi siempre ha pulsos, y no existe la brecha de cuatro o más ranuras de tiempo sin pulso, entonces se podría usar el hardware para grabar cada 15us si hay un pulso o no, espere un momento y sin pulsos de que sea lo suficientemente largo para ser un inter-frame gap, y mantener un registro de la última vez que se ha observado. Cuando un inter-frame gap (excepto el primero) se observa, latch, el número de relojes entre éste y el anterior, y a continuación, tomar datos desde convenientemente espaciados manchas en el búfer.

Podría ser posible utilizar un microcontrolador para realizar la mayor parte del análisis; 50khz es un poco rápido, pero quizás viable si el controlador tiene un poco de hardware de asistencia para la captura de los datos o no tiene que hacer nada más. Un microcontrolador las probabilidades de éxito podría ser especialmente bueno si, por ejemplo, siempre hay nueve pulsos por marco (si el hardware almacena un byte por pulso con su longitud aproximada, entonces, si la brecha actual y uno de los nueve anteriores son más que ninguno de los intervinientes y, a continuación, la intervención de ocho probablemente la forma de un marco de datos, y la velocidad de reloj debe ser 1/20 de su suma). Selección de los mejores enfoque requeriría un poco más de conocimiento de lo que el flujo de datos entrante representa, qué partes de él son fijos o variables, como la limpieza o nerviosismo es apto para ser, etc.

1voto

WhatRoughBeast Puntos 20870

Prueba esto. Suponiendo que los datos tienen una amplitud de +/- Vl. Use dos comparadores, uno para disparar a Vl / 2, el otro a -Vl / 2. Invierta el segundo y luego O las dos señales. Puede hacerlo con la mitad de un comparador cuádruple y la mitad de una compuerta NOR cuádruple. (Esto supone que el período de los datos es mucho mayor que el tiempo de propagación de la lógica, y que la relación señal / ruido de los datos es razonablemente alta).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X