Autor Tema: Tacómetro: duda existencial  (Leído 4931 veces)

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

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Tacómetro: duda existencial
« en: 29 de Noviembre de 2006, 21:30:16 »
Hola.

Me preguntaron una forma en la que se pudiera interpretar la información de una rueda acoplada a un rotor de un motor para poder medir las RPM.
Utilizarán un optointerruptor con un solo orificio para detectar una revolución.

Les hice el comentario que activaran el TMR1 como contador y que tomaran una muestra durante un segundo, luego lo multiplicaran por 60.

Su motor es relativamente veloz (10,000 RPM) asi que la resolución de 60 no es tan crítica pero (conociéndome) no quedé satisfecho con esa respuesta.

Revisé algunos enlaces y casi no encontré información (incluso aquí, solo Nocturno da una explicación).
José Pino tiene un programa pero no le entendí bien (mide el inicio y final del cambio de señal) y Electronic Design tiene un artículo que utiliza un 16F872 para medir RPM (BPS) de una señal de baja frecuencia (con el captura-compara del PIC).

Sé que lo que les dije está bien, pero quisiera darles mayor resolución para lo que sea que lo vayan a aplicar (luego pregunto).

Asi que me dirijo de nuevo al foro a preguntar:
¿Métodos para hacer un tacómetro?

Gracias de antemano.



PD: El foro cambió.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Tacómetro: duda existencial
« Respuesta #1 en: 29 de Noviembre de 2006, 23:06:18 »
Hola Mario, yo recuerdo haber dado varias explicaciones de este tema, el problema es que el buscador no funciona, pero bueno, de seguro si vuscas en mis respuestas encontrarás algo.

Por los métodos hay dos:

1) Midiendo el tiempo que lleva dar un giro de la rueda, o sea el tiempo entre pulso y pulso. Para esto se usa por lo general el TMR1 y por medio de una interrupción generada por dicho pulso se mide el tiempo de 1 vuelta. Luego el PIC realiza el calculo de 60/Tiempo=RPM y listo.

2) Como ya lo comentas midiendo la cantidad de pulsos en determinado periodo de tiempo. Este método sabe hacer uso del TMR0, y por le medio de una rutina de demora o el TMR1 se mide el periodo a contar, por lo general se mide durante un periodo de tiempo igual a 0.6 seg, por lo tanto la cantidad de pulsos que te de en ese tiempo se lo multiplica por 100 y listo, esta multiplicación la realiza el PIC, o solo se indica en el display tal como los tacómetro de aguja RPM x 100.

Y si deseas ser un poco más específico en la pregunta podría llegar a darte una respuesta más acertada.

Un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
Re: Tacómetro: duda existencial
« Respuesta #2 en: 30 de Noviembre de 2006, 00:34:52 »
mira justo eso estaba masticando para captar los pulsos usar el portb.0 y para captar el tiempo el timer1 que te da como maximo como dijo chaly 0.6 o algo asi de tiempo , claro y la regla de oro todo full interrupciones , lo fregado de esto lo veo la captacion de señales del sensor a altas revoluciones casi se vuelve dc a menos q bajes la cantidad de orificios en el encoder pero creo esto dificulta la lectura para bajas revoluciones

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Tacómetro: duda existencial
« Respuesta #3 en: 30 de Noviembre de 2006, 03:25:06 »
Eso precisamente.

Ya me dijeron para qué lo quieren, quieren solamente representar las revoluciones por minuto de un motor e ir incrementando el voltaje (como una práctica).

Decidieron tomar 5 segundos de muestra y lo que cuente el TMR1 lo multiplican por 12 para aprovechar la linealidad del voltaje contra las RPM. Para que les de las RPM multiplican por 12 porque (5) (12) = 60.

Como la velocidad es proporcional al voltaje aplicado (en teoría) no se preocupan por nada mas.

Hicieron un muestreo de 5 segundos porque hacían la mención sobre la pobre resolución a 1 segundo: de 60 se fue a 12.

