Autor Tema: Velocímetro con Pic16f877  (Leído 28756 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Velocímetro con Pic16f877
« Respuesta #15 en: 16 de Septiembre de 2008, 18:32:15 »
OBJETIVO

Diseñar un velocímetro utilizando un PIC16F877 con las siguientes características:

1.   Económico
2.   Preciso
3.   Liviano
4.   Versátil
5.   Flexible 

Movimiento Circular

El movimiento circular uniforme es la aplicación más importante de la noción general de la aceleración centrípeta. De esta aplicación proviene un resultado cuantitativo que tiene relación directa con el movimiento de cuerpos tales como los satélites naturales y artificiales, las partículas nucleares en aceleradores, los cuerpos que giran atados al extremo de una cuerda y las ruedas que están montadas sobre ejes.

El movimiento circular es otro ejemplo importante del movimiento en un plano. Sin embargo, en este caso el vector aceleración ya no es constante. Para calcular la velocidad lineal de la partícula debe evaluarse la derivada respecto del tiempo del vector desplazamiento r.

Donde r = xi(x) + yi(y) = (rcosθ)i(x) + (rsenθ)i(y)

i(θ) = (-senθ)i(x) + (cosθ)i(y)

Pero r = ri(r)

Se obtiene el siguiente resultado

V = (r dθ/dt)i(θ) = (rw)i(θ)

En esta  ecuación se ve que la magnitud de la velocidad lineal está dada por

V = rw                           (1.0)

Donde w es la rapidez instantánea de la variación del ángulo θ, el cual expresa el desplazamiento angular de la partícula respecto de su punto de partida, se llama velocidad de la partícula y siempre se expresa en radianes por segundo.

w = 2*pi*F                        (1.1)

Donde F = 1/T   siendo F = Frecuencia; T = Periodo       (1.2)

Reemplazando (1.1) y (1.2) en (1.0)

V = (2*pi*r) / (T)                     (1.3)

Esta es la ecuación general que se va a utilizar para calcular la velocidad en proyecto


TMR0 (Timer 0)

El microcontrolador PIC16F877 tiene en su arquitectura 3 temporizadores, que son el TIMER0, TIMER1 y TIMER2. El TMR0 es un temporizador de 8 bits, es decir, sólo cuenta de 0-255, después que sobrepasa el umbral de los 255 se desborda y ocurre la famosa interrupción por desbordamiento del TMR0. Para calcular los tiempos a controlar con TMR0 se utiliza la siguiente fórmula práctica:

Temporización = 4*Tosc*(256 – Valor cargado del TMR0)*(Rango del divisor)   (1.4)

Donde = Tocs = (1) / (Fosc)
Rango del divisor es también conocido como el predivisor de frecuencia puede varia desde 1:2 hasta 1:256

Unas de las características más útiles del TMR0, es que se puede leer en cualquier momento el valor que contiene, sin detener el contaje.

De la formula (1.4) podemos hacer las siguientes aproximaciones:

Fosc = 4 MHz
Rango del divisor = 1:256
Valor cargado = 0

Con estos valores la Temporización = 65.536 ms

El anterior valor me da la siguiente conclusión: que cada 65.536 ms el TMR0 se desborda y ocurre una interrupción (si está activa la interrupción GLOBAL), y además, que nuestro programa tendrá que trabajar con la interrupción del TMR0, debido a que medimos ciclos por segundo. 

Para medir tiempo se utiliza la siguiente fórmula:

T = 4*Tosc*(Rango de divisor)*(255*#desbordes + Valor del TMR0 actual)     

Para Tosc = 0.25us y Rango de divisor = 256

T = 0.000256*(255*desbordes + Valor del TMR0 actual)         (1.5)

Remplazando (1.5) en (1.3) se obtiene

V = (2*pi*r)/( 0.000256*(255*desbordes + Valor del TMR0 actual))   (1.6)

Resolviendo con pi = 3.1416

V = (24544*r) / (255*desbordes + Valor del TMR0 actual)    m/s   (1.7)

Pasando a Km/H, ósea, Multiplicando por 3.6 se obtiene

V = (88358*r) / (255*desbordes + Valor del TMR0 actual)       (1.8)


Interrupción por flanco externo en el Terminal RBO

Está interrupción es una de la más utilizadas debido a su fácil manejo y programación, la filosofía es la siguiente. El Terminal RBO del microcontrolador PIC16F877 puede ser utilizado para detectar cambios de flancos utilizando la interrupción por cambio flanco.
La idea consiste, que en el momento en que se detecta un “1” ó “0” lógico (dependiendo de la configuración), el TMR0 empieza a contar. Esta interrupción se utiliza para medir el ancho de un pulso, cambios en el estado de sensores etc.       


Metodología de Trabajo

La metodología para el desarrollo del velocímetro es la siguiente:

1.   Medir el ancho del pulso proveniente del sensor tipo hall, utilizando el TMR0, la interrupción por desborde del TMR0 y la interrupción por cambio de flanco en el Terminal RBO.

2.   Hacer el cálculo utilizando la fórmula (1.8), tomando en cuenta el radio de la llanta en metros

3.   Mostrar el valor en Km/H en una pantalla LCD

Bueno muchachos espero haber sido conciso en el planteamiento del problema, y espero recibir las diferentes sugerencias, críticas y dudas con respecto al proyecto.

Un saludo desde Pereira - Colombia     
Un saludo desde Pereira - Colombia

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Velocímetro con Pic16f877
« Respuesta #16 en: 07 de Noviembre de 2008, 18:46:34 »

Saludos

Después de muchos quemones, pruebas y demás cosas ya tengo la primera implementación del velocímetro con el PIC16F877

El velocímetro tiene las siguientes características:

Diámetro programable (13' A 23') "de la rueda de auto, moto e.t.c"
Velocímetro de (0 - 255 KM/H)

La única parte que me tienesdando vueltas es la parte del sensado ya que la "lata magnética" no me responde cuando pasa por pantano espero conseguir otro dispositivo.

Bueno muchaschos dejo las fotos para que le den una ojeada.

Un saludo desde Pereira - Colombia


Un saludo desde Pereira - Colombia

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Velocímetro con Pic16f877
« Respuesta #17 en: 08 de Noviembre de 2008, 02:35:19 »
Como que cuando pasa por pantano? :S

Que bueno que vayas por buen camino xD

Salu2.

Desconectado electron954

  • PIC10
  • *
  • Mensajes: 1
Re: Velocímetro con Pic16f877
« Respuesta #18 en: 08 de Julio de 2010, 04:29:34 »

Saludos

Después de muchos quemones, pruebas y demás cosas ya tengo la primera implementación del velocímetro con el PIC16F877

El velocímetro tiene las siguientes características:

Diámetro programable (13' A 23') "de la rueda de auto, moto e.t.c"
Velocímetro de (0 - 255 KM/H)

La única parte que me tienesdando vueltas es la parte del sensado ya que la "lata magnética" no me responde cuando pasa por pantano espero conseguir otro dispositivo.

Bueno muchaschos dejo las fotos para que le den una ojeada.

Un saludo desde Pereira - Colombia



hola que simulador usas ?

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Velocímetro con Pic16f877
« Respuesta #19 en: 20 de Julio de 2010, 14:28:02 »

Saludos

Citar
hola que simulador usas ?

Que pena por no constestar antes. El proyecto inicialmente fue simulado en el Proteus 6.0 con un PIC16f877, el sensor fue simulado con un generador de señales y la velocidad era visualizada en una LCD, después de mucha pruebas, se decidio cambiar de microcontrolador y se paso a un PIC16F628, además, se utilizo el módulo CCP1 que viene incorporado en este microcontrolador, además el código fue realizado en lenguaje de máquina y como dispositivo de visualización se utilizo un display de 7 segmentos. El motivo de cambio de microcontrolador y del elemento visualizador fue por un aspecto económico, este dispositivo se probó en una KMX (150 ó 175) y funcionaba perfectamente, igualmente fue simulado en el Proteus 6.0.

Eso fue todo lo del velocímetro saludos.   
Un saludo desde Pereira - Colombia

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Velocímetro con Pic16f877
« Respuesta #20 en: 21 de Julio de 2010, 05:47:39 »
Yo también me quedé colgado en la parte "no me responde cuando pasa por pantano".  :shock:
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Velocímetro con Pic16f877
« Respuesta #21 en: 21 de Julio de 2010, 13:03:34 »
Saludos

Citar
Yo también me quedé colgado en la parte "no me responde cuando pasa por pantano". 

El problema era el siguiente, inicialmente el velicímetro fue probado en una bicicleta y cuando la llanta pasaba por lugares donde se empatanaba la llanta el velocímetro no funcionaba bien, el problema se solucionó poniendo esas tapas contra agua y enchaquetando el cable que viene desde el sensor "como la guaya de las motos"y con estos arreglos soluciono en mucha parte el problema.

Saludos.
Un saludo desde Pereira - Colombia

Desconectado joliva68

  • PIC12
  • **
  • Mensajes: 89
Re: Velocímetro con Pic16f877
« Respuesta #22 en: 23 de Julio de 2010, 03:59:14 »
Felicidades por tu proyecto me ha gustado mucho y me va venir muy bien para modificar mi anterior proyecto:

sin duda te lo has currado, gracias por compartirlo.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Velocímetro con Pic16f877
« Respuesta #23 en: 23 de Julio de 2010, 19:37:40 »
Saludos

Citar
Felicidades por tu proyecto me ha gustado mucho y me va venir muy bien para modificar mi anterior proyecto:

sin duda te lo has currado, gracias por compartirlo.

Que bueno que te gusto amigo joliva68, este fue mi primer proyecto con los microcontroladores, fue todo un reto por la modificaciones que se hicieron, y el cambio de lenguaje atrazo mucho el desarrollo, según mal no recuerdo se llevo 1300 líneas de código y se utilizaron 6 interrupciones, además el velocímetro se le incorporó un odómetro y quedo muy cachaco  :D.

Cualquier inquietud solo es que comentes
Un saludo desde Pereira - Colombia

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Velocímetro con Pic16f877
« Respuesta #24 en: 29 de Diciembre de 2010, 22:22:04 »
Hola.

Revivo el hilo para mostrar mi Velocímetro  :mrgreen:



Un videillo de las pruebas que hice con un motor:


Para sensar los pulsos uso un sensor Hall.

Saludos
El papel lo aguanta todo

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Velocímetro con Pic16f877
« Respuesta #25 en: 30 de Diciembre de 2010, 02:46:54 »
Muy bien acabado, MLO. Felicidades.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Velocímetro con Pic16f877
« Respuesta #26 en: 30 de Diciembre de 2010, 11:59:04 »
Gracias  ;-)

PD// Una fotillo en su caja:


« Última modificación: 30 de Diciembre de 2010, 21:11:52 por MLO__ »
El papel lo aguanta todo

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Velocímetro con Pic16f877
« Respuesta #27 en: 02 de Enero de 2011, 04:44:05 »
Saludos

MLO te felicito por el proyecto te quedó muy chulo sería bueno que documentaras como lo hiciste, es decir, que técnica utilizaste, la verdad como ese fue mi primer trabajo mucha de la información con la que hizo el proyecto se quedó en la empresa ya que prefiri estudiar, de todas maneras me parece que el mio es más elegante  :D :D :D.

Un saludo desde Pereira - Colombia

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Velocímetro con Pic16f877
« Respuesta #28 en: 02 de Enero de 2011, 12:25:37 »
 :D :D :D

Ok Ok ... si tu lo dices  :D :D :D

Pues, use una interrupción (CCP) para la medición de la frecuencia de la señal de pulsos que provienen del sensor Hall, otra para la multiplexación de los display de 7 segmentos (Timer0) y otra (USART) para la configuración de los parámetros de calibración y programar el modo de contador.

Use el 16F628A ya que tenia los pines suficientes para hacer lo que quería y quedaba lo suficientemente pequeño para alcanzar en la caja (6.5cm x 4.7cm x 2cm). La ventaja de usar un Sensor Hall es que el campo magnetico es inmune al polvo, barro, etc. y por tanto se tiene una muy buena señal:



Saludos
El papel lo aguanta todo

Desconectado marco_zappia

  • PIC10
  • *
  • Mensajes: 25
Re: Velocímetro con Pic16f877
« Respuesta #29 en: 26 de Febrero de 2012, 17:29:55 »
Totalmente de  acuerdo con todo, excepto por la cuenta:

V = (2*pi*r)/( 0.000256*(255*desbordes + Valor del TMR0 actual))   (1.6)

yo creo que ahí te confundiste y como mensionaste anteriormente en tiempo el timer se desborda cada 65.536 ms, por lo que la cuenta yo creo que deberia ser si la estas trabajando en segundos

V = (2*pi*r)/( 0.000256*(desbordes*0.065536  + Valor del TMR0 actual)) 


 

anything