Osciloscopio de 2 Canales

From Qi-Hardware
Jump to: navigation, search

PROYECTO DE SISTEMAS EMBEBIDOS

Sandra Ximena Romero Almanza y Luis Alexander Patiño Gómez

13scope.png

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

Frente físico del portotipo

[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

Diagrama de flujo del osciloscopio


[edit] ARQUITECTURA

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.

Empaquetado del ADC.

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

Diagrama de bloques del ADC.
  • 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.

Tiempo de conversión (2 canales de operación)

[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:

Diagrama de flujo - Inicialización del ADC

[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.

Comportamiento de lectura para R/W

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.

Comportamiento de escritura para R/W

[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]

Cargalogo1scope2c.JPG

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

Cronoscope.png

[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

[edit] REFERENCIAS

Personal tools
Namespaces
Variants
Actions
Navigation
interactive
Toolbox
Print/export