f Proyecto: Sistema de adquisición de datos ~ Ingenieria a nivel industrial

Visita mi canal de youtube

domingo, 16 de julio de 2017

Proyecto: Sistema de adquisición de datos

Proyecto: Sistema de adquisición de datos

Con la red del área del regulador y la tarjeta del SD



introducción

Este proyecto implementa un sistema de adquisición de datos de alta velocidad usando microcontroladores Mega32 y una CAN (Area de Controlador de Área).

Registrar datos es esencial para probar y desarrollar un coche de carreras. Grabar lo que está haciendo cada sensor puede decirle a una ingeniería cómo funciona el auto, y lo más importante, cómo hacerlo más rápido. Un coche bien equipado puede tener muchos sensores, con los coches de Fórmula Uno con más de 100 sensores. El coche FSAE de Cornell tiene más de 50 sensores, muchos de los cuales requieren altas tasas de muestreo para ser útiles. Los sistemas de adquisición de datos comerciales son caros, lentos o tienen pocos insumos. Una solución a este problema había sido intentado por 476 estudiantes anteriores (Karl Antle y Ryan Mcdaniel) utilizando un PIC18F2585, pero sólo fue capaz de registrar con fiabilidad a 150 Hz. Muchos sensores en el coche requieren tasas de muestreo mucho más altas, ya que los sensores están registrando eventos que ocurren en un período de tiempo muy corto. Por ejemplo, al mirar un golpe fuerte usando la posición del eje de balancín el acontecimiento puede durar solamente .05 segundos al conducir rápidamente. Si se toma la derivada de los datos se requiere una tasa de muestreo muy alta para proporcionar datos útiles, al menos 500 Hz. Fue esta necesidad de adquisición de datos de alta velocidad lo que nos motivó a crear un sistema de adquisición de datos de alta velocidad para reemplazar el actual.



Nuestro sistema utiliza múltiples nodos transmisores para adquirir datos de sensores y transmitir los datos en paquetes a través de un bus CAN. Cada transmisor está compuesto por un microcontrolador Mega32, un convertidor analógico a digital externo, un controlador CAN y un transceptor CAN. Los paquetes CAN son recibidos por un único nodo receptor y almacenados en una tarjeta Secure Digital (SD). El nodo receptor consta de 2 Mega32, un controlador CAN, un transceptor CAN y una tarjeta SD. El objetivo del proyecto era crear un sistema que pudiera grabar 32 canales ADC de 10 bits grabados por 4 Mega32s y transmitidos a través del bus CAN. Además, el sistema debe ser expansible para aceptar paquetes CAN enviados desde otros módulos, como un ECM o una unidad O2 independiente. 500 Hz en los 32 canales AD fue establecido como un objetivo para la frecuencia de muestreo.


Diseño de alto nivel

La motivación de este proyecto circundó el hecho de que la adquisición de datos de alta velocidad utilizando un único ATMEL o PIC es difícil cuando se utilizan muchas interfaces SPI. Control de una tarjeta SD, 4 chips analógicos a digitales MCP3008 y, si utiliza un Mega32, un transceptor CAN en el bus SPI da lugar a problemas de temporización que resultan en un rendimiento global deficiente. El principal problema es el deseo de muestrear a una tasa regular. Escribir en la tarjeta SD debe realizarse en sectores de 512 bytes, lo que toma alrededor de 3,8 ms (se encuentra utilizando un PIC18F2585 que funciona a 40 MHz). Si se desea una frecuencia de muestreo regular, siempre debe haber 3,8 ms entre el muestreo de los chips AD, por lo que escribir en la tarjeta SD no perturba la regularidad del muestreo. Tomando el tiempo de muestra de AD en cuenta, una frecuencia máxima de muestreo utilizando un procesador PIC o Mega32 es alrededor de 150-200 Hz (para el número de canales deseados). Para sistemas de alto rendimiento, como un coche de carreras, 200 Hz no es suficiente para mover rápidamente sensores como las celdas de carga y la posición del balancín. Para combatir este problema, nuestro sistema de adquisición de datos utiliza muchos Mega32s trabajando en paralelo y en serie para evitar los problemas del bus SPI.


                                                                      Figure 1: Data Flow Diagram




