RETURN to the CHEM 498C Home Page

Interfacing Computers to Laboratory Equipment

A. Analog Data acquisition
1. Types of Analog Data Acquisition Systems
It is convenient in dealing with interfacing to distinguish between high-level and low-level inter facing, much as we distinguish between high-level and low-level programming languages. High-level interfacing is employed on "computer-ready" instruments which already have a standard computer interface built in, most commonly an RS-232 or an IEEE-488 interface. Built-in computer interfaces are not available on all instruments, particularly older models. In many cases only a analog voltage output signal may be available, such as might be displayed on a strip-chart or X-Y recorder. In such cases you will have to use a low-level approach, using analog-to-digital converters (ADC) for data acquisition, and digital-to-analog converters (DAC) and digital input/output for control.

A number of data acquisition systems are commercially available for popular microcomputers; these commonly incorporate digital-to-analog conversion, signal conditioning, digital-to-analog conversion and digital input/output in one package. Most of these systems are rather general purpose devices and can be used for a wide range laboratory interfacing projects in spectroscopy, chromatography, electro chemistry, etc. Most vendors supply software for their systems, which varies from rather general-purpose data logging programs, to program language enhancements which allow cus tomers to design their own application software, to stand-alone application programs which support various spectroscopy and chromatography experiments. There are two basic types of data acquisition hardware: add-in boards the plug into to the computer's internal bus and outboard boxes that connect to the computer via a high-level interface port. The former are less expensive but are specific to one computer bus type. Outboard boxes can more easily be moved between different computers.

2. Characteristics of and use of analog-to-digital converters
Many laboratory instrument have a signal voltage output for the purpose of displaying the signal on a strip-chart recorder, X-Y plotter, or oscilloscope. The purpose of an analog-to-digital converter (ADC) is to convert the analog voltage output into a discrete digital representation of that voltage so that the signal can be read by a computer. ADCs are commercially available for most popular brands of microcomputers either as plug-in boards or as part of a outboard data acquisition hard ware system. A typical commercial converter product includes a multiplexer to provide multiple input channels and a variable gain amplifier. The important characteristics include:

a. Resolution, expressed in terms of the number of bits. The most commonly encountered resolu tions and the approximate corresponding reading precisions are 8 bits (1/256), 12 bits (1/4096), 14 bits (~ 1/16000), and 16 bits (~ 1/65000). Higher resolution gives better precision and greater dynamic range but are more costly. Generally, 12 bits is considered adequate for most laboratory work. A 12 bit ADC with a 0 to 10 volt range would be able to read voltages to the nearest 0.0024 volts. This means a signal near full-scale (10 volts) could be read to a relative precision of 1 part in 4096, but a signal at one-tenth of full-scale (1 volt) could be read only to a precision of 1 part in 410, and a signal at one-hundredth full-scale (0.1 volt) could be read only to a precision of 1 part in 41.

b. Speed, expressed as the conversion time in u sec or msec, determines the maximum number or read ings that may be taken per second, although in most cases the speed of execution of the software is the limiting factor. Typical conversion times range from a few u sec to several msec.

