Estoy trabajando en un proyecto de investigación, y para una parte tengo que convertir una señal analógica en una digital. Ahora, la electrónica no es mi fuerte, así que no sé lo que estoy haciendo y me siento en la oscuridad. Estuve investigando todo ayer y hoy para responder la forma específica en que quiero hacer esta conversión y creo que tengo una respuesta, pero no sé qué es lo mejor para mi proyecto.
El dispositivo 1 emite una señal analógica. Esta señal analógica permanecerá en voltaje low
hasta que emita pulsos durante algún tiempo t
para high
. Luego volverá a tener voltaje low
. Esta señal analógica siempre estará en voltaje low
o high
.
El dispositivo 2 quiere leer esta señal. Sin embargo, solo puede recibir señales con un protocolo UART a su tasa de baudios interna. La forma en que el Dispositivo 2 entenderá esta señal es haciendo que algún Intérprete analice la información a intervalos regulares en bits b0
y b1
representando " high
en este momento" y " low
en este momento".
Intérprete es lo que quiero. El intérprete debe verificar el voltaje emitido por el Dispositivo 1 una vez cada 100 nanosegundos (idealmente una vez cada 2 nanosegundos). Si el voltaje es high
entonces el Intérprete debe registrar una señal b1
. Si el voltaje es low
entonces el Intérprete debe registrar una señal b0
. Debe enviar estos bits al Dispositivo 2 empaquetados en un protocolo UART para que el Dispositivo 2 pueda interpretar los bits. El dispositivo 2 tendrá un software para procesar los bits desde allí.
No sé qué dispositivo usar para el intérprete. Sé que cualquier cosa que codifique sería demasiado lenta, así que esperaba usar algún dispositivo que pudiera hacerlo más rápido. Al principio, estaba tratando de encontrar un ADC de bits bajos con una alta velocidad en el rango de> 500 MSPS, pero creo que un comparador también funcionaría. Sin embargo, a pesar de mi investigación, no he podido decidirme por un producto porque no sé qué parte funcionaría mejor para mi sistema. Los únicos ADC rápidos son caros y no sé si un comparador es lo suficientemente rápido para mí o dará salida con un protocolo UART. O, no sé si hay una parte que podría comprar que hace el trabajo mejor que cualquiera de ellos. Entonces, si alguien tiene alguna buena sugerencia, investigaré sobre ella.
Gracias.
EDITAR: No sabía que TTL no era un protocolo, y me di cuenta de que quería un protocolo UART. Se reemplazó TTL con UART en la publicación.
EDITAR: si tengo una frecuencia de muestreo de 10 MHz, será suficiente, pero se desea una frecuencia de muestreo de 500 MHz si es asequible.
EDITAR: Si rechaza mi pregunta, hágame saber por qué lo hizo. Estoy aprendiendo y quiero comentarios constructivos.
EDITAR: Reescribí la publicación para mayor claridad e incluí imágenes a continuación para aclarar lo que estoy preguntando.
t
(lo mejor que pude dibujar)start
y stop
los bits. Observe que todos los voltajes se alinean con las líneas azules. Uso las líneas azules para mostrar los intervalos.start
/ stop
.Creo que podría entender lo que estás tratando de hacer. Tú quieres:
Si eso es correcto, aquí está mi circuito sugerido:
simular este circuito : esquema creado con CircuitLab
y mi teoría de operación sugerida:
Algunas notas:
Has cambiado mucho la pregunta, así que estoy escribiendo una respuesta completamente nueva. Sin embargo, si bien la nueva versión aclara algunas cosas, todavía deja muchas preguntas sin responder (a pesar de que varias personas las han preguntado específicamente) y continúa mostrando conceptos erróneos. La forma más fácil de pasar por esto es responder a partes individuales de su pregunta:
El dispositivo 1 emite una señal analógica.
No, claramente no lo hace.
Esta señal analógica permanecerá en un voltaje bajo hasta que su pulso sea alto durante un tiempo t. Entonces volverá a la tensión baja. Esta señal analógica siempre estará en voltaje bajo o alto.
Entonces no es una señal analógica. Claramente tiene sólo dos estados posibles. Dijiste antes que T es fijo. Esta es una secuencia de pulsos.
La pregunta importante, que se le ha hecho repetidamente, es cuál es el significado de esta señal. Los niveles de voltaje son fijos, el tiempo alto del pulso es fijo, por lo que la información solo se puede codificar en el tiempo bajo del pulso. Anteriormente dijiste que el tiempo de estos pulsos es "aleatorio" (tu palabra). Si eso es cierto, esta secuencia de pulsos no lleva ninguna información, en cuyo caso todo este ejercicio no tiene sentido. Espero que haya querido decir que los tiempos de pulso son impredecibles, lo cual es muy diferente al azar. Eso aún deja la pregunta de qué datos transporta esta secuencia de pulsos y cómo se codifica exactamente.
El dispositivo 2 quiere leer esta señal. Sin embargo, solo puede recibir señales con un protocolo UART a su tasa de baudios interna.
OK, entonces, ¿cuál es esta tasa de baudios? Tenga en cuenta que esto limitará inherentemente el ancho de banda de la información que el dispositivo 2 puede recibir. La velocidad UART común más rápida es de 115,2 kbaudios, pero puede ser más rápida. Sin embargo, algo por encima de 1 Mbit/s es muy poco probable.
Intérprete es lo que quiero.
No, este intérprete es lo que imaginas como solución. Aparentemente, lo que desea es transmitir la información codificada en el flujo de pulsos a través de un UART al dispositivo 2. Omitiré el resto de su pregunta, ya que es un detalle sin sentido sobre su solución imaginada en lugar del problema real.
Ahora que el problema real es algo más claro, lo que necesitamos saber también es más claro. Para pensar en algo que vaya entre el flujo de pulsos y el UART, necesitamos saber:
Espero respuestas claras y específicas a cada una de estas preguntas, de lo contrario me largo. Todo esto se pide por una razón. Todas deben ser respondidas ya sea que entiendas por qué se preguntan o no. Y no, no puedes "interpretar" estas preguntas y preguntar lo que crees que quiero saber o lo que prefieres decirme.
Ahora ha dado especificaciones reales sobre el flujo de pulso entrante. Viene de un detector de fotones, y cada pulso representa un fotón. La señal es digital TTL, con baja ≤ 800 mV y alta ≥ 3,5 V. Cada pulso dura 30 ns, y hay al menos 50 ns entre pulsos consecutivos. Esto significa que el período de pulso mínimo es de 80 ns y la frecuencia de pulso máxima de 12,5 MHz.
La tarea es comunicar de alguna manera la información en este flujo de pulsos a un segundo dispositivo a través de una conexión UART. No se conoce la tasa de baudios de UART, así que por ahora supondré la tasa común más rápida de 115,2 kbaudios.
Recibir eléctricamente la señal de pulso es fácil ya que cualquier cosa con una entrada compatible con TTL funcionará directamente. Esto podría ser, por ejemplo, cualquier puerta 74HCTxxx funcionando a 5 V. Es posible que las entradas CMOS ordinarias no funcionen, dependiendo de cuál sea su nivel alto lógico mínimo garantizado. Se debe verificar la hoja de datos de lo que sea que esté recibiendo esta señal, pero encontrar algo compatible no será un problema. Aparte de elegir la entrada digital adecuada para recibir esta señal, no es necesario hacer nada especial.
Para diseñar la cosa entre el flujo de pulsos y el UART, necesitamos saber qué información del flujo de pulsos es relevante. ¿Solo te importa el nivel de luz promedio? Si es así, ¿cuál es la frecuencia más alta del nivel de luz que le interesa? O, ¿necesita saber cuándo ocurren los pulsos individuales? Eso sería mucho más difícil. El problema básico es que hay mucha más información en el flujo de pulsos de la que posiblemente pueda comunicar a través de la conexión UART. Por lo tanto, se debe realizar alguna reducción de datos.
Echemos un primer vistazo a la magnitud de la reducción de datos. Suponga que solo necesita saber los recuentos de fotones por intervalo de tiempo. Cada byte UART toma tiempos de 10 bits a 115,2 kbaudios, es decir, 87 µs. A la frecuencia de pulso máxima de 12,5 MHz, puede haber hasta 1085 pulsos por byte UART. Dado que un byte puede expresar 0-255, puede escalar el número de pulsos observados cada byte en 0,235. Eso le daría el nivel de luz resuelto en aproximadamente 4 fotones muestreados a 11,5 kHz. Por lo tanto, la frecuencia máxima del nivel de luz es de 5,7 kHz. ¿Es eso lo suficientemente bueno?
Un posible truco es transferir el error del byte anterior al byte siguiente. Eso le da la cuenta regresiva a largo plazo a fotones individuales a expensas de algo de ruido en cada lectura.
Otra posibilidad es enviar dos bytes cada intervalo de conteo. Ahora puede tener hasta 2170 conteos por intervalo de muestra, pero eso se puede transmitir directamente en dos bytes. Obtiene resolución completa, pero la frecuencia máxima baja a 2,9 kHz. Con un poco de ingenio, puede empaquetar dos lecturas en 3 bytes para obtener una resolución completa a una frecuencia más alta, aunque con más latencia.
Hay muchos esquemas posibles de reducción de datos. Es imposible elegir uno sin saber qué aspecto de los datos le interesan.
high
no es importante. El fotón es el dato y se registra como un pulso. 5) No sé la velocidad en baudios, pero puedo averiguarlo. Sé por mi supervisor que necesitamos una pieza en el rango que pedí, 10MHz-500MHz.Hay demasiada confusión para aclarar de manera realista aquí, así que solo algunos puntos:
Usaría una MCU con un temporizador de hardware ajustado a la tasa de bits de la señal de entrada, junto con algún tipo de conversión de nivel (búfer de activación Schmitt, etc.) para cambiar la señal a tierra y Vcc de la MCU.
El temporizador se usará para muestrear la señal justo después de que debería haber ocurrido una transición. Se puede usar una interrupción para sincronizar el temporizador inicialmente, después de lo cual puede funcionar libremente en función de las características de la señal de entrada en sí.
Una vez que se hayan muestreado 8 bits, se utilizará el UART de la MCU para transmitir el resultado aguas arriba.
pjc50
pedro bennett
zulú
Ignacio Vázquez-Abrams
zulú
zulú
olin lathrop
pjc50
pjc50
olin lathrop
olin lathrop
pjc50
pjc50
zulú
Pablo Terwilliger
t0
en cuandot1
. Entonces, por ejemplo, puedo tener una parte que verifique el voltaje cadaT
segundo, envíe unhigh
pulso olow
pulso si el voltaje es alto o bajo, lo agrupe con voltajes de parada y arranque cada 8 vecesT
, y envíe estos voltajes en serie al sistema que quiere "leer" los pulsos. ¿Está claro? Pierdo algo de resolución pero eso es de esperar.Pablo Terwilliger
Wouter van Ooijen
Cuajada