Todos los principales cuellos de botella en el sistema de un chip se refieren al bus SPI. Al separar las funciones de bus SPI entre muchos chips, eliminamos ese cuello de botella en el sistema. Como se ve en la Figura 1, nuestro sistema usa una unidad central que almacena y recibe datos de cuatro satélites sobre un bus CAN. La unidad central consta de dos Mega32, uno que recibe los datos de los satélites y otro que escribe los datos en una tarjeta SD. La tarjeta SD está funcionando en modo SPI, ya que el modo SD es una interfaz propietaria. El SD Mega32 se comunica con el Receiver Mega32 a través de una interfaz paralela. Los procesadores satélites manejan leer los chips ADC, así como poner los datos en el bus CAN. Mientras que estas dos funciones SPI son controladas por el mismo chip, no toma tiempo suficiente para bloquearse entre sí cuando se ejecuta a velocidades inferiores a 2,5 kHz. Como nuestro objetivo era mucho menor que esto, se consideró aceptable utilizar un chip que controlaba ambos SPI auxiliares.



Ahora que se había rectificado un cuello de botella, tuvimos que asegurarnos de que los modos de transferencia de datos entre chips fueran lo suficientemente rápidos para cumplir el requisito de 500 Hz. Para asegurar que íbamos a tener suficiente ancho de banda para transmitir los datos a través de la red CAN, calculamos el número de bits necesarios para enviar los datos que necesitábamos al chip receptor. Para calcular esto, debe entenderse el estándar CAN.



El CAN 2.0b especifica el formato de todos los paquetes y el esquema de codificación utilizado en el bus CAN. El bus CAN puede asumir uno de los dos estados, dominante (lógico bajo) o recesivo (alto lógico) . Si dos dispositivos intentan Conducir el bus CAN simultáneamente, uno con un bit dominante y el otro con un bit recesivo, el bus asumirá el estado dominante. Todos los dispositivos leen el valor del bus durante la transmisión. Si un dispositivo transmite un bit recesivo pero lee un Dominante, sabe que otro dispositivo está transmitiendo y esperará hasta que el dispositivo esté terminado para volver a intentar su transmisión. Este sistema permite la conexión fácil de varios dispositivos al bus sin ninguna detección de colisión adicional.



Cada trama consta de un solo bit de inicio dominante, un campo de arbitraje de 12 bits utilizado para establecer la prioridad e identificación de los mensajes, un campo de control de 6 bits que incluye el código de longitud de datos, Un campo de datos que varía de 0 a 8 bytes, un campo de comprobación de redundancia cíclica (CRC) de 16 bits para la detección de errores y un campo de fin de fotograma de 7 bits. En esta norma, se da mayor prioridad a los fotogramas con valores inferiores Valores del campo de arbitraje (bits dominantes en las posiciones más significativas).



Figure 2 Standard CAN Data Frame

Usando esta definición, se puede ver que sólo 64 bits de datos pueden ser enviados por paquete. Vamos a grabar 8 canales ADC de 10 bits además de 1 byte de identificador y 3 bytes de timestamp, para un total de 104 bits o 14 bytes. Para simplificar la decodificación de datos, enviamos un paquete de 8 bytes con el identificador de 1 byte, el sello de tiempo de 3 bytes y 4 bytes de datos y un paquete de 6 bytes con los 6 bytes de datos restantes. Utilizando el marco de datos representado en la Figura 2, se puede ver que dado que se necesitan dos paquetes, se envían 192 bits en total (Eq. 1-3). Como nos gustaría ejecutar 4 satélites a 500 Hz, la velocidad total de datos es 384kb / s (Eq 5).



