TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Kamus23 en 03 de Marzo de 2005, 13:13:00

Título: onda senoidal con PIC
Publicado por: Kamus23 en 03 de Marzo de 2005, 13:13:00
Alguien sabe como generar una onda senoidal con PIC en lenguaje c necesito generar ondas de 25 Hz y 425Hz respectivamente???
Título: RE: onda senoidal con PIC
Publicado por: roc364 en 03 de Marzo de 2005, 19:51:00
Hola!  Al ser el pic un dispositivo digital, y la onda sinusoidal una senial analogica, la forma es utilizando un DAC. Este dispositivo puede ser tan simple como un manojo de resistencias, todo depende la resolucion que se desea.

Luego simplemente escribiendo valores en el puerto donde esta el DAC, se generan los distintos niveles de tension, y variando el tiempo entre las escrituras se varia la frecuencia.
saludos!!

PD: el codigo en C, deberias comenzarlo vos, luego postearlo y ya apareceran opiniones para mejorarlo, ya que faltan bastantes datos. ( tipo de pic, tipo de DAC, frecuencia del oscilador del pic, etc etc. )
Título: RE: onda senoidal con PIC
Publicado por: akydes_ en 04 de Marzo de 2005, 15:25:00
hola amigos!.

Si utilizas C, en CCS hay una librería, llamada math.h, que te proporciona entre otras funciones, la función seno y coseno.

haz una llamada a ella #include <math.h>... ¡¡y listo!! Sonrisa

por otro lado, haz como te dice roc364: utiliza un conversor digital-analógico para generar dicha salida.

un saludo, y buena suerte.
Título: RE: onda senoidal con PIC
Publicado por: telekitor en 06 de Marzo de 2005, 13:35:00
Puedes generar una onda cuadrada (0-5v)
en un pin del microcontrolador y esta señal
filtrarla paso bajo para que solo pase el primer
armonico, las señal del primer armonico es una sinusoide
de frecuencia igual a la onda cuadradad que has generado

el primer armonico es de frecuencia igual a la frecuencia
de la onda cuadrada que generes, el segundo el doble,
el tercero el triple ..etc   o sea que filtra paso bajo que pase la 1 pero no
 la 2 y superiores Giño este FOURIER como era Giño


SonrisaSonrisaSonrisaSonrisaSonrisaSonrisa
Título: RE: onda senoidal con PIC
Publicado por: akydes_ en 07 de Marzo de 2005, 00:44:00
curiosa e interesante propuesta, telekeitor Sonrisa

De todas formas, aquí va un enlace que te puede interesar:
GENERADOR DE ONDA SENOIDAL DE FRECUENCIA AJUSTABLE

O mediante algunos circuitos integrados, puedes montarlo como sigue:

GENERADOR DE ONDA SENOIDAL DIGITALMENTE CONTROLADO

Bueno, hay mil y una formas de hacerlo Muchas risas

Un saludo y buena suerte.
Título: RE: onda senoidal con PIC
Publicado por: Kamus23 en 07 de Marzo de 2005, 07:38:00
ok gracias por sus opiniones auque todas estan muy buenas las voy a probar y luego les cuento... aunque me llamo la atencion la de generar la onda cuadrada y luego filtrarla... una pregunta ese filtro pasabajas para que pase el primer armonico... es un filtro normal o acaso es otra clase de filtro...???
Título: RE: onda senoidal con PIC
Publicado por: telekitor en 07 de Marzo de 2005, 10:48:00
Es un filtro paso bajo normal,  hay multiples implementaciones por ahi
filtros paso bajo(dejan psar las frecuencias bajas)
los hay pasivos (RC) y activos (RC+amplificadores) y dependiendo del orden
atenuan mas rapido o menos.

onda 25 hz filtro que deje pasar los 25 hz (1er armonico)
pero que ya no deje pasar el de 50Hz (2*25  2 armonico)

onda de 425 Hz deja pasar los 425 HZ(1er armonico)
pero ya no deje psasr los 850 Hz (2*425 2 armonico)

al menos si deja pasar el 2 armonico que lo atenue mucho

PayasoPayasoPayasoPayaso
Título: RE: onda senoidal con PIC
Publicado por: ppalou en 10 de Marzo de 2005, 01:49:00
Escrito originalmente por akydes_
hola amigos!.

Si utilizas C, en CCS hay una librería, llamada math.h, que te proporciona entre otras funciones, la función seno y coseno.

haz una llamada a ella #include <math.h>... ¡¡y listo!! Sonrisa

