Autor Tema: ayuda !!! contador de pulsos de una rueda fonica  (Leído 6074 veces)

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

Desconectado khriz

  • PIC10
  • *
  • Mensajes: 4
ayuda !!! contador de pulsos de una rueda fonica
« en: 24 de Julio de 2015, 13:05:38 »
hola !!!

necesito ayuda con un proyecto que estoy haciendo, se trata de un contador de pulsos de una rueda fonica de 34 dientes y un faltante de 2, total 36 dientes, estoy usando el CCP del pic18f4550 a 20Mhz ..... necesito medir 500 RPM a 10 000 RPM ..... ya hice el programa en ccs pero el resultado mostrado en el LCD es el doble de las RPM reales... ayuda please !!!!

adjunto el codigo en ccs, hex, esquema es proteus y fotos del osciloscopio y lectura del uC

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: ayuda !!! contador de pulsos de una rueda fonica
« Respuesta #1 en: 24 de Julio de 2015, 13:22:53 »
Citar
estoy usando el CCP del pic18f4550 a 20Mhz

No lo estas usando, estas usando un timer y una interrupcion externa por RB0, pero no estas usando el CCP.

De todas formas el programa me parece correcto (aunque si quisiera medir periodo, simplemente mediria el tiempo entre flancos ascendentes nomas), lo unico que me preocupa es que no tengas en cuenta que en el timer puede ocurrir un overflow y al realizar

tth = t2 - t1;

t2 sea menor que t1. Dandote un valor negativo. Asi que imagino que deberias tener en cuenta ademas si se produce un overflow del timer1 si lo vas a hacer asi.
Si vas a usar el CCP entonces tambien deberias tenerlo en cuenta para luego calcular las cosas.

Otra duda que tengo al ver el codigo es como tratas (ignoras o medis por igual, o detectas) en esa parte que le faltan los 2 dientes. ya que si seguis con tu operacion vas a ver que en un momento tenes unos RPM y luego tenes OTRO valor de RPM y luego volves al normal por culpa de esa falta de 2 dientes.

Y lo mas importante:

Creaste 3 post con el mismo tema, uno solo es suficiente y seguro que va a venir un moderador y te va decir que leas las reglas de foro :P
« Última modificación: 24 de Julio de 2015, 13:27:29 por KILLERJC »

Desconectado khriz

  • PIC10
  • *
  • Mensajes: 4
Re: ayuda !!! contador de pulsos de una rueda fonica
« Respuesta #2 en: 24 de Julio de 2015, 13:49:46 »
hola killerjc

muchas gracias por responder, tienes toda la razon, ya no uso el ccp pq pense ke era el problema, este codigo es otro que estaba probando, me mio una lectura mas estable ya ke no uso delays, no existe overflow, ya ke las rpm y frecuencias creadas por la rueda fonica del motor son elevadas y trabajo en un rango de 180hz a 6kHz entonces los tiempos entre dientes es minimo, por eso no uso preescaler ya ke lo maximo ke puedo contar son 0xFFF x 0.2 uS... 13mS aprox... y no hay un pulso tan elevado, ya ke en 1 vuelta existen 34(+2) dientes y el motor trabaja a 600rpm min. a 10000rpm max.

El motivo por el ke no tomo en cuenta los dientes faltantes es solo para calculo...... el pic lo detecta y existe un momento ke si me da la lectura del faltante, lo ke hacia era incrementar un contador de dientes hasta ke pille en faltante y se reinice asi contara los 34 y se reinicia en 0 cuando pilla el faltante..... pero no lo detecta siempre... solo en algunas ocasiones(el contador se desborda) y necesito saber la posicion exacta del motor en todo momento, lo ke usaba para detectar el faltante era :

if(t1(actual) >= t1(anterior)*2) cont=0;

entonces ese era el faltante, pero tampoco funciona bien... por eso omiti esa parte para hacer mas sencillo el codido de conteo de pulsos

Mis disculpas por crear 3 post, pero es por ke mi conexion a internet... se colgaba antes de mandar las fotos.... pero cuando logro mandar las fotos recien vi los anteriores.... lo siento  :oops: :oops: :oops:

Desconectado khriz

  • PIC10
  • *
  • Mensajes: 4
Re: ayuda !!! contador de pulsos de una rueda fonica
« Respuesta #3 en: 25 de Julio de 2015, 02:02:21 »
despues de analizar el codigo, no encuentro el error, asi ke decidi cambiar el codigo otra ves...... ahora si uso el CCP y solo cuento los flancos de subida unicamente, aki el codigo de la interrupcion CCP:

#int_ccp2
void handle_ccp2_int()
{
      t1=get_timer1();
      set_timer1(0);       // Reinicio TMR1     
      if(flagHayDatos==0)
      {                     // Si los datos anteriores han sido procesados ...
            flagHayDatos=1;    // Indico que ya hay nuevos datos de flancos para calcular
      }
}