La tasa de datos máxima posible según la hoja de datos MCP2515 es de 1 Mb / s, muy por encima de la velocidad de datos requerida por los satélites. Además de los satélites, habrá dos unidades más que pondrán datos en el bus CAN (no incluidos en este proyecto). Usando las ecuaciones definidas anteriormente, se encontró que la velocidad de datos total requerida para los dos módulos adicionales era de sólo 27 kb / s, haciendo que la velocidad de transferencia de datos total 411 kb / s, todavía bien bajo el máximo de CAN. Esto da la oportunidad de registrar los satélites más rápidamente en el futuro para una frecuencia de muestra más rápida.

Con la red CAN calculada para estar dentro de sus límites, se investigaron los otros dos métodos de transferencia de datos. No pudimos calcular exactamente lo que iba a ser la velocidad de transferencia de datos de la comunicación de puerto paralelo, pero con 8 bits de transferencia simultánea durante sólo unos pocos ciclos de reloj, supusimos que esto no sería un problema. Esta suposición resultó ser correcta, y se discute en la sección de resultados.

El reloj de la interfaz SPI a la tarjeta SD a 8 Mhz, podemos asumir una velocidad máxima de datos de 8 Mb / s. Sin embargo, se sabe de la experiencia anterior con las tarjetas del SD que la tarifa de datos real es a menudo 2-5 veces más lenta debido a la disposición del procesador y el envío de la información de SPI. Incluso con una reducción de 5 veces en la velocidad, la tasa de transferencia de datos a la tarjeta SD sigue siendo de 1,6 Mb / s, más que el requisito. Esto fue considerado suficiente para nuestros propósitos.

Hardware Details

Satellite Hardware

Figure 3: Satellite Schematic

La figura 3 muestra la configuración de cada nodo satélite. Los datos del sensor se convierten en forma digital por el ADC, se leen en el Mega32 y se preparan para la transmisión a través del bus CAN. El Mega32 carga los datos en el controlador CAN para su transmisión a través del Transceptor sobre el bus CAN.

Convertidor analógico a digital El sistema utiliza un ADC externo de 8 canales para adquirir datos de sensores con salidas de tensión analógicas. Los datos digitales se transmiten al Mega32 mediante el bus SPI. El pin B.3 se utiliza como chip Seleccione para el ADC.

Controlador CAN El Mega32 envía los datos adquiridos desde el ADC al controlador CAN después de prepararlos para su transmisión (más en la sección Detalles del Software). La comunicación entre el Mega32 y el controlador también utiliza el bus SPI, con el pin B.4 como El selector de chip. Pin B.0 se conecta a la línea de interrupción en el controlador CAN. El controlador CAN genera una interrupción en esta línea cuando se ha transmitido un paquete CAN, que se utiliza para indicar al Mega32 cuándo comenzar a cargar el siguiente Paquete de transmisión.

CAN Transciever El transceptor funciona para cambiar entre señales lógicas altas y bajas (5V y 0V, respectivamente) en el lado del controlador CAN y señalización diferencial en el lado del bus CAN. La resistencia externa funciona como la carga para el transceptor y es de aproximadamente 100 Ω.

La Figura 4 muestra una foto de la disposición física del controlador, transceptor y ADC de un solo satélite. El controlador está a la izquierda, el transceptor en el centro y el ADC a la derecha. La Figura 5 muestra una foto de dos Satélites completos, incluyendo los Mega32s.


Figure 4: Controller, Transceiver and ADC for a Satellite


Figure 5: Two Complete Satellites

Receiver/SD Hardware

Figure 6: Receiver/SD Schematic
La figura 6 muestra la configuración del receptor y de la tarjeta SD. Los datos se reciben desde el bus CAN por el primer Mega32, luego se transmiten a través de un bus paralelo al segundo Mega32, que lo escribe a la tarjeta SD mediante SPI.

CAN Transceptor El transceptor convierte señales diferenciales en el bus CAN a niveles lógicos de 5V para el controlador CAN. Los paquetes se envían al controlador en la línea RX.

Controlador CAN El controlador CAN recibe paquetes desde el transceptor CAN y almacena los datos en sus registros de búfer de recepción. Una recepción de paquetes activa una interrupción en la línea RX0BF, que está conectada a la interrupción externa 0 en el Mega32. El Mega32 hace que el microcontrolador comience a leer los datos desde el controlador a través del bus SPI.

