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.
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 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.
Last modified: Wed Oct 24 15:37:06 2007
Go back to Todd's homepage
Go back to the SMA homepage
thunter@cfa.harvard.edu