Lab 8

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 6

Adquisición de Señales mediante Interfaz Gráfica en Matlab y Puertos ADC

ADQUISICIÓN DE SEÑALES MEDIANTE INTERFAZ GRÁFICA EN


MATLAB Y PUERTOS ADC DE FPGA- BASYS3
Juan Felipe Bernal
 e-mail: [email protected]
Roxsana Zapata Herrera 
 e-mail:  [email protected]
Nixon Andrey Torres
 e-mail: [email protected]
María Gómez Simmonds
e-mail: [email protected] 

empresa XILINX. La tarjeta cuenta con: un FPGA de alto


RESUMEN: La práctica de adquisición de rendimiento (XC7A35T-1CPG236C), varios puertos
señales mediante interfaz graficar en Matlab y puertos (USB y VGA). Con esta tarjeta se puede implementar los
ADC de FPGA-BASYS3 tiene como objetivo crear principales diseños combinaciones y secuenciales. Una
diferentes descripciones en VHDL con el fin de que se de sus principales características es que cuenta con: 16
pueda simular y luego de esto utilizar el software Vivado interruptores (SW), 5 botones pulsadores (push button),
y ya con esto se puede hacer una descripción de la 16 led, una pantalla de 7 segmentos de 4 dígitos y 4
tarjeta FPGA ,esto mediante el diseño de una interfaz, conectores de expansión PMOD; suficientes para
las cuales tiene algunas salidas y una estradas ,donde realizar una gran variedad de pruebas sin la necesidad
las salidas se manejan como controles para manejar los de construir hardware adicional. [4]
diferentes motores utilizados en la práctica todo esto se
realizara para lograr utilizar el software de Matlab.

PALABRAS CLAVE: FPGA Basys3,Interfaz,Matlab y


VHDL

1 INTRODUCCIÓN

En el lenguaje de especificación definido por IEEE,


VHDL permite modelar sistemas digitales utilizando
distintos niveles de abstracción a través de un lenguaje
de descripción de circuitos hardware acelerando el
proceso de su diseño. Sirve como herramienta de diseño
lógico, posibilitando la documentación de los proyectos,
su reutilización y hacer distintas modificaciones. Para
realizar este lenguaje de descripción es necesario
pensar en puertas y biestables, evitar bucles
combinacionales y relojes condicionados y saber en qué
partes del circuito es combinacional y secuencial. Lo que
hace interesante el VHDL es que permite dos tipos de
descripciones: por su estructura y/o su comportamiento.
[1] Fig1.FPGA ATRIX 7

VIVADO DESIGN SUITE es el primer juego de MATLAB, será utilizado como un programa para realizar
herramientas de la industria para el desarrollo de comunicación serial, que se define como el proceso de
System on Chip (SoC). Vivado ofrece un entorno de envío de datos de un bit a la vez sobre un canal de
desarrollo para: SoC-strength, IP-centric y System- comunicación. El puerto serial envía y recibe bytes de
centric, con herramientas de última generación que se información, uno a la vez, para realizar este tipo de
han diseñado desde cero para hacer frente a las comunicación se necesita de 3 líneas de transmisión
dificultades de la productividad de sistemas digitales a que son: Tierra (o también llamada referencia),
nivel de integración e implementación. [3] Transmitir y Recibir. Adicionalmente, se encuentra que
es posible enviar datos por una línea mientras se
reciben datos por otra debido a que la transmisión es
La tarjeta BASYS 3 es una plataforma de desarrollo asíncrona.
bastante completa basada en el FPGA ARTIX-7 de la

1
Adquisición de Señales mediante Interfaz Gráfica en Matlab y Puertos ADC

2 DESARROLLO //define_speed=100MHz/(2*desired_clock_fr
equency)
localparam define_speed = 26'd250000;
2.1 MATERIALES // Count value that counts to
define_speed
En la presente practica se hizo uso de diferentes reg [25:0] count;
programas y materiales para encontrar un resultado // Run on the positive edge of the
óptimo los materiales utilizados fueron: clk and rst signals
 Servomotor always @ (posedge(clk),posedge(rst))
 Motor paso a paso begin
 Motorreductor // When rst is high set count and
new_clk to 0
 Puente H
