Está en la página 1de 4

PROYECTO MICROELECTRNICA CONTROL PWM Presentado a: Ing. GABRIEL SNCHEZ.

Fecha: 6/02/2003 Integrantes: FERNANDO ARTURO DUARTE PEDRO JOSE NOSSA. CARLOS ALBERTO DIAZ COD: 160143. COD: 160181. COD: 160280.
PROGRAMAS EL ORDEN DE LOS PROGRAMAS QUE SE IMPLEMENTARON ES EL SIGUIENTE: COUNTUD.VHD Programa que recibe las seales de control del PC y genera un conteo hacia arriba o abajo que sirve de entrada al siguiente bloque. PWM5.VHD Programa que genera la seal PWM de acuerdo al valor binario que se ingresa a una frecuencia determinada por el divisor de frecuencia implementado. CGIRO.VHD Programa que segn otra seal de control enviada por el PC, conmuta la seal PWM entre dos salidas distintas. FREC3.VHD Programa que recibe el pulso del motor Dc y lo convierte en un dato digital contando el numero de pulsos de reloj que se efectan durante un instante de tiempo determinado por la velocidad del motor. M8TO4.VHD Multiplexor de 8 a 4 para que el dato digital pueda ser recibido por el puerto paralelo del PC, se controla por una seal externa que completa la quinta entrada del puerto paralelo. --COUNTUD.VHD ESPECIFICACIONES Para implementar el control PWM se realizaron 5 bloques de funciones: 3 para la generacin y control de cambio de giro de la seal PWM y 2 para la conversin a datos digitales de la seal de retroalimentacin del motor DC. El programa final propwm.vhd enlaza y distribuye las entradas y las salidas del dispositivo a programar con los bloques creados y entre los bloques. Tambin se implemento la funcin PACKAGE de VHDL que permite al diseador crear libreras para al final enlazar los programas. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity countud is port( ctrl,ena,clk: in std_logic; outcount: out std_logic_vector (2 downto 0) ); end countud; architecture behavorial of countud is signal count: std_logic_vector (2 0):="000"; begin outcount <= count; process (clk,ctrl,ena) begin downto

RESUMEN Este informe presenta la descripcin en VHDL de un sistema de control de motor DC por PWM con cambio de giro y retroalimentacin de un pulso de frecuencia generado por el motor y transformado a datos digitales para el procesamiento a travs de un computador. Para este propsito se utilizo el software MAX+PLUS II versin 10.0 que es una plataforma de diseo, simulacin y programacin de la empresa fabricante de dispositivos semiconductores ALTERA. OBJETIVOS. OBJETIVO GENERAL. Realizar un sistema de control de motor DC por PWM. OBJETIVOS ESPECFICOS. Realizar un programa en VHDL que controle la velocidad de un motor por medio de PWM. Implementar en VHDL un sistema que convierta pulsos de frecuencia en datos de tipo digital. Simular en MAX+PLUS II el resultado de los programa realizados.

if clk'event and clk='1' then if ena = '1' then if ctrl ='1' then count <= count + '1'; else count <= count - '1'; end if; else count <= "000"; end if; end if; end process; end behavorial; --PWM5.VHD library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY pwm5 IS PORT( clk : IN std_logic; pulso : buffer std_logic; pwm_in : in std_logic_vector(2 downto 0); pwm_out : out std_logic); END pwm5; ARCHITECTURE behavorial OF pwm5 IS signal count: std_logic_vector (2 downto 0) := "000"; BEGIN divisor: PROCESS (clk) VARIABLE cuenta : INTEGER; CONSTANT modulo : INTEGER := 8; BEGIN IF (clk'EVENT AND clk='1') THEN IF cuenta = modulo THEN cuenta := 0; pulso <= '1'; ELSE cuenta := cuenta + 1; pulso <= '0'; END IF; END IF; END PROCESS divisor; pwm: process (clk) begin if pulso ='1' then count <= "000"; elsif clk'event and clk ='1' then count <= count + '1'; if count < pwm_in then pwm_out <= '1'; else pwm_out <= '0'; end if; end if; end process pwm; END behavorial;

