Estoy trabajando en un proyecto que requiere la lectura de cuatro sensores simultáneamente con marcas de tiempo de hasta milisegundos.
En este momento, lo mejor que se me ocurre es usar cuatro PIC para leer de cada sensor y enviarlos a través de cuatro RS232 a una computadora portátil. Entonces 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 los 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 medición y los envío a través de los puertos serie.
Funciona, pero solo quiero saber si hay una mejor solución, ya que este proyecto es un poco crítico en cuanto al 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 simplemente leer desde el temporizador de un chip adicional usando SPI para que todas las marcas de tiempo provengan de una fuente . Sin embargo, no sé cuándo esos PIC leerán la hora de ese chip de origen. Podría haber cuatro PIC leyendo de él al mismo tiempo, lo que estropearía las marcas de tiempo.
Sensor 1: codificador de cuadratura (canal AB e índice)
Sensor 2: láser (envío de medición de vuelta a través de la interfaz Rs232)
Sensor 3: acelerómetro (analógico)
Sensor 4: inclinómetro (interfaz RS232)
Estoy usando cuatro chips DSPIC30f4011 . Tienen suficientes UART QIE y también admiten ADC simultáneo de cuatro canales.
Para el codificador de cuadratura , uso un QIE en el chip para leerlo y enviar la medición a una computadora portátil a través de UART.
Para Lazer e inclinómetro , los leo a través de UART1 y envío las mediciones a una computadora portátil a través de UART2 (un chip para cada uno de ellos)
Para el acelerómetro , la información xy y z se recopila utilizando el modo simultáneo de cuatro canales. Las mediciones se envían a una computadora portátil a través de UART.
Vale, 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 hacer muestreo simultáneo de 4 canales (es decir, tienen 4 muestras y retenciones)
Actualmente estoy usando uno de estos para experimentar, el dsPIC33FJ64GP802 . Es un pequeño chip impresionante, mucho mejor que los antiguos dsPIC30F4011. Funciona a hasta 40 MIP y tiene un DMA de 8 canales que puede usar para el ADC y otros periféricos, por lo que no debería ser tan difícil lograr que su sincronización se ajuste a las especificaciones. El DMA hace la vida mucho más fácil, puede usarlo más interrupciones para ahorrar su ciclo principal tanto tiempo como sea 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 no necesitarás hacer bit bang ni agregar un UART IC externo si no puedes encontrar una variante con más de 2 UART.
Hay algunas versiones para elegir, la que vinculé es una de las más pequeñas en cuanto a memoria (estaba interesado principalmente en el ADC y el DAC de audio más DMA para la creación de prototipos de ideas de audio), así que eche un vistazo a todas las opciones.
¿Por qué no usar UN micro con CUATRO ADC (no es algo difícil de encontrar) que lea los cuatro valores a la vez y luego informe los datos a través de UN enlace serial?
Sin más detalles sobre su configuración, sospecho que se está engañando a sí mismo acerca de su capacidad para obtener una precisión/sincronización de 1 mS también.
Editado para agregar : si puede brindar más detalles sobre la aplicación, hay muchas otras soluciones; 1ksps es fácilmente factible a través de la tarjeta de sonido de la computadora portátil (la mayoría hará 96 kHz/16 bits en 2 canales, muchos pueden administrar mejor/más canales).
Editar ahora tenemos más información:
Sensor 1: codificador de cuadratura = 3 pines GPIO (ya que A, B, I son solo niveles lógicos)
Sensor 2: Láser = 1 UART
Sensor 3: acelerómetro = 4x ADC
Sensor 4: inclinómetro = Otro UART
Conexión a la base: = Otro UART
Eso es 3 GPIO, 4 ADC y 3 UART, que es factible con UNO de sus dispositivos PIC actuales, si está dispuesto a usar un puerto UART adicional (un montón de rutinas UART de PIC bit-bang en Google). Sería más fácil usar un solo chip que tenga un UART de repuesto o algún otro puerto, pero tal vez su inclinómetro o láser podría usar SPI/I2C. Solo un pensamiento.
Cuestionaría su especificación para la sincronización de algo de esto (dada la muestra-> conversión-> UART-> PIC-> ruta UART para el láser y el inclinómetro), me parece que todo estará sujeto a diferentes cantidades de retraso , incluso si los datos se informan de una sola vez cada 1 mS, es probable que no estén sincronizados consigo mismos hasta cierto punto.
¿Sería posible una solución FPGA? Me imagino que un FPGA, como una verdadera solución de hardware con capacidad multitarea, podría procesar y codificar las cuatro señales en paralelo con bastante facilidad. Cuatro PIC independientes con relojes independientes suena como una receta para el infierno de tiempo.
Recomiendo el Papillio . Una pequeña curva de aprendizaje si nunca ha desarrollado para FPGA antes, pero son bastante poderosos en ciertos escenarios.
PedroJ
Oli Glaser
Timtianyang
Timtianyang
Juan U.