18
Facultad de ciencias exactas ingeniería y agrimensura Informática Electrónica Proyecto de Aplicación: Bike POV Display Grupo N° 10 Integrantes: Di Pietro, Franco N. D-3529/7 Smitt, Claus G. S-4606/1 Año: 2012

Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

Embed Size (px)

Citation preview

Page 1: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

Facultad de ciencias exactas ingeniería y agrimensura

Informática Electrónica

Proyecto de Aplicación:

Bike POV Display

Grupo N° 10 Integrantes: Di Pietro, Franco N. D-3529/7 Smitt, Claus G. S-4606/1 Año: 2012

Page 2: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

Introducción Se plantea como proyecto de aplicación la implementación de un display de persistencia de la visión radial para montaje en ruedas de bicicleta. El presente informe describe la solución de del proyecto de aplicación implementada con el microcontrolador MC9S08QE8 montado el la placa de desarrollo DEMOQE.

Los principales puntos de este informe son:

� Análisis Físico del problema � Posibles soluciones y selección de una de ellas � Cálculo y dimensionamiento de los recursos necesarios � Selección de los recursos del MC9S08QE8 a utilizar � Diseño de placas adicionales � Implementación en C de la solución � Posibles aplicaciones del sistema

1, Análisis Físico del Sistema Persistente de la Visión Un display de persistente de la visión (POV) se basa en el fenomeno visual

descubierto por Joseph Plateau que demuestra como una imagen permanece en la retina humana una décima de segundo antes de desaparecer por completo. Esto permite que veamos la realidad como una secuencia de imágenes ininterrumpidas. Si no existiese, veríamos una sucesión de imágenes independientes y estáticas. Plateau descubrió que nuestro ojo ve con una cadencia de 10 imágenes por segundo. En virtud de dicho fenómeno, las imágenes se superponen en la retina y el cerebro las "enlaza" como una sola imagen visual, móvil y continua. Aprovechando este fenómeno, si modificamos una imagen mas rápido de lo que puede ser captada por el ojo humano, esta se vera como una imagen fija. Este efecto es análogo a cuando se se desplaza una luz rápidamente entre 2 puntos y en lugar de percibirse la luz desplazándose se percibe una linea luminosa que une ambos puntos. Si se tiene una tira de leds a la cual se le puede variar el patrón con el que se encienden instante a instante y esta se desplaza rápidamente con respecto al observador, este percibirá una imagen fija en el espacio determinada por el patrón de control de los leds. Ejemplo: Suponiendo una tira de 4 led y el siguiente patrón:

Page 3: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

Si se alterna ella patrón de leds entre P1 y P2 a medida que se desplaza el dispositivo, para el observador el resultado sera el siguiente:

Una bandera cuya longitud de los rectángulos respecto al eje de desplazamiento es proporcional a la velocidad con que el dispositivo se desplaza. Con esta misma idea, se pretende colocar un dispositivo como el antes descripto en la rueda de una bicicleta para mostrar imágenes fijas en la misma a medida que esta gira. 1.2 Movimiento Circular Como ya se explico antes, es necesario desplazar el dispositivo a una cierta velocidad para que un punto luminoso se transforme en una linea, este dato sera nuestro punto de partida para analizar los limites físicos de nuestro problema. En nuestro caso se ensayo empíricamente el valor de dicha velocidad colocando un led en la rueda de una bicicleta y luego se la hizo girar hasta que solo se aprecio una circunferencia luminosa. En dicho instante se tomaron varias medidas de la velocidad a partir de un velocímetro magnético y se promediaron. El resultado obtenido como la velocidad promedio a la que se logra una persistencia completa resulto:

h

KmV fullPOV 5.22=

Si se coloca mas de un led este efecto se da a una velocidad mucho menor. A partir de este valor y las ecuaciones de movimiento circular suponiendo una rueda de radio de 32cm se obtienen los siguientes datos:

msV

R

fTRfRV

fullPOVfullPOV

fullPOV 32621

2 ===⇒==π

πω

gs

m

R

VRa

R

VR

R

VRa

fullPOV

rfullPOVr 46,1207,1222

2

2

22

2 ====⇒=

== ωω

Posibles Soluciones Acelerometro Si se coloca un acelerometro con uno de sus ejes paralelo al radio de la rueda, este medirá la aceleración radial, superpuesta con el vector gravedad que desplaza a la placa capacitiva. Como el movimiento circular es armónico aceleración medida resulta:

Page 4: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

tsengaa rx ω+=

Por otro eje del acelerometro perpendicular al anterior y paralelo al plano de la rueda mide la aceleración tangencial a la cual tambien se le superpone el efecto del vector gravedad, solo que en cuadratura con el caso anterior.

tgaa ty ωcos+=

De las ecuaciones de movimiento circular:

R

aRa r

r =⇒= ωω 2

dtR

adt r∫∫ =+= ωθθ 0

Por lo que para poder calcular correctamente el angulo a partir de la

aceleración radial necesitamos de alguna forma obtener un 0θ de referencia.

Si suponemos que la rueda esta girando a velocidad constante la rueda se encuentra en la posición en que el vector gravedad es paralelo y opuesto a la velocidad tangencial (eje x paralelo al suelo) entonces:

gay =

Por ende se puede utilizar esta condición para detectar que la rueda se encuentra el ángulo cero y así a partir de ese instante integrar y calcular instantáneamente el ángulo. Otra forma de calcular los instantes en los que se cambia el patrón de leds usando estos mismos conceptos es computar solo ω y conocer n (numero de patrones o rayos distintos de la imagen a mostrar). Luego, cuando se detecta la condición de ángulo cero se inicia un contador (CNT) que, cuando alcanza un valor de cuenta

1 2rot

ray ray

rot

TCNT T

n n f n

π

ω= = = =

el patrón cambia y el contador se reinicia para que luego se repita el proceso. Estos procedimientos son validos siempre y cuando la velocidad sea la

suficiente para que gat >> , lo cual podemos decir que se cumple para

h

KmV fullPOV 5.22= donde gar 46,12= .

Esta solución tiene mucho potencial ya que este dispositivo podria montarse en cualquier elemento rotante y sin hacerle modificaciones al mismo y funcionar siempre y cuando se culpan las condiciones antes mencionadas. Sensor Magnético

Page 5: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

Si se coloca en el dispositivo un sensor o switch de efecto hall y un imán en el cuadro de la rueda (angulo cero) se puede detectar el instante en el que la rueda da una vuelta completa. Cada vez que la rueda da una vuelta se inicia un temporizador y a la siguiente vuelta se lee el valor del mismo, dicho valor es el periodo T con el que la rueda gira el cual se actualiza en cada vuelta. Ahora, si se tiene una imagen, al igual que en el caso anterior, que cambia el

