4 votos

¿Por qué cambia la sincronización en la trama de datos que utiliza la codificación Manchester?

He recibido con éxito un par de tramas de datos de un transmisor de RF. He comparado un par de tramas consecutivas y la desviación de tiempo entre ellas es marginal, así que estoy convencido de que es razonablemente preciso con una resolución de 50µs.

Creo que está utilizando la codificación Manchester y una de las propiedades de la codificación Manchester es la capacidad de recuperar la señal de reloj de la misma. Por lo tanto, yo esperaría que el preámbulo de la señal obedezca al reloj de los datos.

enter image description here

(haga clic para ampliar la imagen)

Aparte del pórtico (-5,5 ~ 0 ms) esperaría que el preámbulo (-38 ~ -5,5 ms) obedeciera al mismo reloj que los datos (empezando por 0), pero no es así. El reloj del preámbulo es aproximadamente un 10% más rápido que el de los datos.

¿Cuál es el motivo del cambio de reloj? ¿No está en contradicción con las propiedades de recuperación de los relojes de Manchester?

El extremo del receptor es un TDA-5200 combinado con un ATmega32L protegido, el interior del transmisor es probablemente similar pero actualmente se desconoce.

3voto

RelaXNow Puntos 1164

La mayoría de los receptores disponen de cortadores de datos que se ajustan dinámicamente a la intensidad de la señal entrante. De este modo, siempre se obtiene un flujo de bits, incluso cuando no hay señal transmitida que cortar. En ese caso, el cortador de datos sólo está cortando ruido.

De un modo u otro, el receptor tiene que ser capaz de identificar el inicio de un mensaje manchester, aunque el cortador de datos escupa continuamente 1s y 0s. Hay varios esquemas, pero en general se requiere que cada mensaje vaya precedido de algo que sea identificable pero que se garantice que no está contenido en ninguna parte de un mensaje válido. Este algo se conoce generalmente como el preámbulo .

El descodificador siempre busca esta firma especial de preámbulo, ya sea en medio de la descodificación de un mensaje o no. Detectar el preámbulo incluso cuando el descodificador cree que está en el fondo del mensaje es importante por dos razones. Puede estar en el mensaje erróneamente, y podría estar en un mensaje débilmente recibido que está siendo pisoteado por un nuevo mensaje fuertemente recibido. En este último caso, el mensaje original nunca podrá ser descifrado. Lo mejor que puedes hacer es que el mensaje parcial original no te distraiga de la decodificación del mensaje posterior que sí puedes decodificar.

Hay muchos esquemas de preámbulos. Aparentemente, en este caso utilizaron deliberadamente una frecuencia de reloj diferente para que sea detectado como un mensaje no válido después de algunos ciclos. Esa es una forma válida de hacer las cosas.

Suelo utilizar el mismo reloj pero una larga secuencia de niveles largos sucesivos, que serían 000000.... o 111111... dentro de un mensaje real. Sin embargo, utilizo un esquema de relleno de bits en el cuerpo del mensaje para que no sea posible más de un número predeterminado de niveles largos consecutivos. Por ejemplo, si las reglas de relleno de bits permiten como máximo 7 bits consecutivos del mismo valor, entonces puede haber como máximo 14 niveles largos consecutivos dentro de un mensaje válido. Mi preámbulo viola deliberadamente esta regla. Tan pronto como el decodificador ve el 15º nivel largo consecutivo, aborta cualquier lógica en la que se encuentre y pasa al estado de preámbulo detectado, esperando un bit de inicio con la polaridad correcta.

Añadido sobre el corte de datos

El corte de datos se refiere a la interpretación de la señal analógica entrante en una señal digital. Lo ideal sería que la señal analógica que sale del receptor de radio sin procesar se pareciera ya a una señal digital, pero eso no ocurre en la realidad por diversas razones. Incluso si lo hiciera, la amplitud de esa señal dependería bastante de la distancia al transmisor, sólo por enumerar una variable. Como resultado, la señal de radio desmondulada en bruto no puede ser interpretada directamente por una puerta lógica digital. El proceso de pasar de la señal analógica recibida a una verdadera señal digital se llama corte de datos .

Los antiguos cortadores de datos analógicos eran poco más que un comparador con la señal recibida en una entrada y una versión filtrada de paso bajo de esa señal en la otra. La frecuencia del filtro de paso bajo se ajustaba lo suficientemente baja como para no reaccionar mucho a los bits individuales, sino para encontrar el promedio de CC sobre unos cuantos bits. Esto se utilizaba como el nivel medio de la señal para decidir si la señal instantánea era alta o baja.

