TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ADY12 en 09 de Junio de 2015, 05:09:03
-
Hola, estoy realizando un dispositivo para que cuente las revoluciones por minuto del motor. Para que realice esta función había pensado la siguiente manera:
- Con el modulo CCP1 en modo Captura del PIC18F4550, generar una señal TTL con el generador de funciones, posteriormente generar un interrupción, acumular tiempo y finalmente procesar RPM. Cuando se varié la frecuencia aumente las revoluciones.
Me gustaría saber que pensáis, si voy bien encaminado.
-
Otra manera que había pensado, es en realizar un frecuenciometro (la señal de onda cuadrada me la diera el generador de funciones), y a traves de la relacion W=2*pi*f, me diera las revoluciones.
-
Hola ADY12, no termino de entender ninguna de las dos opciones que presentas, podrías explicarlas de manera un poco más clara.
Un saludo.
Atte. CARLOS.
-
Yo tampoco entiendo nada xD.
Yo no se si utilizaria el modulo CCP, yo tal ves utilize 2 timers, 1 que por ejemplo me haga una interrupcion cada 0.5s (puede ser menos o mas, la idea es tener una referencia de tiempo) y el otro que cuente los pulsos externos, esos pulsos son generados por un sensor que indican cuando se da toda la vuelta completa del eje del motor.
Hay que tener en cuenta el limite que puede contar para saber si usar un timer de 8 o 16bits,
Por ejemplo medis 3600 RPM, en 1 segundo son 60 pulsos y en medio segundo son 30, entonces si acumulo hasta 1 segundo luego tengo que multiplicar por 60, asumo que pasan 2 interrupciones del timer (0.5s) y recien ahi tomo la cuenta
Ventajas y desventajas:
Ventaja: Se actualiza cada 1 segundo
Desventaja: 1 solo pulso puede significar un error de hasta +-60RPM
Si aumento el tiempo a 4 interupciones del timer son 2 segundos, ahora mi velocidad de actualizacion es de 2 segundos pero mi error es mas chico ante una perdida de 1 pulso, +-30RPM
Creo que es lo mas simple.
Luego se me ocurre poner un calor fijo en un timer, compararlo con el modulo CCP, y tener otro timer para mantener el tiempo, entonces por ejemplo si pongo 60 RPM en el timer a comparar espero que entren 60 pulsos, y luego observo cuanto tiempo paso.
Pero esto ademas de complicar luego los calculos a realizar en el micro se le suma que estoy usando un modulo mas que es el CCP
-
Faltan parámetro para indicar el tipo de medición.
El otro método es medir el tiempo entre pulsos y calcular las RPM, este método tiene más exactitud y más velocidad de refresco del display.
Un saludo.
Atte. CARLOS.
-
El otro método es medir el tiempo entre pulsos y calcular las RPM, este método tiene más exactitud y más velocidad de refresco del display.
Asi es como dice Chaly... Aca si usarias el TMR y el CCP
me puse a hacer los numeros solo por que me gusta.
Mientras con mi metodo el valor es
Maximo Error en RPM = +- T/60
, donde T es el periodo de muestreo, es decir si tomo valores por 0.5s eso es T, ya que es el error maximo,
Es decir sea cual sea las RPM puedo errarle por 1 en ese tiempo ( ya que estamos midiendo pulsos) y al multiplicarlo por el otro numero asi llegar a los minutos se ve aumentado demasiado.
Siendo mas estricto si es dependiente de las RPM tambien este metodo, pero como me interesaba buscar el error maximo, entonces no lo tome en cuenta.
Mientras midiendo tiempo entre pulsos el error maximo puede ser de 1 ciclo de reloj(suponiendo que al producirse la comparacion con el timer se guarda inmediatamente) ya que ahora medimos tiempos. Tengo que es dependiente de los RPM y de la velocidad del oscilador ( Tclk = 4/Fosc )
Maximo Error en RPM = +- (Tclk * RPM2) / (1 + Tclk * RPM )
(Sin contar el error de la representacion binaria y los errores que influyan en los calculos al ser de un tamaño limitado)
Grafica del error maximo (https://www.wolframalpha.com/input/?i=plot+%28%28100*10%5E-9%29+*+x%5E2%29+%2F+%281+%2B+%28100*10%5E-9%29+*+x%29+from+x%3D0+to+15000) con Oscilador a 40Mhz y RPM de 0 a 15000
La grafica real sera como un diente de sierra, donde el error minimo es cuando 1/RPM es multiplo de Tclk. Y maximo apenas atravieza ese punto.
Y aca depende que uses, mientras mas frecuencia menor el error. y mientras mas RPM mayor el error.
Ej con 3600 RPM
8Mhz INTOSC: +- 6.46 RPM
48 Mhz HS : +- 1.07 RPM
Puse Maximo por que es exactamente eso, es MAXIMO, puede ser menos o nulo segun las RPM que sean
Sigo sin entender para que es el generador de funciones, si es para simular el motor entonces la frecuencia es igual a las RPM
Y si, faltan parametros ya que no se sabe que esta midiendo ni como, nosotros supusimos que solo media el un paso por 0 ( cuando gira completamente el eje )
-
Perdón por tardar en contestar. Primero agradeceros a chaly29 i killerjc que hayáis contestado. Haber si ahora me explico mejor lo que quiero hacer.
Quiero contar las revoluciones del motor. En lugar de usar un sensor pick up rpm, para contar las revoluciones, quiero realizar una simulación mediante un generador de funciones. Este generador de funciones, generara un onda cuadrada, simulando los pulsos que se producen. Variando la frecuencia (hasta una frecuencia máxima que serán las revoluciones máximas que puede alcanzar el vehículo), se aumentara el numero de revoluciones o se disminuirá depende la variación de la frecuencia del generador si aumenta o disminuye.
No se si ahora me habéis entendido lo que intento hacer.
Gracias.
-
Hola ADY12, eso que tu deseas hacer, de hecho, es lo que se utiliza para este tipo de trabajo, como tener un motor y encenderlo para hacer las pruebas es muy engorroso, pues se usa un generador de funciones o cualquier tipo de oscilador al cual puedas controlarle la frecuencia, normalmente se trabaja con señales cuadradas, pero también es posible hacerlo con otros tipos de formas de ondas.
Debes de recordar que los motores no todos son iguales, y dependiendo de donde "tomes" la señal para sensar las RPM deberás tener en cuenta la relación RPM pulsos, para poder usar las frecuencias adecuadas en tu generador de funciones, porque de lo contrario las lecturas serán equívocas.
Un saludo.
Atte. CARLOS.
-
Si Chaly29, eso lo tengo en cuenta que depende el motor son diferentes las señales, pero al tratarse de una motocicleta 49 cc, lo considero una onda cuadrada, para hacerlo mas fácil, quizá la precisión no es la idónea, pero al tratarse de un trabajo educativo sirve por el momento.
-
Hola ADY12, no me refiero a la exactitud de la onda, ya que esta no tiene mayor importancia, si no a la frecuencia de la misma.
Si Chaly29, eso lo tengo en cuenta que depende el motor son diferentes las señales, pero al tratarse de una motocicleta 49 cc, lo considero una onda cuadrada, para hacerlo mas fácil, quizá la precisión no es la idónea, pero al tratarse de un trabajo educativo sirve por el momento.
Si la moto es de 49cc, probablemente sea de 2T, por lo tanto, si la señal a medir la tomas de la bobina de la misma, significa que tendrás dos pulsos por cada RPM del motor, o sea:
Motor revolucionando a 6000 RPM serían, 6000 / 60seg. = 100Hz, si el sensor está montado en el cigueñal obtendrás 100 Hz, pero si la señal la tomas de la bobina tendrás 200 Hz, porque el 2T normalmente genera 2 "chispazos" por cada revolución.
Es a esto lo que me refiero.
Un saludo.
Atte. CARLOS.