Está en la página 1de 18

Facultad de ciencias exactas ingeniera y agrimensura

Informtica Electrnica

Proyecto de Aplicacin:

Bike POV Display

Grupo N 10

Integrantes:

Di Pietro, Franco N. D-3529/7

Smitt, Claus G. S-4606/1

Ao: 2012
Introduccin
Se plantea como proyecto de aplicacin la implementacin de un display de
persistencia de la visin radial para montaje en ruedas de bicicleta.
El presente informe describe la solucin de del proyecto de aplicacin implementada
con el microcontrolador MC9S08QE8 montado el la placa de desarrollo DEMOQE.

Los principales puntos de este informe son:

 Anlisis Fsico del problema


 Posibles soluciones y seleccin de una de ellas
 Clculo y dimensionamiento de los recursos necesarios
 Seleccin de los recursos del MC9S08QE8 a utilizar
 Diseo de placas adicionales
 Implementacin en C de la solucin
 Posibles aplicaciones del sistema

1, Anlisis Fsico del Sistema


Persistente de la Visin

Un display de persistente de la visin (POV) se basa en el fenomeno visual


descubierto por Joseph Plateau que demuestra como una imagen permanece en la
retina humana una dcima de segundo antes de desaparecer por completo. Esto
permite que veamos la realidad como una secuencia de imgenes ininterrumpidas.
Si no existiese, veramos una sucesin de imgenes independientes y estticas.
Plateau descubri que nuestro ojo ve con una cadencia de 10 imgenes por
segundo. En virtud de dicho fenmeno, las imgenes se superponen en la retina y el
cerebro las "enlaza" como una sola imagen visual, mvil y continua.

Aprovechando este fenmeno, si modificamos una imagen mas rpido de lo que


puede ser captada por el ojo humano, esta se vera como una imagen fija. Este efecto
es anlogo a cuando se se desplaza una luz rpidamente entre 2 puntos y en lugar de
percibirse la luz desplazndose se percibe una linea luminosa que une ambos puntos.

Si se tiene una tira de leds a la cual se le puede variar el patrn con el que se
encienden instante a instante y esta se desplaza rpidamente con respecto al
observador, este percibir una imagen fija en el espacio determinada por el patrn de
control de los leds.

Ejemplo:

Suponiendo una tira de 4 led y el siguiente patrn:


Si se alterna ella patrn 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 rectngulos 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 imgenes 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 fsicos de nuestro problema.
En nuestro caso se ensayo empricamente 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 velocmetro magntico y se promediaron. El resultado
obtenido como la velocidad promedio a la que se logra una persistencia completa
resulto:

Km
V fullPOV = 22.5
h

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:

1 2 R
V = R = 2 f R T fullPOV = = = 326 ms
f fullPOV V fullPOV

2 2 2
V V V fullPOV m
ar = R = R =
2
arfullPOV = 2 R = = 122,07 2 = 12,46 g
R R R s

Posibles Soluciones
Acelerometro

Si se coloca un acelerometro con uno de sus ejes paralelo al radio de la rueda,


este medir la aceleracin radial, superpuesta con el vector gravedad que desplaza a la
placa capacitiva. Como el movimiento circular es armnico aceleracin medida resulta:
a x = ar + g sen t

Por otro eje del acelerometro perpendicular al anterior y paralelo al plano de la


rueda mide la aceleracin tangencial a la cual tambien se le superpone el efecto del
vector gravedad, solo que en cuadratura con el caso anterior.

a y = at + g cos t

De las ecuaciones de movimiento circular:

ar
ar = 2 R =
R

ar
= 0 + dt = dt
R

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


aceleracin 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 posicin en que el vector gravedad es paralelo y opuesto a la velocidad
tangencial (eje x paralelo al suelo) entonces:

ay = g

Por ende se puede utilizar esta condicin para detectar que la rueda se
encuentra el ngulo cero y as a partir de ese instante integrar y calcular
instantneamente el ngulo.

Otra forma de calcular los instantes en los que se cambia el patrn 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 condicin de
ngulo cero se inicia un contador (CNT) que, cuando alcanza un valor de cuenta

Trot 1 2
CNTray = Tray = = =
n n f rot n

el patrn 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 at >> g , lo cual podemos decir que se cumple para
Km
V fullPOV = 22.5 donde ar = 12,46 g .
h

Esta solucin 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 Magntico
Si se coloca en el dispositivo un sensor o switch de efecto hall y un imn 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
patrn de la tira de leds en n ngulos distintos (n sectores circulares distintos p ) y
CNT es el valor actual del contador, entonces:

