The old system was not proving very reliable, and was becoming expensive to maintain. It was been decided to replace the entire system with a single 200 MHz PC running Linux, similar to the new APM system. This requires 2 extra cards in the PC. A commercial PCI card dedicated to handling data from the ADC. The other, the PDS control card, is a commercial prototyping card on the ISA bus. This essentially replaces the VME box and the Translation Unit. The control card contains 2 motion contoller chips ( LM628 ), one for each axis. Phase quadrature pulses from the position encoder are fed directly to the controller chip, which keeps an up-to-date 32 bit value of the position. Initially this will result in coarser spatial resolution, by a factor of 2. It is intended to address this when the new system is up and running. An internal microprocessor computes a motion profile for a desired movement, and provides the necessary signals for the motor to perform this movement. It uses a digital Proportional Integral Derivative (PID) filter to compensate the motor control loop It can either drive to a specified position or drive the table at constant velocity until commanded to stop. In addition, it can be programmed to provide an interrupt on encountering certain conditions, e.g. reaching a preselected position or malfunction of the motor. The rest of the controller card is given over to electronics to control the ADC sampling and to handling both software and hardware limits if the motors attempt to drive the carriage beyond its natural limits. In addition, by monitoring the rate of change of the position of the table, the internal microprocessor can derive an estimate of the velocity of the table. The actual power amplifiers for the motor drives are still on external cards.
The X axis motion controller is programmed to start from a position such that the X axis has ample time to accelerate to the desired velocity and settle before it reaches the area to be scanned. When it reaches this predefined location it causes an "interrupt". This interrupt flag is detected by extra hardware which enables the data acquisition circuitry. Unfortunately most of this circuitry is already present in the motion controller chip, but is not available to the outside world so has to be duplicated. Essentially a pulse is generated every "n" encoder pulses and is used to start a data conversion in the 16 bit ADC. "n" is the X increment, ranging from 1 to 255 microns, and is specified at the start of each scan. After a specified number of samples the ADC is disabled, the X axis is smoothly deccerated while the Y axis is incremented the desired amount and then a return scan is initiated with the X axis traveling in the opposite direction. The position where the data taking was disabled in the previous scan is now the position to start data acquisition. Because of the relatively low bandwidth of the log amplifier there will be some asymmetry apparent between the two scans.
Another problem inherent to the motion control chip is that there is an uncertainty in the time it takes to generate the interrupt on reaching the breakpoint (position at which to start taking data) which corresponds to 2 or 3 microns at usual scanning speeds (1.5 cms/sec). If this proves to be a serious restriction we may have to duplicate all the positional counters and breakpoint latches with discrete components on a separate card. This would greatly increase the package count and would necessitate another card of electronics somewhere!
The ADC, sample hold and logarithmic amplifier are also on a separate card in the electronics rack. The output of the ADC is fed, via differential line drivers, into a data acquisition card on the PCI bus in the PC. Although there is some onboard buffering, the card never seems to make use of it. The PC uses a Linux operating system and the programs are written in C.