--CGIRO.VHD library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity cgiro is port ( inpwm,ctrl,clk: in std_logic; outpwm1,outpwm2: out std_logic ); end cgiro; architecture behavorial of cgiro is begin process(clk,ctrl) begin if clk'event and clk ='1' then if ctrl='0' then outpwm1 <= inpwm;outpwm2 <= '0'; else outpwm2 <= inpwm; outpwm1 <= '0'; end if; end if; end process; end behavorial; --FREC3.VHD library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity frec3 is port ( clk,inf: in std_logic; pulso: buffer std_logic; outf: out std_logic_vector (7 downto 0)); end frec3; architecture behavorial of frec3 is begin divisor: PROCESS (clk) VARIABLE cuenta : INTEGER; CONSTANT modulo : INTEGER := 3; BEGIN IF (clk'EVENT AND clk='1') THEN IF cuenta = modulo THEN cuenta := 0; pulso <= '1'; ELSE cuenta := cuenta + 1; pulso <= '0'; END IF; END IF; END PROCESS divisor; contador: process (clk,inf) variable cont: std_logic_vector (7 downto 0):="00000000";

variable cont1: std_logic_vector 0):="00000000";

(7 downto

outcount: out std_logic_vector (2 downto 0) ); end component; component pwm5 port( clk : IN std_logic; pulso : buffer std_logic; pwm_in : in std_logic_vector(2 downto 0); pwm_out : out std_logic ); end component; component m8to4 port ( indato: in std_logic_vector (7 downto 0); ctrl,clk: in std_logic; outd: out std_logic_vector (3 downto 0) ); end component; component frec3 port ( clk,inf: in std_logic; pulso: buffer std_logic; outf: out std_logic_vector (7 downto 0)); end component; end pack_proyect; Para la creacin de la librera WORK, en la ventana de compilador se ingresa a: INTERFACES VHDL NETLIST READER SETTING.. Donde aparece la ventana de creacin de librerias. (ver en anexos) Con la librera WORK creada solo falta implementar el programa que enlaza los bloques entre si y los bloques con las entradas y las salidas del dispositivo. --propwm.vhd library ieee; library work; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; use work.pack_proyect.all; entity propwm is port( enable: in std_logic; control: in std_logic; clk: in std_logic; controlg: in std_logic; controlm: in std_logic; infrec: in std_logic; outpwm1: out std_logic;

begin if (clk'event and clk = '1') then if pulso = '1' then if inf = '1' then cont := cont + '1'; cont1:=cont; else outf <= cont1;cont:="00000000"; end if; end if; end if; end process contador; end behavorial; --M8TO4.VHD Library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity m8to4 is port ( indato: in std_logic_vector (7 downto 0); ctrl,clk: in std_logic; outd: out std_logic_vector (3 downto 0)); end m8to4; architecture behavorial of m8to4 is begin process (clk,ctrl) begin if clk'event and clk = '1' then if ctrl = '1' then outd <= indato (7 downto 4); else outd <= indato (3 downto 0); end if; end if; end process; end behavorial; Con estos cinco programas se implementa la funcin PACKAGE y se crea la librera WORK que luego es convocada por el programa principal. --PACK_PROYECT.VHD library ieee; USE ieee.std_logic_1164.all; PACKAGE pack_proyect is component cgiro port ( inpwm,ctrl,clk: in std_logic; outpwm1,outpwm2: out std_logic ); end component; component countud port( ctrl,ena,clk: in std_logic;

outpwm2: out std_logic; outpul1: buffer std_logic; outpul2: buffer std_logic; outfrec: out std_logic_vector(3 downto 0) ); end propwm; architecture behavorial of propwm is signal pwmaux: std_logic; signal countaux: std_logic_vector (2 downto 0); signal frecaux: std_logic_vector (7 downto 0); begin contador:countud port map( --Entradas clk => clk, ctrl => control, ena => enable, --Salidas outcount=> countaux ); pwm: pwm5 port map( --Entradas clk => clk, pwm_in => countaux, --Salidas pulso => outpul1, pwm_out => pwmaux ); 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;

Podemos ver que las conexiones internas se realizan a travs de seales globales. (VER DIAGRAMA DE BLOQUES EN ANEXOS) Despus de compilar cada uno de los programas por separado se realiza la simulacin tambin dentro del software MAX+PLUS II. CONCLUSIONES. La descripcin de circuitos y dispositivos en VHDL es una gran herramienta para el diseo de sistemas digitales. VHDL, CPLDs y FPGAs de ALTERA permiten la implementacin de sistemas integrados que hacen mas fcil y verstil la creacin de proyectos digitales. La creacin de bloques y libreras hacen que el diseo de un sistema digital sea mas sencillo. Las simulaciones realizadas mediante MAX+PLUS II son una gran herramienta para la implementacin de los proyectos digitales.

También podría gustarte