Generador de funciones con PIC

En construcción....

Utilizando un PIC y un DAC (conversor digital a analógico) se puede generar una señal arbitraria de amplitud, frecuencia y fase deseadas. Básicamente se escribe un programa en el PIC que posee la forma de onda descompuesta en los valores que va tomando la señal a lo largo del ciclo. Como la señal es periódica, se puede generar mediante la lectura de una tabla con valores precalculados y guardados en la memoria del PIC.

Un temporizador dentro del PIC controla cada cuanto tiempo se lee la tabla y se cambia la tensión a la salida del DAC.

En mi caso, utilicé un PIC 18F4550, con un DAC externo tipo R2R, construido con resistencia. La imagen muestra una señal sinusoidal, generada con una tabla que posee precisión de 8 bits en amplitud y 256 puntos o muestras (es decir que en un ciclo, se actualiza 256 veces la amplitud de la señal).

La señal tiene una frecuancia de 658 Hz y la frecuencia puede ser variada a gusto modificando el temporizador interno del PIC. La amplitud puede variarse simplemente multiplicando los valores de la tabla por un factor constante, teniendo en cuenta que el DAC posee una tensión máxima de salida de 5 volt. La fase puede cambiarse si se empieza a leer la tabla de valores desde un punto distinto al inicial.

Generador de valores para tabla de función Seno:

http://www.daycounter.com/Calculators/Sine-Generator-Calculator.phtml

Ejemplo de una tabla de valores de una función seno. Hay 256 valores en total, y cada valor oscila entre 0 y 256, con un valor medio de 128. Como el DAC implementado no puede generar valores negativos de tensión, el cero de la onda senoidal se toma en el medio de la escala de 256 valores, o sea, en 128. Luego, la señal se acopla en alterna.

128,131,134,137,141,144,147,150,

153,156,159,162,165,168,171,174,

177,180,183,186,188,191,194,196,

199,202,204,207,209,212,214,216,

219,221,223,225,227,229,231,233,

234,236,238,239,241,242,244,245,

246,247,249,250,250,251,252,253,

254,254,255,255,255,256,256,256,

256,256,256,256,255,255,255,254,

254,253,252,251,250,250,249,247,

246,245,244,242,241,239,238,236,

234,233,231,229,227,225,223,221,

219,216,214,212,209,207,204,202,

199,196,194,191,188,186,183,180,

177,174,171,168,165,162,159,156,

153,150,147,144,141,137,134,131,

128,125,122,119,115,112,109,106,

103,100,97,94,91,88,85,82,

79,76,73,70,68,65,62,60,

57,54,52,49,47,44,42,40,

37,35,33,31,29,27,25,23,

22,20,18,17,15,14,12,11,

10,9,7,6,6,5,4,3,

2,2,1,1,1,0,0,0,

0,0,0,0,1,1,1,2,

2,3,4,5,6,6,7,9,

10,11,12,14,15,17,18,20,

22,23,25,27,29,31,33,35,

37,40,42,44,47,49,52,54,

57,60,62,65,68,70,73,76,

79,82,85,88,91,94,97,100,

103,106,109,112,115,119,122,125,