Saltar al contenido principal
LibreTexts Español

7.9: Convertir tablas de verdad en expresiones booleanas

  • Page ID
    154690
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Al diseñar circuitos digitales, el diseñador suele comenzar con una tabla de verdad que describe lo que debe hacer el circuito. La tarea de diseño es en gran parte determinar qué tipo de circuito realizará la función descrita en la tabla de verdad. Si bien algunas personas parecen tener una habilidad natural para mirar una tabla de la verdad e inmediatamente visualizar la puerta lógica necesaria o los circuitos lógicos de relé para la tarea, existen técnicas de procedimiento disponibles para el resto de nosotros. Aquí, el álgebra booleana demuestra su utilidad de la manera más dramática.

    Para ilustrar este método procesal, debemos comenzar con un problema de diseño realista. Supongamos que se nos dio la tarea de diseñar un circuito de detección de llama para un incinerador de residuos tóxicos. El intenso calor del fuego está destinado a neutralizar la toxicidad de los desechos introducidos en el incinerador. Dichas técnicas basadas en la combustión se utilizan comúnmente para neutralizar los desechos médicos, que pueden estar infectados con virus o bacterias mortales:

    04360.png

    En tanto se mantenga una llama en el incinerador, es seguro inyectar desechos en él para ser neutralizados. Sin embargo, si la llama se apagara, no sería seguro continuar inyectando desechos en la cámara de combustión, ya que saldría del escape sin neutralizar, y representaría una amenaza para la salud de cualquier persona que se encuentre cerca del escape. Lo que necesitamos en este sistema es una manera segura de detectar la presencia de una llama, y permitir que los desechos sean inyectados solo si una llama es “probada” por el sistema de detección de llama.

    Existen varias tecnologías diferentes de detección de llama: óptica (detección de luz), térmica (detección de alta temperatura) y conducción eléctrica (detección de partículas ionizadas en la trayectoria de la llama), cada una con sus ventajas y desventajas únicas. Supongamos que debido al alto grado de peligro que implica el posible paso de residuos no neutralizados por los gases de escape de este incinerador, se decide que el sistema de detección de llama sea redundante (múltiples sensores), de manera que el fallo de un solo sensor no provoque una emisión de toxinas fuera del escape. Cada sensor viene equipado con un contacto normalmente abierto (abierto si no hay llama, cerrado si se detecta llama) que utilizaremos para activar las entradas de un sistema lógico:

    04361.png

    Nuestra tarea, ahora, es diseñar los circuitos del sistema lógico para abrir la válvula de residuos si y solo si hay una buena llama probada por los sensores. Primero, sin embargo, debemos decidir cuál debe ser el comportamiento lógico de este sistema de control. ¿Queremos que se abra la válvula si solo uno de los tres sensores detecta llama? Probablemente no, porque esto derrotaría el propósito de tener múltiples sensores. Si alguno de los sensores fallara de tal manera que indicara falsamente la presencia de llama cuando no la hubiera, un sistema lógico basado en el principio de “cualquiera de cada tres sensores que muestren llama” daría la misma salida que un sistema de sensor único con la misma falla. Una solución mucho mejor sería diseñar el sistema para que se mande que la válvula se abra si y solo si los tres sensores detectan una buena llama. De esta manera, cualquier sensor fallido que muestre falsamente llama no podría mantener la válvula en la posición abierta; más bien, requeriría que los tres sensores fallaran de la misma manera, un escenario altamente improbable, para que ocurriera esta peligrosa condición.

    Así, nuestra tabla de la verdad se vería así:

    14061.png

    No requiere mucha perspicacia para darse cuenta de que esta funcionalidad podría generarse con una puerta AND de tres entradas: la salida del circuito será “alta” si y solo si la entrada A Y la entrada B Y la entrada C son todas “altas”:

    04362.png

    Si usamos circuitos de relé, podríamos crear esta función AND cableando tres contactos de relé en serie, o simplemente cableando los tres contactos del sensor en serie, de modo que la única forma en que se pueda enviar energía eléctrica para abrir la válvula de desecho es si los tres sensores indican llama:

    04363.png

    Si bien esta estrategia de diseño maximiza la seguridad, hace que el sistema sea muy susceptible a fallas en los sensores del tipo opuesto. Supongamos que uno de los tres sensores fallara de tal manera que indicara que no hubiera llama cuando realmente había una buena llama en la cámara de combustión del incinerador. Esa única falla cerraría innecesariamente la válvula de desechos, lo que resultaría en pérdida de tiempo de producción y desperdicio de combustible (alimentando un fuego que no se estaba utilizando para incinerar desechos).

    Sería bueno tener un sistema lógico que permitiera este tipo de fallas sin apagar el sistema innecesariamente, sin embargo, aún así proporcionar redundancia de sensor para mantener la seguridad en caso de que algún sensor fallara “alto” (mostrando llama en todo momento, haya o no uno para detectar). Una estrategia que satisfaga ambas necesidades sería una lógica de sensor de “dos de tres”, mediante la cual la válvula de desecho se abre si al menos dos de los tres sensores muestran una buena llama. La tabla de la verdad para tal sistema se vería así:

    14062.png

    Aquí, no es necesariamente obvio qué tipo de circuito lógico satisfaría la tabla de la verdad. Sin embargo, un método simple para diseñar dicho circuito se encuentra en una forma estándar de expresión booleana llamada la forma Suma-de-Productos, o SOP. Como podría sospechar, una expresión booleana Suma-de-Productos es literalmente un conjunto de términos booleanos agregados (sumados) juntos, siendo cada término una combinación multiplicativa (producto) de variables booleanas. Un ejemplo de una expresión SOP sería algo así: ABC + BC + DF, la suma de productos “ABC”, “BC” y “DF”.

    Las expresiones Sum-of-Products son fáciles de generar a partir de tablas de verdad. Todo lo que tenemos que hacer es examinar la tabla de verdad para cualquier fila donde la salida sea “alta” (1), y escribir un término de producto booleano que equivaldría a un valor de 1 dadas esas condiciones de entrada. Por ejemplo, en la cuarta fila abajo en la tabla de verdad para nuestro sistema lógico de dos de tres, donde A=0, B=1 y C=1, el término del producto sería A'BC, ya que ese término tendría un valor de 1 si y solo si A=0, B=1 y C=1:

    14063.png

    Otras tres filas de la tabla de verdad tienen un valor de salida de 1, por lo que esas filas también necesitan expresiones de producto booleanas para representarlas:

    14064.png

    Finalmente, unimos estas cuatro expresiones de producto booleanas juntas por adición, para crear una sola expresión booleana que describa la tabla de verdad como un todo:

    14065.png

    Ahora que tenemos una expresión Booleana Suma-de-Productos para la función de la tabla de verdad, podemos diseñar fácilmente una puerta lógica o un circuito lógico de relé basado en esa expresión:

    04364.png

    04365.png

    Desafortunadamente, ambos circuitos son bastante complejos, y podrían beneficiarse de la simplificación. Usando técnicas de álgebra booleana, la expresión puede simplificarse significativamente:

    14066.png

    Como resultado de la simplificación, ahora podemos construir circuitos lógicos mucho más simples realizando la misma función, ya sea en forma de puerta o relé:

    04366.png

    04367.png

    Cualquiera de estos circuitos realizará adecuadamente la tarea de operar la válvula de desechos del incinerador con base en una verificación de llama de dos de los tres sensores de llama. Como mínimo, esto es lo que necesitamos para tener un sistema incinerador seguro. Podemos, sin embargo, extender la funcionalidad del sistema añadiéndole circuitos lógicos diseñados para detectar si alguno de los sensores no está de acuerdo con los otros dos.

    Si los tres sensores funcionan correctamente, deben detectar llamas con la misma precisión. Por lo tanto, deben o bien todos registrar “bajo” (000: sin llama) o todos registrar “alto” (111: buena llama). Cualquier otra combinación de salida (001, 010, 011, 100, 101 o 110) constituye un desacuerdo entre los sensores y, por lo tanto, puede servir como indicador de una falla potencial del sensor. Si agregáramos circuitos para detectar cualquiera de las seis condiciones de “desacuerdo del sensor”, podríamos usar la salida de ese circuito para activar una alarma. Quien esté monitoreando el incinerador entonces ejercería juicio al continuar operando con un posible sensor fallido (entradas: 011, 101 o 110), o bien cerraría el incinerador para estar absolutamente seguro. Además, si el incinerador está apagado (sin llama), y uno o más de los sensores aún indican llama (001, 010, 011, 100, 101 o 110) mientras que los otros indican que no hay llama, se sabrá que existe un problema definido del sensor.

    El primer paso para diseñar este circuito de detección de “desacuerdo de sensores” es escribir una tabla de verdad que describa su comportamiento. Como ya tenemos una tabla de verdad que describe la salida del circuito lógico de “buena llama”, simplemente podemos agregar otra columna de salida a la tabla para representar el segundo circuito, y hacer una tabla que represente todo el sistema lógico:

    14067.png

    Si bien es posible generar una expresión Suma-de-Productos para esta nueva columna de tabla de verdad, ¡requeriría seis términos, de tres variables cada uno! Tal expresión booleana requeriría muchos pasos para simplificar, con un gran potencial para cometer errores algebraicos:

    14068.png

    Una alternativa a generar una expresión Suma-de-Productos para dar cuenta de todas las condiciones de salida “altas” (1) en la tabla de verdad es generar una expresión Producto-De-Sumas, o POS, para dar cuenta de todas las condiciones de salida “bajas” (0) en su lugar. Siendo que hay muchas menos instancias de una salida “baja” en la última columna de la tabla de verdad, la expresión Producto-De-Sumes resultante debería contener menos términos. Como su nombre indica, una expresión Producto-de-sumas es un conjunto de términos agregados (sumas), que se multiplican (producto) juntos. Un ejemplo de una expresión POS sería (A + B) (C + D), el producto de las sumas “A + B” y “C + D”.

    Para comenzar, identificamos qué filas de la última columna de la tabla de verdad tienen salidas “bajas” (0) y escribimos un término de suma booleana que equivaldría a 0 para las condiciones de entrada de esa fila. Por ejemplo, en la primera fila de la tabla de verdad, donde A=0, B=0 y C=0, el término suma sería (A + B + C), ya que ese término tendría un valor de 0 si y solo si A=0, B=0 y C=0:

    14069.png

    Solo otra fila en la última columna de la tabla de verdad tiene una salida “baja” (0), así que todo lo que necesitamos es un término de suma más para completar nuestra expresión Producto-de-sumas. Este último término suma representa una salida 0 para una condición de entrada de A=1, B=1 y C=1. Por lo tanto, el término debe escribirse como (A' + B'+ C'), porque solo la suma de las variables de entrada complementadas equivaldría a 0 para esa condición solo:

    14070.png

    La expresión Producto de sumas completada, por supuesto, es la combinación multiplicativa de estos dos términos de suma:

    14071.png

    Mientras que una expresión Suma-de-Productos podría implementarse en forma de un conjunto de puertas AND con sus salidas conectadas a una sola puerta OR, una expresión Producto-de-Sumas puede implementarse como un conjunto de puertas OR que alimentan a una sola puerta AND:

    04368.png

    Correspondientemente, mientras que una expresión Suma-de-Productos podría implementarse como una colección paralela de contactos de relé conectados en serie, una expresión Producto-De-Sumes puede implementarse como una colección en serie de contactos de relé conectados en paralelo:

    04369.png

    Los dos circuitos anteriores representan diferentes versiones del circuito lógico de “desacuerdo del sensor” solamente, no del circuito o circuitos de detección de “buena llama”. Todo el sistema lógico sería la combinación de circuitos tanto de “buena llama” como de “desacuerdo de sensores”, mostrados en el mismo diagrama.

    Implementado en un Controlador Lógico Programable (PLC), todo el sistema lógico podría parecerse a algo como esto:

    04370.png

    Como puede ver, tanto las formas booleanas estándar de Suma-de-productos como de productos de sumas son herramientas poderosas cuando se aplican a tablas de verdad. Nos permiten derivar una expresión booleana, y en última instancia, un circuito lógico real, de nada más que una tabla de verdad, que es una especificación escrita de lo que queremos que haga un circuito lógico. Poder pasar de una especificación escrita a un circuito real utilizando procedimientos simples y deterministas significa que es posible automatizar el proceso de diseño de un circuito digital. En otras palabras, ¡una computadora podría programarse para diseñar un circuito lógico personalizado a partir de una especificación de tabla de verdad! Los pasos a dar desde una tabla de la verdad hasta el circuito final son tan inequívocos y directos que requiere de poca, si alguna, creatividad u otro pensamiento original para ejecutarlos.

    Revisar

    • Suma-de-productos, o SOP, las expresiones booleanas se pueden generar a partir de tablas de verdad con bastante facilidad, determinando qué filas de la tabla tienen una salida de 1, escribiendo un término de producto para cada fila y finalmente sumando todos los términos del producto. Esto crea una expresión booleana que representa la tabla de verdad como un todo.
    • Las expresiones Suma-de-Productos se prestan bien a la implementación como un conjunto de puertas AND (productos) que se alimentan en una sola puerta OR (suma).
    • Producto-de-sumas, o POS, expresiones booleanas también se pueden generar a partir de tablas de verdad con bastante facilidad, determinando qué filas de la tabla tienen una salida de 0, escribiendo un término de suma para cada fila y finalmente multiplicando todos los términos de suma. Esto crea una expresión booleana que representa la tabla de verdad como un todo.
    • Las expresiones de producto de sumas se prestan bien a la implementación como un conjunto de puertas OR (sumas) que se alimentan en una sola puerta AND (producto).

    This page titled 7.9: Convertir tablas de verdad en expresiones booleanas is shared under a GNU Free Documentation License 1.3 license and was authored, remixed, and/or curated by Tony R. Kuphaldt (All About Circuits) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.