1 votos

Cómo detectar el flanco de subida de un impulso que no está sincronizado con el reloj

Esta puede ser una pregunta trivial.

Tengo un microcontrolador que intentará reconocer los flancos de subida y bajada de un pulso. Este pulso no está sincronizado con el reloj del microcontrolador ni con ningún reloj. Para mis propósitos, los voltajes se ajustan a los voltajes que el microcontrolador requiere. ¿Cómo debo esperar que se comporte el microcontrolador si intenta detectar el flanco de subida cuando...

  1. ...el pulso comienza cerca del principio del ciclo del reloj?

  2. ...el pulso comienza en la mitad del ciclo del reloj?

  3. ...cerca del final del ciclo del reloj?

Además, ¿qué debo esperar si intento detectar el flanco descendente con los mismos tiempos? (1. cerca del principio, 2. en el medio, 3. cerca del final)

No sé si esta pregunta depende de las particularidades de la MCU o del pulso. Si es así, puedo proporcionar las especificaciones. Gracias.

EDIT: Creo que he redactado mal mi pregunta. Entiendo que la MCU sólo muestreará cada ciclo de reloj. Yo estaba preguntando sobre todo lo que sucedería si el pulso fuera a cambiar la polaridad en el 1. principio, 2. medio, 3. final de un ciclo de reloj. ¿Afectará esto a lo que muestre el MCU?

Especificaciones: ARM9 MCU http://www.nxp.com/documents/data_sheet/LPC3141_43.pdf

Pulso: Los pulsos son generados por un fotodiodo de avalancha. Cada pulso representa la llegada de un fotón. El pulso alto dura 30 ns, el tiempo muerto del pulso es mínimo 50 ns. El objetivo actual de mi proyecto es utilizar el temporizador interno para cronometrar la llegada de estos pulsos.

3voto

mkeith Puntos 2726

Así es como funciona. Si tienes un pulso, asumiendo que los voltajes están bien, será detectado en el reloj N si cumple con el tiempo de preparación y retención para el reloj N. Si es demasiado tarde para ser detectado en el reloj N, será detectado en el reloj N+1. Si el tiempo es marginal, puede ser detectado en el reloj N o en el reloj N+1, no hay forma de saberlo con antelación.

Tenga en cuenta que hay un ancho de pulso mínimo detectable. Si el pulso es demasiado estrecho, es posible que no se detecte en absoluto. Generalmente, "demasiado estrecho" significa menos de un período de reloj de muestra (pero es necesario trabajar con las especificaciones de tiempo de preparación y retención para entender completamente el ancho de pulso mínimo). Así que si el pulso mínimo es menor que un ciclo de reloj, entonces existe la posibilidad de perder un pulso. Bienvenido a las alegrías del diseño asíncrono.

Dependiendo de lo que te interese, hay todo tipo de cosas que puedes hacer. Podrías hacer que el pulso habilite un integrador analógico para que los pulsos puedan ser contados de manera analógica, y luego ocasionalmente muestrear y reiniciar el integrador para evitar el desbordamiento.

Si lo que más te interesa es la temporización de los pulsos, puedes poner en marcha un integrador en el flanco de subida del pulso, y luego muestrear la salida de tensión analógica del integrador con un ADC síncrono al muestreo digital. Luego conviertes el voltaje del ADC en tiempo transcurrido. Esto te permitirá averiguar el tiempo del pulso con precisión y exactitud de sub-reloj.

Diviértete.

1voto

Magic Smoke Puntos 649

El teorema del muestreo establece que se debe muestrear al menos con el doble de la frecuencia de la señal. (muy básicamente hablando)

No existe el principio, el medio o el final de la muestra, porque la muestra es la unidad atómica del tiempo, por así decirlo. No tiene más resolución.

Si el siguiente flanco ascendente llega antes de que pueda terminar el actual, las interrupciones se acumulan y los datos pueden perderse. El teorema no es lo único que importa aquí, porque también necesitas algunos ciclos para ejecutar tu código.

Las unidades de captura/comparación, por ejemplo, pueden ejecutar un temporizador hasta que se detecte un flanco ascendente y escribir el valor del temporizador en un registro. Esto es muy rápido porque se hace en hardware. El registro puede entonces ser copiado en algún bloque/arreglo de memoria, para evitar que sea sobrescrito por el siguiente valor del temporizador.

1voto

jns Puntos 449

La relación entre los datos de entrada y el reloj de entrada de una puerta está especificada por sus tiempos de establecimiento y retención. Para un flip-flop individual, esto proporciona una ventana en la que el cambio se registrará correctamente y un pequeño tiempo en el que puede no hacerlo (posiblemente dando lugar a un estado "metaestable"). Como no existe realmente un borde, sino una pendiente de tiempo finito, la ventana de riesgo no puede hacerse de tamaño cero.

Así que la solución normal es poner en cascada varios flops uno tras otro, con una resistencia especial a la metaestabilidad. Habrá un retardo fijo de varios ciclos entre la señal que llega al pin y su registro interno. También habrá una latencia de interrupción si se dispara una interrupción.

A efectos prácticos, si se leen dos pulsos de un pin de entrada, los tiempos pueden estar desfasados en cada dirección hasta un ciclo de reloj completo. Tu señal puede ser de hasta 20MHz; si intentas leer esto en un microcontrolador con cualquier cosa que no sea un periférico de entrada serial dedicado es probable que tengas problemas. Sin embargo, probablemente puedas medir un par de tiempos de señal con un periférico de captura/comparación.

Editar: esto está relacionado con tu post anterior, ¿no es así? Esto sería mucho más fácil si describieras de dónde vienen los pulsos y qué protocolo significan.

1voto

luchador Puntos 74

Utilizar directamente las interrupciones o los valores de sondeo le hará depender de la frecuencia de muestreo digital. En su lugar, utiliza un buffer de flip-flop. Después de sondear los datos, reinícialo. ¿Puede haber numerosas señales que se pierdan hasta que se haga el sondeo? Entonces usa un IC contador rápido, sondea el valor en un período estadísticamente significativo (quiero decir, considerando alguna tolerancia para el conteo que puede perderse en la secuencia de sondeo y reinicio) y reinicia.

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