Está en la página 1de 4

PROYECTO MICROELECTRÓNICA “CONTROL PWM”

Presentado a: Ing. GABRIEL SÁNCHEZ. Fecha: 6/02/2003

Integrantes: FERNANDO ARTURO DUARTE COD: 160143.


PEDRO JOSE NOSSA. COD: 160181.
CARLOS ALBERTO DIAZ COD: 160280.

PROGRAMAS
RESUMEN
EL ORDEN DE LOS PROGRAMAS QUE SE
Este informe presenta la descripción en VHDL de
IMPLEMENTARON ES EL SIGUIENTE:
un sistema de control de motor DC por PWM con
cambio de giro y retroalimentación de un pulso
de frecuencia generado por el motor y
COUNTUD.VHD → Programa que recibe las
transformado a datos digitales para el
señales de control del PC y genera un conteo
procesamiento a través de un computador. Para
hacia arriba o abajo
este propósito se utilizo el software MAX+PLUS
que sirve de entrada al siguiente bloque.
II versión 10.0 que es una plataforma de diseño,
simulación y programación de la empresa PWM5.VHD → Programa que genera la señal
fabricante de dispositivos semiconductores
PWM de acuerdo al valor binario que se ingresa
ALTERA.
a una frecuencia determinada por el divisor de
frecuencia implementado.
OBJETIVOS.
CGIRO.VHD → Programa que según otra
OBJETIVO GENERAL.
señal de control enviada por el PC, conmuta la
señal PWM entre dos salidas distintas.
Realizar un sistema de control de motor DC por
PWM.
FREC3.VHD → Programa que recibe el pulso
del motor Dc y lo convierte en un dato digital
OBJETIVOS ESPECÍFICOS.
contando el numero de pulsos de reloj que se
ü Realizar un programa en VHDL que
controle la velocidad de un motor por
efectúan durante un instante de tiempo
medio de PWM.
determinado por la velocidad del motor.
ü Implementar en VHDL un sistema que
M8TO4.VHD → Multiplexor de 8 a 4 para que
convierta pulsos de frecuencia en datos
el dato digital pueda ser recibido por el puerto
de tipo digital.
paralelo del PC, se controla por una señal
externa que completa la quinta entrada del
ü Simular en MAX+PLUS II el resultado
puerto paralelo.
de los programa realizados.
--COUNTUD.VHD—
ESPECIFICACIONES
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
Para implementar el control PWM se realizaron 5
use IEEE.STD_LOGIC_ARITH.ALL;
bloques de funciones: 3 para la generación y
use IEEE.STD_LOGIC_UNSIGNED.ALL;
control de cambio de giro de la señal PWM y 2
para la conversión a datos digitales de la señal
entity countud is
de retroalimentación del motor DC. El programa
port(
final propwm.vhd enlaza y distribuye las
ctrl,ena,clk: in std_logic;
entradas y las salidas del dispositivo a
outcount: out std_logic_vector (2 downto 0)
programar con los bloques creados y entre los
);
bloques.
end countud;
También se implemento la función PACKAGE de
architecture behavorial of countud is
VHDL que permite al diseñador crear librerías
signal count: std_logic_vector (2 downto
para al final enlazar los programas.
0):="000";
begin
outcount <= count;
process (clk,ctrl,ena)
begin
if clk'event and clk='1' then --CGIRO.VHD—
if ena = '1' then
if ctrl ='1' then count <= count + '1'; library ieee;
else count <= count - '1'; use ieee.std_logic_1164.all;
end if; use ieee.std_logic_arith.all;
else count <= "000"; use ieee.std_logic_unsigned.all;
end if;
end if; entity cgiro is
end process; port (
inpwm,ctrl,clk: in std_logic;
end behavorial; outpwm1,outpwm2: out std_logic
);
--PWM5.VHD— end cgiro;

library IEEE; architecture behavorial of cgiro is


