Circuito para eliminar el ruido de la línea de comunicación digital

6

Continuando con mi publicación anterior y profundizando en detalles, estoy tratando de encontrar la manera correcta de implementar el "removedor de fallas" ", o" eliminador de ruido ", que utiliza componentes electrónicos (es decir, no en el software). De una de las respuestas en mi publicación anterior, aprendí que uno podría usar un circuito RC para este propósito, y los principios parecen ser los mismos (creo) que los utilizados para la función de rebote del interruptor.

Mi objetivo principal es decodificar datos de RF, pero el ruido está activando mi ISR demasiado rápido y está faltando a mi ciclo principal () de ciclos anteriores. Mi dispositivo es Arduino (atmega328).

Editar : (sobre el módulo RF) Estoy usando este módulo receptor ASK / OOK de la banda ISM . Si bien la página de especificaciones o el sitio web no tienen una foto de la parte posterior del PCB, puedo decir que tiene una miniatura blanca (lo que parece) un trimpot. Si tuviera un alcance, habría tratado de girar el recortador para ver si afecta el AGC. Sin embargo, podría ser muy útil para recortar los parámetros L-C, ya que el mismo módulo funciona para 315 y 433MHz, y la recortadora puede ser la configuración de fábrica para 433MHz.

A un nivel muy alto, el siguiente diagrama describe el propósito del "removedor de fallas". Tenemos una señal ruidosa en la entrada, pero la salida es bastante libre de ruido. El ruido es cualquier transición de señal que sea más corta que una cierta duración (por ejemplo, 400us).

Editar:Enrealidad,la"forma de onda libre de fallas" que se muestra a la derecha es falsa. Lo dibujé rápidamente limpiando las marcas más estrechas en pintura. De hecho, la forma de onda de la izquierda es en realidad todo ruido. En medio del ruido de alta frecuencia, la señal transmitida real está bastante bien formada y es fácil de descifrar, ya que su frecuencia es mucho más baja, y hay un espacio largo 'garantizado', marcando el final del paquete. La señal real transmitida es de 12 bits + 1 bit de sincronización. Cada bit está representado por 1 marca, 1 espacio, 1 marca, 1 espacio de, donde la longitud de marca / espacio varía, por ejemplo,

0: HHHH LLLL LLLL LLLL HHHH LLLL LLLL LLLL
1: HHHH HHHH HHHH LLLL HHHH HHHH HHHH LLLL
F: HHHH LLLL LLLL LLLL HHHH HHHH HHHH LLLL (Floating address pin)
S: HHHH LLLL LLLL LLLL LLLL LLLL LLLL LLLL

donde cada H / L tiene una duración de 100us, y cada bit toma 3200us. El pico de ruido suele ser de 30-40us de duración, lo que está causando el exceso de trabajo de mi ISR. Basándome en lo que entendí de la respuesta de Supercat en mi pregunta anterior, y basándome en una pequeña investigación, creo que este es el esquema de lo que más o menos necesito.

¿Necesitaayudaparaverificarsielesquemaescorrecto?¿YcuálespodríanserlosvalorespotencialesdeR1,R2yC?

Sientendílarespuestadesupercat,parafiltrarlasseñalesderuidoamenosde400us,puedousaruncapacitorde0.22uFparaC,yR2de1K,yprobablemente100RparaR1.¿Esesocorrecto?

O,sielesquemaeseste(porsupuesto,estoestámáscercadeladescripcióndesupercat).

¿Con R = 1K y C = 0.22uF?

No tengo un alcance, por lo que no puedo hacer mediciones finas y ver formas de onda, pero sí tengo un analizador lógico. Esto probablemente limita qué y cómo puedo probar si experimento.

Por cierto, ¿puedo esperar que un "removedor de fallas" de este tipo deje las señales deseables completamente intactas, o sufrirían alguna distorsión de algún tipo?

    
pregunta icarus74

5 respuestas

1

Cuando tengo un problema de diseño como este, primero pienso "cómo podría decodificar esto a mano" y luego trato de implementar mi proceso de pensamiento mediante el uso de dispositivos electrónicos.

Entonces, cuando miro sus dos diagramas, veo solo una cosa que mi cerebro puede usar para determinar qué son los datos y qué es el ruido: el ancho del pulso. El problema con los componentes pasivos en una situación como esta es que para uno tiene una onda cuadrada que tendrá armónicos mucho más altos que el punto de corte de su filtro. Esto dará como resultado una onda no tan cuadrada.