CNT
p=
(T / n)

Por lo que se puede determinar fcilmente que patrn de leds debe mostrarse
en cada instante.

Este mtodo es muy simple pero implica agregar elementos al medio donde se
va a instalar el dispositivo.

Seleccin de una solucin


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 eleccin dados los recursos del kit de desarrollo
DemoQE resulta ser la aceleracin mxima que debe poder medir el acelerometro.
El acelerometro del kit tiene una alcance de:

Racc = 6 g < 12,46 g

Por lo que no tienen el rango necesario para que el sistema funcione


correctamente. Por lo que en nuestro caso la solucin del acelerometro queda
descartada y se recurre al sensor magntico.

Seleccin 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 seal.
En nuestro caso la alimentacin es de 3V, por lo que al pasar por el imn la
variacin de tensin no es lo suficientemente grande como para que el micro la
reconozca como una seal digital, por ende se conecta el sensor al canal 0 del CAD del
micro y para detectar el imn se le pone una condicin de umbral la cual se obtuvo
empricamente a travs de mediciones por terminal.
Por otro lado, para que el sistema responda rpidamente el CAD se configura
en 8 bits y con frecuencia de conversin mxima.

Recursos para la medicin de tiempos


Como se vio en el punto 1.2 el periodo a V fullPOV es T fullPOV = 326 ms y
suponiendo que el numero de patrones distintos es 128 entonces el contador tiene que
tener una resolucin mnima de:

T fullPOV
t = 2.55ms
128

Sobre dimensionando para que el sistema funcione para velocidades mayores

T fullPOV Km
t = 0.5ms Vmax = V fullPOV = 31.83
128t h

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

t max = 256 t = 128ms < 326 ms = T fullPOV

por lo que es necesario generar un RTC ampliado va software de 16bits.

Recursos para la tira de leds

Se propone tener una resolucin 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

Diseo de la placa de leds y sensor


La placa esta compuesta de 16 circuitos idnticos con transistores que trabajan
en corte y saturacin conectados a un bus de datos que se conecta al MCU Expanssion
port. Los leds se encienden con lgica positiva.
El circuito es el siguiente:

El circuito esta diseado para consumir aproximadamente 10ma por led por lo
cual, para 2 pilas de 1000mah y despreciando el consumo del micro, el sistema podra
funcionar durante:

ma
2 x1000
t max = h = 12.5h
16 x10ma

Para el sensor magntico se conecta su salida al bus y se lo polariza como se


muestra a continuacin.

Luego se diseo en eagle el PCB que cuyo resultado fue el siguiente:


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

Implementacion de la solucin
A continuacin se muestran las funciones empleadas, las cual estn
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 interrupcin por desborde de la parte baja incrementa la parte alta.
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
}

Inicializacin de perifricos

////////////////////////////////////////////////////////////////
// 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;
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;

//Configuracin del ADC


//Conversin 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;
}
Lectura del sensor magntico

////////////////////////////////////////////////////////////////
// ReadMag
//--------------------------------------------------------------
// Lee la tension del sensor magnetico, la convierte y almacena
////////////////////////////////////////////////////////////////
word ReadMag(void)
{

byte adc;

// Espera hasta que se complete la conversin


while (!(ADCSC1_COCO)){}

adc=ADCRL;
return adc;

Lectura del periodo de rotacin

////////////////////////////////////////////////////////////////
// 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 imn -> 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 magntico se sale de
//la condicin de deteccin
//una vez que la rueda dio un cuarto de vuelta (T/4)
if(CNT == (T>>2)){
High=0;
}
}
Rutina main
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;//Diseo 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,
//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,
//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,
//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
};
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 cmara con diafragma abierto para poder
apreciar el efecto de persistencia de la visin.
Posibles mejoras al sistema
 Impresin de la velocidad de la bicicleta.
 Interfaz serie para el ingreso de textos a imprimir.
 Interfaz serie para el ingreso de imgenes radiales.
 Interfaz serie para el ingreso y conversin imgenes a imgenes radiales.
 Multiplexado de los puertos para agregar tiras de leds y reducir la velocidad
mnima para que el sistema funcione correctamente.

Aplicaciones del sistema


 Velocmetro para espectadores de carrera de bicicletas.
 Dispositivo de seguridad, actuando de baliza durante la noche.
 Uso esttico.
 Medio de expresin artstica.
 Display de variables cotidianas como temperatura y horario.
 Sistema de publicidad ambulante.

También podría gustarte