por otro lado, haz como te dice roc364: utiliza un conversor digital-analógico para generar dicha salida.

un saludo, y buena suerte.


Podrias poner algún ejemplo de como se usa dicha función con esta libreria??

Gracias!
Título: RE: onda senoidal con PIC
Publicado por: akydes_ en 10 de Marzo de 2005, 03:05:00
Escrito originalmente por ppalou
Escrito originalmente por akydes_
hola amigos!.

Si utilizas C, en CCS hay una librería, llamada math.h, que te proporciona entre otras funciones, la función seno y coseno.

haz una llamada a ella #include <math.h>... ¡¡y listo!! Sonrisa

por otro lado, haz como te dice roc364: utiliza un conversor digital-analógico para generar dicha salida.

un saludo, y buena suerte.


Podrias poner algún ejemplo de como se usa dicha función con esta libreria??

Gracias!


Hola, incluye la librería math.h en tu proyecto:

Codigo:
#include <math.h>


y en este fichero de cabecera vienen las funciones:
Codigo:

////////////////////////////////////////////////////////////////////////////
//   float cos(float x)
////////////////////////////////////////////////////////////////////////////
// Description : returns the cosine value of the angle x, which is in radian
// Date : 9/20/2001
//
float cos(float x)
{
   float y, t, t2 = 1.0;
   int quad, i;
   float frac;
   float p[4] = {
      -0.499999993585,
       0.041666636258,
      -0.0013888361399,
       0.00002476016134
   };

   if (x < 0) x = -x;                  // absolute value of input

   quad = (int)(x / PI_DIV_BY_TWO);    // quadrant
   frac = (x / PI_DIV_BY_TWO) - quad;  // fractional part of input
   quad = quad % 4;                    // quadrant (0 to 3)

   if (quad == 0 || quad == 2)
      t = frac * PI_DIV_BY_TWO;
   else if (quad == 1)
      t = (1-frac) * PI_DIV_BY_TWO;
   else // should be 3
      t = (frac-1) * PI_DIV_BY_TWO;

   y = 0.999999999781;
   t = t * t;
   for (i = 0; i <= 3; i++)
   {
      t2 = t2 * t;
      y = y + p * t2;
   }

   if (quad == 2 || quad == 1)
      y = -y;  // correct sign

   return (y);
}

////////////////////////////////////////////////////////////////////////////
//   float sin(float x)
////////////////////////////////////////////////////////////////////////////
// Description : returns the sine value of the angle x, which is in radian
// Date : 9/20/2001
//
float sin(float x)
{
   return cos(x - PI_DIV_BY_TWO);
}


con lo cual, la llamada a dichas funciones sería tan simple como:

Codigo:

float angulo;
float SenAngulo;
angulo = <loquesea>;

SenAngulo = sin (angulo);



Éso es todo.
Un saludo y buena suerte.
Título: RE: onda senoidal con PIC
Publicado por: ppalou en 11 de Marzo de 2005, 02:02:00
Gracias!
Título: RE: onda senoidal con PIC
Publicado por: Kamus23 en 15 de Marzo de 2005, 08:00:00
ok ya estoy  probando con los filtros y funciona muy BIEN... ademas me podrian decir si yo uso la libreria math.c de picc compiler... la onda senoidal sale por un pin... cualquiera y no me hara falta la conversion digital/analoga???
Título: RE: onda senoidal con PIC
Publicado por: Nocturno en 15 de Marzo de 2005, 09:29:00
No, eso no es así.
La función seno de la librería math.c te permitirá calcular el valor del seno, y te devolverá una variable con ese valor, pero no hará nada más.
Luego tu programa hará lo que tú quieras; si quieres que salga por algún sitio, tendrás que programarlo y te hará falta un conversor digital-analógico, puesto que el pic no tiene salidas analógicas.
Título: RE: onda senoidal con PIC
Publicado por: telekitor en 15 de Marzo de 2005, 20:50:00
el metodo de los filtros no necesitas ningun conversor analogico digital
la onda cuadrada a la salida del pic ya es analogica.
con los filtros solo te quedas con una parte de esa onda cuadrada
que es la que te interesa (la senoide)
tomando el la salida del filtro (analogica) ya tienes la señal que quieres

por su puesto que no te hace falta usar la libreria .math