Conexión de la tarjeta SD La tarjeta SD utiliza una fuente de alimentación de 3,3 V separada de la fuente de 5 V utilizada por todos los demás chips. Para cambiar los niveles altos de lógica 5V de Mega32 a niveles de 3,3V, se utilizan divisores de voltaje simples en SCK , MOSI y CS. La línea MISO se conecta directamente desde la tarjeta SD al Mega32: ya que el nivel de 3,3V es lo suficientemente alto para el Mega32, no se necesita cambiar el nivel.

La figura 7 es una foto del receptor y de la configuración SD. El receptor (protoboard verde) lee los mensajes CAN de un controlador CAN (no representado) y los transmite al SD Mega32 (placa amarilla) a través del bus paralelo. Escribe los datos en la tarjeta SD a través del bus SPI.


Figure 7: Receiver Mega32, SD Mega32 and SD Card

Detalles del software

Software de satélite

Restablecer el tiempo

Al reiniciar, el satélite inicializa los registros de control SPI, Timer0, Timer2 y External Interrupt 0. La interfaz SPI está habilitada, el ISR SPI está deshabilitado, el MSB transmite primero y el Mega32 está configurado como master. Configurado para 9600 baudios con Tx y Rx activados y el ISR Rx completo está habilitado. El temporizador0 se configura en el modo de comparación para generar un ISR a 500 Hz, que se utilizará para activar la adquisición y transmisión de datos. El temporizador2 está configurado En el modo de comparación de coincidencias para generar un ISR a 1000 Hz, que se utilizará para generar la marca de tiempo para paquetes CAN. Interrupción externa 0 genera un ISR en un borde negativo en el pin D.2, que se utilizará para iniciar la adquisición de datos .


Inicialización del controlador CAN

Antes de que los datos puedan transmitirse a través del bus CAN, el controlador debe estar configurado correctamente. Todas las comunicaciones entre el Mega32 y el controlador CAN se realizan a través del bus SPI a 8 MHz. Las funciones de lectura y escritura del controlador se almacenan En el archivo de encabezado personalizado mcp2515.h. El controlador está configurado en modo de funcionamiento normal (al restablecer ingresa por defecto a un modo de configuración solamente). Está configurado para generar una interrupción de bajo activo en su pin INT cuando una transmisión El identificador de paquetes CAN está definido en el código que se carga en el controlador. El controlador también está configurado para no recibir paquetes CAN transmitidos por otros satélites al establecer sus filtros de receptor.


Bucle principal

El bucle principal del satélite comprueba los valores de tres banderas y lanza la función apropiada si se establece un indicador. El indicador poll_ADC es establecido por el ISR de comparación de coincidencias Timer2 cada 2 ms. El indicador no se establecerá hasta que el indicador EXT_INT0 ISR se ha ejecutado una vez. La interrupción externa inicia la adquisición de datos, que continuará a 500 Hz desde ese punto hacia adelante. El indicador ADC_buffer_full se establece una vez que se ha leído el ADC y los datos están listos para ser formateados para la transmisión CAN. CAN_buffer_full se establece una vez que los datos se han formateado y se pueden transmitir.
Conversor analógico a digital

Cuando se establece el indicador poll_ADC, el Mega32 leerá sucesivamente los ocho canales del ADC llamando a la función spi_adc (char). Se toma como argumento el canal para leer y devuelve el valor de 10 bits. Esta función es En el archivo de encabezado personalizado mcp3008.h. Las lecturas ADC se realizan utilizando el bus SPI a 4 MHz. Después de las ocho lecturas, los ocho valores de 10 bits se almacenan en un búfer en el Mega32, se establece el indicador ADC_buffer_full y El indicador poll_ADC se borra.


Formato de datos

