Lectura de varios sensores y sincronización de datos

2

Estoy trabajando en un proyecto que requiere la lectura de cuatro sensores simultáneamente con marcas de tiempo hasta milisegundos.

Ahora mismo, lo mejor que puedo hacer es usar cuatro PIC para leer de cada sensor y enviarlos a través de cuatro RS232 a una computadora portátil. Así que esos sensores no interfieren entre sí. Para las marcas de tiempo, uso un interruptor mecánico para activar una interrupción de cambio de voltaje de pin externo para iniciar temporizadores en todos los PIC al mismo tiempo. Los temporizadores aumentan cada milisegundo y simplemente agrego el valor de los temporizadores al final de cada medida y los emito a través de los puertos serie.

Funciona, pero solo quiero saber si hay una solución mejor, ya que este proyecto es de tipo crítico de tiempo (se requieren 1000 mediciones por segundo). Y también el temporizador interno para cada PIC varía, lo que anula el propósito de sincronizar los temporizadores.

También pensé en leer el temporizador de un chip adicional utilizando SPI, por lo que todas las marcas de tiempo provienen de una fuente . Sin embargo, no sé cuándo esos PIC leerán la hora de ese chip fuente. Podrían haber cuatro PIC que se leen al mismo tiempo, lo que desordenará las marcas de tiempo.

Sensor 1: codificador de cuadratura (canal A B e índice)

Sensor 2: Láser (envío de mediciones a través de la interfaz Rs232)

Sensor 3: acelerómetro (analógico)

Sensor 4: inclinómetro (interfaz RS232)

Estoy usando cuatro DSPIC30f4011 . Tienen suficientes UARTs de QIE y también admiten ADC de cuatro canales simultáneos.

Para Codificador de cuadratura , utilizo un QIE en chip para leerlo y enviar mediciones a una computadora portátil a través de UART.

Para Lazer e inclinometer , leo de ellos a través de UART1 y envío medidas a una computadora portátil a través de UART2 (un chip para cada uno de ellos)

Para acelerómetro , la información de x y y z se está recopilando mediante el modo simultáneo de cuatro canales. Las mediciones se envían a una computadora portátil a través de UART.

    
pregunta Timtianyang

3 respuestas

1

Bien, tenemos algo de información sobre los sensores.

Esto debería ser factible con uno de los dsPIC33F más nuevos. Como @gbarry señala correctamente, tienen variantes que pueden realizar muestreos simultáneos en 4 canales (es decir, tienen 4 muestreos y reservas)

Actualmenteestoyusandounodeestosparaalgunosexperimentos,el dsPIC33FJ64GP802 . Es un pequeño e impresionante chip, mucho mejor que los dsPIC30F4011s más antiguos. Funciona con hasta 40 MIP y tiene un DMA de 8 canales que puede usar para el ADC y otros periféricos, por lo que no debe ser tan difícil obtener su tiempo dentro de las especificaciones. El DMA hace que la vida sea mucho más fácil, puede usarla más las interrupciones para guardar su bucle principal todo el tiempo posible.
También tiene 2 UART y 4 capturas / comparaciones (para el codificador cuádruple) más 5 temporizadores.

Te falta 1 UART, por lo que tampoco necesitarás hacer bit bang o agregar un UART IC externo si no puedes encontrar una variante con más de 2 UART.

Hay algunas versiones para elegir, una a la que me vinculé es una de las más pequeñas en cuanto a memoria (me interesaba principalmente el ADC y el DAC de audio más DMA para la creación de prototipos de ideas de audio), así que hojee todos las opciones.

    
respondido por el Oli Glaser
1

¿Por qué no usar UN micro con CUATRO ADC (que no es difícil de encontrar) que lee los cuatro valores a la vez y luego reporta los datos a través de UN enlace serial?

Sin más detalles sobre su configuración, sospecho que se está engañando acerca de su capacidad para obtener la precisión / sincronización de 1 ms también.

Editado para agregar : si puede dar más detalles sobre la aplicación, hay muchas otras soluciones; 1ksps se puede hacer fácilmente a través de la tarjeta de sonido de la computadora portátil (la mayoría funcionará a 96 kHz / 16 bits en 2 canales, muchos pueden administrar mejores canales o más).

Editar ahora tenemos más información:

Sensor 1: codificador de cuadratura = 3 pines GPIO (como A, B, I son solo niveles lógicos)

Sensor 2: Lazer = 1 UART

Sensor 3: acelerómetro = 4x ADC's

Sensor 4: inclinómetro = Otro UART

Conexión a la base: = Otro UART

Entonces, eso es 3 GPIO, 4 ADC y 3 UART, lo que es factible con UNO de tus actuales dispositivos PIC, si estás dispuesto a usar un puerto UART adicional (hay muchas rutinas UART bit-bang PIC en el google ). ¿Sería más fácil usar un solo chip que tenga un UART de repuesto o algún otro puerto, pero quizás su inclinómetro o láser podrían usar SPI / I2C? Sólo un pensamiento.

Cuestionaría su especificación para la sincronización de cualquiera de esto (dada la muestra- > conversión- > UART- > PIC- > UART ruta para el láser e inclemómetro), me parece todo estará sujeto a diferentes cantidades de demora, incluso si los datos se reportan en un hit cada 1 ms, es probable que esté desincronizado consigo mismo en algún grado.

    
respondido por el John U
1

¿Sería posible una solución FPGA? Me imagino que un FPGA, como una verdadera solución de hardware capaz de realizar múltiples tareas, sería capaz de procesar y codificar las cuatro señales en paralelo con bastante facilidad. Cuatro PIC independientes con relojes independientes suenan como una receta para el infierno del tiempo.

Recomiendo el Papillio . Poco de una curva de aprendizaje si nunca has desarrollado para FPGAs antes, pero son bastante poderosos en ciertos escenarios.

    
respondido por el stephenfin

Lea otras preguntas en las etiquetas