Osciloscopio de 2 Canales
PROYECTO DE SISTEMAS EMBEBIDOS
Sandra Ximena Romero Almanza y Luis Alexander Patiño Gómez
Contents |
[edit] CALIFICACIÓN
Porcentaje | Presentación 20% | Informe 30% | Funcionamiento 50% |
---|---|---|---|
1 Entrega 10% | 0.5 | 0.5 | 0.5 |
2 Entrega 30% | 1 | 1 | 2.5 |
3 Entrega 30% | 0 | 0 | 0
|
4 Entrega 30% | 2.5 | 2.5 | 2.5 |
[edit] INTRODUCCIÓN
Para el proyecto de esta ocasión se desea realizar un osciloscopio de dos canales utilizando como placa base el sistema de la tarjeta SIE, realizando un desarrollo en lenguaje MIPS para el procesamiento de las señales, además de la construcción de los controles básicos para que el usuario pueda definir los rangos de los valores de tensión y de frecuencia que se obtiene en la pantalla.
[edit] Tareas del sistema
[edit] Hardware
- Recibir una señal analógica.
- Digitalización de la señal (muestreo).
- Acondicionamiento de la señal.
- Ajustar base del tiempo.
- Control de memoria.
- Refrescar LCD
- Inicializar los periféricos.
[edit] Software
- Cargar el programa.
- Controlar los procesos.
- Administrar recursos de la memoria.
- Decodificar los datos en memoria.
- Ejecutar interfaz gráfica.
[edit] Funcionamiento
Ya que un osciloscopio es Instrumento utilizado para la medición de la amplitud y período de señales [1] entre otras cosas. Lo que se debe hacer es acondicionar las señales de entrada al oscilocopio, para esto primero se debe utilizar un circuito acondicionador de la amplitud de la señal, las muy pequeñas deben ser amplificadas y las muy grandes deben ser atenuadas para garantizar que las amplitudes de las señales que llegan al ADC esten dentro de los rangos apropiados de operación de este. Luego se deben pasar los datos a las memorias que nos ayudaran a controlar que es lo que se vizualisa en el LCD combinando el barrido vertical (Amplitud) como el horizontal (Base de tiempo) permitiendonos graficar las señales que entran a los canales.
[edit] FUNCIONAMIENTO DEL OSCILOSCOPIO
[edit] Entrada
- Número de canales: 2.
- Ancho de banda analógico ≼ 1 MHz.
- La impedancia de entrada > 1 MΩ | | 47 pF.
- Rango de tensión pico 150mV a 150V. (Datos de simulación)
- Conexión de la sonda: BNC.
[edit] Escala vertical (voltaje)
- Sensibilidad vertical: 6 divisiones.
- Desplazamiento vertical: 0 - 6 divisiones.
- Máxima tensión: 150V.
- Ajustar el offset: Si.
[edit] Escala Horizontal (tiempo)
- Max. frecuencia de muestreo: 8 MSPS.
- Configuración de base de tiempo: 0.1 μs / div hasta 1 seg / div.
[edit] Trigger
- Fuente de disparo: CH1, CH2 automático..
- Rechazar ruido: Si siempre.
[edit] Adquisición
- Longitud de registro: 4 M de puntos por canal.*
- Tiempo que se demora en llenar la memoria interna: 400μs.*
- Refresh pantalla:
[edit] Pantalla
- Mediciones de tiempo y nivel: Si (con apuntador).
- Tamaño de la pantalla: 320 x 240 píxeles.
[edit] Construcción mecánica
- Fuente de alimentación: A través de USB (5V / 250mA).
- Aproximación de tamaño:25 cm x 15 cm x 6 cm.
- Material de la caja: Acrílico.
A continuación se muestra un diagrama de bloques del osciloscopio. las señales de entrada están condicionadas por la primera etapa (tarjeta hija) analógica que dependiendo de los niveles de señal atenúa o amplifica para hacerla adecuada para el ADC. El convertidor de analógico a digital (ADC) recibe las señales analógicas y las convierte en números digitales que son almacenados en su buffer, despues son enviados a la memoria de la FPGA.
Para los voltajes negativos se le aumentará el nivel DC a la señal, de tal forma que el punto más negativo quede por encima de cero.
[edit] Diagrama de flujo
[edit] ARQUITECTURA
[edit] TARJETA HIJA
La tarjeta hija se compone de las siguientes etapas: Adquisición por BNC, Protección, Escalamiento y por último Inversión.
[edit] Esquemático
[edit] PCB
[edit] ADC
En el prototipo se usaran dos ADC uno interno, que hace parte de la SIE y otro externo (en la tarjeta hija).
El ADC interno como periférico fue diseñado anteriormente como se ve Aquí, se usará para permitir muestrear el estado de las llaves selectoras y definir finalmente la escala.
El ADC externo se usará para muestrear la señal de entrada que ya ha sido acondicionada por las otras etapas de la tarjeta hija y enviará una trama paralela de 10 bits con el dato de la amplitud de la muestra.
En la tarjeta hija se implemento un THS1009 que es un CMOS de baja potencia, 10 bits, 8 MSPS, convertidor analógico a digital, tiene 2 entradas analógicas y muestreo simultáneo, su relación Señal de ruido y distorsión: 59 dB en fi = 2 MHz, error de linealidad diferencial: ± 1 LSB. La velocidad, resolución, ancho de banda y operación de una sola fuente lo hace adecuado para aplicaciones en el radar, de alta velocidad adquisición y comunicaciones. La THS1009 consta de dos entradas analógicas que puede mostrar al mismo tiempo. Estas entradas se pueden seleccionar individualmente y configurar para un solo terminal o entradas diferenciales. Tiene un buen funcionamiento de 0 ° C a 70 ° C.
[edit] Diagrama de bloques del ACD
- Referencia de tensión: El THS1009 tiene un built-in de referencia, que proporciona las tensiones de referencia para el ADC. Vrefp se establece en 3,5 V y VREFM se establece en 1,5 V. Una referencia externa también se puede utilizar a través de dos pines de entrada de referencia REFP y REFM, si la fuente de referencia se programa como externa. Los niveles de voltaje aplicado a estos pines establecen los límites superior e inferior de las entradas analógicas para producir una gama completa y lectura de escala cero respectivamente.
- Entradas analógicas: El THS1009 consta de dos entradas analógicas, que se muestran al mismo tiempo. Estas entradas se pueden seleccionar individual y se configura como entradas de una sola terminal o diferencial.
- Convertidor: El THS1009 utiliza un pipeline de 10-bit, arquitectura en varias etapas que alcanza una velocidad de muestreo de alta con bajo consumo potencia. Distribuye la conversión en varios más pequeños sub-bloques de ADC, el refinado de la conversión con una precisión cada vez más elevados ya que el dispositivo pasa a los resultados de una etapa a otra. Un amplificador de muestreo y retención (SCS) en cada una de las etapas da los permisos de la primera etapa para operar en una nueva muestra de la entrada, mientras que el segundo a través de la etapa octava opera en las siete muestras anteriores.
- Conversión: Una señal externa del reloj con un ciclo de trabajo del 50% tiene que ser aplicado a la entrada de reloj (CONV_CLK). Una nueva conversión se inicia con cada flanco de bajada de la señal de reloj aplicada. Los valores de conversión están disponibles en la salida con una latencia de 5 ciclos de reloj.
- SYNC: En el modo multicanal, la primera señal de la sinc se retrasa [7 + (# Canales de muestra)] ciclos de la CONV_CLK después un restablecimiento de SYNC. Esto se debe a la latencia de la arquitectura de los ductos del THS1009.
- Frecuencia de muestreo: El porcentaje máximo posible de conversión por canal depende de los canales de entrada analógica seleccionada. muestra el tipo de cambio máximo de las diferentes combinaciones. El tipo de cambio máximo por canal, fc, viene dado por: fc =8 MSPS/ # de canales.
- Modo de conversión continua: Durante la conversión del ADC opera con un libre funcionamiento del reloj de la señal externa aplicada al CONV_CLK. Con cada flanco de bajada de la señal CONV_CLK da un nuevo valor convertido a disposición del bus de datos.
[edit] Conversión modo continuo
En la siguiente figura se ve que hay una cierta relación de la sincronización necesaria para la señal leída en relación con el reloj de conversión y la especificación de tiempo. Como se ve el flujo de iniciación se muestra el tiempo de conversión cuando dos canales de entrada analógica se seleccionan. La tasa de rendimiento máximo por canal es de 4 MSPS en este modo. El flujo de datos en la parte inferior de la figura muestra el orden de los datos convertidos que están disponibles para el bus de datos.
[edit] Inicialización del THS1009
La inicialización de la THS1009 debe hacerse de acuerdo con el flujo de configuración que se muestra a continuación:
[edit] Manejo de tiempos de la señal para el THS1009
La entrada de escritura se puede configurar para un total combinado de lectura / escritura de entrada (R/W).Los dos chip de entradas de selección se pueden utilizar para interactuar fácilmente a un procesador. La lectura se lleva a cabo por una señal interna de RDint, que se genera de la combinación lógica de la CS0, CS1 y RD para ser válida hace RDint activo mientras la entrada de escritura (WR) está inactivo. La primera de esas señales externas en cambiar a su estado inactivo desactiva RDint otra vez. Para escribir se lleva a cabo por una señal interna de WRint, que se genera de la combinación lógica de las señales externas CS0, CS1 y WR. La última señal externa (ya sea CS0, CS1 o WR) para convertirse en parámetros válidos, WRint se activa mientras que la entrada de lectura (RD) esta inactiva. La primera de esas señales externas va a su estado inactivo y desactiva WRint nuevo. La figura muestra el comportamiento de lectura de tiempo cuando el WR (R/W) de entrada se programa como una combinación de lectura y escritura de entrada R/W. La entrada de RD tiene que estar en alto nivel en esta configuración. Este momento se llama CS0 controlado por CS0 es la última señal externa de CS0, CS1, y R/W que se convierte en válida. La lectura de los datos debe hacerse con un momento determinado en relación con la conversión del reloj CONV_CLK, como se ilustra.
La próxima figura muestra el comportamiento de escritura momento cuando el WR (R/W) de entrada se programa como una combinación de lectura y escritura de entrada R/W. La entrada de RD tiene que estar en alto nivel en esta configuración. Este momento se llama CS0 controlado por CS0, es la última señal externa de CS0, CS1, y R/W que se convierte en válida. El escribir en el THS1009 se puede realizar independientemente de la CONV_CLK de la señal de reloj.
[edit] ADC_THS_peri.v
A continuación se muestra programación del ADC externo (THS1009)
`timescale 1ns / 1ps module ADC_THS_peripheral( clk, sinclk, reset, cs0, ADC_SD, RA, rd, wr);
input clk, sinclk, reset, cs0; input [1:0] RA; input wr; input rd; inout [9:0] ADC_SD; // signals of ADC reg [9:0] ADC_SDs; reg [2:0] w_st0=0;
/**************************************************************************/
// programacion assign ADC_SD =ADC_SDs; always @(posedge clk) begin if(~reset) begin //Reinicio ADC_SDs <=10'h1; w_st0 <=0; end else begin case (w_st0)//Programacion completa 0: begin //Reset del ADC ADC_SDs <=10'h1; if(cs0) w_st0 <=0; else w_st0 <=1; end 1: begin//Clear reset ADC_SDs <=10'h0; if(cs0) w_st0 <=1; else w_st0 <=2; end 2: begin //Configura CR0 ADC_SDs <=10'h44; if(cs0) w_st0 <=2; else w_st0 <=3; end 3: begin//Configura CR1 ADC_SDs <=10'h40; if(cs0) w_st0 <=3; else w_st0 <=4; end 4: begin if(reset !=1) begin w_st0 <=4; end else w_st0 <=0; end endcase end end
endmodule
[edit] IMPLEMENTACIÓN DE LA MEMORIA RAM
Se implementó una memoria RAM en la FPGA de la SIE con dos bloques de 9 bits.
[edit] sram_bus.v
`timescale 1ns / 1ps module sram_bus(clk, sram_datas, addr, nwe, ncs, noe, reset, leds);
parameter B = (7); input clk, nwe, ncs, noe, reset; input [10:0] addr; inout [B:0] sram_datas; output leds; // synchronize signals reg sncs, snwe; reg [10:0] buffer_addr; reg [B:0] buffer_data; // interfaz fpga signals // wire [12:0] addr; // bram interfaz signals reg we; reg w_st; reg [B:0] wdBus; wire [B:0] rdBus; // interefaz signals assignments wire T = ~noe | ncs; assign sram_data = T?8'bZ:rdBus; //-------------------------------------------------------------------------- // synchronize assignment always @(negedge clk) begin sncs <= ncs; snwe <= nwe; buffer_data <= sram_data; buffer_addr <= addr; end // write access cpu to bram always @(posedge clk) if(~reset) {w_st, we, wdBus} <= 0; else begin wdBus <= buffer_data; case (w_st) 0: begin we <= 0; if(sncs | snwe) w_st <= 1; end 1: begin if(~(sncs | snwe)) begin we <= 1; w_st <= 0; end else we <= 0; end endcase end
RAMB16_S9 ba0( .CLK(~clk), .EN(1'b1), .SSR(1'b0), .ADDR(buffer_addr), .WE(we), .DI(wdBus[3:0]), .DO(rdBus[3:0]) );
RAMB16_S9 ba1( .CLK(~clk), .EN(1'b1), .SSR(1'b0), .ADDR(buffer_addr), .WE(we), .DI(wdBus[7:4]), .DO(rdBus[7:4]) );
reg [24:0] counter; always @(posedge clk) begin if (~reset) counter <= {25{1'b0}}; else counter <= counter + 1; end assign led = counter[24];
endmodule
[edit] EXPERIENCIAS CON SIE
[edit] Creando imagen del Kernel
En un comienzo se siguieron las instrucciones de ejecución que se presentaban en construcción de la imagen del Kernel pero era notorio que el proceso de compilación sería muy extenso. Después el profesor creó un manual donde se podía crear una imagen más pequeña del Kernel [2] donde el paso clave estaba en introducir:
$ cp data/qi_lb60/conf/config.minimal .config
Para que de esta forma podudiaramos configurar solo lo que se necesita como parte de la ejecución de procesos en la SIE cuando ya se le ha grabado la imagen de Kernel, la creación de la imagen de esta forma permite que sea más corto el tiempo de compilación sin perder la funcionalidad de la SIE.
Una cosa a tener en cuenta a la hora de realizar el reflah
[edit] Establecer conexión con SIE
Para comenzar ya que la tarjeta viene probada, esta ya tiene por defecto una imagen del Kernel configurada, como se puede ver en la sección de configuración de interfaz de red USB con SIE una vez que se crea una nueva imagen y es necesario realizar un nuevo reflash en la SIE se debe realizar de nuevo
$ telnet 192.168.254.101 $ passwd
Si se genera un error, porque el computador no puede establecer una conexión con la SIE por que ya tiene una configuración ya establecida, es necesario eliminar el archivo que se encuentra en
$ ~/.ssh
Antes de conectar nuevamente la SIE, después de esto y haber asignado la contraseña a la nueva imagen programada en la SIE se puede continuar con la guía para la conexión aquí después de esto se pueden correr los ejemplos como el scope para probar el ADC.
[edit] Cambiar logo
Dentro de las diferentes ayudas que están publicadas se encuentra la de cómo cambiar logo durante la carga de la imagen del Kernel. Después de seguir estos pasos, antes de hacer el make debemos configurar que el logo que se va a compilar es el nuestro, eso se hace en:
$ make kernel_menuconfig Device drivers => Graphics support => Bootup logo
Seleccionamos solo una de las opciones, luego salimos guardando los cambios. Nos dirigimos a /PATH_TO/openwrt-xburst/build_dir/linux-xburst/linux-2.6.32.X/drivers/video/logo y borramos todos los archivos .c que en el nombre digan mono, vga16 o clut224 cuidado de no borrar el archivo logo.c además debemos borrar el archivo logo_openwrt_clut224.o con esto al hacer
$ cd /PATH_TO/openwrt-xburst $ make -j4
No debe presentar ningún problema en la compilación de la nueva imagen del kernel ya con tú logo presente durante la carga inicial de la SIE.
[edit] CRONOGRAMA DE ACTIVIDADES
[edit] ANÁLISIS DE COSTOS
Para el análisis de costos se tomó en cuenta
Costo del prototipo
- Tarjeta SIE................$200.000
- PCB Tarjeta hija...........$250.000
- Componentes del PCB........$220.000
- Sondas, BNC, selectores...$150.000
TOTAL..................$820.000
Trabajo de los estudiantes
- Trabajo a la semana......... 8 horas
- Estudiantes................. 2
- Semanas .................... 8
- Costo hora..................$30.000
TOTAL...................$3'840.000
Gastos adicionales
- Servicios públicos..........$60.000
TOTAL PROTOTIPO..............$4'720.000