Un paquete CAN puede transportar hasta 8 bytes de datos o 64 bits. Como hay 80 bits de datos (8 muestras x 10 bits / muestra), se requiere un mínimo de 2 paquetes CAN para cada conjunto de valores ADC. Los ocho valores de 10 bits se formatean como diez valores de 8 bits y se almacenan en otro búfer en el Mega32. La Figura 8 ilustra este formato para los primeros cuatro valores de 10 bits. Los últimos cuatro se convierten de manera idéntica. Una vez finalizada esta conversión, se borra el indicador ADC_buffer_full y se establece el indicador CAN_buffer_full.


Figure 8: 10-bit to 8-bit Conversion

CAN Transmisión

El Mega32 transmite los 10 bytes de datos del sensor junto con un identificador de 1 byte y una marca de tiempo de 3 bytes. El primer paquete CAN contiene 8 bytes de datos: el identificador, la marca de tiempo y los primeros 4 bytes de los datos del sensor. El paquete CAN contiene los últimos 6 bytes de datos del sensor. Estos 14 bytes se escribirán en orden a la tarjeta SD. El identificador y la marca de tiempo se incluyen para hacer que los datos sean comprensibles para el usuario diciéndoles de qué satélite se originaron y A qué hora. El Mega32 carga el código de longitud de datos del transmisor TXB0 y los registros de memoria intermedia de datos en el controlador CAN y luego inicia la transmisión ajustando el bit TXREQ en el registro TX0CTRL. El Mega32 espera que la transmisión se complete en bucle hasta que reciba el Interrupción completa de la transmisión desde el controlador, que se conecta al pin B.0. El pin B.0 está configurado como una entrada con la resistencia de pull-up encendida, de manera que la interrupción externa acciona el pin bajo. Después de enviar el fi , El Mega32 borra el indicador de interrupción, carga los últimos 6 bytes de datos y los transmite de la misma manera que los primeros 8 bytes. Una vez finalizada la transmisión, se borra el indicador CAN_buffer_full.


Software del Receptor


Inicialización de CAN

La inicialización CAN consiste en establecer tres registros utilizando el bus SPI. El bus SPI se configura de la misma manera que se detalla en la sección de software de satélite. El registro de estado del dispositivo se establece en 0x7 para el funcionamiento normal y el registro RXB0CTRL (Receptor Buffer 0 Control) se establece en 0x60 para garantizar que no hay filtros ni máscaras activadas. El tercer registro permite RX0BF como una interrupción, que se conecta a INT0 en el Mega32. La configuración del SPI sigue siendo la misma que en la inicialización del satélite.

La interrupción externa 0 se habilita ajustando el bit 1 alto en el registro MCUCR en el Mega32. Al configurar el registro GICR en 0x80 se activan las interrupciones externas activadas.
Inicialización de la transmisión en paralelo

El sistema de transferencia de datos paralelo requiere que INT1 se establezca como se ha descrito anteriormente. Esta interrupción se establece de la misma manera en el receiver Mega32 y el SD Mega32 (Ver Figura 6). Esta interrupción externa será activada por el procesador paralelo cuando los datos se pueden escribir o leer de forma correspondiente. DDRC se utiliza como puerto paralelo y se configura como una salida en el lado del receptor y una entrada en el lado SD.


PUEDE recibir

Cuando los mensajes CAN están presentes en el MCP2515, se establece un indicador que interrumpe INT0. INT0 ajusta correspondientemente una bandera que permite que el mensaje sea leído en la siguiente hora conveniente. El mensaje se lee mediante get_msg (), que almacena los datos en msg_buffer. Dado que los mensajes tienen longitudes diferentes, las longitudes se comparan para garantizar que no se ha producido un error durante la lectura. Si el mensaje actual tiene la misma longitud que el mensaje anterior, el mensaje actual se expulsa. Si el búfer de mensajes está lleno, el mensaje no se quita del MCP2515 hasta que se haya borrado el búfer. El identificador y la marca de tiempo se guardan en el búfer de mensajes. Cuando el búfer está lleno, se establece un indicador para inicializar la creación de un búfer de datos. Los mismos eventos ocurren con el segundo búfer de mensajes en el MCP2515, excepto que INT2 se dispara cuando un mensaje está listo, y get_msg_1 () es la función llamada para leerlo.

