Medir rpm de varios sensores con pic

hola, quisiera saber si se podría medir las rpm de varios sensores con un pic, y cual seria la mejor manera de hacerlo, conozco varias formas de medir los pulsos, pero se complica al momento de medir varios pulsos distintos.

las formas que pensé serian por ejemplo poniendo un transistor entre el sensor de rpm y el pin de la int_ext o de algún modulo ccp del pic, y la base del transistor controlado por alguna salida del pic. el proceso seria prender un transistor, medir el tiempo que hay entre 2 pulsos, luego apago ese transistor y prendo otro y así hasta que lea las rpm de todos los sensores y vuelvo a empezar.
seria viable hacerlo de esta forma? que % de precisión obtendría mas o menos?

otra forma parecida seria usando los 3 modulos cpp y activando de a 3 transistores.

y sino otra forma seria con algún pic con muchos modulos ccp, como el 18f27j53 por ejemplo que trae 7, con este pic podría medir hasta 7 sensores al mismo tiempo sin problemas verdad?

resumiendo, de que manera se puede o conviene medir las rpm de 7 u 8 sensores aproximadamente?
 
No entiendo lo de los transistores muy bien, supongo que será porque tienes mas sondas que entradas o algo. Par eso puede usar multiplexores o buffers triestado.

Depende de la frecuencia, si no es muy alta basta con "mirar" continuamete las entradas y contar cada vez que cambia de nivel, si es mas alta puedes usar interrupciones lo malo es que no suelen haber muchas disponibles. Si hay módulos de comparación captura es otra opción.

Con arduino hice hace poco para cuatro entradas, contaba la cantidad de pulsos que había en cada una durante un segundo y lo enviaba vía serie, era bastante sencillo. Las velocidades estaban en torno a los 70Hz o así que son 4200rpm. Ahora no me acuerdo, me suena que calculé que hasta 8000rpm hubiera ido bien con cuatro entradas.
 
No entiendo lo de los transistores muy bien, supongo que será porque tienes mas sondas que entradas o algo. Par eso puede usar multiplexores o buffers triestado.

Depende de la frecuencia, si no es muy alta basta con "mirar" continuamete las entradas y contar cada vez que cambia de nivel, si es mas alta puedes usar interrupciones lo malo es que no suelen haber muchas disponibles. Si hay módulos de comparación captura es otra opción.

Con arduino hice hace poco para cuatro entradas, contaba la cantidad de pulsos que había en cada una durante un segundo y lo enviaba vía serie, era bastante sencillo. Las velocidades estaban en torno a los 70Hz o así que son 4200rpm. Ahora no me acuerdo, me suena que calculé que hasta 8000rpm hubiera ido bien con cuatro entradas.

claro, lo de los transistores es para conectar todos los sensores a 1 pin, el de la int_ext por ejemplo, y después ir midiendo de 1 en 1, o sino conectar 9 sensores en 3 pines, los modulos ccp.

la frecuencia creo que no es muy alta, los motores llegan a un máximo de 1200 rpm.

modulos ccp tiene el pic, pero tiene 3 solamente, y quisiera medir las rpm de unos 8 sensores mas o menos.

tu dices que se puede hacer leyendo todo el tiempo las 8 entradas, cuando detecto que alguna de esas esta en alto aumento un contador, tendría que tener 1 contador por cada sensor, y hacer algún control para que se aumente solamente cuando en la lectura anterior, esa entrada estaba en 0, para que no se aumente 2 o mas veces el contador con el mismo pulso. y finalmente después de 500ms o 1s saco la cuenta de las rpm en base a la cantidad que llego cada contador y los vuelvo a poner en 0. entendí bien?
 
:unsure:

1200RPM=20Hz

casi estoy seguro que si utilizas los puertos normales (sin CCP) alcanzas a medir las revoluciones de los 8 motores al mismo tiempo. y no necesitas modulos.

obviamente necesitas explicar con mas detalle o tomar en cuenta que mas va a hacer el micro a parte de medir revoluciones.
 
:unsure:

1200RPM=20Hz

casi estoy seguro que si utilizas los puertos normales (sin CCP) alcanzas a medir las revoluciones de los 8 motores al mismo tiempo. y no necesitas módulos.

obviamente necesitas explicar con mas detalle o tomar en cuenta que mas va a hacer el micro a parte de medir revoluciones.

ademas de eso, pensaba hacer mínimo 4, pero quizás hasta 7 u 8 pwm usando la interrupción del timer y una comunicación usb o serial.
 
Para que quieres 8 pwm
Explica el proyecto completo o nos la pasamos adivinando

son para regular la velocidad de los mismos motores que quería medir las rpm, pero no importa si tengo que conectar 2 motores por cada pwm, por eso calculo que con 4 ya alcanza, pero si se puede hago 8. de ultima puedo poner un pic para hacer los pwm y otro para hacer el resto de las cosas. son cosas que voy a ir viendo a medida que avance en el proyecto.
el drama que tenia era para medir las rpm, voy a probar con la forma de leer los puertos y veo si funciona todo.

los datos con las velocidades van a llegar desde una pc con puerto serial o usb, y el pic envía a la pc los valores de las rpm para checkear que todo funciona bien
 
Última edición:
Pues a mi lo que se me ocurre es que dividas, yo pondria un 12f675 por cada motor y lo haria esclavo i2c y un 18f2550 como master i2c y con la comunicacion usb.



