Generador de funciones

Ondas. Onda coseno, cuadrada, exponencial. Variable amplitud, frecuencia, offset. Saturación. Bloques. Matlab. DAC (Digital-to-Analog Coverter). EPROM (Electrically Programmable Read Only Memory). Amplificador. Circuitería

  • Enviado por: Andrés García Sorribe
  • Idioma: castellano
  • País: España España
  • 47 páginas
publicidad

INDICE

TEMA PAGINA

  • INDICE ............................................................. Pág. 1.

  • OBJETIVO DE LA PRACTICA ...................... Pág. 2.

  • DIAGRAMA DE BLOQUES............................ Pág. 3.

  • DESARROLLO DE LA PRACTICA................ pag 4.

  • MATLAB 5.1 .................................................... Pág. 5.

  • D.A.C.(Digital-to-Analog Converter)................ Pág. 30.

  • MEMORIA EPROM.......................................... Pág. 33.

  • AMPLIFICADOR OPERACIONAL................. Pág. 35.

  • CIRCUITERIA EXTERNA .............................. Pág. 41.

  • MATERIAL UTILIZADO................................. Pág. 46.

  • PRESUPUESTO DE LA PRACTICA............... Pag. 47.

OBJETIVO DE LA PRACTICA

El objetivo de la práctica es diseñar y montar un generador de funciones. Dicho generador nos debe proporcionar las siguientes funciones:

  • Ser variable en frecuencia, la cual debe ser la máxima que podamos sin que afecte a la onda, alrededor de 15 KHz.

  • Ser variable en amplitud, intentando conseguir el valor máximo de pico a pico, también como la anterior sin que ofrezca ninguna deformación a la onda

  • Ser variable en offset, debe desplazar la onda lo máximo posible hasta el valor de saturación.

  • Debe representar cuatro tipos diferentes de onda( En nuestro caso representaremos ocho tipos diferentes por petición expresa del profesor) las cuales son:

  • Onda Coseno.

  • Onda Cuadrada.

  • Onda Diente de sierra.

  • Onda Exponencial

  • Onda Senoidal.

  • Onda Rectificada.

  • Onda Triangular.

  • Onda Muela (Es una suma de seno y coseno).

  • DIAGRAMA DE BLOQUES

    555 CONTADOR

    74393 PULSADOR

    INVERSOR

    TRIGGER

    74LS14

    MEMORIA

    EPROM

    SG 27C256/B CONTADOR 74LS190

    D.A.C

    08-1 AMPLIFICADOR

    OPERACIONAL

    LM741

    OSCILOSCOPIO

    DESARROLLO DE LA PRACTICA

    El desarrollo de la practica se va a dividir en cinco grandes bloques:

  • El primero lo compone el programa matemático de ordenador MATLAB, un potente programa de matemáticas capaz de cualquier cosa y muy fácilmente programable.

  • El segundo lo compone el D.A.C.(Digital To Analog Converter) convertidor digital a analógico en cristiano.

  • El tercero lo compone la memoria EPROM y su programador EXPRO.

  • El cuarto bloque lo compone el amplificador operacional.

  • El quinto bloque lo compone la circuiteria que mueve todo esto como son contadores, 555 en su modo astable, pulsador, etc...

  • 1.BLOQUE MATLAB 5.1

    El primer bloque lo compone el MATLAB. La versión que hemos utilizado nosotros es la MATLAB 5.1, ya que era la mas actualizada que disponíamos, en el instituto era el MATLAB 4.0, y lo mas importante, que corregía un error que en un principio nos tenia locos a todos referente a la representación de los números hexadecimales.

    Al principio del prototipo comenzamos utilizando el programa MATLAB 4.0 con el que las cosas empezaron bastante bien hasta que llego el momento de pasar los valores decimales a hexadecimales, aquí el MATLAB 4.0 no hacia bien dos operaciones, una primera, no colocaba un `0' delante de los valores hexadecimales donde los cuatro bits mas significativos estaban a nivel bajo `0', es decir, que en vez de marcarte 01 en hexadecimal que es el 1 en decimal te marcaba 1en hexadecimal, este problema tenia mayor importancia cuando al sacar la cadena de todos los valores en hexadecimal de una onda los sacaba uno detrás de otro sin dejar espacio por lo que era casi imposible saber que valores eran los que interesaban y no se podían meter en una matriz ya que cada valor estaba compuesta por dos bits por lo que el programa nos daba error al generar la matriz de valores, por esas razones nos cambiamos al MATLAB 5.1 .

    Ahora con el MATLAB 5.1 el problema de los valores hexadecimales estaba resuelto, aunque nosotros ya habíamos sacado la forma de operar con los valores del MATLAB 4.0 continuamos con el MATLAB 5.0, y ya comenzábamos a sacar los valores de las ondas. Otra aplicación también muy interesante de este otro programa era la opción de un asistente para generar programas de no mucha aplicación pero que mejoraba bastante la presentación.

    COMENZANDO A OPERAR.

    Lo primero será crear los archivos correspondientes a cada onda, estos están hechos en bloc de notas pero poniéndoles la extensión *.m el programa los reconocerá y los ejecutara, seguidamente se programara un menú con unos submenús que nos mostraran fácilmente todos los datos de cada onda. La programación del menú la realizaremos mas adelante, ahora comenzaremos con los programas de las ondas.

    ONDA COSENO

    Para cada tipo de onda tendremos que hacer cinco programas:

  • Valores decimales de la onda.

  • Valores hexadedimales de la onda.

  • Matriz de valores.

  • Grafica de la onda.

  • Creación de archivo con los valores de la matriz.

  • Comenzaremos con el programa primero, generación de los valores decimales de la onda cosenoidal, para lo que utilizaremos el siguiente programa, luego explicaremos que la función de cada línea.

    t=0:0.00392:1;

    x=cos(2*pi*t);

    x=x*127.5;

    x=x+127.5;

    dcose=round(x);

    [dcose']

    Este programa que recibe el nombre de `decicose.m' nos genera los valores decimales de la onda coseno, su desarrollo es sencillo. En la primera línea de programa lo que hacemos es dividir 1 en 256 partes iguales ya que van a ser el numero de valores que vamos a poder introducir en la memoria, estos van a representar un periodo de la onda y se van a almacenar los valores en una variable llamada `t'. En la segunda línea de comando almacenamos en la variable `x' los valores del coseno en cada una de las 256 posiciones del periodo. En la tercera operamos la amplitud, la amplitud del coseno es de `1' a `-1' pero al estar trabajando con números hexadecimales esta amplitud la tendremos que dividir en 256 valores dando así una correspondencia de que a `1' le corresponde el 255 y a `-1' el 0, para ello utilizamos esta línea de comando y la siguiente. Ahora tenemos en números decimales la onda coseno dividida en 256 partes en tiempo y amplitud, lo siguiente es redondear los números decimales ya que un numero con decimales no se puede pasar a hexadecimal, para ello se utiliza la quinta línea de comando con la orden round(var) . La ultima línea de comando lo que hace es representar los valores de una manera ordenada por pantalla.

    t=0:0.00392:1;

    x=cos(2*pi*t);

    x=x*127.5;

    x=x+127.5;

    x=round(x);

    h=dec2hex(x);

    [h]

    El segundo programa es el que genera los valores hexadecimales y recibe el nombre de `hexacose.m'.

    En este programa lo único que hacemos es añadir una nueva línea de comando, la sexta, en esta línea lo que hacemos es transformar los valores decimales redondeados en valores hexadecimales a través de la instrucción `dec2hex(var)' y luego se representan por pantalla.

    En el tercer programa se genera la matriz de dimensiones 16x16 que mas tarde será enviada al programador de EPROM, este programa responde al nombre de `matrizcose.m'.

    Generador de funciones

    t=0:0.00392:1;

    x=cos(2*pi*t);

    x=x*127.5;

    x=x+127.5;

    x=round(x);

    h=sprintf('%+.02x ',x);

    c=0:16:240;

    v=0;

    for i=1:16

    p=0;

    for j=1:48

    p=p+1;

    v=v+1;

    COSENO(i,p)=h(v);

    end

    end

    COSENO

    Aquí hasta la sexta línea es como en el programa de generar los valores decimales, luego usamos la sentencia `sprintf(`%+.02 `,x)' que nos transformara en hexadecimal los valores decimales y además nos dejara un espacio blanco entre cada numero hexadecimal. Las dos siguientes líneas son dos variables de contador para generar la matriz, el resto del programa es un bucle que va colocando bit a bit los números hexadecimales de la forma que deseamos.

    El cuarto programa tiene como función representar la onda con los valores decimales, el nombre que recibe este archivo es `grafcose.m'.

    Generador de funciones

    t=0:0.00392:1;

    x=cos(2*pi*t);

    x=x*127.5;

    x=x+127.5;

    x=round(x);

    plot(t,x)

    En este programa se representa la onda coseno con una amplitud de 256 y un periodo de 1 pero dividido en 256 valores. El programa vuelve a ser igual que el que genera los valores decimales pero añadiendo una nueva línea que hace la representación, la sentencia que lo realiza es `plot(t,x)'

    El quinto programa lo que hace es transformar los valores para poder mandarlos al programador de EPROM y crea un archivo, el nombre del programa es `archcose.m'.

    t=0:0.00392:1;

    x=cos(2*pi*t);

    x=x*127.5;

    x=x+127.5;

    x=round(x);

    h=sprintf('%+.02x ',x);

    tmp=fopen('c:\windows\escritorio\memoria\coseno.bin','w');

    fprintf(tmp,'%c',x);

    fclose('all');

    Aquí otra vez comienza como el primer archivo, en la séptima línea se abre el archivo con el comando `tmp=fopen(`ruta','w')' y en la siguiente línea se transforma el hexadecimal en código ASCID. En la ultima se cierra el archivo.

    ONDA SENO

    Como hemos dicho anteriormente se compone de cinco archivos cada onda, ahora iremos un poco mas rápido ya que casi todos los programas son similares, el único que puede variar un poco es el de generar los valores decimales.

    El primer archivo crea los valores decimales de la onda seno, que recibe el nombre de `deciseno.m'.

    t=0:0.00392:1;

    x=sin(2*pi*t);

    x=x*127.5;

    x=x+127.5;

    dseno=round(x);

    [dseno']

    Este archivo carece de explicación ya que es igual que el de la onda coseno.

    El segundo archivo genera los números hexadecimales de la onda seno, que recibe el nombre de `hexaseno.m'.

    t=0:0.00392:1;

    x=sin(2*pi*t);

    x=x*127.5;

    x=x+127.5;

    x=round(x);

    h=dec2hex(x);

    [h]

    El tercer archivo genera la matriz de valores de la onda senoidal, que recibe el nombre de `matrizseno.m'.

    Generador de funciones

    t=0:0.00392:1;

    x=sin(2*pi*t);

    x=x*127.5;

    x=x+127.5;

    x=round(x);

    h=sprintf('%+.02x ',x);

    c=0:16:240;

    v=0;

    for i=1:16

    p=0;

    for j=1:48

    p=p+1;

    v=v+1;

    SENO(i,p)=h(v);

    end

    end

    SENO

    El cuarto archivo nos crea la representación grafica de la onda seno. Este archivo posee el nombre de `grafseno.m'.

    Generador de funciones

    t=0:0.00392:1;

    x=sin(2*pi*t);

    x=x*127.5;

    x=x+127.5;

    x=round(x);

    plot(t,x)

    El quinto archivo creara el archivo para programar la EPROM, el nombre de el archivo es `archseno.m'.

    t=0:0.00392:1;

    x=sin(2*pi*t);

    x=x*127.5;

    x=x+127.5;

    x=round(x);

    h=sprintf('%+.02x ',x);

    tmp=fopen('c:\windows\escritorio\memoria\seno.bin','w');

    fprintf(tmp,'%c',x);

    fclose('all');

    Se creara el archivo de la misma manera que en la onda coseno.

    ONDA CUADRADA

    Esta onda posee también cinco archivos como las demás, el archivo que genera los valores decimales as algo distinto a los demás.

    El primer archivo es la creación de los valores decimales de la onda cuadrada , el archivo recibe el nombre de `decicuadra.m'.

    t=0:0.00392:1;

    for i=1:256

    if t(i)<=0.5

    dcua(i)=255;

    end

    if t(i)>0.5

    dcua(i)=0;

    end

    end

    [dcua']

    La creación de los valores de la onda cuadrada se resume en una función a trozos los cuales dan valor alto hasta la mitad del periodo y bajo desde la mitad hasta la final.

    El segundo archivo es el que genera los valores hexadecimales, aquí ya vuelve a ser como en los casos anteriores, el nombre del archivo es `hexacuadra.m'.

    t=0:0.00392:1;

    for i=1:256

    if t(i)<=0.5

    r(i)=255;

    end

    if t(i)>0.5

    r(i)=0;

    end

    end

    h=dec2hex(r);

    [h]

    El tercer archivo crea la matriz de valores hexadecimales, el nombre del archivo es `matrizcuadra.m'.

    Generador de funciones

    t=0:0.00392:1;

    for i=1:256

    if t(i)<=0.5

    r(i)=255;

    end

    if t(i)>0.5

    r(i)=0;

    end

    end

    h=sprintf('%+.02x ',r);

    c=0:16:240;

    v=0;

    for i=1:16

    p=0;

    for j=1:48

    p=p+1;

    v=v+1;

    CUADRADA(i,p)=h(v);

    end

    end

    CUADRADA

    En l cuarto archivo llamado `grafcuadra.m' se representa la onda cuadrada.

    Generador de funciones

    t=0:0.00392:1;

    for i=1:256

    if t(i)<=0.5

    r(i)=255;

    end

    if t(i)>0.5

    r(i)=0;

    end

    end

    plot(t,r)

    En el quinto archivo se crea el archivo que se manda al programador de EPROM.

    t=0:0.00392:1;

    for i=1:256

    if t(i)<=0.5

    r(i)=255;

    end

    if t(i)>0.5

    r(i)=0;

    end

    end

    h=sprintf('%+.02x ',r);

    tmp=fopen('c:\windows\escritorio\memoria\cuadrada.bin','w');

    fprintf(tmp,'%c',r);

    fclose('all');

    ONDA TRIANGULAR

    Como en la onda anterior solo comentaremos la generacin de los valores decimales.

    En el primer archivo con nombre `decitri.m' se generan los valores decimales de la onda.

    m=0:0.015873:1;

    n=1:-0.015873:0;

    k=2:-0.015873:1;

    l=1:0.015873:2;

    for i=1:64

    r(i)=l(i);

    r(i+64)=k(i);

    r(i+128)=n(i);

    r(i+192)=m(i);

    end

    r=r*127.5;

    dtri=round(r);

    [dtri']

    Esta fue la onda mas complicada de sacar ya que se divide en cuatro partes, una primera de 0 a 1, luego de 1 a 0, 0 a -1 y de -1 a 0, por lo que se hará una función a trozos de cuatro partes.

    En el segundo archivo ya volvemos a los casos anteriores, en el se genera el código hexadecimal y recibe el nombre `hexatri.m'.

    m=0:0.015873:1;

    n=1:-0.015873:0;

    k=2:-0.015873:1;

    l=1:0.015873:2;

    for i=1:64

    r(i)=l(i);

    r(i+64)=k(i);

    r(i+128)=n(i);

    r(i+192)=m(i);

    end

    r=r*127.5;

    r=round(r);

    h=dec2hex(r);

    h

    En el tercer archivo se genera la matriz de valores, el nombre que recibe este archivo es `matriztri.m'.

    Generador de funciones

    m=0:0.015873:1;

    n=1:-0.015873:0;

    k=2:-0.015873:1;

    l=1:0.015873:2;

    for i=1:64

    r(i)=l(i);

    r(i+64)=k(i);

    r(i+128)=n(i);

    r(i+192)=m(i);

    end

    r=r*127.5;

    r=round(r);

    h=sprintf('%+.02x ',r);

    c=0:16:240;

    v=0;

    for i=1:16

    p=0;

    for j=1:48

    p=p+1;

    v=v+1;

    TRIANGULO(i,p)=h(v);

    end

    end

    TRIANGULO

    En este archivo se representa la onda, el nombre del archivo es `graftri.m'.

    Generador de funciones

    t=0:0.00392:1;

    m=0:0.015873:1;

    n=1:-0.015873:0;

    k=2:-0.015873:1;

    l=1:0.015873:2;

    for i=1:64

    r(i)=l(i);

    r(i+64)=k(i);

    r(i+128)=n(i);

    r(i+192)=m(i);

    end

    r=r*127.5;

    r=round(r);

    plot (t,r)

    En el ultimo archivo generamos el archivo para la EPROM, recibe el nombre de `archtri.m'.

    m=0:0.015873:1;

    n=1:-0.015873:0;

    k=2:-0.015873:1;

    l=1:0.015873:2;

    for i=1:64

    r(i)=l(i);

    r(i+64)=k(i);

    r(i+128)=n(i);

    r(i+192)=m(i);

    end

    r=r*127.5;

    r=round(r);

    h=sprintf('%+.02x ',r);

    tmp=fopen('c:\windows\escritorio\memoria\triangular.bin','w');

    fprintf(tmp,'%c',r);

    fclose('all');

    ONDA DIENTE DE SIERRA

    El primer archivo crea los valores decimales de la onda, el nombre del archivo es `decisierra.m'.

    t=0:0.00392:1;

    r=1:-0.00392:0;

    r=r*255;

    dsierra=round(r);

    [dsierra']

    En esta onda los valores se recogen multiplicando los valores decreciente que van desde un valor máximo 1 hasta el 0, por 255.

    El segundo archivo da los valores hexadecimales de la onda, el nombre del archivo es `hexasierra.m'.

    t=0:0.00392:1;

    r=1:-0.00392:0;

    r=r*255;

    r=round(r);

    h=dec2hex(r);

    [h]

    El tercer archivo nos da la matriz de valores de la onda, el nombre del archivo es `matrizsierra.m'.

    Generador de funciones

    t=0:0.00392:1;

    r=1:-0.00392:0;

    r=r*255;

    r=round(r);

    h=sprintf('%+.02x ',r);

    c=0:16:240;

    v=0;

    for i=1:16

    p=0;

    for j=1:48

    p=p+1;

    v=v+1;

    SIERRA(i,p)=h(v);

    end

    end

    SIERRA

    El cuarto archivo realiza la representación grafica de la onda diente de sierra, el nombre del archivo es `grafsierra.m'.

    Generador de funciones

    t=0:0.00392:1;

    r=1:-0.00392:0;

    r=r*255;

    r=round(r);

    plot(t,r)

    En el ultimo archivo se genera el archivo de la EPROM.

    t=0:0.00392:1;

    r=1:-0.00392:0;

    r=r*255;

    r=round(r);

    h=sprintf('%+.02x ',r);

    tmp=fopen('c:\windows\escritorio\memoria\sierra.bin','w');

    fprintf(tmp,'%c',r);

    fclose('all');

    ONDA EXPONENCIAL

    El primer archivo nos da los valores decimales de la onda, el nombre del archivo es `deciexpo.m'.

    t=0:0.00392:1;

    x=1-1./exp(10./3*t);

    x=264.4405*x;

    dexpo=round(x);

    dexpo'

    En este aplicamos la variable `t' a la formula para poder sacar la onda exponencial.

    El segundo archivo genera los valores hexadecimales, el nombre del archivo es `hexaexpo.m'.

    t=0:0.00392:1;

    x=1-1./exp(10./3*t);

    x=264.4405*x;

    x=round(x);

    h=dec2hex(x);

    h

    El tercer archivo crea la matriz de valores de la onda, el nombre del archivo es `matrizexpo.m'.

    Generador de funciones

    t=0:0.00392:1;

    x=1-1./exp(10./3*t);

    x=264.4405*x;

    x=round(x);

    h=sprintf('%+.02x ',x);

    c=0:16:240;

    v=0;

    for i=1:16

    p=0;

    for j=1:48

    p=p+1;

    v=v+1;

    EXPONENCIAL(i,p)=h(v);

    end

    end

    EXPONENCIAL

    El cuarto archivo representa gráficamente la onda, el nombre del archivo es `grafexpo.m'.

    Generador de funciones

    t=0:0.00392:1;

    x=1-1./exp(10./3*t);

    x=264.4405*x;

    x=round(x);

    plot(t,x)

    En el ultimo archivo esta el archivo para la EPROM, el nombre del archivo es `archexpo.m'.

    t=0:0.00392:1;

    x=1-1./exp(10./3*t);

    x=264.4405*x;

    x=round(x);

    h=sprintf('%+.02x ',x);

    tmp=fopen('c:\windows\escritorio\memoria\exponencial.bin','w');

    fprintf(tmp,'%c',x);

    fclose('all');

    ONDA RECTIFICADA

    El primer archivo genera los valores de la onda, el nombre del archivo es `decirecti.m'.

    t=0:0.00392:1;

    y=sin(pi*t);

    for i=1:256

    if y(i)>=0

    y(i)=y(i);

    end

    if y(i)<0

    y(i)=(y(i)*(-1));

    end

    end

    y=y*255;

    drecti=round(y);

    drecti'

    En este archivo es una onda senoidal con su parte negativa rectificada , es decir, es el valor absoluto del seno.

    En el segundo archivo se genera los valores hexadecimales, el nombre del archivo es `hexarecti.m'.

    t=0:0.00392:1;

    y=sin(pi*t);

    for i=1:256

    if y(i)>=0

    y(i)=y(i);

    end

    if y(i)<0

    y(i)=(y(i)*(-1));

    end

    end

    y=y*255;

    y=round(y);

    h=dec2hex(y);

    h

    En el tercer archivo se genera la matriz de valores, el nombre del archivo es `matrizrecti.m'.

    Generador de funciones

    t=0:0.00392:1;

    y=sin(pi*t);

    for i=1:256

    if y(i)>=0

    y(i)=y(i);

    end

    if y(i)<0

    y(i)=(y(i)*(-1));

    end

    end

    y=y*255;

    y=round(y);

    h=sprintf('%+.02x ',y);

    c=0:16:240;

    v=0;

    for i=1:16

    p=0;

    for j=1:48

    p=p+1;

    v=v+1;

    RECTIFICADA(i,p)=h(v);

    end

    end

    RECTIFICADA

    En el cuarto archivo encontramos la representación grafica, el nombre del archivo es `grafrecti.m'.

    Generador de funciones

    t=0:0.00392:1;

    y=sin(pi*t);

    for i=1:256

    if y(i)>=0

    y(i)=y(i);

    end

    if y(i)<0

    y(i)=(y(i)*(-1));

    end

    end

    y=y*255;

    y=round(y);

    plot(t,y)

    En el ultimo archivo llamado `archirecti.h', generamos el archivo para la EPROM.

    t=0:0.00392:1;

    y=sin(pi*t);

    for i=1:256

    if y(i)>=0

    y(i)=y(i);

    end

    if y(i)<0

    y(i)=(y(i)*(-1));

    end

    end

    y=y*255;

    y=round(y);

    h=sprintf('%+.02x ',y);

    tmp=fopen('c:\windows\escritorio\memoria\rectificada.bin','w');

    fprintf(tmp,'%c',y);

    fclose('all');

    ONDA MUELA

    En la onda muela es una mezcla de una onda senoidal y otra cosenoidal. En el primer archivo se genera el codigo decimal.

    t=0:0.00392:1;

    y=sin(2*pi*t)+cos(4*pi*t);

    y=y+2;

    y=y*81.6026112835610739543665397292713;

    dmuela=round(y);

    [dmuela']

    Hemos unido un seno y un coseno, el nombre del archivo es `decimuela.m'.

    En el segundo archivo se genera el codigo hexadecimal, el nombre del archivo es `hexamuela.m'.

    t=0:0.00392:1;

    y=sin(2*pi*t)+cos(4*pi*t);

    y=y+2;

    y=y*81.6026112835610739543665397292713;

    r=round(y);

    h=dec2hex(r);

    h

    En el tercer archivo se genera la matriz de valores, el nombre del archivo es `matrizmuela.m'.

    Generador de funciones

    t=0:0.00392:1;

    y=sin(2*pi*t)+cos(4*pi*t);

    y=y+2;

    y=y*81.6026112835610739543665397292713;

    r=round(y);

    h=sprintf('%+.02x ',r);

    c=0:16:240;

    v=0;

    for i=1:16

    p=0;

    for j=1:48

    p=p+1;

    v=v+1;

    MUELA(i,p)=h(v);

    end

    MUELA

    El cuarto archivo representa gráficamente la onda, el nombre del archivo es `grafmuela.m'.

    Generador de funciones

    t=0:0.00392:1;

    y=sin(2*pi*t)+cos(4*pi*t);

    y=y+2;

    y=y*81.602611283561073954313;

    r=round(y);

    plot(t,y)

    En este ultimo archivo se genera el archivo para la EPROM, su nombre es `archmuela.m'.

    t=0:0.00392:1;

    y=sin(2*pi*t)+cos(4*pi*t);

    y=y+2;

    y=y*81.6026112835610739543665397292713;

    r=round(y);

    h=dec2hex(r);

    tmp=fopen('c:\windows\escritorio\memoria\muela.bin','w');

    fprintf(tmp,'%c',r);

    fclose('all');

    Una vez hechos todos los archivos procederemos a programar un menú que nos permita entrar fácilmente en cada uno de los programas utilizando los menús y submenús, la estructura de un menú es tal que así:

    CREACIÓN DE UN MENU O SUBMENU

    El archivo del menú esta compuesto por cuatro partes:

    header='TIPOS DE ONDA';

    labels=str2mat('COSENO', 'CUADRADA', 'DIENTES DE SIERRA','EXPONENCIAL' ,'ARCHIVO TOTAL');

    callbaks=str2mat('mencose','mencuadra','mensierra','menexpo','archtotal');

    choices('EXAMPLE',header,labels,callbaks);

    Una primera que es `header' que es el titulo del menú.

    Segunda `labels' que son las etiquetas los botones.

    Tercera `callbaks' que son las llamadas a los archivos.

    Cuarta `choices' que es la instrucción propia del menú.

    Un dato importante del menú es que tiene que quedar exactamente en igual posición la etiqueta que la llamada y que no puede haber repetidos dos nombres iguales de `choices'.

    Un menú debe quedar como este:

    Generador de funciones

    Seguidamente cuando terminemos con todo esto nuestra misión será introducir todos los datos de las matrices en una sola matriz, a esta matriz la hemos llamado `TOTAL.bin'. Para hacer esto tuvimos que hacer un nuevo programa que se llamaba `archtotal.m'.

    decicose;

    decicuadra;

    deciexpo;

    decimuela;

    decirecti;

    deciseno;

    decisierra;

    decitri;

    total=[dcose dtri dseno dcua dsierra dexpo drecti dmuela];

    tmp=fopen('c:\windows\escritorio\memoria\totalg2.bin','w');

    fprintf(tmp,'%c',total);

    fclose('all');

    En el ejecutamos todos los programas de generación decimal y las variables las metimos en una única matriz para llevarlo después a el programa EXPRO que es el programador de memora y así conseguir introducir los datos que luego van a ir en la memoria de una sola vez.

    D.A.C.(Digital-to-Analog Converter)

    Esta parte del generador de señales va a consistir en lo siguiente:

    Se trata de recoger los datos que provendrán de la memoria EPROM previamente programada. Estos datos digitales deben ser convertidos en ondas analógicas correspondientes a los valores digitales recogidos. Para convertir estos datos es necesario utilizar un convertidor digital-analogico.

    Traducción de los puntos mas importantes de las hojas del D.A.C.-08

    El D.A.C.-08 es un multiplicador convertidor Digital-Analogico en el que la corriente del rendimiento es el producto de un número digital y la corriente de referencia de entrada. La corriente de la referencia puede fijarse o estar comprendida entre casi 0 a +4.0mA.La corriente del rendimiento máxima es una función lineal de la referencia actual y es dado por:

    IFR=255/256*IREF, donde IREF=I14

    En aplicaciones de trabajo en referencias positivas, un voltaje de referencia positivo externo fuerza una corriente a través R14 en el VREF(+) el término (pin 14) del amplificador de la referencia. Alternativamente, una referencia negativa debe aplicarse a VREF (-) a pin 15;la corriente de referencia fluye a masa a través de R14 en VREF(+) como en el caso de la referencia positiva. Esta conexión de referencia de negativo tiene la ventaja de una impedancia muy alta presentada en pin 15: El voltaje en pin 14 es igual en pista a el voltaje en pin 15 debido a la alta ganancia del amplificador de la referencia interior: R15 (nominalmente igual a R14) se usa para evitar posibles errores, pueden eliminarse R15 con sólo un aumento menor en error.

    Las referencias bipolares pueden ser acomodadas compensando VREF o pueden fijarse en el pin 15. El rango del común-modo negativo del amplificador de la referencia se da por: VCM-=V-plus(IREF*1K)plus 2.5V. El rango del común-modo positivo en V+ menos 1.5V.

    Cuando una referencia de DC se usa, se recomienda un condensador de desviación de intensidad referencia. Un 5.0V TTL lógica suministrado no se recomienda como una referencia. Si un suministro de poder regulado se usa como una referencia, deben dividir R14 en dos resistencias con la unión desviada o conectada con masa a través de un condensador de 0.1uF .

    Para la mayoría de las aplicaciones la relación ligera entre IREF y IFS eliminará la necesidad por arreglar IREF. Si requirió, los hartura-balanza arreglando pueden ser logrados ajustando el valor de R14, o usando un potenciómetro para R14. Un método mejorado de adorno máximo que elimina potenciómetro T.C. se muestran efectos en el circuito de ajuste máximo recomendado.

    Los valores más bajos usando de corriente de la referencia reducen el suministro de poder negativo actual y amplificador de referencia de aumentos el rango del común-modo negativo. El rango recomendado para el funcionamiento con una DC referencia corriente es +0.2mA a +4.0mA.

    Una vez ya conocidos los datos del D.A.C ya podemos disponernos a montarlo, el montaje que vamos a realizar es el siguiente:

    Generador de funciones

    Vamos a alimentar el D.A.C. con 5V por lo que las resistencias Ref. que van a las patillas 14 y 15 serán de alrededor de 2.2K para conseguir una intensidad de entrada de alrededor de 2mA.. Los condensadores utilizado serán de 0.1 uF los que van a las patillas 3 y 13 y de 0.01uF para el que va a la 3 y 16.La tensión de V+ y V- sera de unos 12V aprovechando las salidas del entrenador. Al ser un D.A.C. de intensidad habrá que colocar una resistencia a la salida, el valor de esta será aproximadamente del mismo valor de las que hemos puesto en la entrada.

    Generador de funciones

    El D.A.C. fue uno de los componentes que mas guerra nos dio hasta que pudimos arrancarlo.

    LA MEMORIA EPROM

    La memoria es una memoria de la familia CMOS de 32K, además de que se puede programar las veces que se quiera debido a que es una EPROM, lo que mas destaca de esta memoria es una ventanita que tiene que es por donde se borra.

    Lo primero que se debe de hacer es borrar la memoria, para esto se meterá en un aparato especial durante 25 minutos expuesto a la luz ultravioleta, una vez hecho esto se saca la memoria y se tapa su ventana con papel de plata para evitar que le de la luz debido a que son muy sensibles y si le diera la luz del sol se podría borrar toda la información.

    Una vez hecho todo lo anterior se debe de colocar la memoria en un periférico conectado al puerto paralelo que sirve para programarla; con el programa se lee la memoria para ver que esta totalmente vacía y asegurarse de que no hay ningún error. Una vez hecho esto se cargan las ondas y se colocan en las direcciones de memoria que elijas, en este caso hemos optado por:

    Tipo de Onda

    Dirección de Inicio

    Dirección de Fin

    Onda Cuadrada

    0x0000

    0x00FF

    Onda Senoidal

    0x0100

    0x01FF

    Onda Dientes de Sierra

    0x0200

    0x02FF

    Onda Exponencial

    0x0300

    0x03FF

    Onda Coseno

    0x0400

    0x04FF

    Onda Muela

    0x0500

    0x05FF

    Onda Triangular

    0x0600

    0x06FF

    Onda Rectificada

    0x0700

    0x07FF

    Para poder ir cambiando de tipo de onda vamos a tener que montar un nuevo contador, aparte del 74LM393 que mas adelante comentaremos, para ello utilizaremos un 74LS190 con un pulsador.

    El 74LS393 rastreara todas las direcciones de memora dentro de un periodo y el 74LS190 rastreara el tipo de onda que queramos ver.

    Para el montaje de La CMOS, primero se debe de alimentar el Chip a Vcc= 5V y a GND, Vpp=Vcc, debido a que solo vamos a leer G y E a masa como indica la tabla unir las salidas del contador a las entradas de la memoria y los bits de ampliación a A8, A9 y A10 y las demás entradas a masa, las salidas DQ deben de ir al DAC.

    Generador de funciones

    Generador de funciones

    EL AMPLIFICADOR OPERACIONAL

    El amplificador operacional es un dispositivo lineal de propósito general el cual tiene capacidad de manejo de señal desde f=0 Hz hasta una frecuencia definida por el fabricante; tiene además limites de señal que van desde el orden de los nV, hasta unas docenas de voltio (especificación también definida por el fabricante). Los amplificadores operacionales caracterizan por su entrada diferencial y una ganancia muy alta, generalmente mayor que 105 equivalentes a 100 dB.

    El A.O. es un amplificador de alta ganancia directamente acoplado, que en general se alimenta con fuentes positivas y negativas, la cual permite que tenga excursiones tanto por arriba como por debajo tierra (o el punto de referencia que se considere).

    El nombre de amplificador operacional proviene de una de las utilidades básicas de este, como lo son realizar operaciones matemáticas en computadores análogos.

    DEFINICIÓN DE AMPLIFICADOR OPERACIONAL.

    Generador de funciones
    Un “amp op” es un amplificador diferencial que puede ser modelado por el circuito de dos puertas que aparece en la siguiente figura (1). Lo que lo caracteriza como un amplificador operacional es su elevada ganancia de voltaje una A de 100000 o superior. Por lo tanto, sólo se requieren aproximadamente 50 V en vi para producir v0 = 5 V.

    Figura No. 1

    En la figura (2) aparece el símbolo correspondiente a un amplificador operacional. A diferencia del modelo, el amplificador operacional no está en realidad conectado a tierra. Sin embargo, sí está conectado a una fuente de voltaje positivo y negativo, estableciendo en efecto una “tierra” aproximadamente a mitad entre los suministros. Estos son típicamente de +15 V y -15 V, puro pueden ser de +5 V y -5V. Los terminales “más” y “menos” a la entrada del amplificador operacional indican la polaridad de vi que hace positivo a v0.

    Generador de funciones
    Figura No. 2

    Las conexiones de la fuente de energía con frecuencia no aparecen en los símbolos de los amplificadores operacionales. Los voltajes exactos de funcionamiento no son importantes para la operación de los amplificadores operacionales, en tanto el voltaje de señal no exceda de los suministrados.

    Un amplificador operacional ideal tendría ganancia infinita y ninguna corriente de entrada, y la salida v0 no sería afectada por ninguna carga. Estas propiedades pueden resumirse como

    A = ", Rentr.= ", Rsal..= 0

    Un “amp op” ideal tiene otras propiedades, tales como un ancho de banda infinito, un intervalo de voltajes infinito a la entrada y la salida. Pero la propiedad más importante para simplificar las ideas de diseño es A = ". En la práctica esto no puede lograrse, pero el análisis basado en un modelo con ganancia infinita conduce a un acuerdo excelente en cuanto a la actuación real en la mayoría de los casos.

    El Amplificador Operacional ideal se caracteriza por:

  • Resistencia de entrada, (Ren), tiende a infinito.

  • Resistencia de salida, (Ro), tiende a cero.

  • Ganancia de tensión de lazo abierto, (A), tiende a infinito.

  • Ancho de banda (BW), tiende a infinito.

  • Vo = 0, cuando V+ = V-,

  • Ya que la resistencia de entrada, Ren, es infinita, la corriente en cada entrada , inversora y no inversora, es cero. Además el hecho de que la ganancia de lazo abierto sea infinita hace que la tensión entre las dos terminales sea cero, como es muestra a continuación:

    V+ - V- = Vo

    A

    V+ - V- = 0

    V+ = V-

    CONFIGURACIÓN BÁSICA DE UN SUMADOR SEGÚN UN

    AMPLIFICADOR OPERACIONAL.

    Es probable que el más útil de los circuitos de “amp-op” utilizados en computadoras analógicas sea el circuito amplificador sumador. La figura (3) muestra un circuito sumador de tres entradas, el cual brinda un medio para sumar (añadir) algebraicamente voltajes de tres entradas, cada uno multiplicado por un factor de ganancia constante.

    Figura No. 3

    Amplificador Sumador

    Si se utiliza el circuito equivalente virtual, el voltaje de salida puede expresarse en términos de entrada como:

    Vo = (Rf/R1)V1 + (RF/R2)V2 + (Rf/R3)V3

    En otras palabras, cada entrada añade un voltaje a la salida conforme se obtiene de un circuito de ganancia constante inversor. Si se emplean más entradas, ellas añaden componentes adicionales a la salida.

    Un ejemplo del amplificador sumador es el circuito que aparece en la figura (4).

    Figura No. 4

    Este circuito puede usarse para combinar o mezclar señales de audio. Las fuentes V1, V2 y V3 determinan las corrientes i1,i2 e i3 a través de sus respectivas resistencias a tierra (se trata de una tierra “virtual” establecida por el corto virtual del amp-op). Cada corriente es proporcional a su correspondiente voltaje, por ejemplo, i1 = V1/(1K). Aplicando la LKC, la corriente i4 que pasa por el resistor de realimentación de 3K es la suma de estas corrientes:

    I4 = i1 + i2 + i3 = (V1 + V2 + V3)/1K.

        • Pero Vo = 3K * i4. Por lo tanto,

    Vo = -3 (V1 + V2 + V3).

    El voltaje de salida es la suma de los voltajes de entrada a los que se agrega alguna ganancia.

    EL AMPLIFICADOR OPERACONAL EN NUESTRO PROYECTO

    El amplificador operacional en nuestro proyecto va a ser la pieza ultima, su salida va a ir al osciloscopio y es donde vamos a poder regular el offset y la amplitud.

    Para el control del offset vamos a utilizar el montaje que acabamos de comentar, es decir, en configuración como sumador, y mediante su realimentación lo usaremos para variar la amplitud. A la salida del D.A.C. como anteriormente dijimos hemos colocado una resistencia ya que el D.A.C.-08 es un conversor de intensidad, con eso transformaremos la intensidad en voltaje ya que la impedancia de entrada de un operacional se considera infinita.

    El montaje utilizado se puede observar en la figura.

    Generador de funciones

    LA CIRCUITERIA EXTERNA

    555 MONTADO COMO ASTABLE PARA GENERAR LA FRECUENCIA

    FUNCIONAMIENTO DEL 555:

    La tensión de funcionamiento del 555 va de 5V a 20V. Interiormente, en la patilla 8 va conectado un divisor de tensión mediante 3 resistencias.

    La patilla 6 es una de las importantes, sale del comparador superior y cuando la tensión de referencia, en la patilla 6, sea mayor a dos tercios de Vcc, entonces este comienza a funcionar llegando al flip flop y sacando un uno, donde llega a un transistor que en este momento actúa como un interruptor cerrado y también llega a la salida invirtiendo esta señal que entra y transformándola en 0.

    La patilla 5 es la entrada negativa del comparador superior.

    La patilla 2 es la entrada negativa del comparador inferior, cuando este tiene una tensión de referencia inferior a un tercio de Vcc, entonces el comparador inferior empieza a funcionar, dando un impulso al flip flop saliendo de el un 0, entonces llega al transistor que al no llegar tensión a la

    base de este, funciona como interruptor cerrado, y llegando a la salida que invirtiéndolo saca un 1 ósea vcc.

    La patilla 1 va directamente a masa.

    La patilla 7 es la de descarga del condensador.

    La patilla 3 es la salida.

    La patilla 4 es el reset.

    La patilla 8 es +VCC.

    ESQUEMA INTERNO DEL 555:

    FUNCIONAMIENTO MULTIVIBRADOR ASTABLE CON EL 555:

    Este circuito tiene dos estados estables en la salida: +Vcc y 0v.

    Consta de dos entradas y una sola entrada.

    Inicialmente tenemos el circuito con la salida en nivel bajo, si pulsamos P1 enviamos un impulso al comparador inferior este impulso hará bajar la tensión de referencia que tiene este comparador a menos tensión de 1/3de +Vcc

    enviando este comparador un impulso al flip flop, que nos sacara un 0 que la salida nos invertirá teniendo +Vcc en la patilla 3 o salida del 555, se quedara en este estado indefinidamente hasta que pulsemos P2, en este momento enviamos un impulso al comparador superior, este impulso es mayor que la tensión de referencia de dicho comparador o sea mayor de 2/3 de +Vcc entonces el flip flop se cambiara de estado dando un uno que la salida nos invertirá sacando el circuito 0v, quedando en este estado indefinidamente hasta que volvamos a pulsar P1 volviendo a repetirse el proceso anterior.

    R1 va conectada de +Vcc al comparador inferior así lo mantiene a mas tensión de 1/3 de +Vcc y cuando pulsamos P1 que esta conectado entre el comparador inferior y masa hacemos que dicho comparador tenga 0v de esta manera se conectara el comparador inferior.

    R2 esta conectada al comparador superior y a masa manteniendo así el comparador con menos tensión de +Vcc permaneciendo así desactivado, y cuando pulsamos P2, se activa por que P2 esta conectado a +Vcc lo que provoca que se supere la tensión de referencia a mas de 2/3 de +Vcc y enviara un impulso al flip flop.

    ESQUEMA DEL MULTIVIBRADOR ASTABLE CON EL 555:

    Generador de funciones

    Es aquí en el 555 donde vamos a poder regular la frecuencia, para ello hemos de colocar un potenciómetro en la resistencia que ataca al condensador de carga y descarga. Así cuando variemos el potenciómetro aumentaremos o disminuiremos la frecuencia.

    CONTADORES 74LS393 y 74LS190

    Nosotros hemos diseñado dos contadores, uno que contara desde 00 hasta FF para que pasara por todas las direcciones de memoria de un periodo y otro para poder seleccionar entre las ocho ondas de que disponemos, el reloj de este ultimo es un pulsador.

    El contador 74LS493 es un contador doble de cuatro bits por lo que era muy apropiado para nuestro proyecto ya que era fácilmente expansionable y nos ahorrábamos posibles fallos de concordancia entre varios chips, por ejemplo si huyéramos utilizado el 74LS90 hubiéramos necesitado al menos dos chips distintos y posiblemente hubiéramos tenido problemas. La expansión de este chip es sencilla basta con llevar la salida 1QD a la entrada de reloj del otro contador. Este contador tendrá a la entrada del reloj 1 los pulsos que de el 555 por lo que según sea la frecuencia del 555 así será la frecuencia del contador. A continuación se adjunta la tabla de la verdad y el montaje.

    Inputs | Output

    -------------------------

    CLR CLK | Qd Qc Qb Qa

    --------------------------

    1 X | 0 0 0 0

    0 POS | Count

    0 POS | Count

    Generador de funciones

    Generador de funciones

    El otro contador utilizado es el 74LS190 con entrada de reloj de un pulsador. Explicando el proceso desde el pulsador, aplicamos un pulsador con un condensador y una resistencia para absorber el ruido, además seguidamente este le llevamos a un 74LS14 que es una puerta inversora THRIGER SHMICH con lo cual el ruido esta ya casi anulado y la salida de este la llevamos a el reloj del 74LM190. Este le pusimos que reseteara cuando llegué a 7 así podíamos ir pasando por todas las direcciones de memoria ya que estas tres patillas van a las entradas 8,9,10 de la memoria. Para hacer el reset como en la evaluación anterior utilizaremos el LOAD.

    A continuacion adjuntamos el patillaje y el montaje.

    CTEN | D/U | CLK | LOAD | A B C D | QA QB QC QD MAX/MIN RCO

    ---------|------|--------|----------|------------|-------------------------------------

    0 | X | X | 0 | X X X X | A B C D 1* 2*

    0 | 1 | POS | 1 | X X X X | Count Down 1* 2*

    0 | 0 | POS | 1 | X X X X | Count Up 1* 2*

    1 | X | X | X | X X X X | Qa0 Qb0 Qc0 Qd0 1* 2*

    Generador de funciones

    Generador de funciones

    MATERIAL UTILIZADO

  • Memoria EPROM-----------------------------1 Unidad.

  • LM 555-----------------------------------------1 Unidad.

  • 74LS190----------------------------------------1 Unidad.

  • 74LS393----------------------------------------1 Unidad.

  • 74LS14------------------------------------------1Unidad.

  • D.A.C.-08---------------------------------------1Unidad.

  • Operacional LM741---------------------------1 Unidad.

  • Potenciometros de 220K,22K,10K----------3 Unidades.

  • Condensadores de 0.1uF,0.1uF,0.01uF-----6Unidades.

  • Resistencias de 2.2K,5.6K,1K---------------6Unidades.

  • Pulsador-----------------------------------------1Unidad.

  • PRESUPUESTO DE LA PRACTICA

    PIEZA

    CANTIDAD

    PRECIO UNIDAD

    PRECIO TOTAL

    Memoria EPROM

    1

    4634

    4634

    LM555

    1

    94

    94

    74LS190

    1

    174

    174

    74LS14

    1

    95

    95

    74LS393

    1

    194

    194

    D.A.C. -08

    1

    2984

    2984

    LM741

    1

    266

    266

    Potenciomeros

    3

    122

    366

    Condensadores

    6

    50

    300

    Resistencias

    6

    15

    90

    Pulsador

    1

    71

    71

    TOTAL

    9268

    Desarrollo de Productos Electrónicos

    45

    Generador de funciones