con esto deberia de ser suficiente, claro despreciando la primera lectura, como siempre en simulador todo OK.... pero cuando lo pruebo en el motor.... nada el mismo resultado solo que ahora varia mas y tengo lecturas muy elevadas. :x :x :x

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: ayuda !!! contador de pulsos de una rueda fonica
« Respuesta #4 en: 25 de Julio de 2015, 03:35:36 »
Es que el modulo CCP no deberias reiniciar el timer para nada.

Y lo que queda en el Timer se pasa a los registros del CCP.
Una pregunta, de que diametro o radio es esa rueda fonica ?

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re: ayuda !!! contador de pulsos de una rueda fonica
« Respuesta #5 en: 25 de Julio de 2015, 07:19:58 »
Creo que puedes estar teniendo un problema de que siempre estas entrando en la interrupción, ¿estas limpiando el flag de interrupción? Esta bien cargado el timer?

Un saludo
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: ayuda !!! contador de pulsos de una rueda fonica
« Respuesta #6 en: 26 de Julio de 2015, 08:24:02 »
Bueno volvi a mirar el codigo, el primero que pasaste, y se me vinieron varias dudas.

- Pregunte por el diametro por si estaba siendo demasiado rapido el tema de las entradas y era tan chica la diferencia que terminaba siendo el doble en todos los calculos ( No veo posible por el tema de que la simulacion funciona )
- En las versiones que pasaste puede que cuente un par de pulsos mas. Ejemplo en el codigo hasta entrar a la interrupcion y tomar el valor del timer en ASM son VARIAS instrucciones mas, lo cual estaria dando un valor erroneo al cnotar. Por eso deberia usarse el modulo CCP en modo Capture, en este modo el valor del Timer se guarda en un registro del CCP cuando ocurre el evento, de esa forma lees ese registro y no el timer. Esto daria un error pero no se si el doble, eso va a depender de que tan rapido vaya la rueda. Y el codigo que se agrega.
Para tomar el valor del modulo CCP2 segun el manual se usa:

int16 valor_del_timer = get_capture(2);

- En tu codigo, luego de la pregunta del if, puede ocurrir una interrupcion y cambiar los valores de las variables t1,t2 y t3, deberias desabilitarlas hasta que termines de tratarlas y luego habilitar todo de nuevo o no tomar nuevos datos si todavia no se trataron los datos anteriores. (Aunque puede que no sea posible mejor tenerlo en cuenta)


Ahora hablemos de la diferencia Simulador / Real.

Si en el simulador te funciona y en Real no pueden ser varias cosas. Lo primero que se me ocurre es:

- Esta mal la frecuencia ( No parece serlo ).
- Que el sensor este dando el doble de pulsos.
- Error en la medicion de contrastacion. ( Es decir con lo que estas midiendo y comparando )

Desconectado khriz

  • PIC10
  • *
  • Mensajes: 4
Re: ayuda !!! contador de pulsos de una rueda fonica
« Respuesta #7 en: 26 de Julio de 2015, 15:57:15 »
respondiendo a las preguntas ke me hicieron:

la verdad no pude medir el diametro de la rueda fonica pq esta instalada en el motor, pero subire unas fotos para ke lo vean, yo calculo asi a OJO unos 100mm(aprox.) de diametro.

no estoy limpiando el flag de interrupcion en el codigo, como en simulacion funciono, pues lo deje asi, lo tomare en cuenta ahora pq puede que sea el problema.

eso de que si esta bien cargado el timer, queda confirmado que no lo tengo ke reiniciar o cargar con un valor, cuando uso el CCP en modo captura.

en el primer codigo, si note el error, pq cuando pillaba t3 inmediatamente tenia ke pillar el t1 pero se quedaba esperando un flanco de bajada asi ke perdia un pulso en cada lectura (eso creo ). en el segundo codigo, solo pillo flancos de subida, agrandando el tiempo de lectura para evitar ke entre en la interrupcion antes de terminar de procesar los datos, por eso solo media t1 de flanco de subia a flanco de subida, pense ke mejoraria pero jue peor.

no creo ke el sensor este mandando doble señal o una señal erronea ya ke el motor funciona correctamente en el vehiculo (intento controlar un motor 5VZ-FE V6 toyota) y ademas el osciloscopio lo confirma, eso del ERROR EN LA MEDICION DE CONTRASTACION, fue lo primero ke hice para salir de dudas (y lo sigo haciendo pensando que ahi esta el error), y asi confirmar las frecuencas de trabajo del motor, ya ke no es una frecuencia constante, varia segun la aceleracion del motor.

ahora con las sugerencias que me hicieron volvere a hacer otro codigo y ver que pasa, los estare informando de los avances, muchas gracias por los comentarios y sugerencias.

saludos !!!!


 

anything