interconectando múltiples ADC: compartiendo reloj maestro

Mi proyecto consiste en conectar dos convertidores analógico-digitales a un microcontrolador STM32F411RE. El primer ADC es un ADS1191, el segundo es un ADS1158.

Esos dos ADC tendrán que convertir señales simultáneamente y sus muestras recuperadas por la MCU.

He estado acostumbrado a trabajar con un solo ADC. El programa se interrumpe cuando el pin DRDY (datos listos) baja y se recuperan las muestras.

Las preguntas son:

¿Debo asegurarme de que los dos ADC comparten el mismo reloj maestro? En caso afirmativo, supongo que debería usar el reloj interno de uno de ellos y alimentarlo al pin del reloj externo del segundo. ADS1191 tiene un reloj interno de 2 MHz y requiere un reloj externo de 2 MHz. ADS1158 tiene un reloj interno de 16 MHz y requiere un reloj externo de 0,1 a 16 MHz. ¿Es seguro usar el reloj interno ADS1191 y enviarlo a ADS1158? ¿Tendré que sacrificar algo alimentando un reloj maestro de menor frecuencia (2MHz vs 16MHz)?

Saludos,

Laurent.

aclaraciones

El modo de "lectura continua" que estoy acostumbrado a usar con un solo ADC consiste en conectar una señal de interrupción al pin DRDY (datos listos) del ADC. Cuando se están muestreando los datos, el pin DRDY cambia alto. Luego, cuando los datos están listos para ser transferidos, el pin cambia a bajo. La MCU detecta el flanco descendente de DRDY y comienza a transferir los datos byte por byte.

Lo que busco es tener muestras "correlacionadas", es decir, asegurarme de que dos muestras respectivas de cada ADC recuperadas al mismo tiempo correspondan al mismo "contenedor" de tiempo, lo que podría no suceder si los respectivos relojes maestros muestran un deriva. De las valiosas respuestas a continuación, concluyo lo siguiente con respecto al uso de dos (o más) ADC.

Solución sugerida Asegúrese de que los dos ADC compartan el mismo reloj maestro. En mi aplicación, puedo redirigir el reloj maestro interno del primer ADC a un pin de salida. Esta señal de reloj se alimentaría como "reloj externo" en el segundo ADC. Para reducir la frecuencia (que la mayoría de las veces está relacionada con la tasa de muestreo), se puede recurrir a un flip-flop tipo d (para dividir la frecuencia por dos). Por lo tanto, el principio sería el mismo que en una sola aplicación ADC: activar la interrupción en DRDY de un ADC (el que tiene el tiempo de espera más corto). Cuando haya terminado esta primera transferencia, recupere muestras del otro ADC.

Respuestas (2)

Si desea tener la misma cantidad de muestras por segundo, deberá leer detenidamente las hojas de datos. Lo que quiere decir específicamente con 'simultáneamente' necesita aclaración. Todo lo que puedo mostrarte aquí es cómo lograr muestras correlacionadas al mismo ritmo.

El ADS1158 (figura 128 de la hoja de datos) muestra un modo de canal fijo en su forma más simple con la tasa de datos en Fclk/128. Esta parece ser la frecuencia de muestreo.

El ADS1191 está optimizado para frecuencias de muestreo de <=8kS/s. Por lo tanto, usar la tasa de 8kS/s sería lo mejor que puede lograr, según el fabricante.

Hay una opción para un reloj externo en ambos, así que veamos qué puedes hacer.

El ADS1191 acepta un reloj de 2,048 MHz (consulte la hoja de datos para obtener detalles sobre las conexiones de los pines, ya que se espera que el modulador funcione a 128 kHz).

Para obtener la velocidad de 8kS/s del ADS1158 en el modo simple anterior, se obtiene un reloj maestro de 1.024Mhz. Tenga en cuenta que hay opciones limitadas para cambiar la frecuencia de muestreo en esta parte

Esto es una suerte: genere un reloj maestro de 2,048 MHz para el ADS1191 y divídalo entre 2 para obtener el reloj externo en el ADS1158.

Si ahora inicia cada conversión en el mismo instante, obtendrá conversiones que toman la misma cantidad de tiempo y la frecuencia de muestreo está correlacionada.

Tenga en cuenta que el reloj de 2,048 MHz para el ADS1191 solo se implementó para permitir un acceso SPI más rápido; no debe intentar ejecutar el modulador por encima de 128 kHz.

[Actualización en respuesta al comentario]

Sugerí un reloj maestro porque ese era un método para lograr el resultado deseado; como usted nota, hay otros métodos.

El flip flop tipo AD con #Q a D es de hecho una forma estándar de dividir un reloj por 2.

HTH

