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