Saltar al contenido principal

$$\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}}$$

$$\newcommand{\vectorA}[1]{\vec{#1}} % arrow$$

$$\newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow$$

$$\newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vectorC}[1]{\textbf{#1}}$$

$$\newcommand{\vectorD}[1]{\overrightarrow{#1}}$$

$$\newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}}$$

$$\newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}}$$

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\avec}{\mathbf a}$$ $$\newcommand{\bvec}{\mathbf b}$$ $$\newcommand{\cvec}{\mathbf c}$$ $$\newcommand{\dvec}{\mathbf d}$$ $$\newcommand{\dtil}{\widetilde{\mathbf d}}$$ $$\newcommand{\evec}{\mathbf e}$$ $$\newcommand{\fvec}{\mathbf f}$$ $$\newcommand{\nvec}{\mathbf n}$$ $$\newcommand{\pvec}{\mathbf p}$$ $$\newcommand{\qvec}{\mathbf q}$$ $$\newcommand{\svec}{\mathbf s}$$ $$\newcommand{\tvec}{\mathbf t}$$ $$\newcommand{\uvec}{\mathbf u}$$ $$\newcommand{\vvec}{\mathbf v}$$ $$\newcommand{\wvec}{\mathbf w}$$ $$\newcommand{\xvec}{\mathbf x}$$ $$\newcommand{\yvec}{\mathbf y}$$ $$\newcommand{\zvec}{\mathbf z}$$ $$\newcommand{\rvec}{\mathbf r}$$ $$\newcommand{\mvec}{\mathbf m}$$ $$\newcommand{\zerovec}{\mathbf 0}$$ $$\newcommand{\onevec}{\mathbf 1}$$ $$\newcommand{\real}{\mathbb R}$$ $$\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}$$ $$\newcommand{\laspan}[1]{\text{Span}\{#1\}}$$ $$\newcommand{\bcal}{\cal B}$$ $$\newcommand{\ccal}{\cal C}$$ $$\newcommand{\scal}{\cal S}$$ $$\newcommand{\wcal}{\cal W}$$ $$\newcommand{\ecal}{\cal E}$$ $$\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}$$ $$\newcommand{\gray}[1]{\color{gray}{#1}}$$ $$\newcommand{\lgray}[1]{\color{lightgray}{#1}}$$ $$\newcommand{\rank}{\operatorname{rank}}$$ $$\newcommand{\row}{\text{Row}}$$ $$\newcommand{\col}{\text{Col}}$$ $$\renewcommand{\row}{\text{Row}}$$ $$\newcommand{\nul}{\text{Nul}}$$ $$\newcommand{\var}{\text{Var}}$$ $$\newcommand{\corr}{\text{corr}}$$ $$\newcommand{\len}[1]{\left|#1\right|}$$ $$\newcommand{\bbar}{\overline{\bvec}}$$ $$\newcommand{\bhat}{\widehat{\bvec}}$$ $$\newcommand{\bperp}{\bvec^\perp}$$ $$\newcommand{\xhat}{\widehat{\xvec}}$$ $$\newcommand{\vhat}{\widehat{\vvec}}$$ $$\newcommand{\uhat}{\widehat{\uvec}}$$ $$\newcommand{\what}{\widehat{\wvec}}$$ $$\newcommand{\Sighat}{\widehat{\Sigma}}$$ $$\newcommand{\lt}{<}$$ $$\newcommand{\gt}{>}$$ $$\newcommand{\amp}{&}$$ $$\definecolor{fillinmathshade}{gray}{0.9}$$

## ¿Qué es un Contador S incrónico?

Un contador síncrono, a diferencia de un contador asíncrono, es aquel cuyos bits de salida cambian de estado simultáneamente, sin ondulación. La única forma en que podemos construir un circuito contador de este tipo a partir de los flip-flops J-K es conectando todas las entradas de reloj juntas, de modo que todos y cada uno de los flip-flop reciban exactamente el mismo pulso de reloj al mismo tiempo:

Ahora bien, la pregunta es, ¿qué hacemos con las entradas J y K? Sabemos que todavía tenemos que mantener el mismo patrón de frecuencia de división por dos para poder contar en una secuencia binaria, y que este patrón se logra mejor utilizando el modo “toggle” del flip-flop, por lo que el hecho de que las entradas J y K deben ser ambas (a veces) “altas” es claro. No obstante, si simplemente conectamos todas las entradas J y K al riel positivo de la fuente de alimentación como lo hicimos en el circuito asíncrono, esto claramente no funcionaría porque todos los flip-flops se alternarían al mismo tiempo: ¡con todos y cada uno de los pulsos de reloj!

Examinemos nuevamente la secuencia de conteo binario de cuatro bits, y veamos si hay otros patrones que predicen la alternancia de un bit. El diseño de circuito de contador asíncrono se basa en el hecho de que cada alternancia de bit ocurre al mismo tiempo que el bit anterior cambia de un “alto” a un “bajo” (de 1 a 0). Como no podemos cronometrar la alternancia de un bit en base a la alternancia de un bit anterior en un circuito contador síncrono (para hacerlo crearía un efecto ripple) debemos encontrar algún otro patrón en la secuencia de conteo que pueda usarse para activar un bit toggle:

Al examinar la secuencia de conteo binario de cuatro bits, se puede ver otro patrón predictivo. Observe que justo antes de alternar un poco, todos los bits anteriores son “altos”:

Este patrón también es algo que podemos explotar en el diseño de un circuito contador.

Si habilitamos cada flip-flop J-K para alternar en función de si todas las salidas anteriores del flip-flop (Q) son o no “altas”, podemos obtener la misma secuencia de conteo que el circuito asíncrono sin el efecto ripple, ya que cada flip-flop en este circuito será cronometrado exactamente al mismo tiempo:

Para hacer un contador síncrono “hacia abajo”, necesitamos construir el circuito para reconocer los patrones de bits apropiados que predicen cada estado de alternancia mientras se cuenta regresiva. No es sorprendente, cuando examinamos la secuencia de conteo binario de cuatro bits, vemos que todos los bits anteriores son “bajos” antes de una palanca (siguiendo la secuencia de abajo hacia arriba):

Dado que cada flip-flop J-K viene equipado con una salida Q' así como una salida Q, podemos usar las salidas Q' para habilitar el modo toggle en cada flip-flop sucesivo, siendo que cada Q' será “alto” cada vez que la Q respectiva sea “baja”:”

## Circuito de contador con modos de conteo seleccionables “arriba” y “abajo”

Llevando esta idea un paso más allá, podemos construir un circuito contador con seleccionable entre los modos de conteo “arriba” y “abajo” al tener líneas duales de puertas AND detectando las condiciones de bit apropiadas para una secuencia de conteo “arriba” y “abajo”, respectivamente, luego usar puertas OR para combinar las salidas de la puerta AND con las J y K entradas de cada flip-flop siguiente:

Este circuito no es tan complejo como podría aparecer primero. La línea de entrada de control arriba/abajo simplemente permite que la cadena superior o la cadena inferior de puertas AND pasen las salidas Q/Q' a las etapas siguientes de los flip-flops. Si la línea de control arriba/abajo es “alta”, las puertas Y superiores se habilitan, y el circuito funciona exactamente igual que el primer circuito contador síncrono (“arriba”) que se muestra en esta sección. Si la línea de control arriba/abajo se hace “baja”, las puertas AND inferiores se habilitan, y el circuito funciona de manera idéntica al segundo circuito (contador “abajo”) que se muestra en esta sección.

Para ilustrar, aquí hay un diagrama que muestra el circuito en el modo de conteo “ascendente” (todos los circuitos deshabilitados se muestran en gris en lugar de negro):

Aquí, se muestra en el modo de conteo “hacia abajo”, con la misma coloración gris que representa circuitos deshabilitados:

Los circuitos de contador arriba/abajo son dispositivos muy útiles. Una aplicación común es en el control de movimiento de la máquina, donde los dispositivos llamados codificadores de eje rotativo convierten la rotación mecánica en una serie de pulsos eléctricos, estos pulsos “sincronizan” un circuito contador para rastrear el movimiento total:

A medida que la máquina se mueve, gira el eje del codificador, haciendo y rompiendo el haz de luz entre el LED y el fototransistor, generando así pulsos de reloj para incrementar el circuito contador. Así, el contador integra, o acumula, el movimiento total del eje, sirviendo como una indicación electrónica de hasta dónde se ha movido la máquina. Si lo único que nos importa es rastrear el movimiento total, y no nos importa dar cuenta de los cambios en la dirección del movimiento, esta disposición será suficiente. Sin embargo, si deseamos que el contador incremente con una dirección de movimiento y decremente con la dirección inversa del movimiento, debemos usar un contador arriba/abajo, y un circuito codificador/descodificador que tenga la capacidad de discriminar entre diferentes direcciones.

Si rediseñamos el codificador para tener dos conjuntos de pares LED/fototransistores, esos pares alineados de tal manera que sus señales de salida de onda cuadrada estén 90 o desfasadas entre sí, tenemos lo que se conoce como codificador de salida en cuadratura (la palabra “cuadratura” simplemente se refiere a un 90 o separación angular). Un circuito de detección de fase puede fabricarse a partir de un biestable tipo D, para distinguir una secuencia de impulsos en sentido horario de una secuencia de pulsos en sentido antihorario: