Date post: | 04-Nov-2018 |
Category: |
Documents |
Upload: | nguyenthuy |
View: | 217 times |
Download: | 0 times |
LAGO-TN-2012-001
junio 8, 2012
Sistema de Adquisición para cuatro canales analógicos
M. en C. R. Conde1
Facultad de Ciencias Físico Matemáticas
Universidad Autónoma de Puebla
Puebla, Pue., México
Resumen
Se describe el hardware, software y scripts de adquisición de datos para detectores de radiación
Cherenkov, usando una nueva instrumentación para cuatro canales analógicos de entrada. Se muestra la
arquitectura descrita por lenguaje de programación hardware (VHDL) y scripts (shell, perl) para
realizar el control y captura de datos desde una computadora. El hardware propuesto es descrito y
basado por un ADC doble con entrada diferencial logrando bajo nivel de ruido. Esta Nota Técnica
muestra mejoras en el desempeño de anteriores sistemas desarrollados y reportadas en notas técnicas
para dos y tres canales analógicos de entrada, nuestro diseño tiene una razón de conversión de hasta
100MS/s independientes en cada canal.
Introducción
El propósito de esta nota técnica es presentar nuestro reporte del hardware y del software de esta nueva
propuesta de instrumentación, mostrando los componentes y programas principales que componen al
sistema de adquisición para su utilización principal en la colaboración LAGO. La electrónica es
desarrollada por el Estudiante de Doctorado en Física Aplicada M. en C. Rubén Conde en el laboratorio
de Astropartículas cuyo responsable del laboratorio es el Dr. Humberto Salazar de la Facultad de
Ciencias Físico Matemáticas de la Benemérita Universidad Autónoma de Puebla-México.
La instrumentación correspondiente a un tanque contenedor de sensores dentro de un arreglo EAS
generalmente consiste de la electrónica para detección de radiación Cherenkov en agua o en aire,
sensores de parámetros ambientales de temperatura y presión, GPS (Global Position System) y
comunicación inalámbrica con la computadora dentro de un arreglo de comunicación inalámbrica. Con
esto se tiene que la modularidad persiste en el arreglo y de esto se propone un módulo que contenga
los elementos necesarios para obtener la medición dichos parámetros.
Se desarrolló el sistema de adquisición datos basado en dispositivos lógicos programables con la
capacidad de lograr paralelismo en diversos módulos como, por ejemplo, el rate que sería determinado
por diversos umbrales de energía (más abajo se describe), trazas o perfil de pulso. Además, se tiene la
ventaja de poder realizar operaciones de procesamiento digital de pulso sin afectar la operación de
control del sistema principal.
El desarrollo de este sistema está basado en un FPGA Spartan3E (XC3S500E-FG320 4ns[1][3]) que
permite la flexibilidad de incrustar un procesador microblaze RISC de 32Bits y arquitectura Harvard
creado por Xilinx. El uso de este procesador es totalmente parametrizable por ser desarrollado con
lógica programable, y requiere muy pocas conexiones y ningún componente adicional externo para su
funcionamiento, y al cual se le pueden instanciase distintos recursos de hardware tales como puertos
serie, timers, Ethernet, e IPs de propósito específico y general. Transformándolo en un procesador
configurado a la medida para casi cualquier desarrollo.
Se ha incorporado un procesador microblaze en la arquitectura propuesta, y también se utiliza el
lenguaje de descripción hardware (VHDL) para completar la implementación del proyecto,
incrementando así su potencialidad final. Dividiendo el proyecto en dos partes principales:
Por un lado mantenemos los módulos de procesamiento del pulso, independientes entre sí. Con
la idea de obtener el paralelismo en los módulos y buscar una granularidad fina (a nivel de
celdas básicas de las cuales se compone un FPGA, o grupos de CLB – Bloque Lógico
Configurable) para lograr una eficiencia en máxima velocidad y en mínima área de
implementación. Dividiendo la arquitectura en módulos se logra extender los mismos de un
canal a varios canales sin necesidad de rediseñarse. En este caso se utiliza en VHDL.
La segunda parte es realizada insertando un procesador microblaze, el cual tiene la finalidad de
realizar las tareas que sean de naturaleza secuencial como el control e intercomunicación entre
los módulos con el exterior del FPGA. Se usa el lenguaje C para la descripción de los
algoritmos, lo que permite una mayor agilidad en la depuración de código y reducción en el
tiempo de desarrollo del proyecto final.
Hardware
La tarjeta desarrollada consta de dos bloques principales (Fig. 1) donde cada bloque contiene:
1. Dos entradas tipo lemo a través del conector EPL.00.250[2],
2. Un convertidor analógico a digital AD9216[4] dual de hasta 100MSPS,
3. Un reloj configurable para el ADC,
4. Dos bus datos de 10bits,
5. Dos amplificadores diferenciales,
6. Esta tarjeta consta de dos módulos como el listado del punto 1 al 5, con lo que completa la
tarjeta de cuatro canales,
7. y conectividad para los dos bloques con la tarjeta de desarrollo Nexys2 a través del conector
HIROSE FX2-100P.
8. Usa los recursos de la tarjeta Nexys2-500E para la implementación de la arquitectura y la
comunicación con la PC.
Figura 1 Diagrama a bloques de la tarjeta de cuatro canales
El diagrama eléctrico tiene un acoplamiento diferencial (Fig. 2), convirtiendo cada señal de entrada con
referencia simple a señal de salida diferencial para ajustarse a la entrada del ADC dual.
Este circuito es diseñado para lograr un máximo desempeño del AD9216 estableciendo un menor ruido
en la señal y baja impedancia. Ya que, la salida diferencial del AD8138 ayuda a balancear la entrada
diferencial del AD9216.
El nivel en modo común de la salida diferencial del operacional es ajustable por el voltaje en el pin
VOCM del AD8138, el nivel de la señal de entrada puede ajustarse a un nuevo offset adicionado a través
de este pin (Figura 2). También puede usarse este pin para evitar la sobre y sub saturación de la señal
de entrada. El ajuste dinámico en el offset de la señal es ideal para eliminar los convertidores digitales a
analógicos que se usan para controlar desplazamientos en las señales de entrada.
Figura 2 Configuración diferencial
El modo diferencial es utilizado por su balance de error de salida. Para definirlo, primero véase lo
siguiente:
El voltaje diferencial se refiere a la diferencia entre dos voltajes. Por ejemplo, el voltaje diferencial de
salida (ó también llamado voltaje en modo diferencial de salida) es definido como:
En donde, V+OUT y V-OUT se refiere al voltaje en las terminales +OUT y –OUT con respecto a la
terminal de referencia (GND), en algunos casos es común también denominarlos como: AIN+ o AIN-,
A+IN o A-IN.
El voltaje en modo común se refiere al promedio de dos nodos de voltaje. El balance es una medida de
cuan bien las señales diferenciales son empatadas en amplitud exactamente a 1800 en fase. El balance
de salida es determinado por la magnitud de voltaje de salida en modo común divido por la magnitud
del voltaje de salida diferencial
Análisis de entrada single-ended con fuente no referenciada
Existen muchas aplicaciones donde una amplificador deferencial ofrece un medio de conversión de una
señal single-ended a una señal diferencial, como el caso que se muestra en esta nota técnica. La Figura
2 y Figura 3 muestra el caso de un driver single-end no referenciado.
Los parámetros de diseño son la impedancia de la fuente RS, la resistencia de ganancia RG1, y la
ganancia requerida G. Considerando que la ganancia es medida con respecto a la señal de entrada VSIG.
El pin Vocm adiciona un offset a la salida diferencial, la impedancia vista por las entradas tendrán que
ser iguales.
RG2 = RG1+ RS
El valor de la resistencia de retroalimentación es determinado, por:
RF1 = RF2 = G(RG1 + RS).
De esta forma se tiene una configuración con pocos componentes y fácil de determinar su ganancia.
Características del DAQ Hardware
La tarjeta hija de cuatro canales analógicos propuesta es basada en el ADC Dual AD9216-105MSPS
de 10Bits de resolución de Analog Devices, con un rango dinámico de conversión de -1 a +1Volts y
ancho de banda de 320MHz a -3dB, aunque se puede determinar una ganancia en el amplificador
diferencial.
Tiene conectividad con la tarjeta Nexys2 de Digilent Inc. a través de su conector Hirose FX2-100 y
utiliza la comunicación RS232 de esta tarjeta para intercambiar con la PC.
La tarjeta Nexys2 es una tarjeta de desarrollo basada en el FPGA Spartan3E de Xilinx. Contiene un
puerto USB2 de alta velocidad, 16 Mbytes de memoria RAM y ROM, y varios puertos de entrada
salida digitales lo que lo hace ideal para poderse extender a cualquier sistema digital, incluyendo un
procesador empotrado pasado en el microblaze de 32Bits RISC de Xilinx. Un puerto de
comunicaciones de baja velocidad como RS232.
PCB
El diseño del PCB (Figura 4) es desarrollado utilizando el software de diseño Altium [5], la fabricación,
montajes, y pruebas fueron realizadas en las instalaciones del laboratorio de Astropartículas en la
FCFM-BUAP.
- I N
1
Vocm
2
V
+
3
+ o u t
4
-vout
5
V
-
6
N
C
7
+IN
8
+
-
*
R G 1
RF1
RF2
R G 2
G N D
Vocm
V +
V -
V O U T +
V O U T -
R S
G N D
VSIG
+
-
Figura 3 Configuración del Amplificador diferencial
Componentes creados en VHDL
Varios diseños de arquitecturas fueron creados como componentes y almacenados en paquetes para las
pruebas y uso en la versión final. Esto brinda la oportunidad en que los nuevos proyectos acorten su
tiempo de desarrollo, ya que los componentes son reutilizables.
Los principales componentes que completan la arquitectura total del sistema son los siguientes:
top.vhd Entidad de mayor jerarquía en el sistema que interconecta los componentes
cntrlumbral.vhd Dispara señales según el nivel de referencia
comparador.vhd Compara el umbral con los buses de entrada de los ADCs
components.vhd Paquete que contiene módulos de bajo nivel jerárquico
counteRate.vhd Contabiliza eventos
filtroMed.vhd Determina la línea base
GPS_OnCore.vhd Control y lectura del GPS
HP03S.vhd Control y lectura del sensor de presión y temperatura
mfifo.vhd Memoria FIFO
miniuart.vhd Puerto de serial, envío y captura de información
Figura 4 Vista del Sistema.
trazas.vhd Control de trazas
bcd.vhd Control del 4 desplegadores de 7 segements
system_stub.vhd Contiene el archivo ejecutable elf2 del procesador microblaze
2 ELF Executable and Linkable Format
Software
Se han desarrollado procedimientos que confirman el correcto funcionamiento de la instrumentación y
además algunos módulos muestran apropiadamente el funcionamiento por separado.
./ejecuta.sh Descarga el archivo bit (bitstream) de configuración del FPGA.
./umbral.sh Selecciona alguno de los cuatro canales y fija cuatro umbrales.
./traza.sh Elige la captura de trazas.
./rate.sh Elige la captura de rate, valores de GPS, lecturas del sensor de presión y temperatura.
Cada una de éstas opciones de realizan su captura como valores binarios, y el mismo script arrogará los
valores como valores ASCII.
Además, más abajo se muestran scripts que encapsulan los anteriores y realizan combinación de estos
para simplificar el funcionamiento de la adquisición.
Instrucciones para el manejo de adquisición en línea de comando
Se muestra una forma de como iniciar una corrida de captura de datos que es una de las formas en
donde se resaltan las capacidades del sistema de adquisición. La versatilidad de este diseño es tal que
tan sólo modificando los scripts es sencillo ajustarlos a tareas de mayor complejidad sin necesidad de
modificar el hardware ni el firmware dentro del FPGA. Siga paso a paso el resto de esta nota técnica,
una vez que le muestre su funcionamiento Ud. y además de dominarlo, y estará en la capacidad de
poderlo adaptar a sus necesidades.
Los sencillos pasos son los siguientes:
Sugerencia: abra una sesión de terminator que es un programa multi ventanas (lo puede instalar usando
la línea de comando apt-get install terminator).
Ejecútelo y asegúrese estar ubicado en el subdirectorio donde se encuentran los scripts. Debe tener una
de superusuario ya que requiere de los permisos de escritura el disco duro. Finalmente, como va a
ejecutar archivos debe tener los permisos para realizarlo sino es el caso debe ejecutar el comando
chmod 755 * en el subdirectorio ./SCRIPTS Normalmente este paso sólo lo requiere la primera vez que
copia los archivos *sh en su disco
Regresando a la ventana de terminator seccione en tres partes la ventana, usando las propiedades del
mouse sobre la ventana: en una ejecute el kermit (ver más abajo), en la otra ejecute los scripts y la
tercera utilícela para monitorear los archivos que se vayan creando, podría revisar el tamaño de los
archivos respecto al tiempo. Finalmente tendrá una ventana como lo muestra la Figura 5
Figura 5 Terminator programa multiventana
1.- Asegúrese de tener los interruptores en las siguientes posiciones
SW7 SW6 SW5 SW4 SW3 SW2 SW1 SW0
HIGH LOW X X X X X
Dependiendo de cómo ubique los dip-switches es la información que observara en los desplegadores.
Una vez hechas las posibles pruebas con los SW del 4 al 0, se sugiere ponerlos todos en nivel lógico
alto para mantenerlos apagados. Posición en SW(4 downto 0) selecciona
4 desplegadores de 7 segmentos mostrarán los valores cuando se eliga <=
val1_BUmbral(7 downto 0) y val1_AUmbral(7 downto 0) cuando "00000"
val1_DUmbral(7 downto 0) y val1_CUmbral(7 downto 0) cuando "00001"
val2_BUmbral(7 downto 0) y val2_AUmbral(7 downto 0) cuando "00010"
val2_DUmbral(7 downto 0) y val2_CUmbral(7 downto 0) cuando "00011"
val3_BUmbral(7 downto 0) y val3_AUmbral(7 downto 0) cuando "00100"
val3_DUmbral(7 downto 0) y val3_CUmbral(7 downto 0) cuando "00101"
val4_BUmbral(7 downto 0) y val4_AUmbral(7 downto 0) cuando "00110"
val4_DUmbral(7 downto 0) y val4_CUmbral(7 downto 0) cuando "00111"
"000000"&promedio0 cuando "01000"
"000000"&promedio1 cuando "01001"
"000000"&promedio2 cuando "01010"
"000000"&promedio3 cuando "01011"
rateCount0(15 downto 0) cuando "01100"
rateCount0(31 downto 16) cuando "01101"
rateCount1(15 downto 0) cuando "01110"
rateCount1(31 downto 16) cuando "01111"
rateCount2(15 downto 0) cuando "10000"
rateCount2(31 downto 16) cuando "10001"
rateCount3(15 downto 0) cuando "10010"
rateCount3(31 downto 16) cuando "10011"
count5mseg&count5mseg cuando "10100"
"0000111100001111" cuando "10101"
"0000111100001111" cuando "10110"
"0000111100001111" cuando "10111"
"0000111100001111" cuando others
2.- Abra una terminal en kermit, o cualquier terminal de visualización de transmisión recepción serial.
En caso de usar kermit parametrize con los siguientes comandos.
>>kermit
kermit>>set line /dev/ttyUSB0
kermit>>set carrier-watch off
kermit>>set speed 115200
kermit>>connect
Sino se encuentra instalado en su sistema lo puede realizar de la siguiente forma (caso para ubuntu)
$sudo apt-get install ckermit
También es necesario tener instalado el modulo del Serial Port para perl. Lo puede realizar de la
siguiente forma:
$sudo perl -MCPAN -e shell
posteriormente esperé hasta que se muestre el prompt de MCPAN y escriba:
install Device::SerialPort, y concluya una vez terminada la instalación con el comando exit.
Ahora ya está listo para realizar la adquisición, recuerde verificar la conexión de cable serial en caso de
usar una laptop. Si está usando una PC puede modificar los scripts y trasladar la adquisición de
ttyUSB0 a ttyS0.
Para el caso de adquirir rate, el intervalo de tiempo es fijo en 5ms. Utilize la línea de comando:
./getOnlyOneFileRate.sh Como se ha dicho anteriormente debe tener los permiso de ejecución (chmod
755); Al ejecutarse la terminal le pedirá cuatro valores de umbral en cada canal, y se irán transmitiendo
los valores correspondientes al DAQ. Como se muestra en la Figura 6
Figura 6 Ventana que semejante al adquirir rate
Al finalizar de adquirir el rate, el comando ./getOnlyOneFileRate.sh hará un llamado a la función
./expandOnlyOneFileRate.sh tomando como argumento de entrada el nuevo archivo binario creado con
los datos del rate. Si bien, solo se muestran las tablas para el rate, en el archivo binario creado se
contiene los valores para la temperatura, presión y etiquetado del tiempo obtenido por el GPS.
Figura 7 Ejemplo de una tabla del rate en formado ASCII, extraídos del archivo binario.
Para el caso de adquirir trazas, Como se ha dicho anteriormente debe tener los permisos de ejecución
(chmod 755); Una vez que se ejecuta el script, ./getOnlyOneFileTrace.sh, se solicitan los argumentos
para elegir el canal, el valor de umbral y la duración de la adquisición en minutos. Si el umbral es
adecuado para adquirir trazas, los datos serán guardados en un nuevo archivo binario con el prefijo de
fecha_canal_umbral_.bin al final del nombre del archivo.
Figura 8 Ejemplo de la ventana para la adquisición de trazas.
Este script, al finalizar la captura de datos hace el llamado a un segundo script
./expandOnlyOneFileTrace.sh cuyo argumento es el nuevo archivo binario; como resultado se crea un
archivo ascii.
Finalmente, tiene la opción de visualizar los datos ejecutando el script
./viewOnlyOneFileTrace.sh en este caso aparece un listado de los archivos existentes en el
subdirectorio con datos de traza. Se elige un número de archivo y este graficara un intervalo de datos
Figura 9.
Figura 9 La figura superior muestra datos adquiridos de pulsos o trazas.
Opciones de desarrollo
Por la forma en como se ha desarrollado el sistema es sencillo poder personalizar scripts siguiendo el
ordenamiento propuesto en el código VHDL. Por ejemplo, si quisiera tomar el valor actual en el GPS
solo se tendría que enviar #g por el puerto serie a una velocidad de 1115200 baudtios:
case OPCIONES is
when "01110010" =>state_x<=rateState; --#r rate
when "01110100" =>state_x<=trazaState; --#t trazas1
when "01110101" =>state_x<=traza2State; --#u trazas2
when "01110110" =>state_x<=traza3State; --#v trazas3
when "01100101" =>state_x<=tempState; --#e temperatura
when "01110000" =>state_x<=presionState;--#p pression
when "01100111" =>state_x<=GPState; --#g GPS
end case;
Resultados
A continuación se muestran algunas pruebas realizadas a la tarjeta, el histograma del ruido persistente
en la línea base del canal analógico sin conexiones a algún elemento externo es una medida de cuanto
ruido existe en la tarjeta y con ello se determina la mínima señal entre estas es el histograma de ruido
de la misma.
Para obtener el histograma se adquieren las señales en cada uno de los cuatro canales analógicos. El
número de muestras adquirido a 100MSPS es:
Canal 1: 39 705 datos
Canal 2: 43747 datos
Canal 3: 62945 datos
Canal 4: 54871 datos
Dado que los recursos en el FPGA son limitados, y para no detener la velocidad de conversión de
100MSPS se propone adquirirlos por bloques de 1024 datos, o lo que es lo mismo bloques de
1024(10ns) = 1,024useg, como lo muestra el diagrama de la Figura 11.
Los datos en cada canal son tomados en forma independiente y secuencial, no se busca el paralelismo
en la adquisición. Si fuese el caso no habría cambios en el ruido entre los canales, ya que su conversión
a digital está siempre activa.
Figura 10 Se elige un canal de captura, y se toman bloques de 1,024useg y posteriormente son enviados a la
PC. Este tiempo de envío es la separación en tiempo que existe entre cada bloque de datos.
Antes de mostrar los valores de conversión a digital, la Tabla 1 muestra la equivalencia de conversión
de salida con desplazamiento binario (offset binary), utilizada en configuración de polarización
propuesta para AD9216.
Tabla 1 Código de salida
Código (Vin+)-(Vin-) Offset Binario
1023 >0.998 V 11 1111 1111
1023 +0.998 V 11 1111 1111
1022 +0.996 V 11 1111 1110
. . .
. . .
513 +0.002 V 10 0000 0001
512 +0.0V 10 0000 0000
511 -0.002 V 01 1111 1111
. . .
. . .
1 -0.998 V 00 0000 0001
0 -1.00 V 00 0000 0000
0 <-1.0 V 00 0000 0000
La Figura 11 muestra parte de los datos obtenidos por el sistema de adquisición, también se puede
observar la NO variación de la línea base de las señales, la estabilidad de la señal es también observada
en la no dispersión grade de datos indicado en sus histogramas Figura 12.
Figura 11 Gráficas para la señal de entrada en la tarjeta donde las señales son tomadas de la señal de
referencia (GND), es decir, la señal entrante es cortocircuitada a GND. De esta forma se tiene el ruido del
sistema de nuestra tarjeta junto con la Nexys2.
Figura 12 Histogramas para cada canal. Ver Tabla 1
Adquisición libre y perfil de trazas
Manteniendo el mismo diagrama de flujo de la Figura 10, se realiza la adquisición de los cuatro canales
en forma continua (Figura 13), y de la misma forma se realiza la adquisición de las trazas y son
registradas con su respectivo valor de umbral a partir de la línea base que es tomada del promedio de
2**16 datos. La siguiente Figura 13 muestran una corrida de la adquisición de la señal tomada de una
señal de generador de funciones. El pulso tiene una frecuencia de 500KHz, y dado que el generador de
funciones utilizado tiene una frecuencia máxima de 2MHz nos da un pulso a esta frecuencia no
completamente definido pero nos sirve para mostrar el funcionamiento de los módulos implementados.
Figura 13 Datos de uno de los cuatro canales, digitalizados a 100MSPS es decir cada 10ns, en su modo de
adquisición libre y en la gráfica de abajo se muestra la toma de perfiles de traza de 16 puntos por cada
una de ellas.
Histogramas de carga y amplitud máxima de Detector Cherenkov
La calibración de energía absoluta de un tanque es requerida para medir la energía Cherenkov
depositada en cada detector por chubascos secundarios para reconstruir los parámetros del primario (en
particular la energía primaria). La unidad de calibración adoptada es el Vertical Equivalent Muon
(VEM) definida como la carga promedio colectada por un tanque que ha sido atravesado verticalmente
en su centro por un simple muon de alta energía. Estos muones pueden ser fácilmente identificados con
dos plásticos centelladores colocados arriba y abajo del tanque, centrado en su eje.
Muestro datos tomados de un WCD con nuestro sistema a una razón de muestreo de 10ns y
comunicación serial de 115200 baud por segundo. La Figura 14 y Figura 15, muestran la distribución
de carga y la distribución de amplitud. La carga está determinada la integración de 16 puntos que
conforman el perfil de la traza registrada.
NOTA: los histogramas mostrados no tienen un mismo número de perfiles de traza, pero si tienen más
de 100 mil perfiles de traza en cada registro de las señales.
Figura 14 Histograma de carga de señales detectadas por un WCD con nuestro sistema de digitalización
propuesto para tres umbrales de disparo.
Figura 15 Distribución de amplitud de señales detectadas por un WCD con nuestro sistema de
digitalización propuesto para tres umbrales de disparo.
Discusión
Este sistema representa un nuevo desarrollo, que sustituye a versiones anteriores de diseños propuestos
para adquisición y procesamiento de pulsos provenientes de los fotomultiplicadores como medios de
sensor de radiación de Cherenkov.
Conclusiones
Se ha descrito brevemente el software, hardware y funciones scripts de Shell para ambiente Linux
desarrollado para el sistema de cuatro analógicos de hasta 100MS/s, haciendo uso del modo diferencial
que ofrece el ADCs utilizado; con lo que se reduce sustancialmente el número de componentes físicos
respecto a propuestas antes reportadas como en [6] De igual manera se muestra el software
desarrollado para realizar el test del sistema, se muestra un proyecto ejemplo que ilustra el
funcionamiento de la arquitectura propuesta para la adquisición de parámetros como el rate, trazas,
etiquetado de tiempo con un GPS y parámetros como la presión y la temperatura. De igual forma, se
muestran algunos scripts desarrollados en perl y shell bajo ambiente linux los cuales son los
encargados para la adquisición de datos en formato binario y a su vez también realizan el ajuste de los
mismos para dejarlos dispuesto como datos ASCII.
Referencias
1. http://www.xilinx.com
2. http://mexico.newark.com/lemo/epl-00-250-ntn/rf-coaxial-epl-jack-r-a-50ohm-
solder/dp/70C8070
3. http://www.digitlentinc.com
4. http://www.analog.com
5. http://www.altium.com
6. http://cevale2.uis.edu.co/~cevale2/wiki/images/TN_LAGO_2011_001.pdf
7.