medir RPM de un motor AC

Vaya fallo, no me habia dado cuenta, esque siempre trabajo con 9600,ahora si que va pero me salen datos muy aleatorios a altas revoluciones, en cuanto le doy a apagar y empieza a bajar la frecuencia, de 1800 a 400 baja perfecta la frecuencia.

Jaciento54, he encontrado este esquema para medir los pasos por 0 tb.
Imgur

Yo ahora lo estoy probando como te dije 1 resistencia de un mega en el pin 2 y otra a tierra, el tacometro me da 14,85v ac igual es mucha resistencia y por eso me falla no se.

Si, es un circuito detector de cero, que no de paso por cero, porque al estar rectificada la corriente no cambia de polaridadd, solo es pulsante.

Por otra parte no me convence esa forma de leer la frecuencia, (aunque teoricamente sea mas exacta, quizas pienso asi por falta de experiencia en estos circuitos), te razono:
El eje del motor puede aproximarse a las 14000RPM en centrifugacion que corresponerian a 233 interrupciones del procesador para enterarse de como daba vueltas, por otra parte, si ese generador tacometrico tiene 6 u 8 polos, ya estariamos hablando de 700 ó 933 impulsos a medir por segundo, lo cual me parece algo elevado.

Una vez conectado el tacometro al Arduino, la tension de entrada, (entre resistencias y pin de entrada), deberia de estar entre el margen 0-4V, o al menos es lo que me gustaria a mi, de todas formas si le llegan mas de 5V igual se cabrea el Arduino.

Medir 1 kHz no es muy elevado.

La conexión no entiendo muy bien lo que dices.... Despues de la resistencia, debería estar entre 0 a 5V.

Es decir cable del tacometro --------> resistencia de 1 M Ohm -------> Pin 2 Arduino
Y las masas unidas.

Cuando dices que falla.... a que te refieres?

Antes de unir masas asegurate de que esta rectificada la que viene de la taco

Jacinto54, los diodos de clamping del micro harán su trabajo. Por favor, lee mis post anteriores.... (entre ellos la nota técnica de Atmel).

Otro código básico de tacómetro (lo he copiado de otro sitio que hay más código, espero no haberme dejado nada, pero asi coges la idea):

volatile unsigned long cont_rpm;

void setup()                    
{
  pinMode(2,INPUT);  
  attachInterrupt(0, rpm, RISING);
  Serial.begin(9600);
}

void rpm()
{
  cont_rpm++;

}

void loop()                    
{
  static unsigned long rpm_ant;
  static unsigned long t_anterior;
  static float rpm_actuales;
  
  rpm_ant=cont_rpm;
  t_anterior=millis();
  
  delay(100);    
  
  rpm_actuales=(cont_rpm-rpm_ant)/((millis()-t_anterior)/60000);
  Serial.print("rpm=");
  Serial.println(rpm_actuales);


  
}

La velocidad serie, pon la que quieras... Aquí es 9600.
Lo que hace es calcular la diferencia de pulsos que hay entre un tiempo fijo (el delay). Ya que aunque el programa se quede parado, sigue entrando a la rutina de interrupción.
Falta ajustarle el número de pulsos por vuelta (polos).

Me fallaba la resistencia que habia puesto entre masa de unos de los cables del tacometro y la masa de arduino , que era como pone en el esquema de atmel, pero sin ella ya me da datos legibles, eso si me da por ejemplo 1800 y me da que 1800Hz es imposible, como hablas de los polos eso habria que dividirlo entre el numero de polos que no los se exactamente, he desmontado el taco y parece que hay 5 laminas entre 0º y 180º del circulo y otras 2 mas anchas y no tan alargadas entre los 270º y 360º, asique podrian ser7 polos, ya voy a sacar una foto para que veais.
de esa forma haciendo calculos serian.
1800/7=257.14Hz w=2piF 2pi257.14=1615.68rad/s 1615.68*30/pi=15424rpm que me parecen demasiadas no estando el motor a tope.

Igor no he probado todavía el código que has puesto, mañana hago pruebas con el a ver, pero vamos avanzando, jeje, desde luego que cuando me hice con este motor no tenia pensado poder llegar a manejarlo asi y si luego lo controlamos con el triac seria excelente.

Los polos siempre son pares, nunca seran 7.

Esta tarde empezare yo a pelearme con la taco, el circuito de control de motor aparentemente esta listo, me falta la parte 'soft'.

Yo intentaria minimizar los calculos de las revoluciones en la interrupción, me limitaria a trabajar con el valor leido, no calcularia las revoluciones, en realidad el valor leido es relación directa con las RPM, pues trabajemos con ese valor y nos ahorramos el calculo!

Pongo un video sacado con el movil del tacómetro, - YouTube

Los calculos los estoy haciendo fuera pero es que me da entre 1400Hz y 2400hz variando el potenciometro del circuito de la aspiradora.

Tiene pinta de dos polos, pero como no soy del oficio no te lo puedo confirmar.

Pon el motor a unas 30RPM, que es lo razonables para lavado, y mira los pulsos que te da, con una relacion que parece habitual, de 15 a 1, deberias de tener unos 900 impulsos.

Y 30RPM son faciles de centrar aproximadamente a ojo.

