VCO Based Sensors
VCOs can form a clever way to digitize analog data.
Published in Embedded Systems Programming, June 1991
 |
For hints, tricks and ideas about better ways to build embedded systems, subscribe to The Embedded Muse, a free biweekly e-newsletter. No hype, just down to earth embedded talk. 23,000 other engineers subscribe. It takes just a few seconds (all we need is your email address, which is shared with absolutely no one) to subscribe to the Embedded Muse. |
I flipped through yet another Digital Design textbook recently.
It described all of the standard approaches to dealing with I/O.
Processing an analog signal? Well, just feed it into an A/D convertor.
The authors made it clear that all serial digital streams go through
UARTs, and that everyone senses pure digital signals with some
sort of parallel I/O chip (like the 8255).
They're wrong.
The microprocessor's success stems from its attractive cost/benefit
ratio: for a few bucks you can add a tremendous amount of intelligence
to any electronic product. A lot of embedded systems thrive on
the cost reductions made possible by micros; many are so cost
sensitive that they rely on extraordinarily clever design to remove
every possible chip. We can often replace hardware with software,
driving recurring costs down (though there is usually a corresponding
increase in engineering costs).
Blending the hardware and software into one unified whole is the
best part of designing embedded systems, and by far the most challenging.
It requires some knowledge of both ends of the business - this
really is an interdisciplinary career!
The textbook was partially correct - a lot of designs profit from
conventional design practices. Low cost applications, or those
with odd requirements, require a more creative approach.
One particularly interesting problem is transmitting remotely
acquired data long distances. Suppose you're building a factory
automation system that must measure humidity in a mill located
thousands of feet away. No one in their right mind would attempt
to send a raw analog signal that far. Noise and transients would
swamp the signal.
One nice solution is to place a small microcontroller (say an
8051 or H8 type device) with an on-board A/D right where the measurement
is to take place. Then, digitize the data and send it in serial
over a fiber optic cable back to the main computer.
Another option is to use some sort of radio. Broadcast (being
careful not to violate FCC regulations) the digitized data, saving
the expense of running fiber. A variation of this theme is to
transmit directly to a satellite. Quite a few unmanned scientific
stations, located in mid-ocean or the arctic, return digitized
analog this way.
Don't forget cellular phones. A simple controller might acquire
and compress data until filling its buffer. Then, it could call
a BBS via cellular and upload a block of data. More and more companies
are now examining this option.
All of these solutions require a computer right at the sensor's
site to digitize, serialize, and then transmit the data. Cost
sensitive systems may find the computer too expensive. Or, in
very harsh environments the computer might not survive. Remember
that right outside your window is a "very harsh" environment,
which in my hometown of Columbia, MD, ranges from -20 degrees
C in midwinter to +40 in August. Few non-militarized chips will
survive these extremes, necessitating the use of very expensive
components.
Worse, how do we get a clean source of power to the computer?
When implementing a simple monitor that measures temperature in
dozens of rooms, do you really want to both run wires (or fiber)
from each sensor, plus somehow get power to the little computer
boards?
When measuring a simple parameter that changes slowly (like temperature),
consider using a Voltage Controlled Oscillator (VCO) in place
of the A/D converter and computer. The VCO produces a square wave
whose frequency is proportional to input voltage. Any sensor whose
output is voltage (or even resistance) can be the VCO's input.
Then, the frequency of operation becomes proportional to the value
being measured.
If you connect a thermistor to a VCO then varying temperatures
produce different frequencies. Transmit this square wave back
to the central computer over a pair of wires. Let the computer
convert the frequency information back to temperature data.
Depending on the selection of components, 0 degrees Celsius might
correspond to 500 Hertz, and 100 degrees to 5000 Hertz. Temperatures
between these extremes would be linearly related to frequency.
VCOs have several advantages over conventional data acquisition
devices. First, the hardware is trivial. One or two cheap ICs
do all of the work at the sensor end. The old CD4000 series offers
several VCOs that work over very wide environmental extremes.
Second, if the VCO oscillates at reasonable frequencies you can
use almost any set of wires to send it back to the main computer
- even old phone lines. Finally, you can both provide power and
receive signals over one pair of wires.
It might seem impossible that a single wire pair can handle both
power and data, but in fact we can multiplex the data stream on
power using the circuit shown in the figure.
The three resistors on the right hand side of the figure form
a voltage divider that develops some potential across R2. The
voltage divider is located in the main computer that receives
data transmitted by the remotely located sensor. This voltage
goes over (possibly long) wires to the sensor assembly consisting
of the sensor itself, a VCO, the transistor Q1, and a micropower
voltage regulator.
The VCO oscillates a frequency that indicates the value seen by
the sensor. When the VCO's output is a 1 (for 50% of a waveform),
Q1 is turned on, essentially placing R4 in parallel with the remotely
located R2. This of course drops the voltage seen across the wire
pair, simultaneously increasing the voltage on R3.
The main computer can measure frequency by watching the voltage
on R3 go up and down - the voltage on R3 reflects the VCO's oscillation
frequency.
Q1's switching action drags the voltage on the wire pair down,
which is nice for transmitting data but not so great for transmitting
power. R4, in series with Q1's collector, keeps the voltage from
going too close to 0. The micropower regulator converts the wires'
data+power to the smooth DC needed to run the VCO chip.
The graph shows the voltage found on the wire pair. A VCO-produced
oscillation rides above some DC bias. The regulator runs the VCO
from the bias voltage. Obviously, selection of the resistors is
crucial to insure proper operation of the VCO (i.e., the bias
must be above some minimum level to operate the chip).
The result - a tiny, simple and cheap sensor module supplies a
fairly noise immune data stream over long distances without requiring
separate power connections. The downside is that rather complicated
code might be needed to make sense of the input data stream.
The computer can't directly read this signal. Being biased (possibly
a lot) above 0 volts, it never really goes to a logic zero condition.
We'll need some sort of level shifter to remove the bias.
One method is to feed the data stream into an A/D converter. Have
the software read the digitized values and watch for transitions
from N volts (the bias) to N plus some minimum value. Count the
number of transitions received over a period of time (perhaps
a second) and convert to frequency.
If the environment is really horrible then the bias might ride
up and down a bit. Write slightly more clever software that watches
minimum voltage levels and dynamically computes the current bias.
Then you can even eliminate costly precision resistors for R1
to R4.
An A/D is a fairly expensive solution. Another option is to differentiate
the data (with a resistor and capacitor), square it with a schmidt
trigger, and then feed the output into either a parallel input
on the CPU or even to an edge-triggered interrupt line. Interrupts
are particularly attractive, as the software won't have to painstakingly
watch for zero to one transitions. Again, count edges for some
time and convert to frequency.
Things get more complex if one CPU manages many of these sensors.
I once prototyped an experimental version using a dozen channels
feeding into an analog multiplexor which in turn drove an A/D.
The software constantly polled all 12 channels, laboriously watching
for transitions. This can burn a lot of CPU time. Don't even consider
trying to separately test the state of each channel. It's far
better to develop a "state vector", a word with a bit
representing the state of each channel. Look for transitions by
exclusive ORing this against the previously read value.
You could feed all of the channels into the processor's edge-triggered
interrupts, but use an interrupt priority controller to resolve
the inevitable conflicts that occur when several change from zero
to one at the same time.
Special Processors
If high accuracy measurements are needed on a number of channels,
it makes sense to look into using special hardware to lift some
of the processing burden from the main computer.
Motorola's TPU (Time Processor Unit) is an adjunct to the 68300
family designed specifically to deal with periodic input and output
waveforms. Although targeted towards the huge potential market
of engine controllers, its on-board time capture registers are
ideal for this application.
The TPU accepts up to 16 digital waveforms. You can program it
to interrupt on an edge transition from any of the 16 channels,
which is not much of an improvement over using multiple interrupts
into the main CPU. It does, however, let you hold off the interrupt
until a specified number of edges are found. Suppose you tell
it to interrupt after 100 low-to-high transitions: the TPU will
automatically log the time after these 100 transitions occur,
so the code can at its leisure see just how long 100 edges took.
It's pretty easy to convert this to frequency, or better to the
parameter being measured (say, temperature).
Intel's 8096/196 processors contain built-in support for monitoring
four external time events. While perhaps not as powerful as Motorola's
product, the Intel chips are part of a highly integrated chip.
One part contains I/O, CPU, and memory.
The 8096/196 detects edge transitions and logs the time associate
with each in a small on-board FIFO. You can delay the event capture
until 8 transitions occur, giving a short term average of the
input waveform.
Conclusion
The VCO, coupled with smart code, is an interesting option for
sending slowly-changing analog data over long distances. Don't
abdicate the hardware portion of such a design to your hardware-only
counterparts; they might chose frequency ranges that demand too
much from the code, or fail to consider potential software race
conditions that occur when several inputs change at the same time.
Look for innovative solutions to your unique embedded problems.
Squeeze the hardware and software into one integrated whole to
"do more with less".
|