Tópicos de Procesamiento Digital Avanzado Página 1
DISEÑO DE UN GENERADOR DE FUNCIONES Universidad Autónoma De Tlaxcala
Facultad De Ciencias Básicas Ingeniería Y Tecnología ISE
Héctor Sánchez Maldonado, Ariel Méndez Martínez, Sergio Vela Aguilar
I. OBJETIVO
Desarrollar un programa en MikroC para
comprobar el funcionamiento del
DAC0830.
Desarrollar un generador de funciones
mediante un programa desarrollado en
MikroC (Lenguaje C), donde sean
visualizadas las ondas:
Cuadrada,
Senoidal
Triangular
las cuales podrán ser seleccionadas
mediante botones.
II. MATERIAL
Software MikroC PRO for dsPIC
Software MikroProg suite for dsPIC
Fuente simétrica
DAC0830
Protoboard
Tarjeta EasyPIC V7
C.I. 741
Multímetro
Osciloscopio
III. INTRODUCCION
En la actualidad con las nuevas tendencias, se
busca que con la ayuda de la tecnología se creen
nuevas aplicaciones que impliquen tanto una
gran eficiencia como un funcionamiento más
rápido y a la vez un tanto menos complejo.
Tal es el caso de MikroC, una excelente
herramienta para desarrollar aplicaciones para
dsPIC, usando el popular lenguaje C, incluye
muchísimas librerías que facilitan la terea del
desarrollador pues con ellas se pueden
desarrollar complejas aplicaciones en un tiempo
mucho menor.
IV. MARCO TEORICO
Un generador de funciones es un instrumento
utilizado en la electrónica y sirve para generar o
simular señales específicas con determinadas
características. Por ejemplo, crear o simular una
señal que puede ser cuadrada, sinusoidal, de una
determinada frecuencia, y de una determinada
amplitud. De esta forma, podemos aplicar esta
señal generada a un circuito para ver su
respuesta.
Un conversor de señal digital a analógica DAC
es un dispositivo para convertir señales digitales
con datos binarios en señales de corriente, tiene
la capacidad de convertir 8 0 16 bits según sea
el caso o la aplicación.
Figura 1. DAC0830
V. DESARROLLO
Para el desarrollo del generador de funciones, se
realizara por separado un programa que será
capaz de emular el comportamiento de cada una
de las señales.
Tópicos de Procesamiento Digital Avanzado Página 2
Para nuestra aplicación utilizaremos el
DAC0830 este convertidor digital analógico es
de 8 bits, cuenta con dos salidas de corriente, su
alimentación es de 5 a 15v, tiene una resolución
por bit de 0.04mv, cuenta con un voltaje de
referencia negativo que pude ser de -10 a 10v.
Para poder observar el voltaje en sus dos salidas
de corriente es necesario utilizar un comparador
UA741 que convertirá las salidas de corriente en
una sola de voltaje.
Diagrama de conexión del DAC0830 en
simulación
Figura 2. Diagrama de conexión del DAC0830
Ahora bien, partiremos a desarrollar cada una de
las señales mencionadas anteriormente.
1. Desarrollo de la Onda Cuadrada
La señal cuadrada es relativamente fácil. En la
figura 3 se muestra el diagrama de flujo para
esta señal. Previamente se declara una variable
denominada alto (200) este valor en relación con
la resolución del DAC determinan la amplitud
de la señal. La variable bajo se declara en 0
para una señal apropiada. La frecuencia es
similar a la de la triangular.
Pero ahora el tiempo de espera en alto y bajo es
la mitad del periodo T.
Figura 3. Diagrama de flujo para la onda cuadrada.
2. Desarrollo de la Onda Triangular
La señal triangular se genera con un bucle
FOR. En la figura 4 se muestra el diagrama de
flujo. Para determinar la frecuencia de la señal,
se tiene:
La señal tiene una pendiente positiva y una
negativa. El periodo total T se divide entre 2
para poder generar el código en el dsPIC.
Tomando la mitad del periodo se divide entre el
valor del contador (200 para la figura 1).
En resumen primero se hace un incremento para
generar la pendiente positiva, el valor maximo
de la señal esta dada por la relacion de la
resolucion del DAC y el contador del programa.
Despues de la pendiente positiva se genera la
pendiente negativa, ahora el contador se
decrementa.
Tópicos de Procesamiento Digital Avanzado Página 3
Figura 4. Diagrama de flujo para la onda triangular.
3. Desarrollo de la Onda Senoidal
La fórmula general para una señal senoidal es:
( )
En la figura 5 se muestra el diagrama de flujo
para generar la señal senoidal, lo que se puede
destacar es que se debe sumar un valor para
arreglar el tema de offset por las limitaciones
del ADC. Del diagrama se puede ver que se
realiza un contador el cual permite realizar la
operación, el tema de la frecuencia no está bien
claro por los tiempos y muestras que se realizan.
Después de la operación seno con el ajuste de
amplitud y offset, se debe ajustar con respecto a
la resolución del ADC para que la información
pueda ser enviada al puerto.
Figura 5. Diagrama de flujo para la onda senoidal.
4. Desarrollo del Programa General
En la figura 6 se presenta el diagrama de flujo
del programa general. Este permite seleccionar
el tipo de señal que se desea (senoidal,
triangular, cuadrada). Se declara lo necesario
(variables, puertos) y constantemente se están
checando los pines del puerto F si alguno de
ellos es presionado se activa una variable y se
genera la señal de los diagramas anteriores.
Tópicos de Procesamiento Digital Avanzado Página 4
Figura 6. Diagrama de flujo del programa general..
Con la elaboración de este programa que emula
el comportamiento de un generador de
funciones, se obtuvieron los siguientes
resultados visualizados en un osciloscopio.
Figura 7. Onda cuadrada en el osciloscopio.
Figura 8. Onda triangular en el osciloscopio.
Figura 9. Onda senoidal en el osciloscopio.
VI. CONCLUCIONES
Héctor Sánchez Maldonado. Se puede utilizar
un dsPIC o DSP para generar cualquier tipo de
señal mediante software, el convertidor digital-
analógico es una parte muy importante ya que
de él depende que podamos visualizar las
señales. En este caso se tuvo uno de 8 bits
(0803), y aunque con el dsPIC se podían
manejar hasta 12 bits por el puerto B no se
pudieron aprovechar ya que solo se contaba con
el DAC 0803 y un mejor DAC implica mayor
costo. Para implementar un buen generador de
funciones aparte del DAC se necesitan circuitos
complementarios como los filtros para tener una
señal apropiada. Por ejemplo la señal seno se
tuvo que montar sobre una componente de DC
para poder visualizarla bien, pero en la realidad
este tipo de señal debe ir con valores positivos y
negativos.
Ariel Méndez Martínez. Para emular el
comportamiento de un generador de funciones,
el lenguaje de alto nivel C es de gran ayuda, ya
que cuenta con la implementación de algunas
funciones, tal y como es el caso de la función
seno, además de que el desarrollo del programa
no resulta ser complejo.
Cabe mencionar que además de desarrollar la
parte de software para el generador de
funciones, también es de vital importancia el
hardware, que en este caso fue la
Tópicos de Procesamiento Digital Avanzado Página 5
implementación de un convertidor digital-
analógico DAC0830 de 8 bits en los cuales es
visualizada la señal requerida. El DAC a su vez
necesita de un opamp de propósito general 741
para que pueda realizar la conversión de
corriente a voltaje, ya que la salida que maneja
el DAC es en corriente.
Sergio Vela Aguilar. La utilización de del
DAC0830 en este examen fue conocer el
funcionamiento de un convertidor digital
analógico de 8 bits y hacer un generador de
señales analógico digital, dicho generador
contaba con tres formas de onda cuadrada,
triangular Y sinodal. En la forma de onda
sinodal se tuvo algunos problemas en su
frecuencia ya que no coincidía con las otras
formas de onda ya mencionadas, el convertidor
fue muy útil para realizar el generador ya que
con la ayuda del micro c de pudieron formar las
tres ondas a 10Hz. El convertidor es sensible al
conectarlo ya q si sufre alguna perturbación deja
de funcionar por un momento.
VII. ANEXOS
unsigned char contador, contador1;
unsigned int senoidal=0, triangular=0, cuadrada=1;
void main() {
int bajo=0, alto=200, seno=0;
float sen;
TRISD = 0x000F; // initialize portb as input
TRISB=0;
LATB=0;
ADPCFG = 0xFFFF; // Configure AN pins as digital I/O
while(1){
///Seleccion de la Forma de Onda por el Puerto D
if (Button(&PORTD, 0, 10, 1)) // detect logical one
state
{senoidal = 1;
triangular=0;
cuadrada=0;}
else if (Button(&PORTD, 1, 10, 1)) // detect logical
one state
{triangular = 1;
senoidal=0;
cuadrada=0;}
else if (Button(&PORTD, 2, 10, 1)) // detect logical
one state
{cuadrada=1;
senoidal=0;
triangular=0;}
//Señal Triangular
else if(triangular==1)
{for(contador=0; contador<=200; contador++)
{LATB=contador;
Delay_us(400); }
alto=200;
for(contador=0; contador<200; contador++) {
alto= alto-1;
LATB=alto;
Delay_us(400); } }
//Señal Senoidal
else if(senoidal==1)
{for(contador=0; contador<=100; contador++) {
sen = 4.5*sin(2*3.1416*contador/100)+5;
seno=(sen/0.040);
latb=seno;}}
//Señal Cuadrada
if(cuadrada==1)
{LATB=bajo;
Delay_ms(50);
LATB=alto;
Delay_ms(50);}
}}
Tópicos de Procesamiento Digital Avanzado Página 6
Top Related