El problema esque el circuito q tengo yo no puedo arracar el motor desde 0 e ir subiendo solo puedo variar la velocidad en regimenes altos, en tu esquema cuales son el valor de los condensadores? ?
Por otro lado si ahora segun el programa de igor de la frecuencia primero me da 1800, eso serian hz, pero si el tacometro tiene 2 o 4 polos habria q dividirlo entre los polos? ? no se si estara bien interpretado.
Saludos

El circuito que te puse hace unos dias te permite gestionar el motor desde cero, el valor de los condensadores está allí y es valido, es el circuito habitual para control de cargas, solo le falta la red snuber para cargas inductivas, ya te lo pondre esta mañana, pero en principio te deberia de funcionar medianamente y con total suavidad a velocidades bajas-medias.

En una lavadora, el problema son las velocidades bajas, donde al despeñarse la ropa ocasiona que la resistencia al giro sea fluctuante e intermitente y ahí es muy relevante el control electronico y las rampas de aceleración y corte que tengas programadas.

En cuanto a la frecuencia, depende de a que revoluciones gira e tambor, eso seria un indicador de cual es el divisor adecuado.

Por cierto, olvidate del circuito de control, que estas (estabamos) usando, el control tiene que ser leyendo el punto de paso por cero de la senoide de alterna y desde ahí, con un retardo pasar el TRIAC a conductor, porque lo tiene que controlar el arduino, salvo que le pongas un accionador servo asociado al potenciometro del circuito de control.

En tal caso desaparecen el potenciometro, los condensadores y el diac.

ya ya, ya se pero lo queria tener guardado ya q puede ser muy util para otras cosas, te preguntaba por los condensadores porque cuando pone 47K y 100k eso no se a que equivale si microfaradios o nanos, me imagino que a micro pero no estoy seguro.
Hace unos dias me he pillao en dealextreme un medidor de rpm a ver si me llega y puedo comparar porque ahora estoy con las mediciones que tomo del tacometro y no saco nada en claro, ademas siempre he querido tener uno, jaja.

Hombre, esto si que podria interesar, puedes poner el enlace???

Es este, 15€ aproximadamente me ha salido, de paso pille un modulo de bluethooth para probar con el arduino y android del movil.
http://www.dealextreme.com/p/digital-laser-tachometer-with-pouch-2-5-99999-9rpm-range-0-1rpm-resolution-18239

He estado mirando lo del tacogenerador y como dicen el voltaje generado es proporcional a la velocidad, asique me vendrá muy bien ese medidor para calibrarlo.

El tuyo me da la sensación de que puede ser de impulsos, seria caso de que midieras voltajes a diferentes revoluciones.

Bien . . . .

Como siempre las cosas son mas faciles de lo que parecen. . . (una vez estan hechas)

Ya estoy leyendo a la perfección las revoluciones del motor, en un par de dias espero haber enlazado esta información con el controlador de potencia y conseguir el objetivo que era mantener revoluciones estables independientemente de la resistencia al giro.

Aqui estan el circuito y el codigo, valido para motores con bobina tacometrica de voltaje proporcional a las revoluciones y con relación 3.5V por 1000 RPM.

/*
 Prototip de lectura de taco y visualitzacio del valor per pantalla LCD
 Configuracio de pins de pantalla per a un Mega

 Basat en: 
 http://vlxs.wordpress.com/2009/12/18/arduino-lcd-battery-tester/

*/
// Pantalla
#include <LiquidCrystal.h>
int LCD_READ_WRITE = 22;
int LCD_RELOJ      = 24;
int LCD_BIT_4      = 26;
int LCD_BIT_5      = 28;
int LCD_BIT_6      = 30;
int LCD_BIT_7      = 32;
LiquidCrystal LCD(LCD_READ_WRITE, LCD_RELOJ, LCD_BIT_4, LCD_BIT_5, LCD_BIT_6, LCD_BIT_7);

void setup() {                                      
 LCD.begin(20, 4);
 LCD.clear(); 
 LCD.begin(0, 0);
 LCD.print("d:/Arduino/Trabajo/Proyectos/Rentadora/Voltaje/");
 delay (4000);
 } // void setup() ========================================================================

void loop() {    
   double nVolt; 
   int    nRPM; 
    nVolt = analogRead(0) *5.00 /1023;
    nRPM  = int(nVolt /3.5 *1000);
   
    LCD.clear();
    LCD.setCursor(0, 0);        
    LCD.print(nVolt   );           
    LCD.print("V < > ");
    LCD.print(nRPM    );
    LCD.print("rpm"   );
    delay(400);
} // void loop() ===============================================================

Con el primer ejemplo de Igor parece que saco mas o menos las revoluciones seria algo asi.
1800/8=225Hz w=2piF 2pi257.14=1413.72rad/s 1413.72*30/pi=13500rpm
El problema esque estando parado por ejemplo me da valores aleatorios entre 300 y 60000, en vez de estar a 0, eso tb te pasaba a ti Igor?? como se podria evitar???
un saludo.

Buen dia, tengo un generador eólico al cual quiero medir la relación entre RPM y voltaje, alguien me podría decir si cuenta con un programa que sea capaz de medir esto y lo arroje a un display?

Saludos!