patrón de la tira de leds en n ángulos distintos (n sectores circulares distintos p ) y CNT es el valor actual del contador, entonces:

)/( nT

CNTp =

Por lo que se puede determinar fácilmente que patrón de leds debe mostrarse en cada instante. Este método es muy simple pero implica agregar elementos al medio donde se va a instalar el dispositivo.

Selección de una solución En un principio se podria elegir, a pesar de su complejidad de calculo, el sistema con acelerometro devido a su independencia con el medio para funcionar, pero el factor determinante en esta elección dados los recursos del kit de desarrollo DemoQE resulta ser la aceleración máxima que debe poder medir el acelerometro. El acelerometro del kit tiene una alcance de:

ggRacc 46,126 <=

Por lo que no tienen el rango necesario para que el sistema funcione correctamente. Por lo que en nuestro caso la solución del acelerometro queda descartada y se recurre al sensor magnético.

Selección de recursos del MC9S08QE8

Recursos para el sensor

El sensor de efecto Hall a utilizar se obtuvo del motor brushless de una disquetera de 5 ¼ el cual se alimenta con al menos 5 V para obtener una buena señal. En nuestro caso la alimentación es de 3V, por lo que al pasar por el imán la variación de tensión no es lo suficientemente grande como para que el micro la reconozca como una señal digital, por ende se conecta el sensor al canal 0 del CAD del micro y para detectar el imán se le pone una condición de umbral la cual se obtuvo empíricamente a través de mediciones por terminal. Por otro lado, para que el sistema responda rápidamente el CAD se configura en 8 bits y con frecuencia de conversión máxima.

Recursos para la medición de tiempos

Page 6: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

Como se vio en el punto 1.2 el periodo a fullPOVV es msT fullPOV 326= y

suponiendo que el numero de patrones distintos es 128 entonces el contador tiene que tener una resolución mínima de:

msT

tfullPOV

55.2128

=≥∆

Sobre dimensionando para que el sistema funcione para velocidades mayores

h

Km

t

TVVmst

fullPOV

fullPOV 83.31128

5.0 max =∆

=⇒=∆

Tiempos de este orden pueden ser contabilizados por el RTC pero solo tiene 8 bits, por lo que puede contar hasta

fullPOVTmsmstt =<=∆= 326128256max

por lo que es necesario generar un RTC ampliado vía software de 16bits. Recursos para la tira de leds Se propone tener una resolución de 16x128 sectores circulares (256 Bytes, ya que el MCU solo dispone de 512 bytes de ram), por lo que se necesitan 16 puertos independientes que manejen en paralelo a una tira de 16 leds. De los puertos de el MC9S08QE8 se eligieron: Led 1 => PTC6 Led 2 => PTC5 Led 3 => PTC7 Led 4 => PTC4 Led 5 => PTC3 Led 6 => PTC2 Led 7 => PTD3 Led 8 => PTD0 Led 9 => PTD2 Led 10 => PTD1 Led 11 => PTB5 Led 12 => PTA7 Led 13 => PTA6 Led 14 => PTC1 Led 15 => PTC0 Led 16 => PTA1

Diseño de la placa de leds y sensor La placa esta compuesta de 16 circuitos idénticos con transistores que trabajan en corte y saturación conectados a un bus de datos que se conecta al MCU Expanssion port. Los leds se encienden con lógica positiva.

Page 7: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

El circuito es el siguiente:

El circuito esta diseñado para consumir aproximadamente 10ma por led por lo cual, para 2 pilas de 1000mah y despreciando el consumo del micro, el sistema podría funcionar durante:

hmax

h

max

t 5.121016

10002

max ==

Para el sensor magnético se conecta su salida al bus y se lo polariza como se muestra a continuación.

Luego se diseño en eagle el PCB que cuyo resultado fue el siguiente:

Page 8: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

Por ultimo se confecciono un bus físico a partir de un bus de disco duro para conectar el Demore con nuestra placa.

Implementacion de la solución

Page 9: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

A continuación se muestran las funciones empleadas, las cual están detalladamente comentadas. Mapeo de los leds en los puertos del MCU //Mapeo de los leds con los registros de los puertos a utilizar #define DLED16 PTADD_PTADD1 #define DLED15 PTCDD_PTCDD0 #define DLED14 PTCDD_PTCDD1 #define DLED13 PTADD_PTADD6 #define DLED12 PTADD_PTADD7 #define DLED11 PTBDD_PTBDD5 #define DLED10 PTDDD_PTDDD1 #define DLED9 PTDDD_PTDDD2 #define DLED8 PTDDD_PTDDD0 #define DLED7 PTDDD_PTDDD3 #define DLED6 PTCDD_PTCDD2 #define DLED5 PTCDD_PTCDD3 #define DLED4 PTCDD_PTCDD4 #define DLED3 PTCDD_PTCDD7 #define DLED2 PTCDD_PTCDD5 #define DLED1 PTCDD_PTCDD6 #define LED16 PTAD_PTAD1 // A1 #define LED15 PTCD_PTCD0 // C0 #define LED14 PTCD_PTCD1 // C1 #define LED13 PTAD_PTAD6 // A6 #define LED12 PTAD_PTAD7 // A7 #define LED11 PTBD_PTBD5 // B5 #define LED10 PTDD_PTDD1 // D1 #define LED9 PTDD_PTDD2 // D2 #define LED8 PTDD_PTDD0 // D0 #define LED7 PTDD_PTDD3 // D3 #define LED6 PTCD_PTCD2 // C2 #define LED5 PTCD_PTCD3 // C3 #define LED4 PTCD_PTCD4 // C4 #define LED3 PTCD_PTCD7 // C7 #define LED2 PTCD_PTCD5 // C5 #define LED1 PTCD_PTCD6 // C6

Definiciones de variables //se define la cuenta del RTC como la parte baja de un //contador mas grande #define RTCCNTL RTCCNT //Parte alta del nuevo RTC (NRTC) byte RTCCNTH; extern unsigned int CNT;//cuanta del NRTC extern unsigned int T; //Periodo de rotacion de la rueda extern byte High; //Variable para la deteccion del iman

Aquí es donde se define el nuevo contador de 16 bits antes mencionado, al cual mas adelante en la interrupción por desborde de la parte baja incrementa la parte alta.

Page 10: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

Minicializacion del Internal Clock Source //////////////////////////////////////////////////////////////// // ICS_FEI //-------------------------------------------------------------- // intitializes ICS for FEI mode with DCOH //////////////////////////////////////////////////////////////// void ICS_FEI() { if ((NVICSTRM != 0xFF)|(NVICSTRM != 0x00)) ICSTRM = NVICSTRM else ICSTRM = 0xAD; ICSC1 = ICSC1_FEI; ICSC2 = ICSC2_FEI; ICSSC = ICSSC_FEI; while (ICSC1_CLKS != ICSSC_CLKST) {} // wait for clk state to match clk select }

Inicialización de periféricos //////////////////////////////////////////////////////////////// // PeriphInit //-------------------------------------------------------------- // Initializes various registers and peripherals //////////////////////////////////////////////////////////////// void PeriphInit(void) { // Disables COP and Enable STOP instruction and RESET and BKGD pin SOPT1 = 0x23; // Selects FEI mode // Sets trimming for fBUS about 25 MHz ICS_FEI(); // Enable all pullups PTAPE = 0xFF; PTBPE = 0xFF; PTCPE = 0xFF; PTDPE = 0xFF; LED1=0; //Se inicializan todos los leds apagados LED2=0; LED3=0; LED4=0; LED5=0; LED6=0; LED7=0; LED8=0; LED9=0;

Page 11: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

LED10=0; LED11=0; LED12=0; LED13=0; LED14=0; LED15=0; LED16=0; DLED1=1; //se defines los puestos de los leds como salidas DLED2=1; DLED3=1; DLED4=1; DLED5=1; DLED6=1; DLED7=1; DLED8=1; DLED9=1; DLED10=1; DLED11=1; DLED12=1; DLED13=1; DLED14=1; DLED15=1; DLED16=1; //Configuración del ADC //Conversión de 8 bits a 25Mhz ADCCFG = 0x00; }

Rutina de actualizacion de display //////////////////////////////////////////////////////////////// // Display //-------------------------------------------------------------- // Muestra en los leds bit a bit el int ingresado //////////////////////////////////////////////////////////////// void Display (int leds){ LED1= leds & 0x01; LED2= leds>>1 & 0x01; LED3= leds>>2 & 0x01; LED4= leds>>3 & 0x01; LED5= leds>>4 & 0x01; LED6= leds>>5 & 0x01; LED7= leds>>6 & 0x01; LED8= leds>>7 & 0x01; LED9= leds>>8 & 0x01; LED10= leds>>9 & 0x01; LED11= leds>>10 & 0x01; LED12= leds>>11 & 0x01; LED13= leds>>12 & 0x01; LED14= leds>>13 & 0x01; LED15= leds>>14 & 0x01; LED16= leds>>15 & 0x01;

Page 12: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

}

