jueves, 23 de abril de 2009

FUNCIONAMIENTO DE DRIVER


Funcionamiento del driver

Driver consiste en crear las forma de onda que requiere el modulo y, luego, medir el ancho del pulso del eco para obtener finalmente la distancia, multiplicando la mitad de este tiempo por la velocidad del sonido.
Se decidió que la mejor forma de implementar las ideas mencionadas era utilizando un Timer para generar las formas y una Interrupción para medir el tiempo del eco.
Se debió elegir un pin con posibilidad de captura como entrada, se escogió utilizar el puerto FREQ (P1.0), ya que esta disponible en la tarjeta de desarrollo.
También por comodidad se decidió utilizar el pin A0 (P6.0) como salida para el trigger.
Entonces la realización del driver se reduce a coordinar el disparo del trigger con la captura
del tiempo del eco.


Un diagrama de bloques simple que muestra el funcionamiento general es el siguiente:
Se consideró que sería bueno implementar dos modos de adquisición, uno que responda en Llamada, denominado Modo Único, y un modo que este continuamente actualizando el valor de
la medición, denominado Modo Repetitivo.

Modos de adquisión
El funcionamiento de cada modo es similar, ya que para ambos es necesario usar un Timer y la interrupción de una compuerta digital del microcontrolador, a continuación se detallará el funcionamiento de cada modo por separado.
Modo Adquisición única
En este modo se desea adquirir el valor de la distancia una sola vez. Al llamar la función que implementa el driver, ésta devuelve la medici´on al terminar de adquirirla (hasta 36 [ms]).
Seminario de Computadores I, 2004 5
Driver Medidor Ultrasónico Modos de adquisión

Funcionamiento:

Una vez llamada la función se realizan las siguientes operaciones:
i. Setea pin P6.0=1, configura la interrupción de la puerta digital y configura el Timer A.
ii. Espera 20[μs], genera trigger del sensor ultrasónico, bajando el pin de salida (P6.0=0).
Setea en cero el registro de cuenta del Timer A.
iii. Se espera interrupción de la compuerta digital (pin P1.0).
iv. Al generarse la interrupción (P1.0=0), deshabilita la interrupción de ese pin y almacena el
valor de la cuenta del Timer A en una variable.
v. Convierte y devuelve el valor de la variable en mil metros.
A continuación se presentan el diagrama de bloques y formas de onda del modo Adquisición
única:

Modo Adquisición repetitiva

La idea detrás de este modo es el tener al driver adquiriendo continuamente. Se llama una sola vez y queda funcionando para seguir ejecutando todo el código.
El modo repetitivo tiene dos formas de entregar la adquisición: la ´ultima adquisición y el promedio de las ´ultimas 4 mediciones. La devolución de las mediciones se hace mediante variables
globales.
La adquisición se realiza periódicamente, según se produce el timer overflow del Timer A.
Funcionamiento
En este modo se realizan las siguientes operaciones:
i. Setea pin P6.0=1, configura la interrupción del puerto digital y Timer Overflow del Timer
A.
ii. Espera 20[μs], genera trigger del sensor ultrasónico, bajando el pin de salida. Setea en cero
el registro de cuenta del Timer A.
iii. Al generarse la interrupción (P1.0=0), almacena el valor de la cuenta del Timer A en una
Variable. Calcula promedio de las ´ultimas cuatro mediciones.
iv. Con la interrupción de Timer Overflow se repite el proceso desde i.
Se debe destacar que el periodo en que se toman las mediciones esta dado por el timer
Overflow.

Conexiones del módulo de ultrasonido:
El módulo puede ser alimentado con el voltaje Vcc (+3.6 [V]) y GND (0[V ])de la tarjeta
de desarrollo EasyWeb (para el diagrama de conexiones referirse a la Figura 2). De esta forma
no se necesita fuente de alimentación externa.
El pin de trigger del modulo de ultrasonido se conecta al pin A0 de la tarjeta (P6.0). Por
este pin se envían las señales desde la tarjeta EasyWeb hacia el sensor para iniciar las mediciones.
Además el pin de salida del módulo se conecta al pin FREQ de la tarjeta de desarrollo (P1.0).
Mediante este pin se reciben los resultados de la medición del sensor que serán procesados por
el driver.
Utilización del driver:
El código del driver esta contenido en el archivo drv us.c. Éste se debe agregar al programa
utilizando una instrucción #incluye "drv us.c" en el código.
El driver implementa dos funciones (de acuerdo a los modos descritos anteriormente):
Distance1() para adquisición única y Distance0() para adquisición repetitiva.
Además, deben llamarse a las inicializaciones del driver con InitUS(), que inicializa los
pines que utiliza, como entrada o salida según corresponda. La inicialización del Timer A y del
pin de captura se realizan internamente.
Para utilizar la función de adquisición única, se llama sin parámetros, y retorna el valor de
la distancia medida en milímetros (que se miden desde el 0 en el borde exterior de los buzzers).
En caso de que la distancia exceda el máximo medible (3 metros), el driver retornara un 0.
Ejemplo:
Int medida;
InitUS ();
Medida=Distance1 ();
printf("Distancia :%i",medida);
La función para medir repetidamente también se invoca sin parámetros. Esta función no
retorna valor alguno, ya que se mantiene permanentemente realizando mediciones. Los resultados
de dichas mediciones se puede acceder mediante las variables: DIST y DIST PROM. En éstas se
almacenan el último valor medido, y un promedio de las últimas cuatro mediciones.
Seminario de Computadores I, 2004 9
Driver Medidor Ultrasónico Utilización del driver:
Ejemplo:
InitUS();
Distance0();
while(1){
printf("Distancia: %i",DIST;
printf("Distancia Promedio: %i",DIST PROM);}
Debe recordarse que en este modo se producirá una interrupción periódica en la ejecución
del programa.
El driver no esta pensado para utilizar ambos modos al mismo tiempo.


No hay comentarios:

Publicar un comentario