Interconectando una MCU STM32 con un ADC externo (y leyendo los datos a través de SPI)

4

Quiero usar un microcontrolador STM32 para leer datos de un ADC multicanal. El microcontrolador que pretendo usar será probablemente de la serie F7 (como STM32F746ZGT ), mientras que el ADC que tengo actualmente ojo en LTC2358-18 de Analog Devices.

El proyecto en el que estoy trabajando requiere que lea simultáneamente 6 canales analógicos (con una velocidad de datos razonable). Por lo que entiendo, el chip ADC particular puede generar sus resultados de conversión en diferentes canales de salida de datos en serie (SDO) que se pueden leer en paralelo (el reloj en serie es idéntico para todos ellos):

MepreguntabasiesposibleusarunasolaMCUSTM32paraleerlosdatosdesalidade6canalesatravésdeSPI(realmentenonecesitolosdoscanalesrestantes).Engeneral,supongoquedeboconfigurar6interfacesSPIqueestándisponiblesenSTM32F746ZGT,delasiguientemanera:

  1. UnodelosSPIactúacomomaestroyproporcionaelrelojenserie(SCK)paratodoslosdispositivosesclavos(5SPIrestantesenelchipSTM32yelADC)ylasalidadedatosenserie(SDO)paralaconfiguracióndelADC.Elmaestro(supongo)derribaráelCSparatodoslosesclavosSPI.
  2. Los5SPIrestantesenelSTM32F746ZGTcompartenunalíneaSCKcomúnycadaunoestávinculadoauncanalSDOenelADC.

O,enotraspalabras,severíaasí:

¿Funcionaría realmente este tipo de configuración o me falta algo?

    
pregunta K.R.

2 respuestas

3

No soy experto en STM, pero para todos los controladores con los que he trabajado, esto no funcionaría por los siguientes motivos:

  • Probablemente (no verifiqué) no puede acceder a las 6 interfaces SPI simultáneamente debido a las restricciones de asignación de pines, incluso si usa solo un pin MISO de cada una; Supongo que no funciona.
  • Las seis interfaces son todas independientes entre sí, no hay forma de sincronizar el reloj desde la Interfaz 0 a la interfaz n. Este suele ser el caso porque el periférico SPI generalmente se compra como IP y luego se crea una instancia 6 veces; pero no hay interconexión entre esos; son instancias separadas con sus propios registros / regiones de memoria.

En su lugar, lo que debe hacer es leerlos como se indica en serie (normalmente esto se hace a través de una lectura DMA). Dado que solo hay un ADC en el interior y la frecuencia de muestreo máxima de acuerdo con la hoja de datos es de 200k (8 canales), suponiendo una transferencia de 24 bits (no estoy seguro de si el DMA del STM puede manejar esto) da como resultado una velocidad de datos de aproximadamente 40 MBit / spi. Esto debería ser posible, sin tener en cuenta el procesamiento posterior.

    
respondido por el Tom L.
1

Su procesador STM no es multihilo, no lo olvide. No puedes leer físicamente 6 líneas en paralelo. Solo uno a la vez, use las ID de canal y conecte todo en una línea. La conversión de ADC es lo que lleva más tiempo en el proceso. Ordene a los ADC que conviertan y luego lean las salidas individualmente. Ponga todos ellos en la misma línea, luego diga 'línea 1, déme datos', ahora 'línea 2, déme datos', uno por uno. Esta es la razón por la que los ID de canal existen, de lo contrario estarían desperdiciando bits valiosos.

    
respondido por el user160063

Lea otras preguntas en las etiquetas