Ideas para hallar la frecuencia de una onda

Buen día a todos,
estoy realizando un proyecto para la universidad que consiste en el control de un motor de alterna mediante un PI con un microcontrolador de Infineon.
Tengo que adquirir con los puertos Analógico-digital dos señales, la primera una onda de referencia, y la segunda es la señal que genera el motor.
Mi problema es que tengo que hallar la frecuencia de estas ondas para aplicarles el PI, las ondas están desplazadas en el eje "X". Estas ondas las tengo discretizadas y guardadas en la memoria del microprocesador.
Agradecería cualquier idea para solucionar esto, ya que posiblemente es un problema muy simple de programación, pero hay veces en los que las cosas simples son las que más problemas te dan (he pensado ir hallando la pendiente punto por punto, hasta el momento en el que cambie, cuando esta sea positiva ser un "1" lógico, y cuando sea negativa un "0" lógico, pero el problema es que en ocasiones la pendiente es 0). Agradezco por adelantado todas las ideas.
Un saludo
 
Que tipo de señales son? Si son señales "tranquilas", como ondas sinusoidales, sin cambios bruscos de pendiente, basta con tomar un punto de referencia a la mitad entre el máximo y el mínimo de la onda. Cuando la onda cruza esta línea de referencia tres veces, completó un período. Aunque no tengas puntos de medición exactos sobre el cruce de la línea, los podés encontrar por interpolación de mediciones vecinas.
 
En principio las señales no tienen ningún tipo de distorsión, son sinusoidales, lo único que cambia en ellas es la frecuencia, ya que la amplitud para este tipo de motores no tiene sentido cambiarla. Te agradezco la respuesta, pero ya intenté programarlo de esa forma, el problema es que las ondas pueden ser mucho más lentas que el microcontrolador y al digitalizar la senal hay varios datos con el mismo valor numérico, por lo que aparece una frecuencia muchísimo menor que la real. Aun así, muchas gracias por la respuesta.
 
Todavía no entiendo del problema. Por más que haya muchas muestras con el mismo valor, lo que tenés que encontrar es el cruce del punto medio de la onda, como dijo tiger, el cruce por "cero" (o cualquier valor que sea la mitad de la diferencia entre el máximo y el mínimo). Aunque haya muchas muestras con el mismo valor, tenés que buscar dos valores, uno, el último valor del grupo que es menor a la referencia. Otro, el primer valor del grupo mayor a la referencia. El cruce por cero cuando la sinusoide sube, está entre esos dos. Después tenés que hacer al revés para cuando la sinusoide baja.
 
Muchísimas gracias por las contestaciones, y a la vez, perdonad por contestar tan tarde. El problema ya lo he solucionado, el caso es que el procesador A/D es muy bueno, pero no muy exacto, así que lo que he hecho es introducirle un temporizador, es como hallar el cruce por cero de la mitad de la onda, y multiplicarlo por dos, pero en vez de hacerlo con un contador, lo he hecho con un temporizador interno del microprocesador.
Gracias de nuevo
 
Atrás
Arriba