¿Receptor digital rápido para datos codificados en Manchester?

1

Quiero implementar un receptor de datos codificados en Manchester digital. La aplicación no es diferente del sistema KeeLoq. Es decir, no hay tiempo para un entrenamiento de enlace prolongado: quiero que el receptor recupere el reloj y analice los datos de un solo paquete, sin depender de nada antes o después. Dado que se trata de un receptor digital, el receptor tiene cientos de muestras valiosas de la historia para volver a procesar y permitir que haga esto.

Estoy encontrando la recuperación del reloj más difícil de lo esperado. En muchos casos, el promedio de la cantidad de muestras entre cada transición y tomar esto como el período de medio bit funciona, pero las simulaciones simples muestran que con ciertas cargas útiles (es decir, aquellas con muchas transiciones) este promedio es demasiado alto. En cualquier caso, sesgar el período estimado de medio bit debido a estos, incluso cuando todavía funciona, seguramente significará que el receptor es menos robusto de lo que podría ser. Tengo un preámbulo que facilita la recuperación del reloj, pero puedo ver (con simulación) que en algunos casos no será lo suficientemente largo y el promedio está demasiado inclinado por los períodos de bits completos en la carga útil. Mi aplicación es inusual porque la tasa de línea subyacente es muy baja, por lo que la eficiencia y la latencia son importantes.

Debe haber alguna manera de aprovechar la naturaleza bimodal de la distribución del período para hacer un estimador muy confiable, pero no puedo pensar cómo hacerlo de manera eficiente.

¿Qué es un buen enfoque para un receptor digital Manchester, con un establecimiento de enlace de muy baja latencia?

Por eficiencia, quiero decir computacionalmente - probablemente pueda hacer una búsqueda de fuerza bruta comparando las diferencias entre los histogramas normalizados, pero me pregunté si había una mejor manera.

EDITAR: Se me ocurrió justo ahora que no necesito hacer coincidir una distribución con un histograma, porque la codificación de Manchester por naturaleza aplica otra restricción: la distancia entre los picos está relacionada con el contenedor de pico en sí. Así que todo lo que tengo que hacer es encontrar el pico más alto en el histograma y luego determinar si he encontrado el intervalo de ancho medio o completo, mirando los valores de bin x2 arriba o 1 / 2x abajo. Prototiparé esto y veré si funciona, pero, por supuesto, ¡dejaré la pregunta abierta para mejores ideas!

    
pregunta sebf

1 respuesta

1

El muestreo asíncrono probablemente no sea la mejor manera de lidiar con esto, ya que la frecuencia de muestreo es solo unas pocas veces mayor que la frecuencia de reloj de datos. Es la codificación de Manchester y la ventaja principal es que obtiene el reloj gratis (bueno, casi) y es muy fácil hacer un circuito de detección de bordes desde una puerta exor y un pequeño retraso: -

Aquíobtieneunpulsoporcadabordepresenteenlaseñaly,siconfigurauncontadorqueseejecuta16vecesmásaltoquelavelocidadderelojdedatos,puedecolocarsupuntodemuestreoenelnúmerodeconteo8.

Enesepunto,continúecontandoysinorecibeunreiniciodelcontador(debidoalafaltadeunpulsodereloj),muestrealosdatosenelconteo24paraelsiguientebit.LacodificacióndeManchesteresmásprecisaquelosdatosUARTasíncronosporqueelrelojestáincrustadoenlosdatosyobtienemuchasmástransistionesdelasquesepuedenesperarcondatosasíncronosordinarios.

Estoesloqueestáproponiendoytengaencuentaelerrorquepuedeobtenersisurelojrápidoessolo4u8veceslavelocidaddelrelojdedatos:-

Dibujé una flecha roja donde la sincronización de datos asíncrona comienza a encontrar un problema: los UART sincronizarán su reloj en cada detección de borde, por lo que siempre minimizarán este error.

He implementado este tipo de sistema en FPGA que ejecutan señales codificadas que no son de Manchester (sin reloj incorporado y, por lo tanto, con menos bordes de reloj) a velocidades de hasta 50 Mbpsec impares. He utilizado la codificación de datos para mejorar la cantidad de bordes del reloj, pero la decodificación de Manchester debería ser muy sencilla.

    
respondido por el Andy aka

Lea otras preguntas en las etiquetas