Una de las razones por las que la codificación manchester es popular con este tipo de señales es que cada bit es alto la mitad del tiempo y bajo la otra mitad, promediando el nivel medio en cada bit. Aun así, los cortadores de datos analógicos necesitaban unos cuantos bits para asentarse adecuadamente y empezar a producir la señal digital correcta tras un gran cambio en el nivel de la señal recibida. Esta es otra razón para el preámbulo, que es para dar al cortador de datos tiempo para asentarse.

Hoy en día, con los microcontroladores fácilmente disponibles y que probablemente decodifican la señal de datos cortada de todos modos, la señal demodulada en bruto puede introducirse directamente en el micro y el corte de datos se realiza en el firmware. Esto permite emplear fácilmente operaciones no lineales en el cortador de datos que serían difíciles en el hardware analógico.

Un esquema que he utilizado algunas veces es muestrear la señal analógica recibida alrededor de 10 veces por bit manchester. Mantengo un búfer con algo más de un bit de muestras, encuentro su mínimo y su máximo, y uso la media de estos como umbral de corte. Como un nivel alto o bajo nunca dura más de 1 bit en un flujo manchester, esto garantiza que tanto un nivel alto como uno bajo están en el buffer cuando importa. Una de las ventajas de este esquema es que el rebanador de datos se asienta mucho más rápido que si se utiliza un filtro analógico de paso bajo.

A menudo ayuda aplicar quizás dos polos de filtrado de paso bajo al flujo de lecturas A/D antes de cualquier otro procesamiento. Esto ayuda a reducir el ruido aleatorio y un poco el ruido de cuantificación. El filtro debería establecerse en torno al 80-90% en un tiempo de 1/2 bit.

Lo anterior se realiza en la rutina de interrupción A/D. Después de cortar, la interrupción A/D puede empujar el resultado en un FIFO drenado por el decodificador que se ejecuta en primer plano, o puede clasificar cada nivel como largo, corto o inválido, y empujar eso en un FIFO para que el decodificador lo maneje.

He implementado este algoritmo en un dsPIC con un A/D de 12 bits decodificando un flujo manchester de 10 kbit/s. Funcionó tan bien que decodificó correctamente paquetes enteros en los que la amplitud alta/baja era sólo de unos pocos LSB. No pude distinguir los bits en el osciloscopio, pero el cortador de datos digitales los recogió de todos modos, y el decodificador fue capaz de decodificar el paquete. El paquete contenía una suma de control CRC de 20 bits, por lo que sé que el decodificador decodificó el paquete correctamente.

1voto

ianb Puntos 659

Hay una muy buena razón para que el preámbulo sea diferente. Cómo sabrías cuándo empezar correctamente la temporización rx para el primer byte de los datos de la carga útil. Si el preámbulo obedeciera a la misma temporización que los datos, no podrías detectar fácilmente el inicio del byte uno.

Se puede utilizar la misma velocidad de datos para el preámbulo, pero el final del preámbulo tiene que ser "marcado" con algo que es inconfundible y único byte. Para hacer esto he enviado un byte con un bit extra (metido un 0 de paridad) y el uart lo marca como un error de paridad y listo, sé que el siguiente byte es el primer byte de la carga útil.

Hay muchas maneras de hacerlo, y alterar el tiempo es sólo una de ellas. Ten en cuenta también que el último byte del preámbulo en tu imagen es claramente diferente a otras partes del preámbulo.

1 votos

Yo pensaría que para los datos codificados con Manchester, un preámbulo de algo así como 1101100100 repetido sería ideal, ya que ese patrón de bits no podría aparecer en los datos codificados con Manchester, pero aún así tiene una longitud de ejecución máxima de dos y sin sesgo de CC neto.

0 votos

Yo diría que el 'porche delantero' (-5,5 ~ 0 ms) marca claramente el final del preámbulo debido a la duración sería un buen indicador de dónde empiezan los datos reales? ¿Es eso a lo que te refieres como "el último byte del preámbulo"?

0 votos

@supercat DC-bias se rompe claramente con el 'front porch' (-5,5 ~ 0 ms) y el postámbulo (bajo durante casi 20 ms). Interesante observación BTW, entonces de nuevo la señal LF entre TDA-5200 y AVR es DC acoplado.

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