if (rst == 1'b1)
 Protoboard
begin
 Fuente count = 26'b0;
 new_clk = 1'b0;
Los softwares utilizados son: end;
 Vivado else if (count == define_speed)
 Matlab begin
count = 26'b0;
Para la descripción del programa en la tarjeta FPGA se new_clk = ~new_clk;
hizo uso del lenguaje VHDL. end;
else
2.2 CODIGOS begin
count = count + 1'b1;
MOTOR DE PASO new_clk = new_clk;
end;
A continuación se mostrara el código para el end;
funcionamiento del motor paso a paso.
timescale 1ns / 1ps
timescale 1ns / 1ps module clock_div(
module pmod_step_interface( input clk,
input clk, input rst,
input rst, output reg new_clk
);
input direction,
// The constant that defines the
input en, clock speed.
output [3:0] signal_out // Since the system clock is 100MHZ,
); // define_speed =
clock_div clock_Div( 100MHz/(2*desired_clock_frequency)
.clk(clk), localparam define_speed = 26'd250000;
.rst(rst), // Count value that counts to
.new_clk(new_clk_net) define_speed
reg [25:0] count;
);
// Run on the positive edge of the
pmod_step_driver control( clk and rst signals
.rst(rst), always @ (posedge(clk),posedge(rst))
.dir(direction), begin
.clk(new_clk_net), // When rst is high set count and
.en(en), new_clk to 0
.signal(signal_out) if (rst == 1'b1)
); begin
endmodule count = 26'b0;
new_clk = 1'b0;
end;
timescale 1ns / 1ps
else if (count == define_speed)
module clock_div(
begin
input clk,
count = 26'b0;
input rst,
new_clk = ~new_clk;
output reg new_clk
end;
);
else
// The constant that defines the
begin
clock speed.
count = count + 1'b1;
// Since the system clock is 100MHZ,
new_clk = new_clk;

2
Adquisición de Señales mediante Interfaz Gráfica en Matlab y Puertos ADC

end; else if (dir == 1'b1 && en ==


end; 1'b1)
next_state = sig2;
timescale 1ns / 1ps else
module pmod_step_driver( next_state = sig0;
input rst, end
input dir, sig0:
input clk, begin
input en, if (en == 1'b1)
output reg [3:0] signal next_state = sig1;
); else
localparam sig4 = 3'b001; next_state = sig0;
localparam sig3 = 3'b011; end
localparam sig2 = 3'b010; default:
localparam sig1 = 3'b110; next_state = sig0;
localparam sig0 = 3'b000; endcase
reg [2:0] present_state, next_state; end
// run when the present state, always @ (posedge clk, posedge rst)
direction begin
// or enable signals change. if (rst == 1'b1)
always @ (present_state, dir, en) present_state = sig0;
begin else
// Based on the present state present_state = next_state;
// do something. end
case(present_state) always @ (posedge clk)
// If the state is sig4, the begin
state where if (present_state == sig4)
// the fourth signal is held signal = 4'b1000;
high. else if (present_state == sig3)
sig4: signal = 4'b0100;
begin else if (present_state == sig2)
if (dir == 1'b0 && en == signal = 4'b0010;
1'b1) else if (present_state == sig1)
next_state = sig3; signal = 4'b0001;
else if (dir == 1'b1 && en == else
1'b1) signal = 4'b0000;
next_state = sig1; end
else
next_state = sig0; MOTOR REDUCTOR
end
sig3: Se mostrará el código utilizado para el movimiento del
begin motor redactor.
if (dir == 1'b0&& en == 1'b1)
next_state = sig2; library IEEE;
else if (dir == 1'b1 && en == use IEEE.STD_LOGIC_1164.ALL;
1'b1) use IEEE.NUMERIC_STD.ALL;
next_state = sig4; entity pwm_dc_101 is
else PORT(
next_state = sig0; clk : IN STD_LOGIC;
end reset : IN STD_LOGIC;
sig2: entrada: IN STD_LOGIC_VECTOR(6
begin downto 0);
if (dir == 1'b0&& en == 1'b1) salida : OUT STD_LOGIC
next_state = sig1; );
else if (dir == 1'b1 && en == end pwm_dc_101;
1'b1) architecture Behavioral of pwm_dc_101 is
next_state = sig3; signal cnt : UNSIGNED(6 downto 0);
else SIGNAL FREC: natural;
next_state = sig0; begin
end contador: process (clk, reset,
sig1: entrada) begin
begin if reset = '1' then
if (dir == 1'b0&& en == 1'b1) cnt <= (others => '0');
next_state = sig4; elsif rising_edge(clk) then

3
Adquisición de Señales mediante Interfaz Gráfica en Matlab y Puertos ADC

if(FREC = 50000)THEN // Switch 2


if cnt = 99 then 4:
cnt <= (others => '0'); angle = 9'd48;
else // Switch 3
cnt <= cnt + 1; 8:
end if; angle = 9'd72;
end if; // Switch 4
END IF; 16:
end process; angle = 9'd96;
-- Asignación de señales -- // Switch 5
salida <= '1' when (cnt < 32:
UNSIGNED(entrada)) else '0'; angle = 9'd120;
end Behavior; // Switch 6
64:
SERVOMOTOR angle = 9'd144;
// Switch 7
A continuación se encuentra el código para que el 128:
servomotor tuviera un correcto funcionamiento. angle = 9'd168;
// Switch 8
timescale 1ns / 1ps 256:
module Servo_interface ( angle = 9'd192;
input [15:0] sw, // Switch 9
input clr, 512:
input clk, angle = 9'd216;
output PWM // Switch 10
); 1024:
wire [19:0] A_net; angle = 9'd240;
wire [19:0] value_net; // Switch 11
wire [8:0] angle_net; 2048:
sw_to_angle converter( angle = 9'd264;
.sw(sw), // Switch 12
.angle(angle_net) 4096:
); angle = 9'd288;
angle_decoder decode( // Switch 13
.angle(angle_net), 8192:
.value(value_net) angle = 9'd312;
); // Switch 14
comparator compare( 16384:
.A(A_net), angle = 9'd336;
.B(value_net), // Switch 15
.PWM(PWM) 32768:
); angle = 9'd360;
counter count( default:
.clr(clr), angle = 9'd0;
.clk(clk), endcase
.count(A_net) end
); endmodule
Endmodule
timescale 1ns / 1ps 3 ANALISIS DE RESULTADOS
module sw_to_angle(
input [15:0] sw,
output reg [8:0] angle
); A continuación, se mostrará la configuración interna de
// Run when the value of the switches la FPGA.
// changes
always @ (sw)
begin
case (sw)
// Switch 0
1:
angle = 9'd0;
// Switch 1
2:
angle = 9'd24;

4
Adquisición de Señales mediante Interfaz Gráfica en Matlab y Puertos ADC

Fig. 5 Device (Elaboración propia)


Fig2.Configuracion interna de la FPGA(Elaboración
propia) A continuación, se mostrará el reporte de potencia y
posteriormente el significado de estos números.
Esta configuración es variable debido a que cada vez
que se describen los circuitos cambia la configuración
interna de la FPGA Fig 2. Cada bloque está compuesto
por elementos que permiten hacer funciones de
transparencia.

Para lograr el movimiento de los motores se tuvo en


cuenta la tabla de la Fig. 3.

Fig. 6 Reporte de potencia (Elaboración propia)

El reporte de potencia de la Fig. 6. Presenta el resumen


de potencia, muestra las condiciones del entorno en la
que está siendo diseñado, siendo los parámetros
ideales.

Fig. 3. Voltaje de activación de las maquinas eléctricas


rotativas.

Como todas las practicas realizadas hasta el momento


se realizó un díselo en formato esquemáticos el cual se
logra observar en la figura 4
Fig. 7 Reporte de utilización (Elaboración propia)

Se realizó el boceto de una interfaz para que se lograra


realizar el control de los motores, esta interfaz fue
programada en sincronía a la descripción de vivado.
Matlab es utilizado para realizar comunicación serial.

Fig. 4. Diseño esquemático (Elaboración propia)

Otro de los esquemas que nos muestra el programa


automaticamente es el Device el cual enseña cuales son
los pines que fueron utilizados en el dispositivo Fig5.

5
Adquisición de Señales mediante Interfaz Gráfica en Matlab y Puertos ADC

Fig. 8 Interfaz

En la Fig. 8 se pretendía realizar una interfaz la cual se


logrará el manejo de los motores desde esta.

4 CONCLUSIONES
Matlab es un programa el cual permite realizar interfaces
de fácil manejo esto puede ser de gran utilidad para
próximos proyectos.
Con ayuda de la descripción en VHDL y la programación
en FPGA en vivado se logró la activación de los
diferentes motores.
Se encontró la gran utilidad que brindan los PWM para
el movimiento de los motores debido a que la orden
puede estar dada en ángulos y direcciones.
Se realizó a partir de una conversión análoga-digital
descrita para hacer funcionar los motores según la
tensión de la entrada asignada.

5 REFERENCIAS
[1] M. Sanchez-Elez, Introducción a la programación en VHDL.
2014.
[2] F. Pardo, "VHDL. Lenguaje para descripción y modelado de
circuitos", Universidad de Valencia, 1997.
[3] "DISEÑO DE MÁQUINAS DE ESTADO FINITO CON VHDL",
Sistemas embebidos, 2015.
[4] S. De Pablo and S. Cáceres, Diseño de Circuitos Digitales a
Nivel de Registro empleando Diagramas ASM++. Valladolid:
Universidad de Valladolid, 2010.

También podría gustarte