Lectura del sensor magnético //////////////////////////////////////////////////////////////// // ReadMag //-------------------------------------------------------------- // Lee la tension del sensor magnetico, la convierte y almacena //////////////////////////////////////////////////////////////// word ReadMag(void) { byte adc; // Espera hasta que se complete la conversión while (!(ADCSC1_COCO)){} adc=ADCRL; return adc; }

Lectura del periodo de rotación //////////////////////////////////////////////////////////////// // ReadPeriod //-------------------------------------------------------------- // Obtiene el periodo de rotacion de la rueda //////////////////////////////////////////////////////////////// void ReadPeriod (){ byte magSW; CNT = ((int)RTCCNTH)<<8|(int)RTCCNTL; //se actualiza el NRTC // Se seleccione el canal 0 del ADC (conectado en sensor) ADCSC1 = 0x00; magSW = ReadMag(); //se lee el valor del sensor //Si la placa esta sobre el imán -> Se guarda el valor //del NRTC como el periodo y //se resetea el NRTC if(magSW>0x37 && High==0){ High=1; T = CNT; RTCSC_RTIF = 1; RTCCNTH = 0x00; RTCMOD = 0xFF; } //Para evitar los rebotes del sensor magnético se sale de //la condición de detección //una vez que la rueda dio un cuarto de vuelta (T/4) if(CNT == (T>>2)){ High=0; } }

Rutina main

Page 13: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