c. Conversion method. Successive-approximation ADCs are the most common. Integrating (dual-slope) types are typically much slower, but exhibit better noise rejection, especially of 60 Hz line noise. Flash converters are the fastest (100's of MHz/sec) but are expensive and are not available in the higher resolutions.

d. Coding. Coding refers to the way the input voltage is converted into a binary number. Most ADCs output an integer number between 0 and 2n-1, where n is the number of bits (resolution) of the ADC. The simplest coding is straight binary (monopolar). For example, a 12 bit ADC with a 0 to 10 volt range and straight binary polar coding would give the following output:

input volts output number
0.0 0
0.00244 1
1.0 410
10.0 4095

Voltages outside of the nominal voltage range can not be measured. Input voltages below zero simply give an output of zero, and input voltages above 10 volts give an output of 4095, usually without warning. Therefore you can't trust a reading of zero or of full-scale. If you need to be able to read both positive and negative voltages, you need a bi-polar range, e.g. +/- 5 volts or +/- 10 volts. In this case pay close attention to the way the ADC converts voltages to numbers, which can vary from one model of ADC to another. Consult the manual for details.

e. Number of input channels. Most commercial ADC`s have 8 or 16 input channels which can be connected to different signal sources. They can actually read only one at a time, but switching from one input to another can be done very quickly so as to give the effect of monitoring several signals simultaneously. The channels can be selected under software control. Some ADCs have an auto-scanning mode in which the hardware cycles through all the channels automatically.

f. Input sensitivity refers to the input signal voltage which gives a full-scale response on the ADC. Ideally this should be able to be changed by the user in order to accommodate different instrument output voltages. Some ADC`s set the input sensitivity by means of hardware jumpers or switches, but it is more convenient if the input sensitivity is software programmable. That way, the software can be written to switch ranges automatically as needed to handle large changes in input voltage level. If you want to measure a larger voltage than the range of the ADC (e.g. to read 0 - 1000 volts with a 0 - 10 volt converter), you must add a voltage divider before the input. If you want to measure a smaller voltage than the range of the ADC (e.g. to read 0 - 0.1 volts with a 0 - 10 volt converter), it's best to add an amplifier before the input, in order to make best use of the resolution of the ADC.

Here are some simple operational amplifier circuits that can be useful for pre-amplifying a signal to make it compatible with an ADC input voltage range. Suitable operational amplifiers can be bought as integrated circuit chips for $1.00 to $5.00 from any electronics store or catalog (even Radio Shack). Use better quality (more expensive) units for very low input signal voltages (10 mV or below). They require an external power supply or batteries to operate. In each case the input would come from a transducer or instrument and the output would go to a ADC input.

Non-inverting amplifier. The gain is (R1+R2) / R1, i.e., Eout = Ein(R1+R2) / R1


Inverting amplifier. The gain is - R2 / R1, i.e., Eout = - EinR2 / R1



Current-to-voltage converter, often used to convert the signal current from a phototube or amperometric cell into a readable voltage. Eout = - IinRf . Often Rf is very large (1 M[[Omega]] to 1000 M[[Omega]] ) so that a very small input current gives a readable output voltage.

These circuits can also serve as simple low-pass ("anti-aliasing") filters if you put a capacitor across (in parallel with) R2 or Rf . The cut-off frequency is 1/2[[pi]] RC.

g. Programming. You can write your own data acquisition routines in any language you like such as assembly (fastest), BASIC, C, Pascal, etc. Most commercial ADCs come with software examples and data acquisition subroutines in one or more popular languages. Writing your own data acquisition routines to access the hardware directly directly is the most flexible approach, but requires that you handle some details yourself. For example, you need to know how to start a conversion (using the the strobe bit) and to determine when the converter is finished with a conversion and can be read (by reading the end-of-conversion or busy bit). The ADC's instruc tion manual will have the details. In most cases the data acquisition is controlled point-by-point into RAM, and then saved to disk as a separate operation. Obviously in this case the maximum number of data points that can be taken without interruption is limited by free RAM available for data. For a 10 - 16 bit converter, each data point will take 2 bytes, so for each 1000 bytes (1 KBytes) of available RAM you will be able to store 500 readings. So if your PC has 200K of RAM available, you have enough space for 100,000 readings. Software supplied with some ADCs includes advanced capabilities such as data streaming to disk, which allows continuous uninterrupted data acquisition of more data points than can be held in memory, and support for direct memory access (DMA), in which whole blocks of data are acquired and transferred to memory directly to RAM for very high-speed data acquisition.

h. Control of the sampling rate. The sampling rate, i.e. how many ADC conversions are made per second, is important if the signal is changing. (If the signal is steady-state, i.e. a DC voltage, such as from an ion-selective electrode in a fixed solution, then a single reading is enough ideally, although multiple DC readings can be taken and averaged to reduce the influence of random noise). For changing signals (chromatograms, spectra), it is important to take data fast enough to define the signal adequately. The greater the number of points per peak, the more accurately you will be able to measure peak position, height, and width, but of course the more memory will be required to store the raw data. As a rough rule of thumb, for a signal consisting of more-or-less symmetrical (e.g. Gaussian) peaks, 10 to 20 points per peak is enough. (Measuring peak area requires fewer points than measuring peak height). The sampling rate is controlled by either the computer's or the ADC board's "real-time clock". The details vary from system to system, but most computer languages have commands for reading the computer's clock (e.g. QuickBASICs TIMER function). If neither the ADC board nor the computer has a clock, then you are reduced to writing timing loops in software (i.e. do-nothing loops whose purpose is simply to take time) to control the speed of sampling.

3. Characteristics of and use of digital-to-analog converters
In some cases it is desired to have the computer generate a variable output voltage which can be used to control some part of the experiment. This can be done with a digital-to-analog converter (DAC). These are basically the reverse of ADCs and, like ADCs, come in various resolutions. They are usually faster and cheaper that ADCs of the same resolution, and are available from the same companies that make ADCs. (Even 16-bit DACs are relatively inexpensive, but 16-bit ADCs are fairly expensive). Programming is simpler than for ADCs; there is no strobe or EOC to worry about. The output of a DAC is usually a voltage that varies over a specified range (e.g. 0 to 10 volts, or -10 to +10 volts, etc) depending on the number sent to the DAC. A 12 bit DAC with a range of 0 to 10 volts will allow you to set the voltage to the nearest 10/4096 = 2.4 mV. You will have to add a voltage divider to the output if you want a smaller steps over a smaller voltage range. Or you will have to add an amplifier to the output if you want the output to cover a larger range than the DAC itself or if you need to supply a significant current.



B. Digital interfacing (on-off control)
Parallel digital inputs and outputs are commonly available on computers, either built-in or as an optional card. Each wire of a parallel interface carries a binary (off/on) signal which can be used individually to control or sense an event which is naturally off/on in nature. Most commonly these utilize so-called "TTL" levels, meaning that they take off to be a low voltage (typically between 0 and 0.2 volts) and on to be a voltage between 3 and 5 volts. If required, the off/on sense can be reversed with a very simple logic circuit element called an inverter.

A common requirement in automating equipment is to have the computer activate a switch or pushbutton on an instrument. Figure 2 shows a few approaches which can be used. First, use a voltmeter or oscilloscope to determine the voltage between each terminal of the switch and ground. If one end of the switch is grounded and the other end is positive with respect to ground by no more than 50 volts when the switch is open, then you can use a simple NPN transistor as shown. Just about any NPN silicon transistor will work. Be sure the connect the grounds of the instrument and the computer together. A more general solution, which will work under more circumstances, involves the use of a relay. Relays which operate directly from TTL voltage levels are available, or a transistor switch can be used to drive a 12 or 24 volt relay, as shown at the bottom of Figure 2. However, a relay is slower and less reliable than a transistor switch; like any mechanical device with moving parts, it will eventually wear out.

To get the computer to turn off an on 115 volt AC power to some device (e.g. hotplate or heating mantle), you can't use a simple transistor switch. You could use a heavy-duty relay, one whose contacts are rated for the voltage and current of the controlled device. But the best way is to buy an electronic power controller or "solid state relay", a commercially available module that allows a TTL signal to control a 115 volt AC power connection without moving parts.

To generate a TTL output from a computer to control a transistor switch, relay, or power controller, you need to have a parallel output port. Some computers have such a port built-in, and most commercial ADC cards have one or more parallel output ports.

C. RS-232 serial interfacing
"Computer-ready" instruments most commonly use the RS-232 serial interface. In such cases the actual interfacing often involves nothing more that obtaining the proper cable with suitable connectors and an interface card for the computer. Almost all computers have a built-in RS-232 port, which was intended originally intended to be used to interface a printer or a modem.

1. Hardware. The most common type of connector used for RS-232 interfacing is the DB-25 connector, but the DB-9 and the round DIN connectors are also widely used. The pin assign ments of the DB-25 are well standardized: pin 7 is ground, the actual serial data are carried on pins 2 and 3, and the other pins are "handshaking" lines that may or not be used on any one particular piece of equipment. There are two classes of RS-232 devices: DTE ("data terminal equipment") and DCE ("data terminal equipment "), which differ in the assignments for pins 2 and 3. A DTE transmits data on pin 2 and receives data on pin 3, whereas a DCE transmits data on pin 3 and receives data on pin 2. Thus a DTE and a DCE can be connected up directly with a "straight" cable that connects pin n on one end to pin n on the other end and it will work. However to connect two devices of the same class, i.e., a DTE to a DTE or a DCE to a DCE, you need to switch pints 2 and 3. This can be done with a so-called "null modem" cable or adaptor or in some cases by flipping a switch or moving a jumper on one of the devices to change it into the other class. To troubleshoot all this, it's useful to have a "breakout box", a small gadget with an RS-232 connector that brings out the lines to external terminals so you can more easily check for voltages and waveforms on the lines. Also, there is the matter of connector "sex", i.e. male or female: if you're lucky, things will mate, but you may need to use a so-called "sex changer" adaptor to convert male connector to female or vice versa. All these things are available from computer and electronics catalogs and stores.

2. The ASCII code. Information transmitted via an RS-232 interface can either be text or binary. Text data are almost universally represented by the The (American Standard Code for Information Interchange) code, which assigns a 7-bit binary number to each character of the Roman alphabet, including numerals and some punctuation. It's important to realize that there also ASCII codes for non-printing "characters" that don't make a mark on your terminal screen or printer but can be very important. These include the space, carriage return, line feed, tab, escape (esc), and many others. See the ASCII code chart on another page. Normal ASCII has only 128 distinct characters (27 = 128), but sometimes you will encounter extended ASCII codes that use 8 bits (256 characters) to introduce additional characters (European language characters, for example).

3. Communications parameter settings. For RS-232 communication to work, both sides have to agree on a number of essential communications parameter settings, the most important of which is the baud, or bit rate, that is the number of bits per second. Standard bit rates are 300, 1200, 2400, 4800, 9600, and 19,200 bits per second. Some devices have a fixed bit rate; others allow selection of one of several bit rates. If you have the choice, make the bit rate as fast as possible while still achieving reliable communication. The other bit-level parameters are: the number of data bits (7 or 8) , the number of stop bits (usually 1 or 2) and parity (None, Odd, or Even).

4. RS-232 diagnostics with an oscilloscope. There are quite a number of ways that RS-232 can be set up, both with respect to the wiring of the cable and connectors (especially the "handshaking lines") and with respect to the baud rate, parity, and number of data and stop bits. If you are dealing with poorly documented equipment, sometimes the only alternative is to use an oscilloscope to look at the waveforms on the pins of the RS-232 connector of the device in question. From this you can determine which pin is sending data and which of the handshaking pins are low and which are high, and you can determine the bit rate and the other communi cations parameters.

5. Communications Software Services. Once you have the correct cable and connector hooked up between an instrument and a computer, you can test a interface easily by running a "terminal program" on the computer. A terminal program allows direct manual control of the serial port. It gives you a convenient way to change the computer's bit rate, number of data bits and stop bits, parity, and other parameters. Anything typed on the keyboard is sent out through the serial port and all characters received through the serial port are displayed on the screen. Thus you can easily try different parameters until things seem to work. In some cases, a terminal program may be all you need to acquire data from an instrument and you won't have to write a custom data acquisition program. All terminal programs have the ability to capture incoming text to disk and to send text files from disk. You could send a set of pre-written commands to the instru ment in one operation and then capture its output as a text file on disk for reading into another program, such as a spreadsheet or plotting program. Often it will be necessary to edit the text file to put it into a format suitable for other programs. You could do that with any text editor or word processor, but it may be easier to write a custom program to handle the data capture and re-formatting in one operation. Some terminal programs have a "character translation table" that automatically substitutes all occurances of one character for another character in an incoming stream of text; this can often be used to reformat data by removing or substituting offending characters.

6. Programming the serial port. The RS-232 interface is character-oriented, meaning that programming is simply a matter of sending and receiving alphanumeric characters. Thus, sending a command to the instrument through the interface is like sending output to a printer, which is also a character-oriented device. For example, you would simply execute a PRINT or OUTPUT in BASIC or a Writeln in Pascal. Similarly, getting input from the instrument through the interface is like getting input from the keyboard; you would execute and INPUT or ENTER command in BASIC or a Readln in Pascal. All high-level languages support character-oriented input and output, although the details naturally depend on the system; in particular there has to be some way to distinguish which port you are communicating with.

7. Instrument commands. How do you know what commands to send to the instrument? This depends only on the instrument itself and must be found in the manufacturer's documentation. For example, the Shimadzu model 250 u.v.-vis spectrophotometer recognizes a large set of simple alphanumeric commands, a sub-set of which is listed here:

Shimadzu spectrophotometer commands
____________________________
W 	Set wavelength
S	Set slit width
D	Read absorbance
V	Set mode
J	Set scan speed
A 	Begin scan
H	Set start wavelength
I	Set end wavelength
______________________________

For example, to set the spectrophotometer to a wavelength of 500 nm, you send the characters "W500". To set the slit width to 1 nm you would send "S1". To read the absorbance, you send the letter "D" and then read the input as a string.

The format of the output data send by the instrument to its RS-232 port also varies widely from instrument to instrument and has to be handled on a case-by-case basis. In most cases numerical data are send as decimal ASCII strings, which can be read directly by many programs. For example, an absorbance of 0.232 would be sent as the ASCII characters "0", ".", "2", "3", and "2", usually followed by a carriage return (and possibly a line feed character also). Sometimes the numeric data are accompanied by alphabetic characters, e.g. "A=0.232", which have to be removed in order to convert the data into a valid numeric variable. This can be done by reading the data into a string variable initially, then stripping the offending characters using the string manipulation commands of the language, and finally converting into a numeric variable.

This page is maintained by Tom O'Haver , Department of Chemistry and Biochemistry, The University of Maryland at College Park. Comments, suggestions and questions should be directed to Prof. O'Haver at to2@umail.umd.edu.