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

1

¿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 un flujo SPI de un ADC en un mCU y escupirlo. No está ocurriendo ningún DSP importante ni nada de eso a bordo. [agregado] La mCU finalmente está ahí para enviar el video a un puerto USB.

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

    
pregunta ejoso

2 respuestas

2

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

Siempre necesitarás un reloj más rápido. Incluso para un controlador RISC que ejecuta 1MIPS / MHz, un reloj de 40MHz le permitirá ejecutar 40M de instrucciones de lectura por segundo, pero tiene código adicional, al menos una instrucción de salto para crear un bucle. Entonces a 80MHz puedes leer y saltar a la instrucción de lectura. Pero eso no es todo. Si desea desplazar los datos de lectura a través de SPI, también tendrá que sincronizarse. Al menos 10 pulsos de reloj por muestra leída, para ser precisos. A menos que esté usando un microcontrolador asíncrono (no sé si ya existen fuera del laboratorio) eso significa 400MHz. 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 lo hará.

    
respondido por el stevenvh
2

¿Estás seguro de que son 40Msps? No tengo conocimiento de ningún ADC basado en SPI que se ejecute tan rápido; requeriría una velocidad de SPI de 400MHz para 10 bits :-)
Suponiendo que sea paralelo, necesitaría al menos un microcontrolador de 80MIPS (es decir, no necesariamente de frecuencia de reloj a menos que sea una instrucción por ciclo), 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 da más información sobre lo que está tratando de hacer (más el número de pieza de ADC) y confirma la velocidad exacta (por ejemplo, 40,0000 kps como está escrito arriba = 400 Msps, no 40 Msps), se puede dar una mejor respuesta.

EDITAR: convertir la salida paralela de ADC a serie significaría que necesita multiplicar la frecuencia de reloj (es decir, 40Mhz * 10bit = 400Mhz, lo cual no es factible) o ejecutar el ADC a una velocidad de reloj mucho más lenta. Como se mencionó, un FPGA / CPLD se puede usar para procesar datos en forma muy rápida en paralelo, por lo que están diseñados 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 el IIRC puede leer cada 3 (o posiblemente 2 en algunas circunstancias, tendría que consultar las hojas de datos) (máx. 80 MIPS)
He usado uno (PIC32) para leer un ADC de 8 bits a unos 20-30Msps (ráfagas cortas en el búfer luego enviadas por USB), aunque fue solo un proyecto experimental rápido y un FPGA asumió este trabajo en otras versiones. Recuerdo haber estado jugando con una rutina de ensamblador para llamar desde el código C (por ejemplo, una larga lista de lectura y escritura)
Tenga en cuenta que esto es solo leer / enviar datos en ráfagas cortas. No menciona si desea leer / escribir continuamente, o cómo desea imprimirlo (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 en absoluto 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) no haciendo nada más que leer y luego escribir para dar salida directamente. Si está leyendo en ráfagas cortas, probablemente podrá mejorar esto.
Por supuesto, también podría ver 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 Flashy combinada con una Pluto de KNJN) y pruébelos.

    
respondido por el Oli Glaser

Lea otras preguntas en las etiquetas