Load_data_buffer () analiza los datos de los búferes de mensajes y añade los datos a una matriz de datos de 512 bytes que es adecuada para enviar al SD Mega32. Cuando se llena esta matriz de datos, se envía utilizando una comunicación paralela al SD Mega32.


Comunicación paralela

La comunicación paralela entre la Mega32 de CAN (Mega32 CAN) y la Mega32 de tarjeta SD (Mega32) es extremadamente importante, ya que permite una transferencia muy rápida entre los dos chips. Para iniciar la comunicación en paralelo, el SD Mega32 conmuta el pin INTO en el CAN Mega32 hasta que se envía un byte de 0xFF. La comunicación ya se ha inicializado, con el SD Mega32 esperando que se envíe el siguiente byte. Cuando el data_buffer está lleno, se transmite configurando PORTB.3 high, estableciendo PORTC en el siguiente byte para enviar y configurando PORTB.3 low. Esto activa INT0 en el SD Mega32. Esta interrupción establece el indicador p_ready, que permite al Mega32 almacenar el puerto. Cuando haya terminado de leer PINC, el Mega32 de SD cambia PORTB.3 para interrumpir el receptor Mega32. Este proceso continúa hasta que se han enviado todos los 512 bytes.

Cuando se han enviado 512 byes al SD Mega32 comienza el ciclo de escritura SD.
Software SD

Preparar

La tarjeta Secure Digital debe ser operada en modo SPI, ya que los modos SD de dos y cuatro pines son propietarios y son costosos de comprar. Cuando se utiliza una tarjeta SD, el bus SPI se puede sincronizar hasta 25 MHz, lo que excede el máximo que puede producir el Mega32. Como se desea la velocidad de transferencia de datos máxima posible, el SPI SCK se ajustó a Foc / 2. Esto se logra ajustando los dos bits inferiores del registro de control SPI (SPCR) a 00 y el bit SPI2X a 1. Con el Mega32 funcionando a 16 MHz, el bus SPI se está ejecutando a 8 MHz. Se usó PINB.2 como la selección de chip para la tarjeta SD, y se usaron los pines MOSI, MISO y SCK (PINB.5-7, respectivamente).


Inicialización

Para comenzar la transmisión a la tarjeta SD, el chip debe primero ser reiniciado. Esto se logra utilizando la función SD_Reset. Esta función primero despierta la tarjeta SD con pulsos de reloj mientras que la selección de chip SD es alta. La selección de chip se establece entonces bajo y el comando go to idle state se envía a la tarjeta SD utilizando la función SD_Command. SD_Command emite un comando de un byte a la tarjeta SD, luego una dirección de 4 bits (si es necesario para el comando) y luego un segundo comando de 1 bit. Los bytes de relleno para asegurarse de que la tarjeta SD esté lista y terminada se añaden a ambos lados de los bytes de comando. El último bye se devuelve de la función. SD_Reset repite el comando go to idle state 1000 veces, en el que devuelve un código de error. Si no hay error en el estado inactivo, el estado inactivo se comprueba con SD_Command de nuevo, repitiendo de la misma manera. También se devuelve un error si la tarjeta no está en modo inactivo. Si no se producen errores, el tamaño del sector se establece en 512 bytes, la comprobación de redundancia de ciclo se desactiva, SDCS se establece en alto y se devuelve cero. La función SD_Reset se repite hasta que tenga éxito. Esto puede tardar mucho tiempo en completarse, aunque por lo general menos de un segundo. Una vez restablecida la tarjeta SD, puede comenzar el funcionamiento normal.


Transmisión de datos

