¿Cómo aumentar el número de entradas de microcontrolador?

0

Tengo relativamente poca experiencia con la electrónica, pero tengo una comprensión básica. Estoy intentando construir un dispositivo de medición, que medirá 100 puntos en 0.1 segundos. Todos estos producirán un número digital que deberá almacenarse en un microcontrolador.

Si tuviera que usar el raspberry pi modelo b, solo tiene 17 pines GPIO de entrada. Mi pregunta es: ¿existe una forma relativamente simple de tomar más entradas de las que el microcontrolador tiene pines?

Actualmente, la forma en que lo veo es tener una salida que envía un número para elegir qué entrada leer, ese sensor luego enviará su valor actual al microcontrolador. La desventaja de este método es, obviamente, que lleva tiempo. Quiero 100 entradas en el orden de 10 ^ -3 segundos y supongo que esta debe ser una característica bastante común del diseño de circuitos, dado que la mayoría de los sistemas tienen una gran cantidad de sensores.

Entonces, ¿hay una manera fácil de hacerlo? ¿Es sensato el modo que he detallado anteriormente? ¿Es este un problema común? Si es así, ¿cómo se soluciona normalmente?

    
pregunta Jack Schofield

4 respuestas

2

Si desea que una gran cantidad de sensores graben simultáneamente, entonces una forma es tener sensores que puedan ser estroboscópicos, registrar su propio valor internamente, y luego ser controlados por el controlador central. Pero eso requiere cierto grado de sensor inteligente.

En el otro extremo del espectro hay un controlador central con suficiente E / S para registrarlos todos a la vez. Como dices, necesitarás muchos pins.

Una posición intermedia es una especie de almacenamiento enganchable, paralelo a registros en serie, por ejemplo, que puede bloquear sus sensores y luego ser interrogado más tarde por el controlador. Es más fácil considerar esto como una expansión de ancho de entrada para su controlador.

¿Qué tan simultáneo se necesita? Podría usar un controlador con DMA para ejecutar una encuesta muy rápida.

    
respondido por el Neil_UK
2

El ST Micro VL6180X que ha identificado como no hace el sensor no funciona de la manera que te imaginas.

Primero, como escribió Steve G, solo funciona hasta 100 mm, lo que puede ser un 'show stopper'. Sin embargo, incluso si la distancia de detección máxima de 100 mm no es un problema, por ejemplo, el robot está navegando a través de un tubo, con las paredes a menos de 100 mm de distancia, hay otro problema.

La hoja de datos, "Proximidad VL6180X y el módulo de detección de luz ambiental (ALS) " dice en 1.1" Especificación técnica "en la Nota 5" Asume una frecuencia de muestreo de 10 Hz "

Así que solo produce una respuesta 10 veces / segundo, es decir, una medición cada 0.1 segundos. Eso puede sonar bien, pero hay más que eso.

Mientras que la página del producto dice "el VL6180X mide con precisión el tiempo que tarda la luz en viajar hasta el objeto más cercano y reflejarse en el sensor (Tiempo de vuelo)". Es no la medición de un fotón o un breve pulso de luz.

La luz viaja a \ $ 3 \ times10 ^ 8 \ $ metros / segundo. Así que para determinar la distancia a 1 mm, tendría que funcionar con una resolución de tiempo de alrededor de \ $ 1mm / 3 \ times10 ^ {11} mm / segundo \ $, es decir, \ $ 3.3 \ times10 ^ {- 12} segundos \ $. No funciona de esa manera.

Genera muchos pulsos, en diferentes momentos, con diferentes duraciones, y realiza un procesamiento inteligente en muchas muestras para derivar una medición de distancia. AFAIK, genera pulsos durante gran parte de esos 0,1 segundos. Por lo tanto, el flujo de pulsos de cada sensor activo puede interferir con otros sensores activos en su vecindario.

En el peor de los casos, solo un sensor puede estar activo en cualquier momento y necesita 0.1 segundos completos para medir la distancia. Es poco probable que sea tan malo, pero puede ser que el número de sensores activos simultáneamente sea una pequeña fracción del total de 100 cientos.

Resumen: la frecuencia de muestreo práctica para los 100 sensores puede ser de varios segundos.

    
respondido por el gbulmer
1

Hay muchas maneras en las que se podría manejar este problema en particular. Dado que está solicitando un muestreo "casi instantáneo" de las 100 entradas, ¿qué le parece algo como esto?

  • 1 microcontrolador principal < - > bus serie < - > Raspberry Pi
  • Cantidad 10 de sub-microcontroladores de 26 pines - > Bus de datos de 10 bits - > micro principal

La mayoría de los microcontroladores tienen pines de "interrupción". Entonces, si sus 10 sub-micros están programados para "leer" 10 entradas en el momento en que un pin de interrupción alterna, entonces el cableado de esa línea de interrupción a cada una de las diez y alternándolo muestreará 100 entradas simultáneamente. Regálelos a todos desde una fuente de reloj para obtener la mejor precisión.

Entonces solo es cuestión de que cada uno de los diez envíe sus datos en el bus de 10 bits al micro principal. Se puede hacer con temporización, pines de selección individuales, etc. Una vez que el micro principal tenga todos los datos, envíelo al Rpi en serie.

    
respondido por el rdtsc
1

Si sus entradas y tiempos necesita ir con un FPGA, algunos dispositivos tienen 500 entradas. Lo bueno de un FPGA es que puedes construir temporizadores para cada entrada, ten en cuenta que habría una gran curva de aprendizaje, pero divertida si te animas. Una forma más rápida sería usar un hueso beagle u otro tablero de desarrollo. ¿Prefiere pasar tiempo comprando tablas y cableado? ¿O aprender una nueva cadena de herramientas? Tu decides. enlace

    
respondido por el laptop2d

Lea otras preguntas en las etiquetas