6.6 Ejemplos
6.6.1 Sumador binario
Vamos a implementar un sumador binario de dos entradas, x1 y x2, y una salida y. El esquema se puede ver en la Fig. 6.16.
La suma binaria responde a la Tabla 6.21.
x1 | x2 | y | Acarreo |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
Claramente es un sistema secuencial porque la suma de dos bits depende de la suma anterior, es decir, del acarreo. Por ejemplo, si sumamos en binario “11” y “11”, en la primera suma de ‘1’ y ‘1’ el resultado será ‘0’ y el acarreo ‘1’. Pero en la siguiente suma de ‘1’ y ‘1’, hay que añadir el acarreo anterior, y por tanto el resultado será ‘1’ y el acarreo ‘1’.
Máquina de estados
Por lo visto anteriormente parece lógico elegir dos estados: m0 representa el estado en el que no hay acarreo y m1 el estado en el que sí hay. Para estos dos estados, el diagrama de estados aparece dibujado en la Fig. 6.7. Repetimos el diagrama aquí (Fig. 6.17) para facilitar la lectura. La notación en los arcos corresponde al patrón de variables \(x_1,x_2/y\).
La máquina propuesta se corresponde con una máquina de Mealy, pues la salida depende del estado y de las entradas. Por ejemplo, en m0, si las entradas valen “00” ó “11” la salida vale ‘0’, y si las entradas son “01” ó “10” la salida vale ‘1’.
Funciones de transición y de salida
Para la máquina de Mealy las funciones de transición \(\delta\) y de salida \(\beta\) serían las ecuaciones (6.1) y (6.2) respectivamente:
\[\begin{equation} \begin{aligned} \delta(m_0,11) &:= m_1 \\ \delta(m_1,00) &:= m_0 \\ \delta(m_0,00/01/10) &:= m_0 \\ \delta(m_1,10/01/11) &:= m_1 \end{aligned} \tag{6.1} \end{equation}\]
\[\begin{equation} \begin{aligned} \beta(m_0,00/11) &:= 0 \\ \beta(m_0,01/10) &:= 1 \\ \beta(m_1,00/11) &:= 1 \\ \beta(m_1,01/10) &:= 0 \end{aligned} \tag{6.2} \end{equation}\]
Tabla de verdad
La tabla de verdad para este sistema sería la mostrada en la Tabla 6.22.
x1 | x2 | mk | mk+1 | y |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 0 | 1 |
0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 1 | 0 |
1 | 1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 1 |
Y las ecuaciones:
\[m_{k+1}=\delta=x_1·x_2 + x_1·m_k + x_2·m_k \tag{6.3}\]
\[y=\beta=x_1·\overline{x_2}·\overline{m_k} + \overline{x_1}·x_2·\overline{m_k} + \overline{x_1}·\overline{x_2}·m_k + x_1·x_2·m_k \tag{6.4}\]
A partir de la función de transición mostrada en la Eq. (6.3) se deduce que el estado de acarreo se activa (hay acarreo real) cuando al menos dos de las variables que intervienen toman el valor “1”. En otras palabras, habrá acarreo cuando bien los dos sumandos valen “1”, bien un sumando vale “1” y hay un acarreo anterior.
Ejercicio.- Se deja al lector hacer una interpretación similar para la Eq. (6.4) de las salidas.
Tanteo con máquina de Moore
Se ha podido comprobar que el diseño anterior no se corresponde con una máquina de Moore. Por tanto se propone como ejercicio diseñar una máquina de Moore partiendo de los dos estados m0 y m1 vistos anteriormente. Para ello, al ser una máquina de Moore, deberemos asignar una salida a cada estado. ¿Qué salida asignamos a m0? ¿‘0’? ¿‘1’? Vemos que ninguna de las opciones es correcta.
Esto es debido a que dos estados no son suficiente para codificar la información necesaria en una máquina de Moore para el sumador binario.
Pasaremos entonces a intentarlo con cuatro estados añadiendo un estado más con semántica de salida para cada uno de los estados anteriores:
- m00: estado de no acarreo con salida y=0
- m01: estado de no acarreo con salida y=1
- m10: estado de acarreo con salida y=0
- m11: estado de acarreo con salida y=1
Para estos estados, la nueva máquina (de tipo Moore) se corresponde con la Figura 6.6 y se repite aquí (Figura 6.18) para facilitar la lectura. En este caso los arcos muestran solamente valores de las entradas \(x_1x_2\); los valores de la salida aparecen dentro de los estados.
Para la máquina de Moore las funciones de transición \(\delta\) y de salida \(\lambda\) serían las ecuaciones (6.5) y (6.6) respectivamente:
\[\begin{equation} \begin{aligned} \delta(m_{00}/m_{01},00) &:= m_{00} \\ \delta(m_{10}/m_{11},00) &:= m_{01} \\ \delta(m_{00}/m_{01},01/10) &:= m_{01} \\ \delta(m_{00}/m_{01},11) &:= m_{10} \\ \delta(m_{10}/m_{11},11) &:= m_{11} \\ \delta(m_{10}/m_{11},01/10) &:= m_{10} \end{aligned} \tag{6.5} \end{equation}\]
\[\begin{equation} \begin{aligned} \lambda(m_{00}/m_{10}) &:= 0 \\ \lambda(m_{01}/m_{11}) &:= 1 \end{aligned} \tag{6.6} \end{equation}\]
Ejercicio.- Indique otra posible conversión de Mealy a Moore (estados con semántica de entradas) para el sumador binario.
Tabla de transición de estado
Las tablas de transición de estado para las dos máquinas se corresponden con las Tablas 6.3 y 6.4 vistas en la sección 6.3.
6.6.2 Detector de secuencia binaria
En este ejercicio vamos a implementar un detector de secuencias binarias. En este caso será la secuencia “101”. En la Fig. 6.19 podemos ver un diagrama del reconocedor. Consta de una entrada x y una salida y. Por la entrada x van llegando bits. Cuando se detecta la secuencia “101” la salida vale ‘1’, y cuando no ‘0’. Como aclaración, la secuencia “10101” es una sola secuencia reconocida, no dos.
Partimos de un estado inicial, correspondiente al caso de que no se ha reconocido ninguna letra de la secuencia, y elegimos el resto de estados con semántica de cada nueva subcadena reconocida. El último estado corresponde con la secuencia completa “101”. Por tanto, los estados serían:
- mn: ningún símbolo reconocido
- m1: subcadena 1 reconocida
- m10: subcadena 10 reconocida
- m101: cadena 101 reconocida
El diagrama se puede ver en la Fig. 6.20.
Nota.- Aunque en este libro se suele utilizar una nomenclatura para los estados que empieza por la letra m, de ahora en adelante se suprimirá esta letra en los diagramas para una mayor legibilidad.
Ejercicio.- Justifique que es un sistema secuencial. Indique si se trata de una máquina de Moore o de Mealy.
La siguiente fase es realizar la tabla de transición de estados, mostrada en la Tabla 6.23.
m \ x | 0 | 1 |
---|---|---|
mn | mn/0 | m1/0 |
m1 | m10/0 | m1/0 |
m10 | mn/0 | m101/1 |
m101 | mn/0 | m1/0 |
Se puede apreciar que esta tabla es simplificable ya que la primera y la última fila son iguales (los estados mn y m101 son equivalentes). Eliminando el estado m101, la tabla de transición y el diagrama de estados se corresponden con la Tabla 6.24 y la Figura 6.21.
m \ x | 0 | 1 |
---|---|---|
mn | mn/0 | m1/0 |
m1 | m10/0 | m1/0 |
m10 | mn/0 | mn/1 |
Podemos ya desvelar que la máquina anterior era de Mealy. Una máquina de Moore para este sistema puede obtenerse sin más que “desplazar” la salida con valor ‘1’ del arco al estado m101 en la Fig. 6.20. Este diseño es mucho más natural ya que el estado que representa la secuencia buscada es el que tiene la salida asociada.
La máquina queda representada en la Tabla 6.25 y la Fig. 6.22.
m \ x | 0 | 1 | Salida |
---|---|---|---|
mn | mn | m1 | 0 |
m1 | m10 | m1 | 0 |
m10 | mn | m101 | 0 |
mn101 | mn | m1 | 1 |
Obsérvese que dado que el estado m101 tiene semántica de salida, no es equivalente al estado mn y la máquina de Moore no puede simplificarse.
Nota.- En general, la máquinas de estado de Mealy tienen menos estados que las de Moore. Sin embargo, tanto por presentar una mayor estabilidad en la salida como por la claridad del diseño, se recomienda el uso de máquinas de Moore (al menos como estructura general) para el control automático.
6.6.3 Control de una vagoneta
Se desea implementar el sistema de control del tren la Fig. 6.23 para que cuando se active un pulsador (señal \(P_{on}\)) el tren vaya del punto A al punto B y vuelva a A. Para ello se dispone de dos sensores de fin de carrera en A (señal ‘A’) y en B (señal ‘B’). Para mover el tren se dispone de dos señales: ‘yI’ para mover el tren hacia la izquierda e ‘yD’ para mover el tren hacia la derecha.
Vamos a proceder con un diseño con una máquina de Moore, es decir, un estado por cada acción de control (o combinaciones de acciones de control). Consideramos los siguientes estados:
- mR: Reposo
- mD: tren moviéndose hacia la derecha
- mI: tren moviéndose hacia la izquierda
Para generar la tabla de transición de estados se sigue el proceso siguiente. En primer lugar se rellenan las celdas que corresponden con la activación de estados (y que darán lugar a ecuaciones de activación), obteniendo la Tabla 6.26.
m \ PonAB | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 | O |
---|---|---|---|---|---|---|---|---|---|
mR | x | mD | x | 0,0 | |||||
mD | mI | x | mI | x | 1,0 | ||||
mI | mR | x | mR | x | 0,1 |
Las ‘x’ representan celdas que son físicamente imposibles de acuerdo con la descripción del problema. Consecuentemente, pueden tomar el valor de cualquier estado. En este caso, por la distribución física de los sensores, es imposible que las señales A y B estén activas a la vez.
Cada estado en una celda de la tabla genera un minitérmino de la ecuación de activación de dicho estado. Este término contiene el estado (origen) que aparece en la cabecera de la fila de la celda, junto a los literales (combinación de entradas) que figuran en la columna de la celda. En el ejemplo de la Tabla 6.26, cada una de las dos celdas en donde aparece el estado mR produce un minitérmino en la ecuación de activación de dicho estado.
Como siempre, cada ecuación de activación del estado puede simplificarse. La Fig. 6.25 muestra las tablas de Karnaugh correspondiente a la activación de cada uno de los estados. A modo de ejemplo, la tabla de Karnaugh para la activación del estado mD (en rojo) muestra un ‘1’ para la combinación de entradas que hacen que se pase de mR a mD, un ‘0’ en caso contrario y un ’*’ para los casos imposibles o indiferentes. En azul tendremos la combinación de entradas que hacen que se pase de mD a mI (y que por tanto activarán mI). Y en verde la combinación de entradas que hacen que se pase de mI a mR (y que por tanto activarán mR).
De cada tabla de Karnaugh obtenemos la ecuación de activación de cada estado:
\[\begin{equation} \begin{aligned} mD_{k+1} &= mR_k · P_{on} · A \\ mI_{k+1} &= mD_k · B \\ mR_{k+1} &= mI_k · A \end{aligned} \tag{6.7} \end{equation}\]
El siguiente paso es completar la Tabla 6.26 con las ecuaciones de retención de los estados. Cada celda que falta por rellenar se corresponde a combinaciones de entradas (columna) que no cambian el estado (fila). La Tabla 6.27 muestra sólo las celdas de retención.
m \ PonAB | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 | O |
---|---|---|---|---|---|---|---|---|---|
mR | mR | mR | mR | x | mR | mR | x | 0,0 | |
mD | mD | mD | x | mD | mD | x | 1,0 | ||
mI | mI | mI | x | mI | mI | x | 0,1 |
Nota.- En algunas celdas se podría elegir entre mR o x(*) indistintamente. Corresponde al diseñador elegir lo que sea más acorde a la funcionalidad empleada. Por ejemplo, estando en el estado mR no se debería activar B, por lo que se podría poner x en la fila “001”.
Las ecuaciones de retención pueden obtenerse y simplificarse de una manera similar a las ecuaciones de activación. Con esta metodología, cada ecuación de retención estará formada por un minitérmino compuesto del estado actual y las combinaciones de entradas que no provoquen un cambio de estado. La Fig. 6.26 muestra el caso de mR. Un ‘1’ supone una combinación de entradas que no provoca cambio de estado, un ‘0’ lo contrario y un ’*’ los casos imposibles o indiferentes.
La ecuación correspondiente será:
\[mR_{k+1} = mR_k · (\overline{A} + \overline{P_{on}})\]
En programas de control reales, no se usan estas ecuaciones para implementar la retención debido al elevado número de entradas de estos sistemas, que llevan a una explosión combinatoria de términos. En la práctica, y tal y como se comentó en la sección 6.2.2, se razona con los estados futuros inmediatos del estado a retener. A modo de ejemplo, se “retiene” el estado mR mientras no se active el estado mD, único estado alcanzable desde mR. La ecuación de retención toma la forma:
\[mR_{k+1} = mR_k · \overline{mD_{k+1}}\]
Ambas tipos de ecuaciones de retención son equivalentes en la práctica.
Ejercicio.- Se deja al lector el cálculo de las ecuaciones de retención de los estados mD y mI.
Combinando ambas tablas se obtiene la tabla completa, mostrada en la Tabla 6.28.
m \ P{on}AB | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 | O |
---|---|---|---|---|---|---|---|---|---|
mR | mR | mR | mR | x | mR | mR | mD | x | 0,0 |
mD | mD | mI | mD | x | mD | mI | mD | x | 1,0 |
mI | mI | mI | mR | x | mI | mI | mR | x | 0,1 |
Y combinando las ecuaciones de activación y retención obtenemos las ecuaciones completas, que describen la función de transición entre estados (y cuarto elemento de la 5-tupla de la máquina de estados) delta.
\[\begin{equation} \begin{aligned} mD_{k+1} &= mR_k · Pon · A + mD_k · \overline{mI_{k+1}} \\ mI_{k+1} &= mD_k · B + mI_k · \overline{mR_{k+1}} \\ mR_{k+1} &= mI_k · A + mR_k · \overline{mD_{k+1}} \end{aligned} \tag{6.8} \end{equation}\]
Finalmente, las ecuaciones de las salidas son las siguientes:
\[\begin{equation} \begin{aligned} yI_k &= mI_k \\ yD_k &= mD_k \end{aligned} \tag{6.9} \end{equation}\]
6.6.4 Control de tráfico en un sentido
Se quiere diseñar una máquina de estados que permita detectar vehículos que circulan en dirección contraria por una carretera. Dicho sistema tendrá dos entradas e1 y e2 que serán las señales de dos células fotoeléctricas. Dependiendo del orden de activación de dichas señales se podrá detectar si el vehículo circula en sentido correcto o no. En la Fig. 6.27 se puede observar una simulación. Se estudiarán dos casos: en el A, las células fotoeléctricas estarán situadas a una distancia menor que la longitud del vehículo y la separación entre vehículos; en el B, las células fotoeléctricas estarán situadas a una distancia mayor que la longitud del vehículo y menor que la separación entre vehículos.
6.6.4.1 Control de tráfico en un sentido: caso A
Como se ha indicado, en este caso las señales de las células fotoeléctricas están situadas a una distancia menor que la longitud del vehículo y la separación entre vehículos. En la Fig. 6.28 se puede ver un esquema: si un vehículo circula de forma correcta pasará por los estados m1, m2, m3 y m4. Y si circula de forma incorrecta pasará por los estados m1, m5, m6 y m7.
Para estos 7 estados, el diagrama de estados de la máquina está dibujado en la Fig. 6.29; la Tabla 6.29 contiene la tabla de transición.
m \ e1e2 | 00 | 01 | 10 | 11 | Salida |
---|---|---|---|---|---|
m1 | m1 | m5 | m2 | x | 0 |
m2 | X | X | m2 | m3 | 0 |
m3 | X | m4 | X | m3 | 0 |
m4 | m1 | m4 | X | X | 0 |
m5 | X | m5 | X | m6 | 1 |
m6 | X | X | m7 | m6 | 1 |
m7 | m1 | X | m7 | X | 1 |
Observamos que en este caso es posible simplificar la tabla, fusionando los estados m2, m3 y m4 (en un estado que llamaremos SC, sentido correcto) por un lado, y los estados m5, m6 y m7 (en un estado que llamaremos SI, sentido incorrecto) por otro. A m1 pasaremos a llamarle NO (no hay vehículos).
De esta forma obtenemos la Tabla 6.30.
m \ e1e2 | 00 | 01 | 10 | 11 | Salida |
---|---|---|---|---|---|
NO | NO | SI | SC | x | 0 |
SC | NO | SC | SC | SC | 0 |
SI | NO | SI | SI | SI | 1 |
El diagrama correspondiente queda como indica la Fig. 6.30.
Y las ecuaciones correspondientes (funciones delta y lambda) de la forma:
\[\begin{equation} \begin{aligned} NO_{k+1} &=(SC_k + SI_k) · \overline{e_1} · \overline{e_2} + NO_k · (\overline{SI_{k+1}+SC_{k+1}}) \\ SC_{k+1} &= NO_k · e_1 + SC_k · \overline{NO_{k+1}} \\ SI_{k+1} &= NO_k · e_2 + SI_k · \overline{NO_{k+1}} \\ Salida_k &= SI_k \end{aligned} \tag{6.10} \end{equation}\]
6.6.4.2 Control de tráfico en un sentido: caso B
Queremos ahora diseñar una máquina de estados que permita detectar vehículos que circulan en dirección contraria por una autovía, pero las células fotoeléctricas estarán ahora situadas a una distancia mayor que la longitud del vehículo y menor que la separación entre vehículos (ver Fig. 6.31).
Lo primero que se podría pensar es en utilizar el mismo modelo de antes. Obtendríamos la siguiente máquina de estados (Fig. 6.32):
Podemos observar que no es una máquina correcta. En los estados SC o SI, para las entradas “00” la máquina debería poder evolucionar a dos estados distintos, lo que no es posible pues hablamos siempre de máquinas deterministas. Esta máquina no es, por tanto, suficientemente expresiva, ya que en SC o SI las entradas “00” podrían ser debidas a que el coche está entre los dos sensores o bien a que el coche ha salido del sistema de detección.
Está claro que se necesitan más estados. Vamos a añadir dos estados más:
- NO: no vehículo
- SC: sentido correcto
- SI: sentido incorrecto
- VEC: vehículo entre sensores correcto
- VEI: vehículo entre sensores no correcto
Para estos cinco estados obtenemos la tabla de transición mostrada en la Tabla 6.31:
m \ e1e2 | 00 | 01 | 10 | 11 | Salida |
---|---|---|---|---|---|
NO | NO | SI | SC | x | 0 |
SC | VEC | SC | SC | x | 0 |
SI | VEI | SI | SI | x | 1 |
VEI | VEI | x | SI | x | 1 |
VEC | VEC | SC | x | x | 0 |
La casilla que está en negrita presenta un un nuevo problema. Vamos a analizarlo con el siguiente diagrama (se representa sólo una parte del diagrama):
Vemos que se vuelve a dar el mismo problema de antes: desde el estado SC salen dos arcos con los mismos valores de entradas (correspondiente al caso de coche no detectado), por lo que no es consistente. Esto quiere decir que, o bien no hemos elegido bien los estados, o necesitamos más de 5 estados. Puesto que el tanteo previo ha sido infructuoso, pasamos ahora a diseñar la máquina con los siete estados intuitivos con semántica de entrada, para luego buscar una simplificación correcta:
- NO: no vehículo
- SC-10: sentido correcto después de detección por parte de e1
- SC-00: sentido correcto entre sensores
- SC-01: sentido correcto después de detección por parte de e2
- SI-01: sentido incorrecto después de detección por parte de e2
- SI-00: sentido incorrecto entre sensores
- SI-10: sentido incorrecto después de detección por parte de e1
La tabla de transición de estados que obtenemos es la mostrada en la Tabla 6.32.
m \ e1e2 | 00 | 01 | 10 | 11 | Salida |
---|---|---|---|---|---|
NO | NO | SI-01 | SC-10 | x | 0 |
SC-10 | SC-00 | x | SC-10 | x | 0 |
SC-00 | SC-00 | SC-01 | x | x | 0 |
SC-01 | NO | SC-01 | x | x | 0 |
SI-01 | SI-00 | SI-01 | x | x | 1 |
SI-00 | SI-00 | x | SI-10 | x | 1 |
SI-10 | NO | x | SI-10 | x | 1 |
Vemos que esta tabla es simplificable: se pueden simplificar los estados SC-10 con el SC-00, y el SI-01 con el SI-00. La nueva tabla simplificada se muestra en la Tabla 6.33.
m \ e1e2 | 00 | 01 | 10 | 11 | Salida | |
---|---|---|---|---|---|---|
NO | NO | SI-01/00 | SC-10/00 | x | 0 | |
SC-10/00 | SC-10/00 | SC-01 | SC-10/00 | x | 0 | |
SC-01 | NO | SC-01 | x | x | 0 | |
SI-01/00 | SI-01/00 | SI-01 | SI-10 | x | 1 | |
SI-10 | NO | x | SI-10 | x | 1 |
Podemos asignar nuevos nombre para entenderlo mejor: SCA será SC-10/00, SCB será SC-01, SIA será SI-01/00 y SIB será SI-10.
m \ e1e2 | Nuevo Nombre | 00 | 01 | 10 | 11 | Salida |
---|---|---|---|---|---|---|
NO | NO | NO | SIA | SCA | x | 0 |
SC-10/00 | SCA | SCA | SCB | SCA | x | 0 |
SC-01 | SCB | NO | SCB | x | x | 0 |
SI-01/00 | SIA | SIA | SIA | SIB | x | 1 |
SI-10 | SIB | NO | x | SIB | x | 1 |
Vemos, por tanto, que cinco estados son suficientes para modelar el sistema. Las ecuaciones de la máquina son:
\[\begin{equation} \begin{aligned} NO_{k+1} &= (SCB + SIB) · (\overline{e_1}· \overline{e_2}) + NO_k · (\overline{SCA_{k+1} + SIA_{k+1}}) \\ SCA_{k+1} &= NO_k · e_1 + SCA_k · \overline{SCB_{k+1}} \\ SCB_{k+1} &= SCA_k · e_2 + SCB_k · \overline{NO_{k+1}} \\ SIA_{k+1} &= NO_k · e_2 + SIA_k · \overline{SIB_{k+1}} \\ SIB_{k+1} &= SIA_k · e_1 + SIB_k · \overline{NO_{k+1}} \\ Salida_k &= SIA_k + SIB_k \end{aligned} \tag{6.11} \end{equation}\]
Y el diagrama de estados se muestra en la Fig. 6.34.