La transmisión de datos a la tarjeta SD es realmente muy simple una vez que el chip se restablece. Cuando se llena un búfer de datos, se llama a la función SD_Write y se detiene la transmisión paralela (véase Comunicación paralela). El actual_sector (que por defecto a 400 en reajuste), desplazado a la izquierda 9, se pasa a SD_Write. La dirección debe dejarse desplazada 9 porque la dirección en código es qué sector queremos, donde como la tarjeta SD utiliza compensaciones, que son un múltiplo de 512 mayor. El desplazamiento por 9 se multiplica eficazmente por 512. SD_Write ordena al chip que esté en modo de escritura en la dirección especificada. Se añaden varios bytes Paddin para asegurarse de que la tarjeta SD esté lista y, a continuación, se envía el indicador de inicio de escritura, 0xFE. A continuación, siguen los 512 bytes de sector_array_AD. En lugar de escribir una función repetida, el código de transmisión de datos aquí se escribe por completo para asegurar una ejecución rápida. Se encontró que mediante la eliminación de un bucle for y la llamada de función, alrededor de un aumento del 25% en la velocidad de escritura se podría lograr. Una vez que se han transmitido y rellenado los datos, el programa espera que la tarjeta SD vuelva a estar lista, lo que ocurre cuando devuelve algo distinto de 0xFF. La tarjeta se desactiva y el índice del búfer de datos se pone a cero.


Referencias

El código de la tarjeta SD se refiere al código escrito por Karl Antle y Ryan McDaniel en 2006. Su código fue escrito para un PIC, pero incluyó todos los caracteres de comando correcto para la tarjeta SD, que resultó invaluable al asegurar que los comandos correctos se estaban enviando. Estos comandos se verificaron durante la depuración en la hoja de especificaciones SD_SDIO, distribuida por la Asociación SD.

Resultados

El registrador fue probado ejecutando dos satélites a 500 Hz sin sectores aparentemente perdidos o retraso. Los datos fueron verificados usando WinHex. La Figura 9 muestra los datos recopilados de dos satélites simultáneamente. Un satélite tiene el identificador 0xBB, el otro 0xAA. Comenzando con el primer byte, vemos el identificador (0xBB), la marca de tiempo (0x01, 0x27 , 0xC9), seguido por 10 bytes de datos. Los datos del otro satélite siguen a esto, con el identificador 0xAA en la posición 14. La línea horizontal gris en la figura indica el final de un sector. Los últimos bytes del sector No se escriben y el siguiente conjunto de datos comienza al principio del siguiente sector. El sistema no se verificó utilizando 4 satélites, pero la funcionalidad y operación de cuatro es la misma que con dos, y ciertamente había ancho de banda disponible Tanto en el bus CAN como en la transmisión de la tarjeta SD.



Los satélites se comportaron como se esperaba, con el ciclo de lectura de ADC tomando 156 s y la transmisión CAN de principio a fin tomando 283 s. Éstos se pueden ver en la figura 10, donde la línea azul es la selección de chip ADC y la línea amarilla es la selección de chip transmisor CAN. Hay un paso de preparación ligero para la transmisión CAN teniendo 27 s, lo que puede ser visto como el espacio entre el final de la selección de chips ADC baja y el inicio de la selección de chip CAN transmisor CAN baja.


Figure 10: ADC Read and CAN Transmit Timing

Los satélites también se muestrearon a una velocidad muy regular, que se puede ver en la Figura 11. La interrupción que llama a la muestra se establece para disparar a 500 Hz, que es exactamente lo que se verificó en el ámbito. Una tasa de muestreo regular es muy importante para un sistema de adquisición de datos y fue uno de los principales objetivos de este proyecto.


Figure 11: Time Between ADC Reads

Figure 12: Time Between Parallel Reads

Verificamos que la tarjeta paralela y la tarjeta SD funcionaban escaneando el chip en ambos. En la figura 12, la interrupción paralela en el chip SD es azul y la traza amarilla es la selección de chip SD. Esto muestra cómo el controlador SD pasa la mayor parte de su tiempo inactivo, esperando a que se envíe más información. Además, muestra la rapidez con que la comunicación paralela puede tener lugar, ya que es de la misma magnitud


Figure 13: Parallel Bus Timing


La Figura 13 muestra una de las interrupciones para el bus paralelo como el trazo azul. Cada lectura paralela toma sólo 9,6 s y lee un byte entero.



Conclusiones


Esperanzas de heredar

