SMA Digital Velocity Servo Control Board

Digital Velocity Servo Control Board for the SMA Antennas

(click photo for larger image)

What is the velocity servo control board?

The velocity servo control board (SCB) is a surface mount technology custom microelectronics board that resides in the cabin of each SMA antenna, and is a key component of the servo system. It contains a multitude of hardware devices: 40 digital inputs, 32 digital outputs, four 22-bit analog-to-digital convertors (that read the motor tachometers), four 16-bit digital-to-analog convertors (that drive the Glentek motor controllers), a 32 LED status panel, two fast serial ports (RS422/460kBaud to the antenna computer and RS232/115kBaud to the Palm Vx customized handpaddle (based on a Palm, Inc. product--a spin-off of 3Com), as well as additional serial links to the low-resolution limit encoders for each antenna axis. The heart of the board is an Intel 80C196KC 16-bit microcontroller running at 20MHz, which contains additional 10-bit analog-to-digital convertors for the motor temperatures and currents. The board is controlled by embedded software written in C and compiled into a 32kByte EPROM which implements a scheduler-based operating system and a PID velocity servo with programmable gains. Here are some postscript files that describe the hardware communication links (PDF version) and the software flowchart (PDF version). The SCB has been operational on Mauna Kea since the summer of 2000, and is now running in 7 antennas at the summit. Movies and graphs of the tracking and slewing performance can be seen at this link.

Summary of servo bandwidth and filtering

The servo includes several levels of successive filtering. Dynamic response tests of the antenna were performed to identify its natural frequencies. In elevation, the 20dB rolloff occurs at 7Hz and the 180-degree phase shift occurs at 60Hz. The moment of inertia about the azimuth axis is a factor of approximately 2.5 larger than about the elevation axis, which shifts the resonant frequencies lower. In azimuth, the 20dB rolloff occurs at 5Hz and the 180-degree phase shift occurs at 25 Hz. The elevation counterweights are observed to resonate with the azimuth drive at about 7 Hz.

1. The high-voltage Kollmorgen tachometer signals are first filtered by a common mode and differential filter with a 3dB rolloff at 920Hz (using RC elements). It is integrated into the voltage divider circuit prior to the ADC.

2. The AD7716 Sigma-Delta QuadADC (which digitizes the tachometer signals) contains a digital filter with a 3dB rolloff at 146Hz leading to a >100dB notch at 556 Hz. Due to its high sampling rate, the anti-aliasing point is way up at 570kHz, so aliasing is not a concern.

3. Software lag filters are incorporated into the velocity servo loop on the SCB. A single filter operates at 100Hz on the digitized elevation tachometer signal, while a sequence of two filters operate at 12Hz and 18Hz on the averaged-pair of digitized azimuth tachometer signals.

4. Finally, the position loop is closed by the antenna computer outside of the velocity loop. Antennas 4,5,7,8 use 22-bit Aerospace Controls Corp. encoders while the rest of the antennas use 23-bit Heidenhain RCN823 encoders. New velocity requests are computed and transmitted to the SCB at 100 Hz, but the effective position loop bandwidth is about 5Hz in both axes. The elevation loop could run faster, but it is not necessary. The velocity loop gains have been optimized experimentally for the chosen position loop bandwidth. The elevation velocity loop uses PID gains, while the azimuth velocity loop uses only PI terms. Maximum slew rates are 2 degrees/second in elevation and 4 degrees/second in azimuth. Maximum acceleration is 8.7 degrees/second/second in elevation and 5 degrees/second/second in azimuth.

Hardware reliability

To demonstrate the hardware reliability of the board, we are keeping track of the details of any and all chip failures in the field. So far, there have been only three confirmed failures.

Test EPROMs for the Servo Control Board

For diagnostic purposes (e.g. the commissioning of new boards), we have created a large number of simple test EPROMs to exercise individual hardware devices on the board. This website contains a description of each EPROM along with a link to the Intel hex file. Also available is a list of low-level programming instructions for each device.

0) testled.hex: This program will test only the core of the microcontroller. It simply blinks the LEDs in a counting pattern.

