Materia:
Dispositivos Digitales
Programables.
Nombre de la Tarea:
Practica 18
Nombre del estudiante:
Aolani Dali Chavez Perez
Ismael López Hernández
Gabriela Viridiana Noyola Félix
Axel Emmanuel Serratos
Ramírez
Juan Jose de León Vega
Carlos Daniel Vázquez Quezada
Nombre del Profesor:
Dr. José Roberto Reyes Barón
Fecha:
18/03/2025
Introducción.
El control automático de iluminación es una aplicación común en sistemas de automatización, donde
se busca optimizar el uso de energía y mejorar la comodidad del usuario. En esta práctica, se
implementará un sistema de control de iluminación utilizando un sensor LDR (Light Dependent
Resistor) y un foco como actuador, programado en un CPLD a través de Quartus.
Marco Teórico.
Los CPLD son dispositivos microelectrónicos que integran
elementos lógicos programables, estos elementos pueden
conectarse entre sí o con las salidas GPIO usando una matriz de
conexiones programables. Los CPLD guardan su configuración y
está disponible al ser energizados, esto disminuye la
complejidad de sus tarjetas y programación. El chip CPLD Altera
U119 MAX II EPM240 fabricado por Altera®(ahora parte de
Intel) posee 240 elementos lógicos(LE). Todos los pines de
entradas/salidas están expuestos en los conectores header para
poder usarlos con periféricos como memorias u otros módulos de expansión. Para programar el CPLD
debemos conectar el programador/configurador Altera USB Blaster vía el conector JTAG y utilizar el
software Intel Quartus. Para alimentar la tarjeta recomendamos el uso de la Fuente de alimentación
DC 5V/1A.
Maquina de estados.
Una máquina de estados finitos es un modelo matemático utilizado para describir sistemas que
pueden encontrarse en un conjunto finito de estados y cambiar entre ellos en función de entradas
externas. Existen dos tipos principales de MEF:
• Máquinas de Moore: En estas, la salida depende únicamente del estado actual.
• Máquinas de Mealy: La salida depende tanto del estado actual como de las entradas.
El diseño de una MEF implica la definición de los estados, las transiciones entre ellos, las condiciones
de entrada y las salidas correspondientes. Para su implementación en hardware digital, se utilizan
herramientas como Quartus, que permite la programación en lenguajes como VHDL o Verilog,
facilitando la síntesis y simulación del circuito.
En el caso de los motores a pasos, estos dispositivos convierten impulsos eléctricos en movimientos
angulares discretos. El modelo 28BYJ-48 es un motor unipolar que se controla a través de secuencias
de activación de sus bobinas. El controlador ULN2003 facilita la entrega de corriente adecuada para
el funcionamiento del motor, recibiendo señales lógicas provenientes de la MEF implementada.
Las MEF se utilizan ampliamente en la automatización de procesos industriales, robótica y sistemas
embebidos, permitiendo un control preciso y eficiente de dispositivos mecánicos y eléctricos.
SENSOR de humo
sensores de humo como el MQ-2, MQ-135 y otros similares. Estos sensores generan una señal analógica en
función de la cantidad de humo o gas en el aire.
El LM393 actúa como un comparador:
Recibe la señal analógica del sensor y la compara con un umbral definido.
Genera una salida digital (0 o 1) dependiendo de si la concentración de humo supera el umbral.
Puede activar una alarma, un LED o un microcontrolador cuando se detecta humo.
2
Especificaciones.
• Voltaje de operación: 3.3V – 5V
• Salida: Analógica y digital (gracias al comparador LM393)
• Sensibilidad ajustable: Potenciómetro integrado
• Compatibilidad: Microcontroladores como Arduino, ESP32, Raspberry Pi
Material.
CPLD Max II EPM240T100C5
Programador y cables del programador
Cable de alimentación del CPLD (Plug Invertido-USB A)
Cables jumper (dupont) Hembra-Macho
Cables jumper (dupont) Macho-Macho
Sensor de humo
Código del diseño. Testbench
-- JUAN JOSE DE LEON VEGA
-- CARLOS DANIEL VAZQUEZ QUEZADA
-- GABRIELA VIRIDIANA NOYOLA FELIX
-- AOLANI DALI CHAVEZ PEREZ
-- ISMAEL LOPEZ HERNANDEZ
-- AXEL EMMANUEL SERRATOS REMIREZ
-- ***************************************************************************
-- This file contains a Vhdl test bench template that is freely editable to
-- suit user's needs .Comments are provided in each section to help the user
-- fill out necessary details.
-- ***************************************************************************
-- Generated on "03/17/2025 22:50:14"
-- Vhdl Test Bench template for design : PRACTICA18
--
-- Simulation tool : ModelSim-Altera (VHDL)
--
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY PRACTICA18 IS
PORT(
CLK_50MHZ : IN STD_LOGIC; -- Reloj de 50 MHz
SENSOR : IN STD_LOGIC; -- Entrada del sensor de humo (digital)
RST : IN STD_LOGIC; -- Reset
CLK : OUT STD_LOGIC; -- Salida del reloj reducido
BUZZER : OUT STD_LOGIC -- Actuador: Buzzer
);
END PRACTICA18;
ARCHITECTURE Behavioral OF PRACTICA18 IS
SIGNAL clk_temp : STD_LOGIC_VECTOR (25 DOWNTO 0) := (OTHERS => '0');
SIGNAL clk_new : STD_LOGIC := '0';
3
BEGIN
-- Divisor de reloj (reducción de 50 MHz)
PROCESS (CLK_50MHZ)
BEGIN
IF rising_edge(CLK_50MHZ) THEN
IF RST = '1' THEN
clk_temp <= (OTHERS => '0');
ELSE
clk_temp <= clk_temp + '1';
END IF;
END IF;
END PROCESS;
clk_new <= clk_temp(18);
CLK <= clk_new;
-- Lógica del buzzer
PROCESS (SENSOR)
BEGIN
IF SENSOR = '1' THEN
BUZZER <= '1'; -- Activa el buzzer si hay humo
ELSE
BUZZER <= '0'; -- Apaga el buzzer si no hay humo
END IF;
END PROCESS;
END Behavioral;
-- Test Bench para PRACTICA18
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY PRACTICA18_vhd_tst IS
END PRACTICA18_vhd_tst;
ARCHITECTURE PRACTICA18_arch OF PRACTICA18_vhd_tst IS
-- Señales de prueba
SIGNAL BUZZER : STD_LOGIC;
SIGNAL CLK : STD_LOGIC := '0';
SIGNAL CLK_50MHZ : STD_LOGIC := '0';
SIGNAL RST : STD_LOGIC := '0';
SIGNAL SENSOR : STD_LOGIC := '0';
COMPONENT PRACTICA18
PORT (
BUZZER : OUT STD_LOGIC;
CLK : OUT STD_LOGIC;
CLK_50MHZ : IN STD_LOGIC;
RST : IN STD_LOGIC;
SENSOR : IN STD_LOGIC
);
END COMPONENT;
BEGIN
-- Instancia del módulo a probar
i1 : PRACTICA18
PORT MAP (
BUZZER => BUZZER,
CLK => CLK,
CLK_50MHZ => CLK_50MHZ,
RST => RST,
SENSOR => SENSOR
);
4
-- Generador de reloj
clk_process : PROCESS
BEGIN
WHILE TRUE LOOP
CLK_50MHZ <= '0';
WAIT FOR 10 ns;
CLK_50MHZ <= '1';
WAIT FOR 10 ns;
END LOOP;
END PROCESS clk_process;
-- Proceso de prueba
stimulus : PROCESS
BEGIN
-- Reset inicial
RST <= '1';
WAIT FOR 50 ns;
RST <= '0';
-- Caso 1: Sin humo
SENSOR <= '0';
WAIT FOR 100 ns;
-- Caso 2: Detección de humo
SENSOR <= '1';
WAIT FOR 100 ns;
-- Caso 3: Humo desaparece
SENSOR <= '0';
WAIT FOR 100 ns;
-- Fin de la simulación
WAIT;
END PROCESS stimulus;
END PRACTICA18_arch;
Diseño.
-- JUAN JOSE DE LEON VEGA
-- CARLOS DANIEL VAZQUEZ QUEZADA
-- GABRIELA VIRIDIANA NOYOLA FELIX
-- AOLANI DALI CHAVEZ PEREZ
-- ISMAEL LOPEZ HERNANDEZ
-- AXEL EMMANUEL SERRATOS REMIREZ
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY PRACTICA18 IS
PORT(
CLK_50MHZ : IN STD_LOGIC; -- Reloj de 50 MHz
SENSOR : IN STD_LOGIC; -- Entrada del sensor de humo (digital)
RST : IN STD_LOGIC; -- Reset
CLK : OUT STD_LOGIC; -- Salida del reloj reducido
BUZZER : OUT STD_LOGIC -- Actuador: Buzzer
);
END PRACTICA18;
ARCHITECTURE Behavioral OF PRACTICA18 IS
5
SIGNAL clk_temp : STD_LOGIC_VECTOR (25 DOWNTO 0) := (OTHERS => '0');
SIGNAL clk_new : STD_LOGIC := '0';
BEGIN
-- Divisor de reloj (reducción de 50 MHz)
PROCESS (CLK_50MHZ)
BEGIN
IF rising_edge(CLK_50MHZ) THEN
IF RST = '1' THEN
clk_temp <= (OTHERS => '0');
ELSE
clk_temp <= clk_temp + '1';
END IF;
END IF;
END PROCESS;
clk_new <= clk_temp(18);
CLK <= clk_new;
-- Lógica del buzzer
PROCESS (SENSOR)
BEGIN
IF SENSOR = '0' THEN
BUZZER <= '1'; -- Activa el buzzer si hay humo
ELSE
BUZZER <= '0'; -- Apaga el buzzer si no hay humo
END IF;
END PROCESS;
END Behavioral;
6
RTL Viewer
PIN PLANNER
7
Diseño Físico.
8
Conclusiones.
En esta práctica, implementamos un control de iluminación automático utilizando un CPLD, donde el
sensor de humo detectó el humo y activó o desactivó el sensor según fuera necesario. Para ello,
diseñamos y codificamos una máquina de estados finitos en Quartus, lo que nos permitió gestionar
el comportamiento del sistema de manera estructurada y eficiente.
Referencias.
1. Altera Corporation. (2012). Quartus II Handbook Version 12.1 Volume 1: Design and
Synthesis. Recuperado de
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/qts/
qts_qii5v1.pdf
2. Altera Corporation. (2004). MAX 3000A Programmable Logic Device Family Data Sheet.
Recuperado de
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ds/m30
00a.pdf
3. Texas Instruments. (2002). ULN2003A: Darlington Transistor Arrays. Recuperado de
https://www.ti.com/lit/ds/symlink/uln2003a.pdf
4. Brown, S., & Vranesic, Z. (2009). Fundamentals of digital logic with VHDL design (3rd
ed.). McGraw-Hill.
5. Mano, M. M., & Ciletti, M. D. (2018). Digital design: With an introduction to the
Verilog HDL, VHDL, and systemVerilog (6th ed.). Pearson.