La forma más fácil de hacer esto probablemente sea en el software. Aún puede usar interrupciones, pero tomará un poco más de trabajo. Esencialmente, lo que tendrá que interrumpir en un borde, y luego contar el tiempo hasta el siguiente borde. Si el período de tiempo es lo suficientemente largo, entonces puede llamarlo lógica 1; de lo contrario, puede considerarlo como ruido encima de una lógica 0.

Si debe ir con componentes pasivos, puede considerar un filtro de paso bajo seguido de un comparador. Tendría que jugar con el filtro de paso bajo para hacerlo de la manera correcta, pero esencialmente tendría como objetivo que la carga del capacitor sea lo suficientemente alta como para que el comparador cambie su salida cuando la broca ha estado encendida el tiempo suficiente. Lo que hace que esto sea difícil es que sus "fallas" son muy similares a sus datos y es difícil ajustar su circuito de manera correcta para obtener sus datos sin fallas. Incluso si puede perfeccionarlo en papel, sus componentes tampoco serán muy precisos. Es por esto que usted debería considerar seriamente hacer esto digitalmente.

    
respondido por el Kellenjb
3

Editar:

Un filtro de paso bajo arruinará sus agradables ondas cuadradas, pero si todo lo que quiere hacer es provocar una interrupción, puede intentarlo. Según su nueva explicación, creo que lo que quiere es un filtro de paso bajo donde se encuentra su off está ligeramente por encima de lo que se considera un bit válido, que es:

1/(100 microseconds) = 10 kHz (valid bit)

Seleccionaría algo así como 12 kHz como su valor límite de corte y ajuste desde allí. A juzgar por los valores que ha elegido en su pregunta, no logrará una frecuencia de interés de corte. Prueba el circuito en este ejemplo:

Puedes calcular tu corte de este modo:

$$ f_ {cutoff} = (\ frac {1} {2 * pi * RC}) $$

Algunos valores de estacionamiento de bolas: R = 68K y C = 220pF le brindarán un corte de aproximadamente 10.6 kHz. Este es un filtro bastante deficiente y se puede mejorar mucho , pero inténtelo y díganos si atenúa esos pulsos de 30 a 40us. Si apenas hace algo (como podría sospechar porque este es el filtro de primer orden que atenúa 20dB / década), pregunte aquí acerca de los filtros de segundo orden. Obtendrá un montón de buenas respuestas.

Respuesta anterior:

Parece que la sensibilidad de su receptor es extremadamente alta. ¿Puede compartir más detalles sobre las técnicas de transmisión, modulación, codificación y recepción? Es posible que tengas que modificar las cosas primero.

Esto me recuerda a un proyecto en el que estuve involucrado hace mucho tiempo (que también terminó ganando una competencia IEEE en nuestra escuela: D) donde creamos un protocolo asíncrono personalizado que enviaba pulsos a través de un circuito magnético acoplado de manera flexible que activó un comparador y generó pulsos similares a los que estás viendo. Como nuestra tasa de baudios era conocida en ambos extremos, terminamos implementando un tiempo de protección en el microcontrolador receptor y la transmisión también incluía una suma de comprobación.

Básicamente, una vez que detectamos lo que pensábamos que era un bit válido, inhabilitamos el ISR durante un período (correspondiente a la velocidad en baudios de nuestra transmisión) antes de volver a habilitarlo y aceptar el siguiente bit. Si la suma de comprobación no coincide, la descartaremos y solicitaremos una nueva transmisión.

Estábamos operando en una banda muy estrecha, por lo que no tuvimos mucho ruido, y no tuvimos que lidiar con nada tan malo como lo que se muestra en sus diagramas. Si hubiera sido tan mala nuestra técnica probablemente no habría funcionado en absoluto, o habría tardado mucho tiempo en enviar una transmisión válida. Consideraría volver a revisar tu interfaz y ver si es ideal para lo que quieres lograr.

    
respondido por el Jon L
1

Usted no va a lograr eso con componentes exclusivamente pasivos ... tal vez podría poner un microcontrolador dedicado en el software de ejecución que retrasó (almacenado en búfer, absorbido, lo que sea) su flujo de entrada (a una frecuencia de muestreo suficientemente alta para las características de interferencia de interés - es decir, al menos la mitad del intervalo de su período "más bajo" más corto) para 400us para determinar si un pulso entrante es lo suficientemente largo para clasificarlo como real, y Luego emitió su propio pulso fabricado de 400us. Esto podría considerarse una violación de su requisito explícito de "no en el software", pero eso es lo que me llevó a sugerir un microcontrolador dedicado para este propósito.

    
respondido por el vicatcu
1

