A synchronous counter, in contrast to an
asynchronous counter, is one whose output bits change state
simultaneously, with no ripple. The only way we can build such a counter
circuit from J-K flip-flops is to connect all the clock inputs together, so
that each and every flip-flop receives the exact same clock pulse at the
exact same time:
Now, the question is, what do we do with the J and K inputs? We know that
we still have to maintain the same divide-by-two frequency pattern in order
to count in a binary sequence, and that this pattern is best achieved
utilizing the "toggle" mode of the flip-flop, so the fact that the J and K
inputs must both be (at times) "high" is clear. However, if we simply
connect all the J and K inputs to the positive rail of the power supply as
we did in the asynchronous circuit, this would clearly not work because all
the flip-flops would toggle at the same time: with each and every clock
pulse!
Let's examine the four-bit binary counting sequence again, and see if
there are any other patterns that predict the toggling of a bit.
Asynchronous counter circuit design is based on the fact that each bit
toggle happens at the same time that the preceding bit toggles from a "high"
to a "low" (from 1 to 0). Since we cannot clock the toggling of a bit based
on the toggling of a previous bit in a synchronous counter circuit (to do so
would create a ripple effect) we must find some other pattern in the
counting sequence that can be used to trigger a bit toggle:
Examining the four-bit binary count sequence, another predictive pattern
can be seen. Notice that just before a bit toggles, all preceding bits are
"high:"
This pattern is also something we can exploit in designing a counter
circuit. If we enable each J-K flip-flop to toggle based on whether or not
all preceding flip-flop outputs (Q) are "high," we can obtain the same
counting sequence as the asynchronous circuit without the ripple effect,
since each flip-flop in this circuit will be clocked at exactly the same
time:
The result is a four-bit synchronous "up" counter. Each of the
higher-order flip-flops are made ready to toggle (both J and K inputs
"high") if the Q outputs of all previous flip-flops are "high." Otherwise,
the J and K inputs for that flip-flop will both be "low," placing it into
the "latch" mode where it will maintain its present output state at the next
clock pulse. Since the first (LSB) flip-flop needs to toggle at every clock
pulse, its J and K inputs are connected to Vcc or Vdd,
where they will be "high" all the time. The next flip-flop need only
"recognize" that the first flip-flop's Q output is high to be made ready to
toggle, so no AND gate is needed. However, the remaining flip-flops should
be made ready to toggle only when all lower-order output bits are
"high," thus the need for AND gates.
To make a synchronous "down" counter, we need to build the circuit to
recognize the appropriate bit patterns predicting each toggle state while
counting down. Not surprisingly, when we examine the four-bit binary count
sequence, we see that all preceding bits are "low" prior to a toggle
(following the sequence from bottom to top):
Since each J-K flip-flop comes equipped with a Q' output as well as a Q
output, we can use the Q' outputs to enable the toggle mode on each
succeeding flip-flop, being that each Q' will be "high" every time that the
respective Q is "low:"
Taking this idea one step further, we can build a counter circuit with
selectable between "up" and "down" count modes by having dual lines of AND
gates detecting the appropriate bit conditions for an "up" and a "down"
counting sequence, respectively, then use OR gates to combine the AND gate
outputs to the J and K inputs of each succeeding flip-flop:
This circuit isn't as complex as it might first appear. The Up/Down
control input line simply enables either the upper string or lower string of
AND gates to pass the Q/Q' outputs to the succeeding stages of flip-flops.
If the Up/Down control line is "high," the top AND gates become enabled, and
the circuit functions exactly the same as the first ("up") synchronous
counter circuit shown in this section. If the Up/Down control line is made
"low," the bottom AND gates become enabled, and the circuit functions
identically to the second ("down" counter) circuit shown in this section.
To illustrate, here is a diagram showing the circuit in the "up" counting
mode (all disabled circuitry shown in grey rather than black):
Here, shown in the "down" counting mode, with the same grey coloring
representing disabled circuitry:
Up/down counter circuits are very useful devices. A common application is
in machine motion control, where devices called rotary shaft encoders
convert mechanical rotation into a series of electrical pulses, these pulses
"clocking" a counter circuit to track total motion:
As the machine moves, it turns the encoder shaft, making and breaking the
light beam between LED and phototransistor, thereby generating clock pulses
to increment the counter circuit. Thus, the counter integrates, or
accumulates, total motion of the shaft, serving as an electronic indication
of how far the machine has moved. If all we care about is tracking total
motion, and do not care to account for changes in the direction of
motion, this arrangement will suffice. However, if we wish the counter to
increment with one direction of motion and decrement with the
reverse direction of motion, we must use an up/down counter, and an
encoder/decoding circuit having the ability to discriminate between
different directions.
If we re-design the encoder to have two sets of LED/phototransistor
pairs, those pairs aligned such that their square-wave output signals are 90o
out of phase with each other, we have what is known as a quadrature
output encoder (the word "quadrature" simply refers to a 90o
angular separation). A phase detection circuit may be made from a D-type
flip-flop, to distinguish a clockwise pulse sequence from a
counter-clockwise pulse sequence:
When the encoder rotates clockwise, the "D" input signal square-wave will
lead the "C" input square-wave, meaning that the "D" input will already be
"high" when the "C" transitions from "low" to "high," thus setting
the D-type flip-flop (making the Q output "high") with every clock pulse. A
"high" Q output places the counter into the "Up" count mode, and any clock
pulses received by the clock from the encoder (from either LED) will
increment it. Conversely, when the encoder reverses rotation, the "D" input
will lag behind the "C" input waveform, meaning that it will be "low" when
the "C" waveform transitions from "low" to "high," forcing the D-type
flip-flop into the reset state (making the Q output "low") with every
clock pulse. This "low" signal commands the counter circuit to decrement
with every clock pulse from the encoder.
This circuit, or something very much like it, is at the heart of every
position-measuring circuit based on a pulse encoder sensor. Such
applications are very common in robotics, CNC machine tool control, and
other applications involving the measurement of reversible, mechanical
motion. |