PayasoPayasoPayasoSonrisa Gigante
Título: RE: onda senoidal con PIC
Publicado por: Kamus23 en 18 de Marzo de 2005, 09:41:00
la onda senidal utilizando los filtros pasa bajos ya funciona, pero ahora tengo un problema ya que la señal tiene componente DC, la estoy pasando por un condensador de acoplo de 1u en serie a una resistencia de 10K a gnd...
para poder verla en el osciloscopio pero cuando intento amplificarla con un operacional la señal se vuelve cuadrada noce que pasa...???
Título: RE: onda senoidal con PIC
Publicado por: damago en 18 de Marzo de 2005, 11:20:00
Hola debes estar utilizando el operacional como comparador. Cuando la senoide es positiva, te saca +Vdd y cuando es negativa -Vdd (en caso de tenerlo alimentado con las 2 tensiones simetricas).

Debes utilizar realimentacion para controlar la ganancia. Un ejemplo es el tipico caso de operacional en modo no inversor:



dibujado con el super paint jeje creo k es asi. Busca en google operacional inversor. Habra miles de cosas.


Un saludo.
Título: RE: onda senoidal con PIC
Publicado por: pocher en 19 de Marzo de 2005, 00:51:00
Una pregunta Kamus. Supongo que estarás usando filtro activo Butterworth de 2 polos (es el más usado) y que los valores del filtro los habrás diseñado para una frecuencia de corte de 425 Hz. Para f=425Hz la conversión de cuadrada a senoidal irá bien, pero para f=25Hz me parece que la conversión a senoidal no va a ser muy buena (saldrá casi cuadrada).

Un saludo
Título: RE: onda senoidal con PIC
Publicado por: Nocturno en 19 de Marzo de 2005, 01:08:00
Bienvenido de nuevo , gran Pocher. Es un verdadero lujo poder contar contigo otra vez.

Supongo que para convertir la onda mediante un filtro habrá que determinar primero la frecuencia de trabajo y esa tendrá que ser inamovible, ¿no?
Título: RE: onda senoidal con PIC
Publicado por: pocher en 19 de Marzo de 2005, 01:23:00
Efectivamente los valores de las R y C que aparecen en el filtro se calculan para una determinada frecuencia de corte.

Si se usa un filtro pasa bajos y la onda de entrada es senoidal,  para frecuencias por debajo de la de corte la onda senoidal se vé amplificada un poco, para f cercanas a la de corte las dos ondas son prácticamente iguales y para f superiores a la de corte la onda senoidal va reduciendo su amplitud hasta hacerse completamente plana (filtro pasa bajos)

Sin embargo si la onda de entrada es cuadrada y fijamos la fc=425Hz, creo que habran problemas para convertir a senoidales las bajas frecuencias.  

Un saludo Nocturno y féliz día del padre.
Título: RE: onda senoidal con PIC
Publicado por: telekitor en 24 de Marzo de 2005, 12:47:00
Si tienes la onda senoidal y al amplificarla con un amplificador operacional te sale cuadrada es que estas utilizando el amplificador en saturacion(seguramente la amplitud de la onda cuadrada sea la misma que la de  las alimentaciones positiva y negativa). Utiliza un configuracion de amplificador inversor, la ganancia se controla con las resistencias. hay miles de ejemplos por ahi.

Si quieres eliminar la componente DC de la señal senoidal simplemte filtra paso alto por ejemplo a la entrada del amplificador. ojo calcula el valor del filtro para que no se carge la señal, la frecuencia de paso debe estar antes de la frecuencia de la señal a amplificar.


HeladoHeladoHelado
Título: RE: onda senoidal con PIC
Publicado por: telekitor en 29 de Abril de 2005, 05:25:00
Si tienes que elvar el nivel de señal, evidentemente tendras que amplificar
Puffffff 80voltios de pico!!!!!, tendras que amplificar, pero mucho, ademas
necesitaras unas alimentaciones de +- 80 voltios al menos para que no se sature
la señal y un amplificador que soporte esas tensiones.

LlorandoLlorandoLlorandoLlorandoLlorandoLlorandoLlorando
Título: RE: onda senoidal con PIC
Publicado por: Cristianxx en 29 de Abril de 2005, 20:17:00
Otra manera que se me ocurre de hacer una onda senoidal es con un pic con pwm + un convertidor de frecuencia a voltaje (microchip tb tiene para samplear)

asi haces una función que cambie la frecuencia del pic en un loop infinito basado en la respuesta que obtenga de la función seno de math.h

También está la opción de que uses un micro que tenga DAC integrado como los PsOC de Cypress (ya quiero probarlos) Rebotado