use IEEE.STD_LOGIC_1164.ALL; begin
use IEEE.STD_LOGIC_ARITH.ALL; process(clk,ctrl)
use IEEE.STD_LOGIC_UNSIGNED.ALL; begin
if clk'event and clk ='1' then
ENTITY pwm5 IS if ctrl='0' then outpwm1 <= inpwm;outpwm2
PORT( <= '0';
clk : IN std_logic; else outpwm2 <= inpwm; outpwm1 <= '0';
pulso : buffer std_logic; end if;
pwm_in : in std_logic_vector(2 end if;
downto 0); end process;
pwm_out : out std_logic); end behavorial;
END pwm5;
--FREC3.VHD—
ARCHITECTURE behavorial OF pwm5 IS
signal count: std_logic_vector (2 downto 0) := library ieee;
"000"; use ieee.std_logic_1164.all;
BEGIN use ieee.std_logic_unsigned.all;
divisor: use ieee.std_logic_arith.all;
PROCESS (clk)
VARIABLE cuenta : INTEGER; entity frec3 is port (
CONSTANT modulo : INTEGER clk,inf: in std_logic;
:= 8; pulso: buffer std_logic;
BEGIN outf: out std_logic_vector (7 downto 0));
IF (clk'EVENT AND clk='1') end frec3;
THEN
IF cuenta = modulo THEN architecture behavorial of frec3 is
cuenta := 0; begin
pulso <= '1'; divisor:
ELSE PROCESS (clk)
cuenta := cuenta + 1; VARIABLE cuenta : INTEGER;
pulso <= '0'; CONSTANT modulo : INTEGER
END IF; := 3;
END IF; BEGIN
END PROCESS divisor; IF (clk'EVENT AND clk='1')
pwm: THEN
process (clk) IF cuenta = modulo THEN
begin cuenta := 0;
if pulso ='1' then count <= "000"; pulso <= '1';
elsif clk'event and clk ='1' then ELSE
count <= count + '1'; cuenta := cuenta + 1;
if count < pwm_in then pulso <= '0';
pwm_out <= '1'; END IF;
else END IF;
pwm_out <= '0'; END PROCESS divisor;
end if; contador:
end if; process (clk,inf)
end process pwm; variable cont: std_logic_vector (7 downto
END behavorial; 0):="00000000";
variable cont1: std_logic_vector (7 downto outcount: out std_logic_vector (2 downto 0)
0):="00000000"; );
end component;
begin
if (clk'event and clk = '1') then component pwm5
if pulso = '1' then port(
if inf = '1' then clk : IN std_logic;
cont := cont + '1'; pulso : buffer std_logic;
cont1:=cont; pwm_in : in std_logic_vector(2
else outf <= cont1;cont:="00000000"; downto 0);
end if; pwm_out : out std_logic
end if; );
end if; end component;
end process contador;
end behavorial; component m8to4
port (
--M8TO4.VHD— indato: in std_logic_vector (7 downto 0);
ctrl,clk: in std_logic;
Library ieee; outd: out std_logic_vector (3 downto 0)
use ieee.std_logic_1164.all; );
use ieee.std_logic_arith.all; end component;
use ieee.std_logic_unsigned.all;
component frec3
entity m8to4 is port (
port ( clk,inf: in std_logic;
indato: in std_logic_vector (7 downto 0); pulso: buffer std_logic;
ctrl,clk: in std_logic; outf: out std_logic_vector (7 downto 0));
outd: out std_logic_vector (3 downto 0)); end component;
end m8to4;
end pack_proyect;
architecture behavorial of m8to4 is
begin Para la creación de la librería WORK, en la
process (clk,ctrl) ventana de compilador se ingresa a:
begin
if clk'event and clk = '1' then INTERFACES → VHDL NETLIST READER
if ctrl = '1' then SETTING..
outd <= indato (7 downto 4);
else outd <= indato (3 downto 0); Donde aparece la ventana de creación de
end if; librerias. (ver en anexos)
end if;
end process; Con la librería WORK creada solo falta
end behavorial; implementar el programa que enlaza los bloques
entre si y los bloques con las entradas y las
salidas del dispositivo.
Con estos cinco programas se implementa la
función PACKAGE y se crea la librería WORK que --propwm.vhd—
luego es convocada por el programa principal.
library ieee;
--PACK_PROYECT.VHD— library work;

library ieee; use ieee.std_logic_1164.all;


USE ieee.std_logic_1164.all; use ieee.std_logic_arith.all;
PACKAGE pack_proyect is use ieee.std_logic_unsigned.all;
use work.pack_proyect.all;
component cgiro
port ( entity propwm is
inpwm,ctrl,clk: in std_logic; port(
outpwm1,outpwm2: out std_logic enable: in std_logic;
); control: in std_logic;
end component; clk: in std_logic;
controlg: in std_logic;
component countud controlm: in std_logic;
port( infrec: in std_logic;
ctrl,ena,clk: in std_logic; outpwm1: out std_logic;
outpwm2: out std_logic;
outpul1: buffer std_logic; Podemos ver que las conexiones internas se
outpul2: buffer std_logic; realizan a través de señales globales.
outfrec: out std_logic_vector(3 downto 0)
); (VER DIAGRAMA DE BLOQUES EN ANEXOS)
end propwm;
Después de compilar cada uno de los programas
architecture behavorial of propwm is por separado se realiza la simulación también
signal pwmaux: std_logic; dentro del software MAX+PLUS II.
signal countaux: std_logic_vector (2 downto 0);
signal frecaux: std_logic_vector (7 downto 0);
begin CONCLUSIONES.
contador:countud
port map( Ø La descripción de circuitos y
--Entradas dispositivos en VHDL es una gran
clk => clk, herramienta para el diseño de sistemas
ctrl => control, digitales.
ena => enable,
--Salidas Ø VHDL, CPLD’s y FPGA’s de ALTERA
outcount=> countaux permiten la implementación de
); sistemas integrados que hacen mas
fácil y versátil la creación de proyectos
pwm: pwm5 digitales.
port map(
--Entradas Ø La creación de bloques y librerías hacen
clk => clk, que el diseño de un sistema digital sea
pwm_in => countaux, mas sencillo.
--Salidas
pulso => outpul1, Ø Las simulaciones realizadas mediante
pwm_out => pwmaux MAX+PLUS II son una gran
); herramienta para la implementación de
los proyectos digitales.
cambiog: cgiro
port map(
--Entradas
clk => clk,
inpwm => pwmaux,
ctrl => controlg,
--Salidas
outpwm1 => outpwm1,
outpwm2 => outpwm2
);

frecm: frec3
port map(
--Entradas
clk => clk,
inf => infrec,
--Salidas
pulso => outpul2,
outf => frecaux
);

mult: m8to4
port map(
--Entradas
clk => clk,
ctrl => controlm,
indato => frecaux,
--Salidas
outd => outfrec
);

end behavorial;

También podría gustarte