voltimetro digital
TRANSCRIPT
Proyectos de sistemas digitales 279
6.7. Voltímetro digital
Diseñe un voltímetro digital que reciba una señal analógica de entradacomprendida entre 0 y 5V, y represente dicho valor en dos visualizadores de 7segmentos, con una precisión de décima de voltio.
6.7.1. Diagrama de bloques
La solución del problema la hemos dividido en cuatro bloques representadosen la figura 6.30. Un primer bloque se encargará de la conversión de la señalanalógica en valores digitales. El valor digital obtenido, una vez convertido alformato adecuado mediante un bloque codificador binario a BCD y multiplexado,pasará a un bloque de visualización donde se mostrará el valor de tensión en dosvisualizadores de siete segmentos. Para controlar las señales de los bloquesanteriores y realizar la multiplexación del dato a visualizar, utilizaremos uncircuito de control implementado en una GAL22V10.
Bloque de
Visualización
D_OUT[3..0]
SEL_U
SEL_D
Bloque
Conversor /RD
/WR
/INTR
RST
CLK
Vin
DB[7..0]
(GAL22V10)
DEC[3..0]Codificador
Binarioa BCD
UNI[3..0]
OEBloque deControl
FIGURA 6.30. Diagrama de bloques del voltímetro digital.
6.7.2. Conversor A/D
El conversor utilizado, el ADC0804, posee tres entradas de control, /CS, /WRy /RD y una salida /INTR, que facilitan su interconexión con un microprocesador,figura 6.31. En la solución que planteamos, la interconexión se realizará con laGAL22V10 como circuito de control.
280 Aplicaciones y problemas de electrónica digital
CS
RD
WR
CLKRCLKIN
VIN+VIN-
AGNDVREF/2
DGND INTR
DB7DB6DB5DB4DB3DB2DB1DB0
ADC0804+5V
2
3
1
19
4
10
6
89
7
VCC
5
1112131415161718
20
150pF
/RD
/WR
/INTR
10kΩ
Vin
DB[7..0]
FIGURA 6.31. Conversor ADC0804.
La señal /CS es la de habilitación del conversor. En nuestro caso y porsimplicidad, hemos conectado dicha entrada directamente a tierra. La señal /WRindica el inicio de una nueva conversión. La señal de salida /INTR nos indicacuándo se ha producido el final de la conversión y existe un nuevo datodisponible. Por último, la señal /RD permite leer el último dato convertido.
La figura 6.32 muestra el cronograma de funcionamiento del conversor. Elproceso de conversión A/D comienza cuando la señal /WR pasa al nivel bajo (1),momento en el cual la señal /INTR pasa al nivel alto, indicando que se ha iniciadoel proceso de conversión y, por tanto, que todavía no hay disponible un dato a lasalida. El inicio propiamente dicho de la conversión se produce cuando la señal/WR pasa de nuevo al nivel alto (2). Transcurrido un tiempo de conversión Tconv,la señal /INTR pasa al nivel bajo, indicando que hay un nuevo dato convertido.
La lectura del dato se lleva a cabo mediante la activación de la señal /RD.Mientras ésta permanece en nivel alto, la salida del conversor se encuentra en altaimpedancia. Teniendo en cuenta que durante el proceso de conversión el valordigital de salida no es el correcto, esta señal /RD permite poner dichas salidas enalta impedancia hasta alcanzar el final de la conversión.
En el instante en que /RD pasa al nivel bajo, se produce una habilitación deregistro paralelo-paralelo interno (4), y en consecuencia se obtiene a la salida eldato convertido. A su vez, la señal /INTR pasa al nivel alto (3), indicando que seha procedido a leer el dato del conversor. Al desactivar /RD la salida delconversor vuelve a alta impedancia (5).
Proyectos de sistemas digitales 281
/WR
/INTR
/RD
DB[0..7]
Tconv
(1) (2)
(3)
(4) (5)
DATO
FIGURA 6.32. Cronograma de control del conversor.
El ADC0804 es un conversor de aproximaciones sucesivas que requiere deuna señal de reloj para su funcionamiento. El propio conversor dispone de uncircuito generador de reloj, cuya frecuencia de oscilación viene fijada por unaresistencia y un condensador externos. Para nuestra aplicación, donde lavelocidad de adquisición no es crítica, se ha elegido una frecuencia de 640kHz,dada por un valor de resistencia de 10kΩ y un condensador de 150pF, tal y comose representa en la figura 6.31.
La tensión fondo de escala, es decir, aquella tensión analógica de entradapara la cual se obtiene el máximo código de salida (FFh), viene fijada por unatensión de referencia (VREF/2), que se introduce externamente al conversor. Sidejamos al aire este pin de entrada del conversor, como es nuestro caso, elconversor entiende que la tensión de referencia es la tensión de alimentación. Deesta forma obtendremos un código digital FFh para una tensión de entrada de 5V.
El ADC0804 posee un modo de funcionamiento denominado free-running,que permite que el conversor esté continuamente convirtiendo. Para ello, bastacon conectar la señal /INTR de salida a la entrada /WR. Dicha opción sería válidapara la aplicación que presentamos, donde no es necesario conocer con precisiónel periodo de muestreo. La solución que se va a presentar consiste en el controlde dichas señales por parte de la GAL. Esta opción presenta como ventaja unamayor versatilidad a la hora de poder reaprovechar el diseño para otrasaplicaciones donde se requiera conocer con precisión la frecuencia de muestreo.
6.7.3. Codificador binario a BCD
El resultado proporcionado por el conversor no puede visualizarsedirectamente en los visualizadores de siete segmentos; es necesario realizar unaconversión de código binario a BCD. Para ello, vamos a generar una tabla deconversión almacenada en una memoria EPROM (27C256), lo quedenominaremos LUT (look-up table). El dato binario proporcionado por el
282 Aplicaciones y problemas de electrónica digital
conversor se conectará al bus de direcciones de la memoria, una vez ha sidoregistrado por un registro 74HC573. Dicho dato servirá para seleccionar elcódigo de salida a representar en los visualizadores de siete segmentos, que saldrápor el bus de datos de la EPROM.
En la figura 6.33 se ha representado el esquemático del conversor ADC0804junto con la EPROM y el registro paralelo/paralelo (74HC573), necesario paraevitar que mientras el conversor se encuentra en proceso de conversión, ladirección de la EPROM varíe y, en consecuencia, se visualicen datos erróneos.Este registro se habilita con la señal OE generada por el bloque de control, unavez se ha activado la señal /INTR.
1D 1Q2D 2Q3D 3Q4D 4Q5D 5Q6D 6Q7D 7Q
201918
16151413
74HC573
CS
RD
WR
CLKRCLKIN
VIN+VIN-
AGNDVREF/2
DGND INTR
DB7DB6DB5DB4DB3DB2DB1DB0
ADC0804+5V
2
3
1
194
10
6
89
7
VCC
5
1112131415161718
20
GND
1
2345678
150pF
A0A1A2A3A4A5A6
VCC
8D 8QC
+5V
A7A8A9A10
GND
VCC
+5V27C256
A12A13A14
DQ1DQ2DQ3DQ4DQ5DQ6DQ7DQ8
Vpp
+5V
CEOE
/RD/WR
/INTR
Vin
OE
UNIOE
9
10
1211
17
109876543
252421232
252714
A11
1112131516171819
28
12022
DEC
10kΩ
FIGURA 6.33. Conversor A/D junto con bloque codificador.
La memoria EPROM almacena los datos representados en la tabla 6.4,comenzando desde la dirección 0000h y terminando en la 00FFh, es decir, los256 posibles valores dados por el conversor A/D. Dicha memoria tiene unalongitud de palabra de 8 bits, de forma que hemos almacenado en la parte bajadel byte el valor correspondiente a la décima de voltio (DEC), mientras que laparte alta almacena el valor de las unidades (UNI). Como es lógico, al tener querepresentar únicamente 51 valores distintos, y disponer de 256 posiciones dealmacenamiento, existirán varios bytes consecutivos de la memoria con el mismocódigo de salida.
La tabla de conversión se obtiene mediante la siguiente ecuación:
nnx ⋅=255
0,5)(
Proyectos de sistemas digitales 283
siendo n la dirección de la memoria EPROM y x el contenido en esa dirección.El valor x(n) se ha truncado a un decimal, ya que el módulo visualizador tan solodispone de dos visualizadores de siete segmentos: uno correspondiente a lasunidades y otro a las décimas de voltio.
0000h 00 00 00 00 00 00 01 01 01 01 01 02 02 02 02 020010h 03 03 03 03 03 04 04 04 04 04 05 05 05 05 05 060020h 06 06 06 06 07 07 07 07 07 08 08 08 08 08 09 090030h 09 09 09 09 10 10 10 10 10 11 11 11 11 11 12 120040h 12 12 12 13 13 13 13 13 14 14 14 14 14 15 15 150050h 15 15 16 16 16 16 16 17 17 17 17 17 18 18 18 180060h 18 19 19 19 19 19 19 20 20 20 20 20 21 21 21 210070h 21 22 22 22 22 22 23 23 23 23 23 24 24 24 24 240080h 25 25 25 25 25 26 26 26 26 26 27 27 27 27 27 280090h 28 28 28 28 29 29 29 29 29 29 30 30 30 30 30 3100A0h 31 31 31 31 32 32 32 32 32 33 33 33 33 33 34 3400B0h 34 34 34 35 35 35 35 35 36 36 36 36 36 37 37 3700C0h 37 37 38 38 38 38 38 39 39 39 39 39 39 40 40 40000Dh 40 40 41 41 41 41 41 42 42 42 42 42 43 43 43 4300E0h 43 44 44 44 44 44 45 45 45 45 45 46 46 46 46 4600F0h 47 47 47 47 47 48 48 48 48 48 49 49 49 49 49 50
TABLA 6.4. Tabla de conversión almacenada en la EPROM.
6.7.4. Bloque de visualización
Antes de tratar el bloque de control implementado en la GAL22V10, vamos aestudiar el bloque de visualización, de modo que tengamos claro las funcionesque debe llevar a cabo la citada GAL. Al bloque de visualización le llega un datoen código BCD y dos señales que indican si dicho código debe mostrarse en elvisualizador de unidades (SEL_U) o décimas de voltio (SEL_D). Se ha utilizadoun único decodificador con objeto de ahorrar componentes. Ello implica lanecesidad de multiplexar las entradas de datos y de utilizar las dos señales decontrol antes mencionadas.
284 Aplicaciones y problemas de electrónica digital
A
B
C
D
74LS49
abcdefg
SEL_U
SEL_D
RVisualizadores 7 segmentos cátodo común
R’
+5V
D_OUT1
D_OUT2
D_OUT3
D_OUT0
FIGURA 6.34. Bloque de visualización.
El núcleo fundamental lo constituyen dos visualizadores de siete segmentosen configuración cátodo común. Para mostrar el código BCD en cualquiera dedichos visualizadores es necesario un decodificador BCD a 7 segmentos.Teniendo en cuenta la configuración cátodo común de éstos, será necesarioseleccionar uno cuyas salidas sean activas en nivel alto, por ejemplo, el 74LS49.
La configuración se completa con dos transistores NPN que conectarán odesconectarán el cátodo de cada visualizador a tierra. Como sólo recibimos uncódigo BCD, sólo es necesario un decodificador BCD a 7 segmentos, siendo lasseñales SEL_U y SEL_D las que deciden en cual de los dos visualizadores sevisualizará el código BCD. Dichas señales son exclusivas en el sentido queúnicamente una de ellas se encuentra habilitada en cada instante. La señal que seencuentre activa saturará el transistor correspondiente, lo que permitirá el paso decorriente por los LEDs que constituyen el visualizador, y en consecuencia, lailuminación del número.
Dichas señales se irán alternando de forma que se visualizarán las décimas,luego las unidades, de nuevo las décimas, y así sucesivamente. En cada instantesólo hay un visualizador mostrando un dígito, pero si este proceso se hace losuficientemente rápido, por ejemplo, 100Hz, la impresión visual que obtendremoses que ambos visualizadores se encuentran iluminados a la vez.
Con objeto de limitar la corriente que circula por los LEDs de losvisualizadores se han colocado resistencias a la salida del decodificador.
Proyectos de sistemas digitales 285
6.7.5. Bloque de control
El bloque de control tiene básicamente tres funciones fundamentales querealizar: el control del conversor A/D, la carga en el registro del bloque decodificación del dato convertido y la multiplexación del dato proporcionado pordicho bloque para su visualización.
Respecto al control del conversor, éste se lleva a cabo mediante las señales/WR, /RD y /INTR, tal y como ya hemos mencionado anteriormente. La carga delregistro paralelo-paralelo se lleva a cabo mediante la activación de la señal OE.Por último, el bloque de visualización necesita del dato multiplexado arepresentar denominado D_OUT, y las señales de multiplexado SEL_U y SEL_D.
Este bloque de control se ha implementado en una GAL22V10, cuyacodificación ABEL se ha estructurado en torno a una máquina de estados de tresestados. En el primero de ellos (INI) da comienzo el proceso de conversión,poniendo tanto la señal nWR como OE en nivel bajo. Posteriormente, tenemos unestado (CONV), donde se pone en nivel alto la señal nWR, dando comienzo elproceso de conversión. Una vez que estando en dicho estado se activa la señalnINTR, pasamos al último estado (FIN), donde habilitamos tanto la señal nRDpara la lectura del conversor, como la señal OE para la habilitación del registroparalelo-paralelo (figura 6.35).
nWR
nINTR
SEL_U
SEL_D
CLK
ESTADO
nRD
INI CONV FIN
OE
INI CONV FIN
FIGURA 6.35. Cronograma de activación de las señales de la GAL.
286 Aplicaciones y problemas de electrónica digital
La visualización del resultado de la conversión en los visualizadores de sietesegmentos se hace de forma alterna, tal y como hemos explicado anteriormente, yllevada a cabo según el siguiente código:
SEL_D := !SEL_D; SEL_U := SEL_D; when (SEL_D==1) then D_OUT = D_DEC; else D_OUT = D_UNI;
Las ecuaciones en ABEL se representan en la figura 6.36, donde se hancodificado los estados de forma que las variables de estado (nWR y OE)coinciden con salidas de control.
module voltímetrotitle 'voltímetro digital';volt device 'p22v10';
" Entradas CLK, RST pin 1,2; D0,D1,D2,D3 pin 3,4,5,6; D4,D5,D6,D7 pin 7,8,9,10; nINTR pin 11;
" Salidas Y0,Y1,Y2,Y3 pin 22,21,20,19; OE,nWR,nRD pin 23,17,16; SEL_D,SEL_U pin 15,14;
" Definiciones D_DEC = [D3,D2,D1,D0]; D_UNI = [D7,D6,D5,D4]; D_OUT = [Y3,Y2,Y1,Y0]; ESTADO = [nWR, OE]; INI = [0, 0]; CONV = [1, 0]; FIN = [1, 1]; XXX = [0, 1];
state_diagram ESTADO state INI: goto CONV; state CONV: if (nINTR==0) then FIN else CONV; state FIN: goto INI; state XXX: goto INI;
equations nRD = !OE; SEL_D := !SEL_D; SEL_U := SEL_D; when (SEL_D==1) then D_OUT = D_DEC;
Proyectos de sistemas digitales 287
else D_OUT = D_UNI;
nWR.clk = CLK; OE.clk = CLK; SEL_U.clk = CLK; SEL_D.clk = CLK; nWR.re = RST; OE.re = RST; SEL_U.re = RST; SEL_D.re = RST;
end voltímetro;
FIGURA 6.36. Listado ABEL del voltímetro digital.
6.7.6. Consideraciones temporales
Como ya se comentó en la introducción del capítulo 5, la frecuencia demuestreo de una señal analógica para su conversión a digital debe verificar elteorema de muestreo.
En esta aplicación que presentamos de diseño de un voltímetro digital, dondeun observador lee la tensión en cada instante, la frecuencia de variación de laseñal analógica a medir (y, en consecuencia, la frecuencia de muestreo) no puedeser muy alta, puesto que el ojo no será capaz de seguir dichas variaciones (losvisualizadores de 7 segmentos cambiarán muy rápidamente, de forma que el ojo,al integrar dichas variaciones, percibiría un resultado ininteligible).
Por otra parte, y debido al multiplexado del dato en los visualizadores, lafrecuencia de refresco debe ser suficientemente alta como para que no se percibael parpadeo de los mismos. Como ya hemos comentado anteriormente, unafrecuencia de refresco de 100Hz sería más que suficiente. Por tanto, y teniendopresente que hay dos visualizadores, se elige una fCLK de 200Hz para el bloque decontrol. La tabla 6.5 representa los parámetros temporales del conversorutilizado.
Símbolo Parámetro Mín Máx Uni
fCLK Frecuencia de reloj 100 800 kHz
Tconv Tiempo de conversión 62 73 TCLK
tW Anchura del pulso /WR 100 ns
tacc Tiempo de acceso 200 ns
t1h, t0h Retraso Hi-Z 250 ns
tWI, tRI Retraso en deshab. /INTR 450 ns
TABLA 6.5. Parámetros temporales del conversor.
288 Aplicaciones y problemas de electrónica digital
/WR
/INTR
/RD
DB[0..7]
Tconv
DATO
tW
tWI
tacc
tRI
t1h,t0h
FIGURA 6.37. Cronograma de control del conversor.
Analizando los parámetros temporales de la tabla 6.5, correspondientes a lasseñales del conversor representadas en la figura 6.37, comprobamos que lamáquina de estados requiere un único ciclo CONV.
Recordemos que el tiempo de conversión máximo Tconvmax, viene expresadoen periodos del reloj interno del conversor, fijado por el circuito RC de la figura6.33. Como ya se comentó anteriormente, los valores de R y C elegidosproporcionan una frecuencia de 640kHz, de forma que tenemos:
sz
Tconvmax µ114kH640
173 =⋅=
Si se utiliza un reloj de mayor frecuencia, la conversión duraría más de unciclo CONV, por ello se ha establecido la condición de salto al estado FIN enfunción de la señal nINTR.