Generador de funciones

Anuncio
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
1
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.
2
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;
3
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'.
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
4
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'.
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');
5
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'.
t=0:0.00392:1;
x=sin(2*pi*t);
x=x*127.5;
x=x+127.5;
6
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'.
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'.
7
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.
8
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'.
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
9
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.
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
10
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.
11
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'.
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
12
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'.
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
13
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);
14
[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'.
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
15
El cuarto archivo realiza la representación grafica de la onda diente de sierra, el nombre del archivo es
`grafsierra.m'.
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;
16
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'.
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
17
EXPONENCIAL
El cuarto archivo representa gráficamente la onda, el nombre del archivo es `grafexpo.m'.
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);
18
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);
19
h
En el tercer archivo se genera la matriz de valores, el nombre del archivo es `matrizrecti.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=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
20
En el cuarto archivo encontramos la representación grafica, el nombre del archivo es `grafrecti.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);
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;
21
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'.
22
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'.
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)
23
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';
24
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:
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;
25
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
26
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:
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.
27
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
Onda Senoidal
Onda Dientes de Sierra
Onda Exponencial
Onda Coseno
Onda Muela
Onda Triangular
Onda Rectificada
0x0000
0x0100
0x0200
0x0300
0x0400
0x0500
0x0600
0x0700
0x00FF
0x01FF
0x02FF
0x03FF
0x04FF
0x05FF
0x06FF
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.
28
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.
EL AMPLIFICADOR OPERACIONAL
29
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.
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.
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
30
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
31
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.
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.
32
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:
33
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
−−−−−−−−−−−−−−−−−−−−−−−−−−
1X|0000
0 POS | Count
0 POS | Count
34
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*
35
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
Memoria EPROM
LM555
74LS190
74LS14
74LS393
D.A.C. −08
LM741
Potenciomeros
Condensadores
Resistencias
Pulsador
TOTAL
CANTIDAD
1
1
1
1
1
1
1
3
6
6
1
PRECIO UNIDAD
4634
94
174
95
194
2984
266
122
50
15
71
PRECIO TOTAL
4634
94
174
95
194
2984
266
366
300
90
71
9268
36
Desarrollo de Productos Electrónicos
45
37
Descargar