Con el objetivo de escribir 'informatica electronica' en los últimos 8 leds y dibujar una bandera en los primeros 8 se definen 2 buffers, buff almacenado en Flash como un vector const y band como un vector local al main respectivamente, ambos de tipo byte y de 128 elementos. //////////////////////////////////////////////////////////////// // MAIN //-------------------------------------------------------------- // Entry point //////////////////////////////////////////////////////////////// void main(void){ byte band[rayos]; //Buffer para dibujar la bandera byte bandera=0x07;//Diseño de la bandera byte *buffp,*ban; //Punteros del cartel y de la abndera byte i; PeriphInit(); //inicializacion de perisfericos EnableInterrupts; //habilitacion de interrupciones RTCSC = 0x5C; //Resolucion de RTC 0.5ms RTCCNTH = 0x00; //se reinicia la parte alta del NRTC RTCMOD = 0xFF; //Interrupcion cuando el NRTC desborda buffp = buff; //Asignacion de los punteros de los buffers ban = band; for(i=0;i<=127;i++){ //Llenado del buffer de la bandera *(band+i)= bandera; bandera=~bandera; } for(;;){ ReadPeriod(); //calculo del periodo //Calculo del angulo y actualizacion de punteros buffp = buff + (int) ((CNT*128)/T); ban = band + (int) ((CNT*128)/T); //Refresco del Display Display(((*buffp)<<8) + ((*ban)& 0x3F) ); } }

Buffer en memoria flash #define rayos 128 const byte buff[rayos]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

Page 14: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

//A 0x3F, 0xCC, 0x3F, // espacio 0x00, //C 0xC3, 0xC3, 0xFF, // espacio 0x00, // I 0xC3, 0xFF, 0xC3, // espacio 0x00, //T 0xC0, 0xFF, 0xC0, // espacio 0x00, //A 0x3F, 0xCC, 0x3F, // espacio 0x00, //M 0xFF, 0x30, 0x30, 0xFF, // espacio 0x00, //R 0xF3, 0xCC, 0xFF, // espacio 0x00, //O 0xFF, 0xC3, 0xFF, // espacio 0x00, //F 0xC0, 0xCC, 0xFF, // espacio 0x00,

Page 15: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

//N 0xFF, 0x0C, 0x30, 0xFF, // espacio 0x00, // I 0xC3, 0xFF, 0xC3, //fin informatica 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //semiplano ingferior 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //E 0xFF, 0xDB, 0xC3, //espacio 0x00, //L 0xFF, 0xC0, 0xC0, //espacio 0x00, //E 0xFF, 0xDB, 0xC3, //espacio 0x00, //C 0xFF, 0xC3, 0xC3, //espacio 0x00, //T 0x03, 0xFF, 0x03,

Page 16: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

//espacio 0x00, //R 0xFF, 0x33, 0xCF, //espacio 0x00, //O 0xFF, 0xC3, 0xFF, //espacio 0x00, //N 0xFF, 0x0C, 0x30, 0xFF, //espacio 0x00, //I 0xC3, 0xFF, 0xC3, //espacio 0x00, //C 0xFF, 0xC3, 0xC3, //espacio 0x00, //A 0xFC, 0x33, 0xFC, // fin eca 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };

Page 17: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

Interrupcion del RTC interrupt VectorNumber_Vrtc void RTC_ISR(void) { //Incremento de la parte alta del NRTC cuando desborda la parte baja RTCCNTH++; RTCSC_RTIF = 1; //Limpiado de la bandera }

Resultados obtenidos Para poder probar el sistema se fijo con precintos el kit a la rueda de una bicicleta, luego la placa de leds con el sensor y se conectaron mediante el bus antes mencionado.

Por ultimo se tomaron fotos con una cámara con diafragma abierto para poder apreciar el efecto de persistencia de la visión.

Page 18: Informática Electrónica Proyecto de Aplicación: Bike ... · Se plantea como proyecto de aplicación la ... Suponiendo una tira de 4 led y el ... cuando se detecta la condición

Posibles mejoras al sistema

� Impresión de la velocidad de la bicicleta. � Interfaz serie para el ingreso de textos a imprimir. � Interfaz serie para el ingreso de imágenes radiales. � Interfaz serie para el ingreso y conversión imágenes a imágenes radiales. � Multiplexado de los puertos para agregar tiras de leds y reducir la velocidad

mínima para que el sistema funcione correctamente.

Aplicaciones del sistema

� Velocímetro para espectadores de carrera de bicicletas. � Dispositivo de seguridad, actuando de baliza durante la noche. � Uso estético. � Medio de expresión artística. � Display de variables cotidianas como temperatura y horario. � Sistema de publicidad ambulante.