1) testledboard.hex : This program will first turn on all 32 LEDs on the LED board for a brief period, then turn them all off. It will then turn on one at a time from 1..32, repeating forever.

2) testadc.hex: This program reads the 22-bit bipolar Quad ADC and places the highest 8 bits of each of the four channels onto the four successive columns of the LED board. The highest bit is the sign bit. Use an adjustable power supply as input (between -2.5 and +2.5 V) to confirm the operation.

3) testdac.hex: This program tests the DAC outputs by generating various waveforms at about 4Hz. DAC1 outputs a sawtooth (repeating ramp) function, DAC2 outputs a positive (unipolar) triangle wave, DAC3 outputs a bipolar square wave, and DAC4 outputs a bipolar sine wave. The upper 8 bits of values are also echoed onto the four columns of the LED array. Use an oscilloscope to confirm the waveforms.

4) testdigout.hex: This program will first turn on all 32 digital outputs and all 32 LEDs on the LED board for a brief period, then turn them all off for the same brief period. It will then turn on one channel at a time from 1..32, forever, at the same rate in which the yellow LED blinks.

5) testdigin.hex This program alternates between showing the lower 3 bytes and the upper 2 bytes of the 40 digital input lines on the LED array. When the 3 low bytes are shown, the highest-byte on the LED array blinks on and off rapidly. When the 2 high bytes are shown, the two highest bytes on the LED array blinks on and off rapidly. The full cycle takes about 16 seconds.

6) testdiginhigh.hex This program shows only the highest two bytes of the 40 digital input lines on the LED array. The two unused columns of LEDs are turned on continuously.

7) testdiginlow.hex This program shows only the lower 3 bytes of the 40 digital input lines on the LED array. The remaining unused column on the LED array is turned on continuously.

8) testencoder.hex: This program reads the encoder1 continuously and puts the 24-bit value onto the three rightmost columns of the LED board.

9) testencoder2.hex : This program reads the encoder2 continuously and puts the 24-bit value onto the three rightmost columns of the LED board.

10) testencoder12.hex : This program reads both encoders continuously and puts lowest 16-bits of each onto the LED board. Encoder1 goes onto the two rightmost columns while encoder2 goes onto the two leftmost columns.

11) testmemfull.hex: This program tests the operation and the store/recall feature of the two extended memory chips. If all the extended memory is stored and recalled correctly, then only the blue LED should blink slowly a few times and then stay on solid forever. If locations in low memory (a000-bfff) are bad, the green light will flash times (with going up to a maximum of 5). If n locations in high memory (c000-dfff) are bad, the red light will flash n times. (Note that red lies above green on a streetlight.)

12) testuart.hex: This program echoes characters received from the antenna computer incremented by one back to the antenna computer (at 460kbaud). (Note: The program test422.c must be compiled and executed on the antenna computer to initiate this test.)

13) testi96adc.hex: This program reads the first 3 A/D channels (0..2) of the microcontroller (i.e. the motor temperature channels) and places the upper 8 bits onto the three rightmost columns of the LED array.

14) testi96adc2.hex : This program reads the next 3 A/D channels (3..5) of the microcontroller (i.e. the motor current channels) and places the upper 8 bits onto the three rightmost columns of the LED array.

15) testpalm.hex : This program polls the Palm Pilot serial channel for characters and echoes them back to the Palm Pilot, incremented by one. The LED board counts along with the number of bytes echoed so far. With this prom installed in the servo board, one should run the Palm Ping application on the Palm Pilot. This will tally the validity and performance of the serial link.

Go back to Todd's homepage


Go back to the SMA homepage


Last modified: Wed Oct 24 15:37:06 2007
thunter@cfa.harvard.edu