347 lines
18 KiB
Plaintext
347 lines
18 KiB
Plaintext
|
DMA Techniques for Personal Computer Data Acquisition
|
|||
|
|
|||
|
Introduction
|
|||
|
|
|||
|
Data acquisition generally involves sampling some set of "real
|
|||
|
world" signals at a regular rate, and storing the results for
|
|||
|
processing and display. Enhanced with data acquisition hardware,
|
|||
|
a personal computer is an excellent vehicle for this sort of
|
|||
|
activity. It can contain all the elements of the data acquisition
|
|||
|
system--system control, data storage, data manipulation, and
|
|||
|
report generation--at low cost. The ubiquitous IBM PC (and
|
|||
|
compatibles) is an excellent choice because of the richness of
|
|||
|
hardware and software enhancement products available for it.
|
|||
|
|
|||
|
There are three basic techniques available for accomplishing the
|
|||
|
sampling task -- polling, interrupts, and DMA, or Direct Memory
|
|||
|
Access. While the main thrust of this discussion is DMA, the
|
|||
|
other two techniques deserve mention.
|
|||
|
|
|||
|
Using the polling technique, the data acquisition system
|
|||
|
generates a clock pulse to signal the computer to sample the
|
|||
|
data. The clock can either be a stable, regular pulse from a
|
|||
|
crystal oscillator, or it can be generated by some external
|
|||
|
event. The computer's program is in a loop waiting for this
|
|||
|
clock. At each occurrence, it samples and stores the data. This
|
|||
|
technique has the advantage of being very simple to implement,
|
|||
|
and quite fast (up to 200,000 12-bit samples/sec in a '386 based
|
|||
|
machine using assembly language). The major disadvantage of
|
|||
|
polling is that it monopolizes the computer during data
|
|||
|
acquisition. Even the PC's keyboard and clock interrupts must be
|
|||
|
disabled to avoid missing data samples.
|
|||
|
|
|||
|
Interrupt-driven data acquisition also requires some sort of
|
|||
|
clock signal to indicate when it is time to sample and store the
|
|||
|
data. In this case, however, the clock signal generates an
|
|||
|
interrupt to the PC, and the interrupt handling routine samples
|
|||
|
and stores the data. The computer is not in a program loop
|
|||
|
waiting for the clock. This overcomes the major disadvantage of
|
|||
|
polling -- the computer is free for other tasks as well as data
|
|||
|
acquisition. Each time the processor receives an interrupt, it
|
|||
|
has to save the contents of all its registers, so that it can
|
|||
|
pick up where it left off when it returns. This additional
|
|||
|
overhead makes interrupts much slower than polling (around 10000
|
|||
|
12-bit samples/sec in a similar machine). An interrupt routine is
|
|||
|
also much more difficult to implement in software. Finally, in
|
|||
|
order to maintain a gap-free regular data acquisition rate, it
|
|||
|
may still be necessary to disable the PC's clock and keyboard
|
|||
|
interrupts.
|
|||
|
|
|||
|
The third data acquisition technique is Direct Memory Access.
|
|||
|
Using this technique, the data acquisition hardware sends data to
|
|||
|
( or receives data from) the computer's memory directly. DMA also
|
|||
|
uses a clock signal as do the other two techniques. In both
|
|||
|
polling and interrupt driven data acquisition, however, the data
|
|||
|
is retrieved from the hardware and transferred into memory by
|
|||
|
computer instructions in the user's program. DMA is a method by
|
|||
|
which the hardware takes control of the computer's data, address,
|
|||
|
and control busses, and interacts with memory directly without
|
|||
|
processor intervention (See Fig. 1). Each time the sample clock
|
|||
|
"ticks", data is directly inserted into memory.
|
|||
|
|
|||
|
Since it proceeds without software intervention, DMA is also a
|
|||
|
fast method of acquiring data -- speeds of up to 180,000 12-bit
|
|||
|
samples per second can be achieved on a PC/XT. It also has the
|
|||
|
advantage of operating as a true background task. Since the
|
|||
|
user's program does not have to deal with the business of
|
|||
|
acquiring each sample, it is free to perform other tasks. The
|
|||
|
computer's keyboard and timer interrupts can remain active since
|
|||
|
they will not affect DMA operation.
|
|||
|
|
|||
|
DMA in Data Acquisition
|
|||
|
|
|||
|
Personal computers were originally designed to increase
|
|||
|
productivity in office automation applications. Among the first
|
|||
|
software products to appear were word processors, spreadsheets,
|
|||
|
and database managers. The fundamental difference between these
|
|||
|
sorts of applications and Data Acquisition is the extent to which
|
|||
|
they must react to the "real world."
|
|||
|
|
|||
|
Office automation software responds to inputs from a human
|
|||
|
operator -- generally keystrokes. The potential frequency of
|
|||
|
these inputs is very low compared to the processing speed of the
|
|||
|
computer, even for the fastest typist in the world. This is not
|
|||
|
the case in Data Acquisition.
|
|||
|
|
|||
|
Consider a system capturing an audio frequency input from an A/D
|
|||
|
converter. To achieve a bandwidth of 20 KHz, such a system would
|
|||
|
need to sample the input at 40,000 samples/sec, or once every 25
|
|||
|
microseconds. If the input is sampled at a frequency lower than
|
|||
|
twice the signal frequency, "aliasing" errors will occur. In this
|
|||
|
case, higher frequency components of the input waveform
|
|||
|
"masquerade" as lower frequency components, causing potentially
|
|||
|
significant errors in signal re-construction.
|
|||
|
|
|||
|
A good typist may enter 5 to 8 characters per second through the
|
|||
|
keyboard -- three orders of magnitude in frequency below what
|
|||
|
would be required of the data acquisition system. Data
|
|||
|
Acquisition, then, is very much a "real time" activity, and speed
|
|||
|
of response is a critical concern. DMA is a good way to provide
|
|||
|
this speed without seriously taxing the computer's ability to
|
|||
|
perform other tasks.
|
|||
|
|
|||
|
It is not enough, however, to acquire a signal very quickly. In
|
|||
|
order to accurately reconstruct a waveform, one must know not
|
|||
|
only the value of a signal, but also the time at which the signal
|
|||
|
was sampled. The simplest way to know the time at which a sample
|
|||
|
was taken is to take all the samples at a regular rate. The time
|
|||
|
of any given sample can then be computed by knowing the exact
|
|||
|
time between samples.
|
|||
|
|
|||
|
This method of sampling depends heavily on the sample rate being
|
|||
|
extremely regular. Variations in sample-to-sample timing, or
|
|||
|
"jitter", can lead to significant errors. Consider a 1 KHz sine
|
|||
|
wave at 20 V peak-to-peak being sampled by a 12-bit A/D converter
|
|||
|
with a timing uncertainty of only 1 usec. At worst case (around
|
|||
|
0V where the rate of change of the sine wave is highest), the
|
|||
|
error generated by such an uncertainty would be:
|
|||
|
|
|||
|
Error Voltage = 10*SIN(2*pi*f*1 usec) = 62.8 mv
|
|||
|
|
|||
|
The 12-bit A/D will divide the 20 V full scale input range into
|
|||
|
4096 equal parts or "counts". An error of 62.8 mv would
|
|||
|
correspond to
|
|||
|
|
|||
|
.0628 V * (4096 counts / 20 V) = 12.9 counts!
|
|||
|
|
|||
|
Such an error reduces the system accuracy to about what would be
|
|||
|
expected of an eight bit system. Clearly, this could easily be
|
|||
|
the most significant error in the system. The maximum timing
|
|||
|
jitter allowable that would give 1/2 count or less of error for a
|
|||
|
12 bit system would be:
|
|||
|
|
|||
|
T = ARCSIN(Error Voltage / Volts Full Scale) / 2*pi*f
|
|||
|
|
|||
|
In this case
|
|||
|
|
|||
|
T = ARCSIN(.00244 V/10) / 2*pi*1000 = 39 nsec !
|
|||
|
|
|||
|
The only way to achieve such stability in a computer is to have a
|
|||
|
clock derived from a crystal oscillator directly start A/D
|
|||
|
conversions. The DMA process would then be paced by the A/D's End
|
|||
|
of Convert Signal to ensure that only valid data are transferred.
|
|||
|
DMA for data acquisition, then, must be paced by a very regular
|
|||
|
clock.
|
|||
|
|
|||
|
Besides being more demanding in terms of frequency than office
|
|||
|
automation, data acquisition must also be "event driven" to a
|
|||
|
much greater extent. That is, it must respond and synchronize
|
|||
|
itself to asynchronous events over which it may have little or no
|
|||
|
control.
|
|||
|
|
|||
|
Often, it is not useful to take a random "snapshot" of 10,000
|
|||
|
precisely timed samples of a signal. Often, one would really like
|
|||
|
to take a snapshot only of the 10,000 samples which contain some
|
|||
|
event of interest. In these cases, the optimal snapshot would
|
|||
|
contain data leading up to the event, and data following the
|
|||
|
event -- pre- and post-trigger data. The technique for achieving
|
|||
|
this is well known, and requires three basic elements -- a
|
|||
|
"circular" memory buffer, some sort of hardware trigger, and a
|
|||
|
delay counter.
|
|||
|
|
|||
|
Data is acquired continuously into the circular buffer. When the
|
|||
|
buffer is full, it automatically wraps around and begins filling
|
|||
|
again, overwriting old data with new. When the hardware trigger
|
|||
|
occurs, the delay counter begins counting a pre-programmed number
|
|||
|
of additional samples. When the delay counter exhausts its count,
|
|||
|
data acquisition stops. The buffer is left with samples taken
|
|||
|
both before and after the trigger (Fig. 2). The oldest sample in
|
|||
|
the buffer is the one which would have been written next if data
|
|||
|
acquisition had continued. The newest sample is the one just
|
|||
|
written, and the trigger sample is located by going backwards
|
|||
|
through the buffer by the number of samples in the delay.
|
|||
|
|
|||
|
This capability is partially inherent in the Personal Computer.
|
|||
|
Its DMA Controller has an "Autoinitialize Mode", described
|
|||
|
below, which can be used to create the required circular buffer.
|
|||
|
The hardware trigger and delay counter, however, must be built in
|
|||
|
to the data acquisition hardware. The Burr-Brown PCI-20000
|
|||
|
Modular Data Acquisition System was the first PC-based data
|
|||
|
acquisition system to offer this capability. All major
|
|||
|
competitors in this area now offer some capablities like this.
|
|||
|
|
|||
|
|
|||
|
.cp 3
|
|||
|
|
|||
|
Survey of DMA Techniques
|
|||
|
|
|||
|
The classical DMA technique which is supported by the IBM family
|
|||
|
of PCs is the "device to memory" technique. A single external
|
|||
|
device (for data acquisition, normally an A/D or D/A converter)
|
|||
|
communicates with the host computer's memory using the
|
|||
|
computer's DMA handshaking protocol. Fig. 3 shows a simple block
|
|||
|
diagram and memory map of this process.
|
|||
|
|
|||
|
For purposes of data acquisition, this technique is illustrated
|
|||
|
in its simplest form in Fig. 4. An external timing source starts
|
|||
|
an A/D conversion directly. When the conversion is complete, the
|
|||
|
A/D's data is transmitted directly to memory. While this process
|
|||
|
is very fast, it has the disadvantage that only one channel of
|
|||
|
analog data is captured and transmitted. There are no provisions
|
|||
|
for multiple channels of analog data, or for any other type of
|
|||
|
data.
|
|||
|
|
|||
|
The addition of a multiplexer and programmable counter, as shown
|
|||
|
in Fig. 5, allows the acquisition of multiple analog channels.
|
|||
|
Conversions are still started by the external timing source. Now,
|
|||
|
however, when a conversion starts, the counter advances the
|
|||
|
multiplexer to the next channel in the sequence. Advancing the
|
|||
|
counter at the start of conversion rather than at the end allows
|
|||
|
the multiplexer to settle on the next channel while the current
|
|||
|
channel is converting. The sample/hold amplifier stores the value
|
|||
|
of the current channel while the current conversion is in
|
|||
|
progress. The counter can be made such that it can scan the first
|
|||
|
N channels in sequence, or the last N channels. Each time a
|
|||
|
conversion starts, a different channel is converted and
|
|||
|
transmitted. Some technique similar to this is employed on
|
|||
|
virtually all modern DMA-compatible data acquisition boards.
|
|||
|
|
|||
|
|
|||
|
Another level of utility can be achieved by inserting a "list
|
|||
|
memory" between the counter and the multiplexer (Fig. 6). Instead
|
|||
|
of selecting an analog channel, the counter will select a memory
|
|||
|
location in the list memory. This memory location can contain the
|
|||
|
code for any channel, as well as the code for a gain, if a
|
|||
|
programmable gain amplifier is used in the system. As above, each
|
|||
|
time a conversion starts, the counter advances. In this case,
|
|||
|
however, it advances to the next memory location, and the
|
|||
|
contents of that memory location specify the channel for the next
|
|||
|
conversion.
|
|||
|
|
|||
|
This technique offers several advantages. The list of channels to
|
|||
|
be scanned does not have to be sequential. Any random channel
|
|||
|
numbers can be programmed in the list.
|
|||
|
|
|||
|
If some channels need to be scanned at higher frequencies than
|
|||
|
others, they can be repeated in the list. For example, suppose
|
|||
|
channels 7, 2, and 5 were to be scanned, and channel 2 contained
|
|||
|
higher frequency information than the other two. A channel list
|
|||
|
could be constructed to look like: 2,7,2,5. Channel 2 would be
|
|||
|
scanned at twice the rate of the others.
|
|||
|
|
|||
|
If a programmable gain amplifier is used in the system, and its
|
|||
|
control bits are included in the list memory, then each channel
|
|||
|
can have a different gain. Normally, this is not possible under
|
|||
|
DMA control since gain has to be set with software.
|
|||
|
|
|||
|
The random-channel scanner first appeared in PC-based data
|
|||
|
acquisition products in 1985, again in Burr-Brown's PCI-20000
|
|||
|
system. Since that time, it has become available from most
|
|||
|
suppliers of such boards.
|
|||
|
|
|||
|
A New Technique
|
|||
|
|
|||
|
All of the techniques listed above are available in commercially
|
|||
|
available plug-in data acquisition boards. All of these schemes
|
|||
|
have one limitation in common, however: they can only monitor a
|
|||
|
single A/D converter under DMA control, and no other type of
|
|||
|
device at all.
|
|||
|
|
|||
|
Almost all data acquisition boards have event counters and
|
|||
|
digital I/O on board as well as an A/D converter. This is because
|
|||
|
most applications involve more than simply monitoring analog
|
|||
|
channels. For example, if an application requires correlating
|
|||
|
analog inputs with a position signal from an absolute shaft
|
|||
|
encoder, then DMA cannot be used. The analog inputs can be
|
|||
|
monitored under DMA control, but the digital inputs from the
|
|||
|
shaft encoder cannot.
|
|||
|
|
|||
|
Alternatively, if an application requires simultaneous sampling
|
|||
|
from several A/D converters, or to several D/A converters, then
|
|||
|
DMA could not be used. Only one of the converters could be under
|
|||
|
DMA control.
|
|||
|
|
|||
|
A technique has been developed that gets around this limitation.
|
|||
|
Embodied in the Burr-Brown PCI-20041C Data Acquisition Carrier,
|
|||
|
it allows several (up to 64) data acquisition devices to share
|
|||
|
the same DMA channel in the PC. Any device in the system can be
|
|||
|
used -- A/D converters, digital I/O channels, and/or counters --
|
|||
|
and they can be mixed together in the same DMA process.
|
|||
|
|
|||
|
The scheme involves a technique similar to the random-channel
|
|||
|
scanner described above. RAM on the Carrier contains a list of
|
|||
|
all items to be transferred under DMA control. Each time a DMA
|
|||
|
transfer is requested (by a pacer clock, for example), the
|
|||
|
Carrier sends out one "frame" consisting of all the items in the
|
|||
|
list to a single DMA channel as fast as the computer will accept
|
|||
|
them. This frame can consist of any mixture of items available
|
|||
|
on the Carrier or Modules; A/D readings, digital input readings,
|
|||
|
and counter data can be intermixed as required (see Fig. 7). Up
|
|||
|
to five Carriers can be linked together in a master-slaves
|
|||
|
arrangement, allowing data from all five to be under DMA control
|
|||
|
simultaneously.
|
|||
|
|
|||
|
The DMA list, or frame map, is contained in a block of 128 bytes
|
|||
|
of memory on the Carrier. Each item in the map consists of two
|
|||
|
bytes representing the local address of one item to be
|
|||
|
transferred under DMA control. There can be up to 64 such items
|
|||
|
in the list. The last item in the frame also contains an "End Of
|
|||
|
Frame" flag indicating the end of the list (Fig. 8).
|
|||
|
|
|||
|
During a DMA transfer, the PC's address and control lines are
|
|||
|
removed from the Carrier's local bus, and replaced with the
|
|||
|
contents of one element from the list. This addresses one byte on
|
|||
|
the Carrier, causing its data to be placed on the data bus (or
|
|||
|
taken from the data bus, depending on the direction of transfer).
|
|||
|
When the transfer of the byte is complete, a counter on the
|
|||
|
Carrier advances to the next item in the list for the next
|
|||
|
transfer. After the last item is transferred, the counter is
|
|||
|
reset, pointing once again to the first list element.
|
|||
|
|
|||
|
A DMA transfer can be requested by several sources in the system.
|
|||
|
Typical sources of transfer requests are the End of Convert
|
|||
|
signal from an A/D converter, a pulse from the on-board crystal
|
|||
|
controlled Pacer clock, an external TTL input pulse, or an
|
|||
|
interrupt from a Trigger circuit.
|
|||
|
|
|||
|
There are also several triggering methods available to start and
|
|||
|
stop sequences of DMA transfers. For data acquisition input
|
|||
|
purposes, the method described earlier ( called Start on Command,
|
|||
|
Stop on Trigger with Delay) is most useful since it provides
|
|||
|
both pre-and post-trigger data. In this case, the trigger can
|
|||
|
either be an external TTL pulse, or it can be derived directly
|
|||
|
from the analog input signal using a PCI-20020M-1 Trigger/Alarm
|
|||
|
Module.
|
|||
|
|
|||
|
For continuous DMA output of analog waveforms or digital
|
|||
|
patterns, the "Start on Command, Stop on Command" mode is most
|
|||
|
useful. It also involves the use of a circular buffer. An analog
|
|||
|
waveform can be constructed in memory, and then continuously
|
|||
|
output through a D/A converter module (or several modules if more
|
|||
|
than one waveform is desired) at the desired frequency using DMA.
|
|||
|
An alternative mode allows the DMA output to begin on a hardware
|
|||
|
trigger. During the DMA output, a user's program can acquire
|
|||
|
data from the same board using a polling or interrupt technique.
|
|||
|
If polled data acquisition is timed by the same clock used to
|
|||
|
generate the DMA output, then the two are synchronized. This can
|
|||
|
be used to build a stimulus-response system.
|
|||
|
|
|||
|
Conclusion
|
|||
|
|
|||
|
DMA is a powerful technique for data acquisition. It allows high
|
|||
|
speed data collection, and it makes background operation simple.
|
|||
|
When enhanced by specialized data acquisition hardware, it can
|
|||
|
transform a Personal Computer into a full-featured Data
|
|||
|
Acquisition System with impressive capabilities.
|
|||
|
|
|||
|
|