Oopps el 12f675 no tiene ccp pero debe haber alguno pequeño que si tenga XD
 
Última edición:
Pues a mi lo que se me ocurre es que dividas, yo pondria un 12f675 por cada motor y lo haria esclavo i2c y un 18f2550 como master i2c y con la comunicacion usb.



Oopps el 12f675 no tiene ccp pero debe haber alguno pequeño que si tenga XD

igual me parece mucho poner 9 pic, mas que hacer los pwm, medir las rpm y recibir y enviar datos por el puerto serie o usb no va a hacer el circuito, en todo caso si hace falta pongo un pic extra para hacer los pwm o para leer los sensores y otra que haga el resto, primero voy a intentar hacer todo junto, a lo mejor funciona, los pwm tampoco necesitan una resolución muy grande. cualquier cosa comento como me fue
 
Pues solo tu sabes pero por lo que entiendo quieres una especie de feedback, o sea que lea las rpm y en base a eso ajustar el pwm si en ese inter va a estar enviando informacion y aunado a que son 8, para cuando regrese para ajustar el motor ya va ha estar muy fuera.
Normalmente el feedback tiene que ser inmediato. Considera eso.
 
un paso a la vez mi amigo, primero prueba con un motor y un sensor, fijate cuanto tarda el sensor en mandar la señal (usa un osciloscopio) y despues haces el calculo para elegir el PIC que más te convenga.
 
Hola scooter, maestro papirrin, ruben y cesar.
Con un simple pic no se pueden hacer 8 lecturas simultaneas a la vez.
Recién se puede llegar hacer con un dspic y sería algo así como trabajar con la interrupción por cambio de estado en algún puerto de B (dije similar)
 
Última edición por un moderador:
Yo pienso que hacer todo si esta dificil
Pero solo lecturas si se puede si se pone un un cristal de 20MHz 5MIPS , segun las cuentas el puerto cambiaria cada 25mS y cada instruccion del pic tomaria 200nS. Para que fuera posible no tendria que pasar de 125000 instruciones
 
Tal cual, pero eso si usas una interrupción, mirando el cambio de estado de un puerto determinado,
lo cual (si no me equivoco, con un 16f o 18f de la gama baja no se podría)
Ahora, en el.supuesto caso que lo quiera hacer por software, el problema radica en si se pisan justo dos o más pulsos a la vez.
Uno o más se pierden porque tenemos un tiempo de instrucción para leer, otro para guardar y otro de salto. Quizás se podría usar el tri-estado que mencionaron y usar ahí si el cambio de estado de portb4-7 en un pic y después ver la manera de traducirlo para interpretar que sensor es.
Lindo tema, tiene su complejidad.
 
Última edición por un moderador:
bueno, algo que debería haber aclarado antes, los motores que quiero cambiar de velocidad y leer sus rpm son ventiladores de pc, el feedback no es que tiene que ser instantáneo, de hecho ni se me había ocurrido, pero quizás sea bueno hacer algo así.

la lectura de las rpm seria para visualizar a ojo solamente si algo anda mal, por ejemplo si pongo un pwm en 20% y anda a 1200 rpm, o pongo el pwm en 100% y anda en 100 rpm, o pongo algún valor y el ventilador no arranca.

no importa si solo puedo hacer una lectura cada 500ms, 1 segundo o de ultima el tiempo que sea.

entonces, la mejor opción sigue siendo leer un puerto común todo el tiempo? o leo 3 ventiladores por vez con el modulo ccp? o los leo 1 por 1 con la int_ext?

el pic seria algún 18f a 48 mhz, por ahora tengo el 18f26j50, si no se puede hacer con este a lo mejor compro el 18f27j53 que trae 7 módulos ccp, o pongo 2 pic mas chicos.

muchas gracias por la ayuda
 
Yo tambien haria lo mismo que torres, si le entendi bien , los contadores de rpm por software y los pwm por hardware con el modulo ccp. Como son brushless sensored los motores ya tienen su feedback y solo hay que ajustar su velocidad en periodos predefinidos no simultaneos y no creo que sean criticos.
 
Pero no me alcanzan los modulos ccp para hacer los pwm por hardwarw, como tampoco me alcanzan para contar los pulsos. Ya estoy haciendo un programa que cuente los rpm leyendo un puerto constantemente y luego voy a ver si le agrego los pwm usando el timer o hago los pwm con otro pic
 
uego voy a ver si le agrego los pwm usando el timer o hago los pwm con otro pic
:unsure: el PWM tiene que ser por hardware, porque si lo haces por software no va a ser constante.

osea por hardware el PWM es en paralelo e independiente de lo que este ejectuando el PIC.

si es por software, ejecutaria una funcion , despues haria el PWM, y volveria a ejecutar otras funciones desatendiendo el PWM , y ahi variaria la velocidad del motor.
 
Usa el pwm por hardware y 8 salidas mas para multiplexar e control de velocidad de los motores... Si uno no tiene que encender,se saltea esa salida... La lectura similar... Tomas 8 puertos y lees la cantidad de pulsos que entran en un determinado tiempo y lo multipkicas por 60seg (rpm)...
Volviendo al tema de la salida pwm multiplexada, dependiendo la frecuencia, puedes implementar hasta una compuerta and... Yo no lo haria asi, pero es solo una idea...podes multiplexar el pwm.tambien.con un solo puerto, o bien, ver si consigues este driver que es justamente para multiplexar pwm (http://www.ti.com/product/tlc5940 )
 
Atrás
Arriba