Práctica #16
Nombre de la práctica : Implementación del diagrama de estados mediante bloques UDB
Nombre: David Santiago Martínez Molina
Código: 20181005164
Asignatura: Fundamentos de circuitos digitales
Programa : Ingeniería Electrónica
Docente : César Andrey Perdomo Charry
INTRODUCCIÓN:
En el presente informe se mostrará el desarrollo de la práctica #16. Para esta práctica primeramente visualizamos un vídeo en donde se manejan los bloques de estado UDB y con ello entender básicamente como es su funcionamiento y la manera de implementarlos. Como ejercicio y práctica, se nos plantea el siguiente problema:
Para realizar este problema primeramente se dará un repaso sobre las máquinas de estado.
Los circuitos secuenciales también se llaman máquinas de estado finito (FSM, fi nite state machines), un nombre más formal que a menudo se halla en la bibliografía técnica. El nombre proviene del hecho de que el comportamiento funcional de estos circuitos puede representarse mediante un número finito de estados.
El modelo más general de un circuito secuencial tiene entradas, salidas y estados internos. Se acostumbra distinguir entre dos modelos de circuitos secuenciales: el modelo Mealy y el modelo Moore. Difieren en la forma en que se genera la salida. En el modelo Mealy, la salida es función tanto del estado actual como de la entrada. En el modelo Moore, la salida sólo es funcióndel estado actual. En un modelo Moore, las salidas del circuito secuencial se sincronizan con el reloj porque sólo dependen de salidas de flip-flop que están sincronizadas con el reloj. En un modelo Mealy, las salidas podrían cambiar si las entradas cambian durante el ciclo de reloj. Además, las salidas podrían tener valores falsos momentáneos debidos al retardo entre el momento en que las entradas cambian y el momento en que cambian las salidas de flip-flop. Para sincronizar un circuito tipo Mealy, las entradas del circuito secuencial se deben sincronizar con el reloj y las salidas se deben muestrear únicamente durante el borde del reloj.
MATERIALES Y EQUIPOS:
-Psoc 5LP
-Computador con Psoc Creator
-Tarjeta desarrolladora.
-Cables con conectores.
-Barra de Leds
-Pulsador.
METODOLOGÍA:
Aplicando lo visto en el vídeo al problema planteado, primeramente se realiza el diagrama de estados de los semáforos Verde y Rojo mediante los bloques UDB en Psoc, y se implementa de la siguiente manera:
Entonces de esta manera ya se tiene el control del encendido de los semáforos Verde y Rojo, pero ahora quedaría implementar los requerimientos para que ocurran estos cambios de estado, o sea realizar el diseño de control para las entradas que me permiten cambiar del estado Verde al estado Rojo. Para realizar dicho control se plantea mediante dos contadores de 6 bits con un clock a 1 Hz para que se tenga un ciclo por segundo, ya que según las indicaciones inicialmente se tiene el semáforo verde durante 40 segundos y el rojo durante 60 segundos. De esta manera el primer contador corresponde al del semáforo verde y el segundo al del semáforo rojo, y para verificar que se cumplan los 40 y 60 segundos de cada semáforo, se realiza mediante un comparador en donde una de sus entradas va a tener las salidas del contador y en la otra entrada estarán los segundos que se necesitan en su correspondiente binario, y en la salida se va a indicar el momento exacto en el que el contador este igual a los segundos correspondientes de cada semáforo. Pero no se puede olvidar que se tiene un sensor que cuenta los carros que pasan por el semáforo, y si dicho sensor detecta que pasan 10 o más carros se invierte la temporización de los semáforos, esto quiere decir que el semáforo cuando se encuentre en verde su duración será de segundos y cuando pase a rojo su duración tiene que ser de 40 segundos, pero todo esto en el mismo ciclo. Para que se cumpla esta condición lo hice mediante un Mux 2 a 1, donde en cada entrada se encuentra un bus de 6 datos, y en la entrada 0 se encuentra el número 60 y en la entrada 1 el número 40. El selector de este Mux va a ser la salida del sensor que me indica cuando pasen 10 o más carros, que se encuentra negado para el primer Mux ya que si el sensor es 0 pues en la salida del Mux se tiene el número 40 que corresponde al tiempo de duración del semáforo verde y cuando el sensor es 1 a la salida del Mux se va a tener el número 60. Entonces para el contador del semáforo verde se tiene:
En la anterior imagen se observa que en la entrada enable del contador se tiene la salida negada de un Flip Flop D en el cual ingresa la salida del comparador. Esto se debe ya que inicialmente la salida del comparador esta en 0, por ende el contador esta activado y pues realiza el respectivo conteo, pero cuando en la salida del comparador este un 1, o sea el contador es igual al número 60 o 40(dependiendo del sensor), automáticamente el contador quedará inhabilitado y se reseteara. De esta manera se controla el conteo del semáforo verde y por ende se puede deducir que la salida del comparador del semáforo verde también me habilitará el contador del semáforo rojo, y en el momento que este en 1 empezará el conteo del semáforo rojo. En el Flip Flop D también se observa una entrada "C_1" en el reset asíncrono "ar", esto se realiza con el fin de que cuando se tiene que volver al semáforo verde y por ende se vuelva a habilitar el contador, esta entrada C_1 si está en 1 me permitirá tener en la salida del Flip Flop un 0 y por ende en la entrada del contador un 1, y de esta manera se vuelve a realizar el conteo. Dicha entrada C_1 corresponde a la salida del comparador del semáforo Rojo. Entonces para el control del semáforo rojo se tiene:
Se puede ver que el control implementado es muy similar al del semáforo verde, la diferencia es que el selector del Mux, que es el sensor de carros, no se encuentra negado, ya que cuando esté en 0, a la salida del Mux se tiene el número 60 que corresponde al temporizador del semáforo rojo, y cuando se active el sensor, en la salida del Mux se tiene el número 40, y con esto se cumple el cambio de tiempo en el mismo ciclo cuándo pasen 10 o más carros. También se observa que la salida de este comparador "C_1" va conectada al reset del contador y además es la que me permite volver a habilitar el contador del semáforo verde.
Entonces como mostré anteriormente, ya se tiene el control para el cambio de un semáforo a otro. Faltaría la implementación del sensor de carros y cuales serían las respectivas entradas de los bloques de estado UDB. Si se realiza un breve análisis del diseño, se puede observar que el cambio de un contador a otro lo producen las salidas de los comparadores, entonces dichas salidas son las que van conectadas a las entradas de los bloques de estado y me permitirán pasar de un estado a otro, entonces se tiene lo siguiente:
En la parte izquierda se tiene el control para el semáforo verde, en la parte superior derecha se tiene el control del semáforo rojo, y en la parte inferior derecha se tiene el circuito diseñado mediante los bloques de estado UDB. Entonces como dije anteriormente, las entradas de esta máquina de estados corresponden a las salidas de los comparadores de cada semáforo. Por ende cuando se energice el sistema se empieza con el semáforo Verde encendido, y cuando se cumplan los 40 segundos, o sea "C_2" es 1, se realizará el cambio a al semáforo Rojo y este quedará activado y el verde apagado. Después de que se cumplan los 60 segundos del semáforo rojo, en la salida C_1 se encontrará un 1 y se volverá a encender el semáforo verde y el rojo quedará apagado.
Por lo tanto ya se tiene implementado el control para el semáforo de la vía principal, y pues para la vía secundaria lo único que se tiene que hacer es conectar la salida de Luz_Verde al semáforo Rojo y la salida Luz_Roja al semáforo verde.
Entonces concluyendo, para la implementación del sensor que indica cuando pasaron más de 10 carros en la vía principal, se realizo a partir de un contador de 4 bits y un comparador. Se tiene un funcionamiento muy similar a los anteriores, en una entrada del comparador se encuentra las salidas del contador, y en la otra se encuentra el número 10. Y por ende la salida estará activa si la salida del contador es igual al número 10, que significa que ya pasaron 10 carros. Como se especifica en las instrucciones, el sensor sera simulado por un Switch que se tiene en la tarjeta de desarrollo, y para que cada vez que se presione este switch se cuente como si hubiera pasado un carro, se utiliza un Debouncer en donde la entrada será una puerta AND que me condiciona a que únicamente dicho sensor funcione cuando este activado el semáforo verde de la avenida principal. La salida de este Debouncer va conectada al clock del contador descrito anteriormente, y con esto se tiene que cuando se oprima el switch se genera un pulso, por ende se tendrá que contar dicho pulso y si se llegan a tener 10 pulsos, se activará la salida del comparador denominada "Sen_Car" y cambiarán los tiempos de los semáforos.
Finalmente el diseño esta completo, y el circuito con todos los componentes queda de la siguiente manera:
ANÁLISIS DE RESULTADOS:
Para comprobar el funcionamiento de este laboratorio, se implementa en la placa desarrolladora con las siguientes conexiones:
SEMÁFORO VERDE-PRINCIPAL ------>P3.1
SEMÁFORO ROJO-PRINCIPAL ------->P2.4
SEMÁFORO VERDE-SECUNDARIO ------>P3.6
SEMÁFORO ROJO-SECUNDARIO ------->P2.3
SENSOR AUTOS -------> P15.2
Dichas conexiones van a la barra de leds de la placa desarrolladora. En el siguiente vídeo se muestra su respectivo funcionamiento:
CONCLUSIONES:
-Se pudo comprobar el funcionamiento de ambos semáforos, y como resultado se obtuvo un correcto funcionamiento.
-Con esta práctica conocimos como implementar las máquinas de estado en PSoC, mediante bloques UDB, y se verifico su funcionamiento.
FUENTES:
- Simulador utilizado : Psoc 5LP.- Floyd, T. (2006). Fundamentos de Sistemas Digitales (9.a ed., Vol. 1). Madrid, España: PEARSON EDUCACIÓN.