En la propuesta, establecimos la expectativa de construir un sistema con cuatro satélites transmitiendo datos a un solo receptor, que escribiría los datos en una tarjeta SD a través de un PIC18F2585. La velocidad de datos anticipada fue de 500 Hz. Desarrollamos un sistema con Dos satélites que transmiten simultáneamente a un solo receptor. Modificamos el plan original para usar un PIC para escribir en la tarjeta SD y en su lugar usamos otro Mega32 para escribir en la tarjeta SD. Logramos la velocidad de datos de 500 Hz para el sistema Con dos satélites y prevemos que podrían añadirse satélites adicionales al bus CAN y mantener la misma velocidad de transmisión de datos.

Mientras trabajábamos en el proyecto, desperdiciamos una gran cantidad de tiempo tratando de conseguir que el PIC trabajara con nuestro sistema, por lo que el sistema de bus CAN existente usado por el equipo de FSAE usa un PIC para escribir en la tarjeta SD. No usamos el PIC y en su lugar usamos otro Mega32 porque estábamos mucho más familiarizados con el hardware y el software de Mega32. Podríamos haber ahorrado mucho tiempo usando el Mega32 desde el principio y no trabajando en el PIC en absoluto . Adaptamos el código de acceso de la tarjeta SD desde el PIC al Mega32.

Debido al gran número de microcontroladores y otros chips en nuestro diseño, el cableado descuidado se convirtió en una gran desaceleración más adelante en el proyecto a medida que el sistema crecía en complejidad. Creemos que los cables sueltos eran los culpables de varios problemas de falla que observamos al trabajar en el proyecto . Es probable que pudiéramos haber evitado algo de esta dificultad concentrándonos en el cableado limpio desde el principio.


Estándares

Nuestro sistema se ajusta a la especificación CAN 2.0b, que describe la señalización diferencial en el bus CAN, la codificación de no retorno a cero (NRZ) y los valores de bits dominantes y recesivos. Todos los encapsulados de tramas CAN se manejan Por el controlador MCP2515. Toda la señalización diferencial y codificación es manejada por el transceptor MCP2551. El controlador y el transceptor implementan la especificación CAN automáticamente para asegurar la interoperabilidad con otros dispositivos CAN. Esta operación es transparente para el usuario del sistema.


Propiedad intelectual

Las funciones de USART sin bloqueo y de interrupción utilizadas en el proyecto fueron desarrolladas por Bruce Land y descargadas de la página web del ECE476. Las funciones para leer y escribir la tarjeta SD fueron desarrolladas originalmente por Karl Antle, Ryan Mcdaniel y Simon Wong para su uso en un PIC18F2585 en el equipo FSAE. Estas funciones fueron adaptadas para ser usadas en el Mega32 por David Porter. La creación original de los miembros del equipo. No pretendemos patentar esteproyecto.


Consideraciones éticas

Este proyecto no utiliza ninguna comunicación de radiofrecuencia, por lo que no interfiere con ningún otro equipo de radiofrecuencia. Hemos incluido un LED de alimentación en la placa de ruptura de la tarjeta SD para que el usuario siempre sepa si la alimentación del sistema está encendida . Esto impide que conecten o desconecten una tarjeta SD mientras la alimentación está encendida. El control del sistema se realiza desde un PC a través de USART o mediante la activación de interruptores conectados a dos de los microcontroladores. El usuario no está expuesto a peligros A través de cualquiera de estas interfaces. Esperamos que este proyecto se realice a la velocidad de datos actual con hasta cuatro satélites conectados al bus CAN, sin embargo, esto no ha sido probado. Basado en mediciones realizadas con dos satélites, hay suficiente Tiempo entre transmisiones de datos para permitir satélites adicionales en el sistema sin demora adicional.


Consideraciones legales

Este proyecto no utiliza ninguna comunicación por radiofrecuencia, por lo que no está sujeto a ninguna normativa de la FCC. Este proyecto no infringe deliberadamente ningún derecho de autor o patente existente.




0 comentarios:

Publicar un comentario