El problema básico con el circuito RC simple que propuso (su primer diagrama, o el diagrama en la respuesta de Jon L) es que cuando la señal emite un parloteo, la entrada a la unidad uC no se mantendrá estrictamente alta o baja, pero tenderá a desviarse hacia el voltaje promedio de la salida del receptor, que dependerá de la frecuencia de la charla y del ancho de los fallos. Si el voltaje promedio está cerca del umbral del voltaje para la entrada digital de uC, el micro seguirá teniendo transiciones de entrada sin sentido, pero serán más lentas y pueden ser más difíciles de distinguir de la señal deseada.

Aquí hay algo que podría funcionar suponiendo que las fallas solo ocurren cuando la señal deseada es baja. Es decir, asumo que cuando la señal del mensaje es alta, realmente puede tirar de la línea a un nivel alto, pero cuando es baja, es cuando se producen los problemas técnicos.

Este circuito lo hará para que la uC responda rápidamente a una transición de alta a baja, pero la transición de baja a alta debe permanecer alta durante algún tiempo antes de que la entrada de la uC la vea. Probablemente querrás jugar con el R & Los valores de C en un simulador, utilizando varios patrones de chatter, para encontrar los valores que limpian correctamente los fallos.

Un diodo Schottky puede ser preferible, especialmente si la entrada uC tiene una entrada TTL (que podría tener un umbral de alrededor de 0.8 V)

El inconveniente de este circuito es que no retrasa las transiciones de alta a baja y de baja a alta por igual, por lo que terminará acortando sus pulsos altos ... espero que pueda solucionar esta dificultad en el software que decodifica los diferentes patrones de pulso que mencionaste para detectar '1', '0', 'S' y 'F'.

    
respondido por el The Photon
1

El esquema con el resistor en serie, y con un resistor para VSS y un límite para VDD es casi correcto, excepto que el límite debe ir a VSS (es probable que R2 también lo haga). Yo sugeriría comenzar seleccionando arbitrariamente 1K como una resistencia en serie, y eligiendo R2 de manera que la salida del receptor de RF esté en la mitad del riel, la entrada al procesador estará cerca de su punto de conmutación. Un valor de 2.2K para R2 probablemente debería ser bueno si el procesador cambia alrededor de VDD / 3. El valor preciso probablemente no importará demasiado. En cualquier caso, calcule la resistencia paralela efectiva de las dos resistencias juntas tomando el recíproco de cada uno, agregando esos valores y tomando el recíproco del resultado. Con los valores dados, 1 / (1/1000 + 1/2200) = 687.5 ohmios.

A continuación, descubra las transiciones de señal más rápidas en las que está interesado. Digamos que está interesado en los datos codificados en Manchester que se envían a 100.000 bits / segundo. Dado que los datos codificados en Manchester requieren dos transiciones de señal por bit, el tiempo por transición sería un mínimo de 5us. Divida el tiempo calculado (por ejemplo, 5 microsegundos) por la resistencia calculada (por ejemplo, 687,5 ohmios) para obtener un valor de capacitancia requerido aproximado (en este caso, aproximadamente 0,0072 microfardas). Probablemente sea mejor que tu gorra sea un poco pequeña que demasiado grande; experimenta y ve lo que obtienes.

Addendum

Si tanto el emisor como el receptor tendrán velocidades de bits controladas por el cristal, sugeriría poner la señal a través de un circuito de filtro analógico y usar un ADC para muestrear la salida del filtro a 10Khz. Coloque la señal entrante en un búfer rodante el tiempo suficiente para manejar todo el paquete, y también use un acumulador de 32 cubos para sumar la diferencia entre la señal actual y las muestras de hace 384 (de modo que la primera diferencia se agrega al compartimiento # 0, el segundo en el cubo # 1, el 32 en el cubo # 31, el 33 en el cubo # 0, etc.). Debe haber dos grupos consecutivos con una gran diferencia entre ellos (el último grupo tiene un valor mucho más alto que el anterior). Cuando se detecte esa diferencia, eso indicará que se ha encontrado el flanco ascendente de un pulso. En ese punto, uno debería poder sumar grupos de cuatro muestras de la señal original y recuperar los niveles de señal en esos puntos.

    
respondido por el supercat

Lea otras preguntas en las etiquetas