Esta es la respuesta que estaba buscando. Ahora, ¿puedo preguntar por qué aconseja "generar un reloj maestro para ADS1191"? ¿Por qué no usar la señal del oscilador interno como entrada para ADS1158? En realidad, es posible redirigir ese reloj maestro interno a un pin de salida (tabla 3 de la hoja de datos ADS1191). La pregunta que sigue es: ¿Cómo divido una frecuencia de reloj por 2? Mi opinión es una chancleta tipo d. ¿Correcto?

Lo que debe decidir es: si deben convertir la misma cantidad de bits en el mismo tiempo exacto, o si deben muestrear al mismo tiempo. Estos son muy, muy diferentes.

(los enlaces a las hojas de datos en su pregunta me habrían ayudado a ser más rápido, por cierto) Para referencia; Hoja de datos ADS1191/ADS1192 TI y hoja de datos ADS1158

Comenzar al mismo tiempo es fácil:

Ambos chips tienen una señal de "INICIO" dedicada (p10 ADS1191 y p6 ADS1158), que puede activar simultáneamente, y comenzarán a muestrear exactamente al mismo tiempo. Uno que funcione a 16 MHz podría hacerse primero (¡dependiendo de la resolución de conversión establecida!), pero ¿eso importa? La señal analógica captada es exactamente de la misma hora. Para eso es ese pin. (( Editar: una nota: la hoja de datos ADS1191 no especifica la polaridad de INICIO en esa tabla, debe buscarla más adelante en la hoja de datos si tiene la intención de usarla. Probablemente sea positivo como dice en la tabla ADS1158, pero mejor para estar seguro. ))

Convertir al mismo tiempo tiene ifs:

Si necesita que se conviertan exactamente al mismo tiempo, con la misma resolución y ambas hojas de datos especifican la misma cantidad de ciclos de reloj para esa resolución (¡cuente el si está aquí!), Entonces, sí, deben sincronizarse desde la misma fuente. Pero en tal caso, consideraría seriamente usar un oscilador de cristal externo de 2 MHz para ambos, porque claramente tiene algunas demandas de tiempo muy específicas que un oscilador interno no le dará.

Lo que digo es: si tiene motivos para preocuparse por la falta de coincidencia del tiempo de conversión en el orden de los microsegundos (que creo que no tiene si usa los pines de inicio para sincronizar, pero esos son detalles que no especificar), no desea utilizar ningún oscilador interno. En absoluto.

Lo que creo que querías decir para estar preocupado:

Si solo quiere estar 100% seguro de la correlación entre las muestras de ambos, consulte las hojas de datos, mire las especificaciones de la señal de INICIO para la muestra real/tiempo de espera y vea si coinciden con sus expectativas. Estoy pensando que probablemente lo harán.

¿Qué pierde al registrar un dispositivo de alta velocidad a una velocidad más baja?

Si cronometra el dispositivo con capacidad de frecuencia más alta con una frecuencia más baja, de hecho estará sacrificando la velocidad o la precisión o ambos.

Digamos que puede hacer 16 muestras en 1 ms a 16 MHz (no leí esa parte de la hoja de datos, así que esto es hipotético, no un número real).

Entonces, si lo registra a 2MHz, solo podrá hacer 2 muestras en el mismo 1ms. Si solo necesita una muestra por 1 ms y no necesita una alta precisión a través del sobremuestreo: no pasa nada. Si desea una alta precisión, probablemente desee sobremuestrear y, por lo general, eso se hace en un factor de 4, 8 o 16: Ah, lástima: ahora es demasiado lento.

Lo mismo ocurre con la necesidad de 4 muestras por 1 ms. Podría hacerlo a 16 MHz, pero ahora a 2 MHz no puede. Es así de simple.

El tiempo específico vendrá de su hoja de datos y no ha compartido sus requisitos exactos, por lo que verificar todo eso depende completamente de usted.

De hecho, mi preocupación estaba relacionada con el efecto de deriva de los respectivos relojes. Digamos, si ambos ADC están configurados para empujar teóricamente nuevas muestras cada 1 ms (mientras se inician exactamente al mismo tiempo), un ADC podría ser un poco más lento en cuanto a "saltar" una muestra de vez en cuando. Creo que esto es a lo que Peter Smith se refiere como "muestras correlacionadas". Sin embargo, lo que dices sobre comenzar a mantener el tiempo es interesante.
@olol85 Para correlacionar los puntos de muestra analógicos, solo está mirando el momento de la muestra, no el tiempo de conversión, como se identificó anteriormente. El pin "START" señala cuando los ADC "obtienen" el valor de la entrada, la velocidad del reloj solo determina qué tan rápido lo convierten en algo digital. Si los registra con un 1kHz preciso y sin fluctuaciones en el pin de inicio y los configuró para permitir > 1kSPS, obtendrá muestras correlacionadas sin fluctuaciones de ambos. Si desea una correlación en el modo de ejecución libre (sin control), necesita las matemáticas exactas del reloj como sugiere Peter en su respuesta. Ver página 28 de ADS1191