핵심 단어: ADC, DAC, analog to digital, digital to analog, convertor, converter, data converter, data convertor, Glossary, FAQ, nyquist, charge injection, digital filtering, serial port, I2C, SPI, bit banging, microwire, PC board layout, grounding tips, bypass
Abstract: This article answers most of the common questions regarding data converters. Presented in a classic FAQ format it addresses topics such as: What is an ADC, what is a DAC, what is nyquist, effects of charge injection, techniques for digital filtering, interfacing to a serial port, I2C interface, SPI interface, bit banging, microwire interface, PC board layout tips and guidelines, grounding tips, bypass capacitors effect on performance, debugging ADC accuracy, and debugging noisy measurements.
This section includes general introductory questions about A/D converters.
References
Data Converters:
Principles of Data Conversion System Design
Behzad Razavi
IEEE Press, 1995
ISBN 0-7803-1093-4
IEEE order number: PC4465
The Art of Electronics (2nd Edition)
Paul Horowitz, Winfield Hill
Cambridge University Press, 1989
ISBN 0-5213-7095-7
What
Is an Analog-to-Digital Converter (ADC)?
An analog-to-digital converter (also known as an ADC or an A/D converter)
is an electronic circuit that measures a real-world signal (such as temperature,
pressure, acceleration, and speed) and converts it to a digital representation
of the signal.
It compares the analog input voltage to a known reference voltage and
then produces a digital representation of this analog input. The output
of an ADC is a digital binary code. By its nature, an ADC introduces a
quantization error. This is simply the information that is lost, because
for a continuous analog signal there are an infinite number of voltages
but only a finite number of ADC digital codes. The more digital codes
that the ADC can resolve, the more resolution it has and the less information
lost to quantization error.
A digital-to-analog converter (also known as a DAC or a D/A converter)
is an electronic circuit that converts a digital representation of a quantity
into a discrete analog value. The input to the DAC is typically a digital
binary code, and this code, along with a known reference voltage, results
in a voltage or current at the DAC output. The word "discrete" is very
important to understand, because a DAC cannot provide a continuous time
output signal; rather, it provides analog "steps." The steps can
be lowpass-filtered to obtain a continuous signal. By increasing the resolution
of the DAC, the number of discrete steps is increased and the step size
is reduced (which reduces the quantization error), resulting in a signal
that closer approximates a continuous time signal.
A flash ADC is also called a "parallel encoder." The key advantage
of this architecture is very fast conversion times. The key disadvantage
is high power consumption. A flash ADC is suited for very-high-speed,
low-resolution applications. This architecture becomes prohibitively expensive
for higher resolutions. The MAX104 is an example of a flash ADC.
For additional information, refer to The Art of Electronicsor to the Motorola M68HC11 Reference Manual (Chapter 12), a
microcontroller reference manual from Motorola.
A dual-slope integrating ADC is best suited for low-speed applications
where good power-supply rejection is desired. The MAX132 is an example
of a dual-slope ADC.
An application note specifically covering this topic is presently being
developed.
This section covers more involved A/D converter issues.
What
Is the Nyquist Limit?
The Nyquist limit is defined as half of the sampling frequency. The Nyquist
limit sets the highest frequency that the system can sample without frequency
aliasing. In a sampled data system, when the input signal of interest
is sampled at a rate slower than the Nyquist limit (fIN > 0.5fSAMPLE),
the signal is effectively "folded back" into the Nyquist band,
thus appearing to be at a lower frequency than it actually is. This unwanted
signal is indistinguishable from other signals in the desired frequency
band (fSAMPLE/2).
For example, if your system samples the ADC at 2.048kHz, the Nyquist
limit for that system is 1.024kHz. If we applied an input signal at 2.56kHz,
due to frequency aliasing, the input signal is indistinguishable from
a 0.512kHz signal (2.56kHz - 2.048kHz). No amount of clever digital signal
processing can put back the information lost as a result of frequency
aliasing. The only way to know what you have sampled is to physically
restrict the input bandwidth prior to sampling.
In actual practice, you should sample at a rate much higher than two
times the Nyquist limit to minimize sampling errors. For example, a 1kHz
signal sampled at 2kHz has only two samples per cycle. If you sample precisely
at the signal's highest and lowest points, you can measure its frequency
and amplitude. However, in many systems, you have no guarantee where you
are sampling. In the above example, if you sample at the zero crossings
of the sin wave, the digitized result will appear to be a DC signal, so
both the digitized frequency and amplitude information will be incorrect.
Ideally, you should set the sample rate at least five to 10 times the
maximum signal frequency of interest and use a small lowpass analog RC
input filter to prevent unwanted high-frequency energy from being measured.
Even if you don't explicitly include an RC filter, there is usually
some series resistance between the signal source and the ADC, and some
capacitance between the ADC input and ground. This forms an RC filter,
but often the time constant is so small that it actually doesn't provide
any helpful filtering. For example, with R = 100 ohms and C = 10pF, the
time constant is 1 nanosecond, giving a -3dB cutoff frequency of 159MHz.
Frequency aliasing can be used in an advantageous manner. The effect
is similar to tuning a superheterodyne radio receiver. If the spectrum
of interest is at a high frequency (not including DC), then it may be
possible to digitize the input signal with a significantly slower sample
rate than the frequencies of interest. This technique is generally known
as "undersampling."
Why
Does the ADC Disrupt the Signal It Is Measuring?
Some A/D converters sample the input signal continuously, whereas others
sample at specific times. Any A/D converter that uses a track/hold buffer
must periodically connect its track/hold capacitor to the input signal,
causing a small inrush current. The track/hold capacitor requires time
to charge to the correct voltage. This is referred to as "charge injection."
This disruption is usually negligible, because the track/hold capacitor
requires such a small charge current and because it quickly charges to
the correct voltage. However, if the input impedance is large or the signal
source responds slowly to minor disruptions, the system may not settle
to the desired accuracy within the allocated sampling time.
This is how to determine whether or not your system is being disrupted
by charge injection:
Connect an oscilloscope (channel 1) to the analog input of the A/D
converter.
Connect the oscilloscope (channel 2) to the conversion start or chip-select
signal of the A/D converter.
Make the A/D converter acquire data at a steady rate.
Trigger the oscilloscope on channel 2.
Check the A/D converter's input signal for voltage disruption.
Consult the data sheet to determine when sampling begins.
One way to solve this type of problem is to select an op-amp buffer that
has sufficient settling time. How fast is "sufficient"? That depends
on the accuracy your system requires.
Another solution is to increase the ADC's acquisition time (the time
allowed to measure the signal). Some A/D converters, such as the MAX197,
allow increased acquisition time. Extending the acquisition time enough
to permit the input to settle improves the accuracy of the measurement.
Using the fast-Fourier transform (FFT) is one of the most popular ways
to convert a series of digital samples from the time domain to the frequency
domain. The result of an FFT looks like the output of a spectrum analyzer.
And, because the FFT works in both directions, you should be able to digitally
filter a signal just by taking its FFT, modifying its spectrum directly,
and converting it back to time-domain data.
The FFT assumes that the spectrum does not change over time. Furthermore,
if the input signal is not synchronized to the A/D's sampling clock,
the spectrum will become smeared, obscuring detail.
There are other digital-signal-processing (DSP) techniques that are more
advantageous for filtering a real-world signal. The infinite-impulse-response
(IIR) and finite-impulse-response (FIR) filters can be implemented very
inexpensively, and they work on a continuous stream of data.
The wavelet transform is worth investigating. Like the FFT, it converts
time-domain data into the frequency domain. However, unlike the FFT, the
wavelet transform assumes that the frequency spectrum is changing over
time. The result of a wavelet transform is a bit harder to read, but more
meaningful.
References
Wavelets:
Introduction to Wavelets and Wavelet Transforms: A Primer C. Sidney Burrus, Ramesh A. Gopinath, Haitao Guo Prentice-Hall, 1998
ISBN 0-13-489600-9
Practical Implementation of FFT:
Numerical Recipes in Pascal: The Art of Scientific Computing
W. H. Press, B. P. Flannery, S. A. Tukolsky, W. T. Vetterling
Cambridge University Press, 1989
ISBN 0-521-37516-9
A balun is a transformer that converts an AC signal from balanced to
unbalanced, or vice versa.
Some high-speed A/D converters work best on AC signals. The balun passes
the AC part of the input signal, and it removes any DC offset that may
be present.
This section explains how to implement A/D converter systems.
Can I
Connect a Serial A/D to My Computer's Serial Port?
The answer to this question is yes, but there are simpler ways to interface
to a computer. To begin with, the computer's RS-232 port uses higher
voltage levels that are incompatible with most ADC's TTL/CMOS logic.
Another problem is that the computer's RS-232 serial port is asynchronous,
which places a few more requirements on the communication, including some
additional handshaking control lines. Also, with the RS-232 serial port,
you must set both ends of the link to the same baud rate. The A/D converter's
serial port is synchronous; thus, its handshaking requirements
are minimal and it only requires one wire for clock and one or two wires
for data.
SPI (serial peripheral interface) is an interface standard defined by
Motorola on the MC68HCxx line of microcontrollers. A synchronous clock
shifts serial data into and out of the microcontrollers in blocks of 8
bits.
Whenever two devices communicate, one is referred to as the "master"
and the other as the "slave" device. The master drives the serial
clock. When using SPI, data is simultaneously transmitted and received,
making it a full-duplexed protocol.
The 68HC11 allows four configurations of SPI, which are designated by
CPOL and CPHA:
When CPOL = 0, the clock idle state is low.
When CPOL = 1, the clock idle state is high.
When CPHA = 0, the first clock edge clocks data into and out of the
microprocessor. If CPOL = CPHA, then the rising edge clocks data into
and out of the microprocessor.
When CPHA = 1, the second clock edge clocks data into and out of the
microprocessor. If CPOL does not equal CPHA, then the falling edge clocks
data into and out of the microprocessor.
Motorola's names for the SPI signals are as follows: SCLK for serial
clock, which is always driven by the master: MISO is master-in slave-out
data: MOSI is master-out slave-in data. In a typical application, connect
the microcontroller's SCLK to the converter's SCLK input, connect
the MISO to the converter's DOUT pin, and connect the MOSI pin to
the converter's DIN pin. If there is a chip-select signal, it can
be driven by a spare microcontroller general-purpose output.
My Microcontroller
Has No SPI Interface; Is There a Circuit to Convert SPI to Parallel?
The simplest way to convert serial data (especially SPI interface data)
to a parallel format is to use general-purpose microprocessor I/O pins
to emulate the necessary serial-port timing and add the appropriate shift
register to convert the data to the correct format. For a serial output
ADC, use a serial-in/parallel-out shift register (such as the 74HC595
or equivalent) to convert the serial conversion data to a parallel format.
For a DAC, use a parallel-in/serial-out shift register (such as the 74HC597
or equivalent) to convert the parallel DAC data to a serial output stream.
When debugging an SPI™ interface, an SPI slave device circuit such
as the one shown below can be useful. It uses shift registers to convert
data to a parallel format that can be latched if necessary.
When driven by an SPI master,
this circuit converts the SPI signals to steady outputs for easy probing.
Bit-banging is a method of using general-purpose I/O lines to emulate
a serial port. Microcontrollers that include serial-port modules like
SPI™ and I²C™ manage all synchronization and timing
signals, and this activity is transparent to the user. With bit-banging,
however, each write to the port causes a single transition at the port
pin. And it's up to the user, first, to provide the correct number
of transitions to obtain the desired waveform and, second, to ensure that
the timing requirements (particularly setup and hold times for reading
and writing data) are met. Due to the overhead associated with the number
of writes to the port, though the actual port speed might be quite high
the actual bit-bang throughput rate is usually very slow.
My Microcontroller
Has No SPI Interface, So Can I Use Bit-Banging?
The following pseudo-code subroutine simultaneously reads and writes
8 bits through a synchronous serial interface. Some microprocessors offer
specialized hardware that performs this job (such as Motorola's 68HC11
SPI and QSPI, and National Semiconductor's MICROWIRE). This outline
describes a common substitute interface that is implemented by setting
and clearing individual output pins.
Depending on the speed of the processor, delays may be required to satisfy
the interface timing requirements.
Pin Definitions for Pseudo-Code Subroutine below
SCK: The serial clock input to the Maxim chip
DIN: The serial data input to the Maxim chip
DOUT: The serial data output from the Maxim chip
Pseudo-Code Subroutine
int read_write_synchronous_serial (int write_value)
{
read_value = 0 /* read_value will accumulate the input
value */
drive SCK pin low
for (count = 0 to 7) /* process each of the eight bits
*/
{
read_value = read_value * 2 /* shift input value left
*/
if (write_value bit 7 is 1) /* write the data, MSB first
*/
then drive din pin high
else drive din pin low
/* delay here to satisfy data setup time and minimum
clock low time */
drive SCK pin high /* clock rising edge happens here
*/
if (DOUT pin is high) /* sample the received data,
LSB last */
then read_value = read_value + 1
/* delay here to satisfy data hold time and minimum
clock high time */
MICROWIRE is a serial interface standard defined by National Semiconductor.
The MICROWIRE protocol is essentially a subset of the SPI™ interface,
namely CPOL = 0 and CPHA = 0 (see "What Is the SPI Interface?"
above).
I²C is a 2-wire serial interface standard defined by Philips
Semiconductor. The key advantage of this interface is that only two lines
(clock and data) are required for full duplexed communication between
multiple devices (in contrast, SPI™ requires a minimum of three to
four lines with a single device on the bus). The interface typically runs
at a fairly low speed (100kHz to 400kHz). With I²C, each IC
on the bus has a unique address. To begin communication, the bus master
(typically a microcontroller) places the address of the device with which
it intends to communicate (the slave) on the bus. All ICs monitor the
bus to determine if the master device is sending their address. Only the
device with the correct address communicates with the master.
Note that with other serial protocols such as SPI, a chip-select input
is required to enable the IC. Thus, when 10 devices are on the bus, 10
chip-select lines, in addition to the shared clock and data lines, are
needed to select the appropriate device. For I/O-constrained applications,
this can present quite a challenge. In contrast , I²C requires
only two control lines with 10 devices on the bus.
My Microcontroller
Has No I²C Interface, So Can I Use Bit-Banging?
The following code reads and writes 8 bits using a 2-wire interface.
Some microprocessors offer specialized hardware that performs this job
(such as Philips Semiconductor's 8051 family). This outline describes
a common substitute interface, implemented by setting and clearing individual
output pins, also known as "bit-banging."
Depending on the microcontroller's speed, delays may be required
to satisfy the interface timing requirements.
Pin Definitions for code below
SCL: 2-wire (I2C) clock
SDA: 2-wire (I2C) data
This section includes PC-board layout guidelines as well as prototyping
issues.
Do You
Have Any General Circuit-Layout Tips?
In the technical article Tech
Tips: Getting the Most from Your Sensor and Conditioning Electronics,
you'll find tips for good PC-board layout. Though this article is
targeted for piezoresistive transducer (PRT) designs, the principles are
general enough so that they are applicable to other circuits as well.
Do You
Have Any Circuit-Layout Tips for A/D Converters?
Partition the system into analog, digital, and power-supply sections.
Group the related components together. Draw a physical boundary between
the analog and digital sections. The A/D converter should straddle the
boundary between analog and digital. Nothing else should cross this boundary,
except the A/D itself and a single, carefully selected power and ground
return.
Digital traces should never cross analog traces. They should not even
pass over analog ground. And they should be routed away from sensitive
analog traces. When digital traces are near analog traces, even though
there is no direct connection, the PC board's parasitic capacitance
will couple high-frequency noise from any nearby switching signals into
the analog signal. The faster the signal switches, the more it will interfere
with analog signals. The proper handling of analog-versus-digital ground
connections can have a significant impact on the overall system performance.
For grounding issues, see "Do You Have Any Grounding/Ground Plane
Tips?" below.
It is recommended that a ground plane be used, especially for high-resolution
or high-frequency applications, but deciding to use a ground plane or
not depends mainly on your intent. If, for instance, you only want to
determine the basic functionality of an IC, a simple proto-board may be
adequate. However, if you are observing AC performance, expect the proto-board
to provide less-than-optimal performance, and as frequency increases the
performance can degrade drastically.
A ground plane is simply an area of a PC board (an entire PC-board layer
or a portion of it) that provides a low-impedance return path for current
flow. As current flows, any resistance encountered will appear as an IR
(voltage) drop. Thus, if the ground plane has an appreciable resistance,
the associated IR voltage drop will result in variations in the ground-plane
potential. This in turn can have very adverse consequences, such as localized
ground current loops and excessive current flow due to the mismatch in
ground potentials.
Sensitive analog circuitry requires a quiet ground plane. In some cases,
a circuit board may consist of separate analog and digital power-supply
planes and separate analog and digital ground planes to isolate the digital
noise from the analog circuitry. Other applications use a single supply,
but partition the board as if separate analog and digital supplies were
used. In this case, chokes, ferrite beads, and adequate bypassing provide
a "clean" analog supply that is treated as separate from the digital
supply.
The analog and digital ground planes reside on the same physical PC-board
layer, but are set up so that the currents from the digital circuitry
do not interact with the currents from the analog circuitry. This is done
by physically separating analog and digital components and providing an
imaginary division on the board such that the digital currents flow on
the "digital" side and the analog currents flow on the "analog"
side.
Mixed-signal components that are both analog and digital straddle the
analog and digital ground planes. With these ICs, connect their analog
and digital ground pins together at the chip using very short traces and
connect this to a single point at the intersection of the analog and digital
ground planes.
Digital signals such as those from microprocessors, ASICs, DSPs, and
digital logic are very noisy due to the large transient current spikes
as the logic levels change. In addition, switching power supplies, machinery
(motors, actuators, etc.), and EMI are potential sources of noise that
can couple into sensitive analog circuitry.
The key is to decouple (or isolate) the sensitive analog circuitry from
these noise sources--that is, keep the digital noise confined to the digital
ground plane. Because the digital ground current is comprised of a series
of current spikes, chokes and inductors are used to filter these spikes
and prevent them from coupling to the analog circuitry.
You can minimize noise by following these suggestions:
Connect analog and digital ground pins together at a single point
near the IC.
Connect the analog and digital ground planes together at a single
point using a star ground connection.
Keep signal and ground traces short. Long traces have more inductance
and higher resistance.
Do not route digital lines (especially clocks) near the analog ground
plane.
Use linear regulators instead of switching regulators.
Provide a shield around sensitive analog circuits by placing a "ring"
around the analog components. Connect this ring to analog ground.
Separate parallel traces to minimize capacitive coupling.
Do not run analog and digital traces parallel to each other, as there
is inductive coupling between parallel traces.
The system won't function correctly without proper bypass capacitors.
Bypass capacitors are required, because whenever the IC switches, it generates
a transient current load on the power-supply and ground-return traces.
In accordance with Ohm's law, the power-supply voltage to the chip
drops, and the IC's ground pin is also raised above the system ground,
due to these transient current effects. The transients are exacerbated
by the typical series inductance of the power-supply traces, which cause
magnetically induced voltages to oppose the change in current flow. This
is a problem when the current begins spiking up, as well as when the current
tries to return to its initial level.
A bypass capacitor located physically close to the IC solves this problem
by canceling some of the power-supply lead inductance. Of course, the
energy still has to flow from the power supply to the IC, but the bypass
capacitor provides a small reservoir of energy to quickly satisfy the
local surge, without causing significant overshoot or droop at the IC's
power-supply pins.
As a rule of thumb, each IC should have a direct connection to a 0.1µF
ceramic capacitor located no more than about 5mm away. This forms a loop
where transient switching currents for that IC circulate. Don't mix
unrelated loops. The route is from the IC, to the capacitor, to the power-supply
busses.
In addition to the small ceramic capacitors, there should be some larger
bulk capacitors located where the power-supply connections enter the PC-board
assembly. The value should be between 10µF and 1000µF, depending
on the system's needs. Remember to mind the voltage ratings. If the
power supply is 5 volts, use at least a 10V-rated capacitor, or maybe
even higher if the system is exposed to high temperature.
How Can
I Model Real-World Effects of Printed-Circuit Boards?
A printed-circuit board adds some capacitance, resistance, and inductance
to the circuit. These parasitic circuit elements can change with
temperature, mechanical stress, and even age. If you are a fan of SPICE
models, you can always add these parasitic elements to the circuit to
check for sensitivity. But it's impossible to develop a rigorous model
without verifying physical performance. You need to build a prototype.
Consider a typical four-layer FR4 dielectric PC board with 1-ounce copper
plating and a net thickness of 0.0625 inches. The thickness of 1-ounce
copper plating is 0.00139 inches. The distance between layers is 0.019
inches.
You can estimate the resistance of a PC-board trace based on its shape.
Tile the trace with squares, and then multiply the foil sheet resistance
by the number of squares. Standard 1-ounce copper foil has a thickness
of 0.00139 inches, which corresponds to a sheet resistance of 0.49 milliohms
per square. (This resistance varies ±25% over -40°C to +85°C.)
So, a PC-board trace that is 0.010 inches wide and 1.000 inches long has
a resistance of 100 squares, or approximately 0.05 ohms. If a switching
transient of 500mA flowed through this trace (even for a microsecond),
the voltage drop across it would be 25mV.
There is parasitic capacitance between adjacent traces on the same layer
and between traces on adjacent layers as well. The common FR4 material
has a relative dielectric between 4 and 5, although it is not usually
controlled tightly. Often the parasitic capacitance is a few picofarads,
but it can be higher if the board is dirty.
This section deals with diagnostic techniques that can help during the
prototype stage.
Why Am
I Not Getting the Specified Accuracy Out of My ADC?
There are several potential sources of error, including the power supplies,
open circuits, short circuits, poor layout, malfunctioning external components,
and the actual device itself.
The quickest way to resolve the problem is to obtain an evaluation kit
for the device. Maxim provides many ADC evaluation kits with user-friendly
software that allows you to quickly exercise the IC and analyze its performance.
If this is not an option, first check your board for shorts and open
circuits. Next, check the voltages on each pin of the IC. Use an oscilloscope
rather than a DMM so that any noise or oscillations will be observed.
Try a different component in the socket. Finally, check the external components;
"bad" capacitors and resistors can cause circuit anomalies.
If the problem still persists, refer to the technical article The
ABCs of ADCs to determine if the ADC's performance could be the
culprit.
This could be due to the voltage reference not working properly. Check
the reference voltage. Perhaps the reference input was inadvertently shorted
to ground. Use a hand-held DVM to measure between the reference input
and ground, right at the ADC's pins.
If the ADC has a shutdown pin, use an oscilloscope to verify that shutdown
is not active. Some parts permit the shutdown pin to be left unconnected
(floating); other parts require it to be driven high or low.
Use an oscilloscope to check the DOUT pin of the ADC, and see if the
part is performing conversions. Perhaps there is a wire broken somewhere.
Finding the source of noise in ADC measurements is not always easy. The
following suggestions hopefully will help you arrive at the source of
the problem quickly.
Check the test hardware to make sure the test setup is not the source
of the problem.
Are the power supplies clean? Do they have adequate bypassing at the
ADC power-supply pins?
Has the circuit board been checked for shorts, proper pin configurations,
short traces, an adequate low-noise ground, etc.?
Is the reference voltage at the correct value? If an external reference
is used, does it have low enough noise? Can it source adequate current?
Is the circuit being tested in a relatively noise-free environment?
If not, move to one, as noise tends to find its way into circuits through
the power supplies, electromagnetic interference (EMI), lighting, and
a host of other sources.
Determine if the noise could be coming from the input-signal source,
the analog front-end signal conditioning circuitry, or the ADC itself.
Observe the signal source on a spectrum analyzer or an oscilloscope,
and examine the output of the front-end circuitry in a similar manner.
If an op amp is used on the front end, make sure its noise performance
is acceptable for the performance desired.
In addition, make sure it has adequate bandwidth at the frequencies
of interest. Other things to check are the scope probes, the power supplies
for excessive current flow, and the ADC's programmed state to make
sure the correct programming information was written to the ADC. What's
more, is the oscilloscope floating or is it powered by 50Hz/60Hz? This
could have an effect on the noise performance. There also could be other
signals getting into the ADC input. Is there a lowpass filter on the
ADC input to remove high-frequency noise?
Keep in mind that a logical, systematic approach will lead to the source
of the noise much faster than a trial-and-error method.
I've
Noticed Noise from the MAX194/MAX195; How Do I Get Rid of It?
The MAX194/MAX195's least-significant bit (LSB) size is slightly
less than the RMS code-edge noise level. This means that the peak-to-peak
noise is greater than an LSB. Thus, the LSB is actually in the noise of
the converter. However, averaging can effectively reduce this noise. 'N'
samples will reduce the noise by a factor of the square root of 'N'.
For improved noise performance, consider using the MAX1132 for new designs.