Les comenté precisamente lo que señalas en el punto 2 de tu respuesta, que si el intervalo de muestreo es menor, menor será su resolución (60 para 1 seg, 12 para 5 seg).

Lo de contar los pulsos eso si lo entiendo e inclusive lo he puesto en práctica (a expensas de resolución baja); lo que me intriga es el otro método, el de contar el periodo, quizá se escuche como novato pero no lo había pensado así.

¿La ventaja sería que se tendría es mejor resolución?

Porque de ser asi, podría ayudarles a confeccionar un programa que les proporcione mejor resolución (digo, conociéndome :)) y que batallen menos.

Bueno, los dejo porque hay que dormir  :ni) y está haciendo un frillazo de los mil demonios árticos  :2].


PD: estoy revisando tus respuestas.
« Última modificación: 30 de Noviembre de 2006, 03:31:41 por Mario »
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Tacómetro: duda existencial
« Respuesta #4 en: 30 de Noviembre de 2006, 11:55:03 »
Hola Mario, bueno lo de medir el periodo de un pulso es bueno si tienes una buena velocidad en el PIC, ya que este debe hacer varios calculos, pero los resultados son aun mejores :D

Se obtiene una buena velocidad en las lecturas y con mucha más presición que con el contado de pulsos,  pero como cada metodo tiene sus pro y contras, el problema de este metodo es la cantidad de memoria de programa que usa y el tiempo de ejecución que le lleva al PIC realizar los calculos.

Las contras:

Por ejemplo en el metodo que están usando ahora el PIC cuenta los pulsos durante 5 seg. , luego los multiplica por 12 y listo, el tiempo restante se lo puede usar para realizar otras tareas, con un PIC a 20 MHz esa multiplicación como mucho le lleva 1mseg.

Con el metodo del periodo el PIC recibe el pulso por lo cual se produce la interrupción, borra el TMR1, cuando se produce la segunda interrupción lee los registros del TMR1 y luego realiza una divición de por lo menos 32 bits y esto no es poco tiempo de procesamiento, con un PIC a 20 MHz le puede llevar asta 3mseg, y esto sin tener en cuenta que una divición lleva mucha mas memoria de programa que una multiplicación.

Las ventajas:

Con el metodo que usan la resolución es de 12 RPM y la actualización es cada 5 seg.

Midiendo el periodo la resolución (varía según las RPM del motor) a 5000 RPM con un PIC de 20 MHz es de 0.07 RPM, y la actualización es cada 60/RPM+5mseg, por lo cual con un motor girando a 10000RPM tienes facilmente 91 actualizaciones cada segundo.

Por lo tanto si tienes tiempo de procesamiento libre en el PIC y capacidad de memoria de programa suficiente el metodo de medir el periodo es muy superior en ventajas.

Ahora comentame las dudas que tengas de este metodo y te las respondo.

Un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Tacómetro: duda existencial
« Respuesta #5 en: 01 de Diciembre de 2006, 02:39:16 »
Ok, muchísismas gracias.

Nunca entendí muy bien la multiplicación y división del punto decimal en ensamblador y citando a Von Newman (creo que asi se escribe):
"Un buen programador no necesita punto flotante, porque sabe exáctamente dónde está el punto en su cabeza"
Yo solo programo asi que me ayudo con lo que pueda.

El día de mañana 1 de Diciembre es día festivo en México (cambio de presidente) y saldré con mi familia a San Diego.

Lo del procesamiento no es problema porque utilizan PBP, aunque no tiene decimal se puede multiplicar y dividir por 10, 100, etc.
Utilizan un 16F873A solo para eso, y les genera como 400 intrucciones, asi que les quedan muuuuuuuuuuuchas mas.

El Viernes que regrese me pongo a cocinar el código y comento resultados.


