TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: marco_zappia en 25 de Febrero de 2012, 15:24:21
-
Hola, como estan? Tengo la siguiente duda, estoy haciendo un velocimetro con un 16f648A. Estoy trabajando con el ocilador interno y utizando el TIMER 1.Estoy temporizando el tiempo entre flancos de bajada mediante un sensor hall. De esta forma cuento la cantidad de desbordes del timer y le sumo el resultado del ultimo conteo.
Esto es: tiempo=(desbordes*0.5243+(65536-conteo_tiempo)*8*10e-6)*1/3600 EXPRESADO EN HORAS POR ESTO MULTIPLICO POR 1/3600
donde:
-desbordes= cantidad de desbordes del timer
-0.5243=tiempo desde que cargo el timer con 0000 y se de el desbordamiento (en segundos) con un factor 1/8
-conteo_tiempo=get_timer1()
y despues simplemente hago:
distancia=2*pi*radio*0.001;
velocidad=distancia/tiempo;
velocidad_entera=velocidad;
convierto a bcd de 2 digitos:
bin2bcd(velocidad);
muestro en display.
¿hay algun error?
-
Creo que la distancia la estas expresando en metros, (2*pi*r*0.001), si el tiempo esta en horas, la velocidad que obtendras sera de metros/hora. Si estoy confundido que alguien lo aclare.
Saludos.
P.D.: Rectifico, precisamente al multiplicar por 0.001 lo estas convirtiendo a kilometros, por lo que estaria bien, me hice un lio al pensar que lo dividias por 0.001.
-
.
El desarrollo pareciera estar bien, pero son demasiadas operaciones aritméticas para el mcu. Podrías simplificar considerando que la velocidad va a ser inversamente proporcional al tiempo entre capturas. Entonces:
tiempo = 256*desbordes + conteo_tiempo // da el tiempo capturado en nº de ciclos de reloj (con una frecuencia de operación de 1MHz, queda en microsegundos)
velocidad = k/tiempo // k es una constante a determinar, que depende del radio de la rueda y las unidades que uses para expresar la velocidad
Por ej, si el radio lo tenés expresado en metros, usás un oscilador de 1MHz, y querés la velocidad en m/s:
k = 2*pi*radio*10^6
Espero que te sirva. Saludos.
-
Pero que te pasa exactamente?, hace algo el PIC?.
El pic16f84a tiene 2 timers, esque no me acuerdo si ese PIC dispone del timer de 16 bits que estás intentando usar.
-
Pero que te pasa exactamente?, hace algo el PIC?.
El pic16f84a tiene 2 timers, esque no me acuerdo si ese PIC dispone del timer de 16 bits que estás intentando usar.
Él está intentando usar un PIC16F648A que tiene 3 timers. Y como bien dices, el F84 sólo tiene 1 timer
-
Estoy trabajando con un timer1 de 16bits,
Me queda la siguiente tuda en tu cuenta ya que cambie la cuenta.
porque pones total_t= (de*255) + tiempo;?
mas precisamente porque pones: "de*255" LO DEMAS ME QUEDA CLARISIMO. Estas sumando la cantidad de desbordes y el "pico" de tiempo.
Ahora bien, ese 255 no tendrias que convertirlo a segundos?
Yo estoy haciendo en esencia la misma cuenta pero se que con timer1 de 16bits, se da el desborde cada 0.5243s (trabajando a 4MHZ y prescaler 1/8) por lo tanto la cuenta es:
t_total=desbordes*0.5243+get_timer1()*10e-6 (exppresado en segundos). sabiendo que con cada incremento del timer pasó 1 milisegudo.
Estoy interpretando mal? saludos
-
.
Es cierto, está mal el número 256, debería ser:
t_total = desbordes*65536 + cuenta_timer
Puse 256 porque pensaba en un timer de 8 bits :mrgreen:. Y ahora "k" debería incluir también el prescaler de 8, sería:
k = 2*pi*radio*(1/8)*10^6
En realidad la cuenta que estás haciendo es correcta, pero utiliza demasiadas operaciones (sobre todo considerando que el mcu no dispone de instrucciones para multiplicar ni dividir) y es posible resumir todo en una multiplicación, una suma y una división.
Saludos.
-
estas cogiendo la velocidad del sensor de velocidad no? lo digo porque suelen ser inductivos por eso me ha extrañado.
No te tienes que complicar tanto con operaciones para el pic, unicamente calcula tanto el desarrollo como el diametro y conviertelo en una constante, entonces multiplicas (o divides) constante*rpm captadas y solo tienes que hacer una operacion. Al igual que para el timer, calcula la velocidad del cristal, prescaler y demas y conviertelo en una constante.
-
Aclaro que estoy utilizando a pila.
-
Hola, estoy intententando probarlo en mi moto, en un ventiladorsito de pc funciona barbaro. Ahora cuando prendo la moto tengo oscilaciones que me interrumpen continuamente y me muestra 99km/h, cuando me alejo de la moto funciona bien. ¿cual es mi error?
estoy utilizando pilas y la conexiona mi sensor hall A3144 es:
pin1= +5
pin2=ground
pin3=a resistencia 10k a +5 (pull up) y al pin rb0 para interrupcion mediante flanco de bajada. Esoy utilizando el 16f648A
GRACIAS!!!
-
Cambie todos los cables, pero sigue oscilando, el problema esta en el sensor (no digo q este roto porque probe con 2), pero cuando lo acerco a la moto, mas o menos un metro, me empieza a interrumir continuamente como si pusiera un iman al lado, apago la moto y funciona barbaro. el problema yo creo que es de hardware, q opinan? como puedo solucionar?
-
Parecería ser un problema de ruido eléctrico que está afectando la lectura del sensor de efecto hall. Tal vez la chispa sobre la bujía.
-
Hola, lo mismo que te ha dicho angelgris te iba a decir yo, es muy común que la bijía induzca ruido por las alimentaciones, al fin y al cabo, al mezclarlo con continua se trata de una señal de baja frecuencia y muy potente. Lo normal en automoción es aislar las alimentaciones (o blindar bien), aisla tu circuito, puedes utilizar un dc/dc de por medio y eso ya te hace muchísimo, aunque algo más sencillo primero que metas condensadores para filtrar el ruido.
-
Hola, el tema es que ahora la alimentacion del circuito la estoy haciendo mediante pilas AA, mi problema esta en el sensor al acercarlo a la moto, que condensadores puedo usar? donde lo conecto? entre ground y salida? GRACIAS!!!
-
.
¿Cómo es el montaje que estás usando? Si vemos el esquemático se va a hacer más fácil ayudarte. Eliminar problemas de ruido es una de las partes más difíciles del proyecto, y más aún en una moto o un auto. A no perder el ánimo :-)
Saludos.
-
Les dejo la conexion que tengo ahora, agrege un par de condensadores entre la salida del sensor y vcc y se soluciona bastante, algun otra idea? quizas condensadores mas grandes. GRACIAS!!!!
(http://s2.subirimagenes.com/otros/previo/thump_74866271.jpg)
-
tambien tienes el problema de los ruidos de la bobina, por asi decirlo magnetismo. Para solucionar esto deberias meter tu circuito en una caja metalica y esta caja metalica conectada al chasis de la moto por ejemplo (masa) yo he probado una bobina aqui en mi cuarto y el monitor estaba a 1m empezaba a parpadear, vamos que la bobina emite mucho ruido.
-
Hola.
Si colocas el condensador en la salida, puedes afectar la medicion de los pulsos. En las hojas tecnicas de los sensores Hall, recomiendan el condensador entre Vcc y GND lo mas cerca posible al sensor.
Yo he utilizado sensores hall en velocimetros para vehiculos ... y no me han dado problema .... eso si, el cable del sensor es blindado, para evitar interferencias
Saludos
-
condensador entre vcc y vss? a cual te referis?
-
Hola
Al condensador de desacople cerca al sensor, entre los pines 1 y 2, el valor puede ser de 100nF.
Saludos
-
ah, no habia leido entre la salida y gnd xD ahi no debes colocar un capacitador, sobretodo si es muy grande, este te influira en que el flanco de subida y bajada no sea plano, y a muchas rpm puede que se te unan subida con subida.
-
es verdad,MLO__ ya que trabajaste con velocimetros, tienes alguna idea de como reducir el ruido? he colocado unos condensadores entre la salida del sensor y vss, esto me reduce bastante, esta bien porque no estoy seguro....
-
Hola.
Con el condensador en el pin de salida, anularas los pulsos, dependiendo del valor del condensador, en mayor o menor medida. A mi no me da problema el ruido ... no entiendo porque a ti si (segun el esquema que has posteado :mrgreen: )
Inclusive he utilizado cable comun y corriente (es decir, no apantallado) para la conexion de la senal de pulsos y no me da lios ... seria bueno ver el esquema completo
Saludos
-
Es raro si, pero poniendo un condensador ahi me anula el ruido.... pero igual sigue sin funcionar bien... alguna recomendacion?
-
.
No me queda claro cómo es la disposición física del montaje. Imagino que es con el sensor conectado al circuito a través de un cable más o menos largo. Si es así, podrías intentar usando un amplificador diferencial para cancelar el ruido en la señal de salida del sensor. Estando los cables de salida cerca uno del otro, el ruido inducido será el mismo para ambos y el amplificador los elimina haciendo la diferencia entre las 2 señales. En la imagen intenté dar a entender que el cable de alimentación del sensor es blindado, y con un capacitor de desacople cerca del sensor.
Saludos.
-
Muchas Gracias por ayudar, coloque un condensador de desacoplo un poco mas grande y magicamente el problema se solucionó. Si quieren posteo el codigo y el montaje asi me dan su opinión. Saludos :lol: