Tasa de muestreo de ADC a relación de velocidad de reloj de MCU

¿Cómo puedo determinar los requisitos de velocidad de reloj de una mCU para administrar una entrada ADC dada?

Esta aplicación es muy simple: solo quiero tomar una transmisión SPI de un ADC a una mCU y escupirla en la mCU. No ocurre ningún DSP importante ni nada por el estilo a bordo. [agregado] La mCU finalmente está ahí para sacar el video a través de un puerto USB.

En este escenario, tengo un ADC de 10 bits de 40 000 kSPS (40 MSPS) que necesito impulsar a través de un micro de 16 bits. ¿Uso un micro de 40MHz? ¿Puedo usar un micro más lento?

Respuestas (2)

Su pregunta sugiere que el SPI es la entrada del ADC. Sin embargo, el ADS825E es un dispositivo de salida paralelo. Entonces, ¿el SPI es la salida del microcontrolador? Supongo que lo es.

Siempre necesitarás un reloj más rápido. Incluso para un controlador RISC que ejecuta 1MIPS/MHz, un reloj de 40 MHz le permitirá ejecutar 40 millones de instrucciones de lectura por segundo, pero tiene un código adicional, al menos una instrucción de salto para crear un bucle. Entonces, a 80 MHz, puede leer y saltar a la instrucción de lectura. Pero eso no es todo. Si desea cambiar los datos de lectura a través de SPI, también deberá sincronizarse. Al menos 10 pulsos de reloj por muestra de lectura, para ser precisos. A menos que esté utilizando un microcontrolador asíncrono (no sé si ya existen fuera del laboratorio), eso significa 400 MHz. Al menos.
Puede hacer esto con algunos controladores ARM de gama alta, pero si solo quiere leer y cambiar, hay mejores soluciones. Oli menciona un FPGA, pero un CPLD probablemente servirá.

SPI es lo que enviaré AL microcontrolador desde el ADC. ¿Sigue siendo aplicable su respuesta?
@ejoso: sí, aún necesitará 10 ciclos de reloj para cambiar una muestra. Sin embargo, no veo de dónde proviene el SPI; la salida del ADS825E es paralela, SPI es serial.
Olvidé mencionar un registro de cambio de piso en línea, pero continué describiéndolo ahora como un comentario a la respuesta de Oli a continuación.

¿Estás seguro de que son 40Msps? No conozco ningún ADC basado en SPI que funcione tan rápido; requeriría una velocidad SPI de 400 MHz para 10 bits :-)
Suponiendo que sea paralelo, necesitaría al menos 80 MIPS (es decir, no necesariamente velocidad de reloj a menos que sea una instrucción por ciclo) microcontrolador, o uno con un periférico adecuado (por ejemplo, DMA de puerto paralelo)
Sin embargo, un FPGA sería la herramienta preferida para algo a esta velocidad.
Si nos dice más acerca de lo que está tratando de hacer (más el número de pieza del ADC) y confirma la velocidad exacta (por ejemplo, 40,0000 ksps como se escribió anteriormente = 400 Msps, no 40 Msps), se puede dar una mejor respuesta.

EDITAR: convertir la salida ADC paralela a serie significaría que necesita multiplicar la frecuencia del reloj (es decir, 40 Mhz * 10 bits = 400 Mhz, lo cual no es factible) o ejecutar el ADC a una frecuencia de reloj mucho más lenta.
Como se mencionó, un FPGA/CPLD se puede usar para procesar datos muy rápidamente en paralelo, por lo que están hechos para este tipo de tareas.
Si puede reducir un poco el requisito de Msps, un PIC32 tiene DMA y un puerto maestro paralelo (PMP) que IIRC puede leer cada 3 (o posiblemente 2 en algunas circunstancias, tendría que consultar las hojas de datos) instrucciones (máximo 80 MIPS)
He usado uno (PIC32) para leer un ADC de 8 bits a alrededor de 20-30 Msps (ráfagas cortas en el búfer y luego enviadas a través de USB), aunque fue solo un proyecto experimental rápido y un FPGA se hizo cargo de este trabajo en otras versiones. Recuerdo jugar con una rutina de ensamblador para llamar desde el código C (por ejemplo, una larga lista sin bucle de lectura y luego escritura)
Tenga en cuenta que esto solo es leer/enviar datos en ráfagas cortas. No menciona si desea leer/escribir continuamente o cómo desea generarlo (por ejemplo, en qué formato, qué tan rápido), por lo que es difícil decir qué puede lograr.
Lo que es seguro es que cualquier procesamiento ralentizará las cosas significativamente, y como esto probablemente incluirá enviarlo de vuelta (a menos que se pueda usar un periférico), no esperaría mucho más de 10 Msps (continuo, probablemente optimista) haciendo nada más que leer y luego escribir para generar directamente. Si está leyendo en ráfagas cortas, probablemente podrá mejorar esto.
Por supuesto, también podría buscar procesadores más rápidos (por ejemplo, algunos ARM), pero la forma más económica y flexible de hacerlo será un dispositivo lógico programable. Tal vez tomaría una pequeña placa de desarrollo (como la Flashy combinada con una Pluto de KNJN) y les daría una oportunidad.

gracias Oli - Tenía un cero extra allí, que era un error tipográfico. Es un TI ADS825e que estoy viendo. Había planeado convertir la salida paralela a serie a través de registros de desplazamiento. ¡Gracias por tu ayuda!
Lo que estoy tratando de hacer es convertir un video NTSC de baja resolución y sacarlo de un puerto USB. La mayor parte de los ADC que encontré son paralelos, así que inserté un registro de desplazamiento de piso para obtener una transmisión en serie para un micro. Tengo dificultades para encontrar ADC que vean NTSC @input que no sean frecuencias de muestreo bastante altas, es decir, 40 Msps. Y sí, tendría que ser una transmisión continua (probablemente por un tiempo limitado, medido en unos pocos minutos). Estoy un poco nervioso de ir por el camino CPLD/FPGA ya que estoy mucho por encima de mi cabeza. ya, y mientras aprendo mucho, no sé si ya estoy listo para tragarme FPGA.