PD: voy en la página 14 de tus respuestas ¡¡¡pero no tiene fin!!!!!, quién te manda tener 1907 mensajes. Asi que mejor trabajo con tus comentarios.
« Última modificación: 01 de Diciembre de 2006, 02:43:26 por Mario »
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Tacómetro: duda existencial
« Respuesta #6 en: 01 de Diciembre de 2006, 08:05:30 »
Hola Mario, sí, se que es un poco dificil de encontrar una respuesta entre tantas, por eso si es de tu interes te propongo darte una mano en este post y que no debas buscar en los 1907 mensajes :D :D :D

Realmente por mí no hay problema, un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Tacómetro: duda existencial
« Respuesta #7 en: 28 de Diciembre de 2006, 05:49:46 »
Hola de nuevo, ya ando por acá otra vez  :)

Replanté todo desde el inicio. Creo que voy a usar el captura del CCP para hacer esto, si no funciona utilizaré la opción de interrupción por RB0.

Tengo dos dudas que me paran en seco:
Midiendo el periodo la resolución (varía según las RPM del motor) a 5000 RPM con un PIC de 20 MHz es de 0.07 RPM, y la actualización es cada 60/RPM+5mseg, por lo cual con un motor girando a 10000RPM tienes facilmente 91 actualizaciones cada segundo.
¿De dónde sale ese 0.07 RPM y esas 91 actualizaciones?

La otra duda es con respecto al tiempo del Timer1.
*Se supone que activo el captura para flancos positivos.
*Se activa la interrupción del CCP1IF cuando existe un flanco positivo en CCP1 (o RC2), la cual captura el valor de los 16 bits de TMR1 en CCPR1. Esto no me interesa.
Aquí activo el TMR1 para que cuente sincronizado con el reloj interno.
*Espero a que se active de nuevo CCP1IF y ahora si, tomo el valor de CCPR1. Existió una transición completa de flanco positivo a flanco positivo.

Con preescalador a 1:1 y 20 Megas
La cuestión viene en el tiempo del reloj interno; si fosc/4 = frecuencia de cada instrucción con la que se incremetará el TMR1 entonces:
(20 MHz/4)= 5 MHz = 0.2 µsegundos.

Aquí es donde la puerca torció el rabo (como se dice aquí en México); aqui es donde tengo la duda:
(5 M*60) = 300 M
(300 M/máximo y mínimo conteo del TMR1)--> (300M/65535)= ¿4577.7 RPM mínimo? ¿300 Mega RPM máximo?


Con preescalador 1:8 y 20 Megas
5 MHz/8= 625,000 Hz =1.6 µsegundos.
(625 k)(60)= 37.5 M
(37.5 M/65535)= ¿572.21 RPM?


Con preescalador a 1:1 y 4 Megas
(4 MHz/4)= 1 MHz = 1 µsegundo.
(1 M*60) = 60 M
(60 M/máximo y mínimo conteo del TMR1)--> (60M/65535)= ¿915.74 RPM mínimo? ¿60 Mega RPM máximo?


Con preescalador 1:8 y 4 Megas
1 MHz/8= 125,000 Hz = 8 µsegundos.
(125 k)(60)= 7.5 M
(7.5 M/65535)= ¿114.44 RPM?



No lo sé, creo que debo poner un cristal de 32 kHz en T1OS0 y T1OS1...... creo que estoy algo perdido  :?


Estas personas ya salieron de vacaciones, dejaron el muestreo a 20 segundos y multiplicaron por 3. Su resolución fue entonces de 3 pero a expensas de un periodo de muestreo prolongado.

Edición: ando leyendo esto www1.cs.columbia.edu/~sedwards/classes/2005/4840/reports/Shifter.pdf
            y esto http://www.vermontficks.org/dtachc.htm
            La primera es ensamblador y la segunda es en C (CCS).
            Ensamblador le entiendo mas que en C pero tratan lo mismo de captura cada nivel alto de RC0.
            Seguiré buscando.
« Última modificación: 29 de Diciembre de 2006, 03:41:24 por Mario »
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee


 

anything