BBAstroDesigns, Inc.
Formed October 2000
by
BBAstroDesigns Inc. http://www.bbastrodesigns.com
aims to serve the amateur telescope making community,
specializing in products for computer operated telescopes.
Computer Operated Telescopes
Servo System Software, “ScopeII”
by
last revised
for use with motor controllers from
Gary Myers http://rxdesignonline.com
JRKerr http://jrkerr.com/
Copyright BBAstroDesigns, Inc. 2001-5
Sidereal Technology
http://www.siderealtechnology.com/

Dual Servo Telescope Controller
|
|
|
Copyright Sidereal Technology 2004
Table of Contents
TELESCOPE ENCODER WIRING AND SETUP:
Setting up the Drag and Track mode:
Operation of Drag and Track mode:
UNDERSTANDING AND USING THE X_BITS AND
Y_BITS:
BLOCK DIAGRAMS OF SOME POSSIBLE CONFIGURATIONS:
What is Scope II, the Java version?
More Information and Control with Scope II
Remote control across the network
Configuring for ASCOM/ external LX200
control
Interfacing with other programs
servo configuration parameters
German Equatorial Mount Meridian Flip
Command Files: The Command Processor
Setting Backlash Values by Jerry Pinter
Guiding and Periodic Error Correction
Improve Local Goto and Tracking
Optimizing Goto Pointing and Subsequent
Tracking
Mechanical Aspects of the Drive
Making Your Own Gears by Tom Krajci
ALT/AZ Conversion Lessons, by Chuck Shaw
UPDATE THE OTA (Optical Tube Assembly)
"SUB-SYSTEM":
UPDATE THE ROCKER BOX
"SUB-SYSTEM":
BUILD A NEW GROUND BOARD
"SUB-SYSTEM":
BUILD THE DRIVE ELECTRONICS
"SUB-SYSTEM":
UPGRADE THE DRIVE ELECTRONICS:
Design Details and Fabrication Notes:
1. OTA DESIGN AND FABRICATION:
Critical Path to find Balance Point:
Spin Alignment Technique…(Optical and
Mechanical Axis alignment)
2. ROCKERBOX DESIGN CONSIDERATIONS:
Azimuth and Altitude Trunions and Bearings
3. ELECTRICAL SYSTEM DESIGN CONSIDERATIONS:
Mounting location on Rockerbox
Cable harnesses/wire sizes/types
Power inputs (110vac vs 12vdc)
4. COMPUTER SUPPORT DESIGN CONSIDERATIONS
Laptop vs Microprocessor (Interactive vs
Black Box)
Image Plane Derotation System by Chuck Shaw
Software End User License Agreement (EULA)
You must exercise proper
safety precautions, including the wearing of glasses and thick rubber lug
shoes.
Shock hazard! Bodily injury
hazard! Any device using electricity is a shock and bodily injury hazard. You
must hook up the device properly and follow all safety precautions,
particularly when using electricity outdoors. If improperly hooked up or
improperly operated, electronic components can shock, overheat, melt, and
explode.
Peripheral equipment hazard!
Any device electrically attached to a computer can damage the computer if
hooked up improperly, or used improperly.
In particular:
Connects to
Finally, a servo telescope
control that is affordable!
Directly controls two servo
motors with PID functions running at nearly 2000 times a second, with high
speed shaft encoders for position feedback on each motor.
Connects to two additional
high speed encoders for the telescopes altitude and azimuth (or right ascension
and declination). No need to add an
additional "box" to connect shaft encoders.
Open Collector RS232 Serial
port for connecting 2 or more controllers on the same RS232 bus. Other controller axis's can be used as field
de-rotators and/or focusers.
Connects to a handpad box for
slewing/panning/guiding.
Signals from the handpad work
immediately, no delay as with some other systems.
Can automatically track your
telescope in the Drag and Track mode, or the Slew and Track mode without having
a personal computer connected.
When running in the
computerless "Drag and Track" mode, you may connect a computer
running just about any planetarium program, and the servo controller will
emulate the
Can control a dual axis
tracking platform, with auto stop and rewind, and dual axis correction without
having a personal computer connected.
Servo Motors have a FASTEST
mode of operation, where if the motors can't quite keep up with where it is
supposed to be, but it is moving in the proper direction, it will not trip on
position error, instead, position error is held at the point of the position
error limit. This feature makes it
possible to run your motors near their limit of speed, and you can rest
assured, it will not trip on position error if your battery voltage falls a
bit, or the wind pushes against the scope.
Small size, 2.5" by
4.25" by 1".
Power Efficient.
Built in flash memory for
saving many different parameters.
Firmware in the controller is
field upgradable to later versions of the firmware, no need to send it back to
the factory.
This same controller will be
able to control 1 stepper motor using 256 micro-steps per step with a future
firmware upgrade.
Windows Configuration program
will be supplied for free about mid summer of 2004. In the meantime, you can configure it using
any terminal program.
Specifications:
Input Voltage: 11.5 -28 volts
D.C.
Input Current: 4 amps max
Maximum Motor Current: 2.4 amps each, total of 4 amps max.
RS232 Protocol:
1. Extended Pic Servo Emulation
2. Ascii command set
2 Each, Motor Encoder
Resolution: 32 bit (+/- 2 billion encoder
ticks)
2 Each, Scope Encoder Resolution: 32 bit (+/- 2 billion encoder ticks)
Sidereal Technology or
A piece of velcro with sticky
back is a good way.
The controller has a power
connector/terminal block. Please provide
a regulated supply or battery, 4 amp minimum 12 to 24 volt D.C. Supply. The 4 amp minimum supply capability is only
used during high speed moves. Normal tracking
requires only mA's.
Please observe polarity. The internal protection diode is not wired in
series with the power lead as is typical, because the extra .6 volts is crucial
to operation of the servo when running at 12 volts. It is wired in parallel, after the fuse. If you hook the power up backwards, you will
surely blow the fuse, and possibly damage other components. Please don't be the second person to test
this feature!!!!
The serial port is an 8
position modular jack. Please do not
confuse this connector with the motor connectors. It is adjacent to the power
connector/terminal block, and on the opposite end of the controller from the
motor connectors. Even if you don't
intend to use a laptop to control your telescope, you will need a serial cable
to configure the unit.
Pin 3 of a laptop or PC is
the transmit signal and pin 3 of the controller is the receive signal, so the
cable can be wired, pin 1 to pin 1, pin 2 to pin 2, etc. Only pins 2, 3, and 5 are used on the
controller. Some software uses hardware
handshaking. In addition to pins 2, 3,
and 5, if you also wire pins 1, 4, 6, 7, and 8, these will be properly jumpered
in the controller, for proper operation of the serial port (Pin 1,4,5 and Pin
7,8).
If you would like to connect
two or more Dual Servo Controllers on the same RS232 communication bus, simply
make up a cable as described above, but parallel another 8 position modular
jack in parallel with the existing jack.
Note:
LED1 normally is the status
of the Altitude / DEC motor. If on
steady, all is ok. If flashing about
once per second, it's in manual, because of a manual command or because of an
error.
LED2 is the same, except for
it represents the Azimuth / RA motor.
When battery voltage gets less than about 11.5, LED2 flashes fast.
In the dragNtrack or
slewNtrack mode, the LED's are different.
LED 1 flashes fast when an initialization is happening (IE top right or
left button pressed more than 3 or 4 seconds).
LED2 flashes every time there is a new tracking command, every 8 seconds
or on let up of slew/pan button.
Finally, the controller will
signal ready for an upload file when both LEDs flash in unison.
Do not confuse the +5vdc for the
encoders with the +12-30vdc input for the motors, Doing so will likely destroy the RS232
interface chip on the controller board, as well as the input data lines into
the microprocessor. The controller can
only be replaced as a unit: it is not repairable due to the microsoldering
required on the controller and very tight confines of associated parts.
See the drawing at the end of
this document for wiring schematic.
BBAstroDesigns suuplies motor
cabling for easy motor attachment, The motor cable consists of a flat 8 wire
connector terminated in a RJ45 connector.
This is plugged into a RJ45/DB9 converter. A DB9 solder cup is supplied for easy
soldering.
Connections are as follows,
including wiring for the popular Pittman servo motors:
|
DB9 pin number |
Connection |
Pittman motor wire |
|
1 |
Not used |
|
|
2 |
Motor - |
Motor black |
|
3 |
Motor - |
Motor black |
|
4 |
Motor + |
Motor red |
|
5 |
Motor + |
Motor red |
|
6 |
Encoder ground |
Encoder black |
|
7 |
Encoder +5vc |
Encoder red |
|
8 |
Encoder B |
Encoder yellow |
|
9 |
Encoder A |
Encoder blue |
The motor encoders are
connected using the same 8 position connector as is used for the motor. For best noise immunity, the motors should be
connected using flat cable, and terminated at the controller end with 8
position modular connector. CAT5 cable
will work, but the encoders can pick up electro-magnetic interference from the
motor leads if the cables are too long.
If you have a 24 volt or 36
volt motor, and only have 12 volts available, don't worry, it will still work
fine, but the top speed of the motor may not be as fast as you like.
Once the motors have been
wired, double check all wiring, including the power polarity. Double check that both motors are free to
spin at full RPM in either direction, because it may be that the motor wiring
moves the motor in the opposite direction that the encoder is expecting. If this happens, the motor will "run
away" at full speed, until the controller determines that the motor is
running the wrong way, and shuts the motor off.
There will be no ramping, it will instantaneously be at it's fastest RPM
for the supply voltage.
Now plug in just the altitude
motor, and then power up the unit. This
is where you will find if you are a lucky guy/gal or not. If the motor takes off in either direction at
full speed, don't buy any lottery tickets today. Your 50% chance worked against you. You have 3 options. 1. At the motor, swap the motor leads. 2. At the encoder, swap the A and B encoder
phases. 3. Set up XBits in the
controller to invert bit 0 or bit 1(reverses the motor encoder direction or
reverse motor polarity), then save this number in the flash ram (see section on
Using and Understanding the X and Y Bits).
If the motor didn't take off,
you should see that it is stopped, and that it's difficult (or impossible) to
turn by hand. If this is so, the motor
is now being controlled by the servo controller. The motor may be vibrating noisily. If this is so, the PID parameters need to be
"tuned". See section on
"Tuning Your Motors".
Repeat the above process for
the azimuth motor.
There are several ways to
configure the controller. If you intend
to only use

As of the first release of
the dual servo controller, the only configuration program is
Another option would be to
use any windows terminal program and configure it yourself, by typing in the
appropriate commands and values.
One more option would be to
wait for the free windows configuration program which will be available late
summer of 2004.
If you decide to use a
windows terminal program, you must follow the following procedures to configure
your controller.
Let's assume at this point
that you didn't buy any lottery tickets, because the altitude motor took off in
the wrong direction, and you don't want to re-wire it, you want to configure
the controller instead. Before powering
up the controller, connect your personal computer to the controller using a
serial cable. Now power up the controller
while the motors are disconnected.
You may now run the terminal
program of your choice. You may use the
built in windows program HyperTerminal.
When using HyperTerminal, be sure that handshaking is set to OFF, specify
your comm port (usually COM1) and specify 19200 baud rate, 8 data bits, 1 stop
bit and no parity. Select a terminal
emulation that sends a 13 when you hit the ENTER key.
Now we need to see if
everything is set correctly and the serial cable has been wired correctly. Type "X<E>", where <E>
means the enter key. The controller
should respond with it's X position.
This should be "0", "-1", or "1". If it doesn't respond at all, be sure your
CAPS LOCK IS ON. THE ASCII MODE ONLY
RECOGNIZES ALL CAPS!
If the controller responded
with a number, all is well with communication.
It's important to note that
commands starting with one 'X' (not two x's) are for the altitude/declination
motor, and all commands starting with 'Y' are for the azimuth/right ascension
motor. Some 'X' commands (such as
"XW") affect both motors.
The next step will be to see
what is in the X_Bits. Type
"XB<E>". The controller
should respond "B96". The factory
default is 96 (please see the section on X_BITS). Since the second bit will reverse the
direction of the motor, but not the encoder, we need to set that bit. Just add 2 to the number that is returned by
the XB<E> command, and type the number in after the XB command. For example, type
"XB98<E>". Now type
"XW<E>". This saves the
new X_Bit value to the flash
Repeat this procedure with
the Azimuth motor, using 'Y' instead of 'X' for the commands, but save your
parameters with the "XW<E>" command.
If your motor(s) are
violently moving back and forth, or are making rattling noises, chances are the
factory tuning defaults are not going to work on your motor. The controller controls the position of the
motor by comparing the current position with the current setpoint (or desired
position). If they don't agree, the
controller applies a PID function to make the motor return to the desired
position or setpoint. PID stands for
Proportional, Integral, Derivative.
There is much information on the internet if you are interested in the
inner workings of PID control. What is
described here is a simple method of making it work without getting too deep
into the theory.
Step 1. Turn the integral all the way to zero. Do this by issueing the command
"XI0<E> (the I is an EYE, not a ONE, and the 0 is a zero, not an
oh). Replace the "X" for
"Y" if tuning the azimuth motor.
Turn the Integral Limit down to zero too. Do this by typing the command "XL0<E>".
Step 2. Turn the proportional
down to zero. Do this by issueing the
command "XP0<E>" (again, the 0 is a zero).
Step 3. Adjust the
Derivative. To adjust the derivative, type the command
"XDnnn<E>" where nnn is the number. The range of the number can be anywhere from
0 to 32767. Typical proper values will
be in the 5000 range. The motor should
turn sluggishly but freely now, since only the derivative is working. Adjust the derivative higher and higher until
the motor starts humming or vibrating.
Adjust it back down until it doesn't vibrate, but "resists"
you when you move the motor by hand.
Record this ideal number, because you'll be using this number in
Step 4. Adjust the
Proportional Band. To adjust the
Proportional, type the command "XPnnn<E>". Now start adjusting the Proportional band up,
a few thousand at a time. As soon as it
is over a few hundred, the motor will "want" to return to it's
desired position. Keep adjusting this up
until the motor becomes unstable.
Typical values are about 20000.
Now back it down until the motor is stable. Record this ideal number,
because you'll be using this number in
Step 5. Adjust the Integral
Limit. To adjust the integral limit,
type the command "XLnnn<E>".
This number should be about 25000.
Step 6. Adjust the
Integral. To adjust the integral, start
increasing the number from about 1000, until the motor becomes unstable. Then back it off until the motor is
completely stable. Typical values are
about 5000. Record this ideal number, because you'll be using this number in
Step 7. Run the motor at
several speeds, and be sure it operates smoothly at all speeds. If it doesn't, start by working backwards
through the steps, first lower the integral, then lower the proportional. Play around until you're happy with the
response of the motor.
If the two motors are the
same type, the same numbers should work in both motors. Use the same commands listed above, except
substitute 'Y' for 'X'.
To test run the motors, you
can type commands and the motor should respond accordingly. The speed can be changed by typing the
command "XSnnn<E>" where nnn is the speed. To make the motor move for 1,000,000 encoder
ticks, simply type the command "X1000000<E>". The motor should ramp up to the speed you
selected, and ramp down and stop at exactly location 1,000,000. You can verify this by typing
"X<E>" and the controller will respond with the location of the
motor.
You may change the
destination or speed at any time, even during a move. Let's say you've typed in
"X20000000<E>", and the azimuth is headed for 20,000,000. At any time you may type
"XSnnn<E>" and the motor will ramp up or down to the new
speed. You can issue the command
"X-20000000<E>" and the motor will ramp down and head the other
direction.
You can change the speed and
destination using the same command. Try
this:
"X5000000S2000000<E>".
The controller will head for location 5,000,000 at speed 2,000,000.
The motor revolutions per
minute is calculated by the formula N=E*RPM*.55924053
The motor revolutions per
second is calculated by the formula N=E*RPS*33.554432
Where N is the number that is
entered into the "XS" parameter, and E is the number of effective
encoder ticks per revolution of the motor.
If you're not sure what the
effective resolution of your motor encoders are, there is an easy way to find
out. Type the command
"XM<E>". This places the
Altitude motor in manual, so it is no longer under PID control. The altitude motor should be free to turn
now. Turn the motor by hand until a mark
on the output shaft is pointed as accurately as possible at a mark on the motor
housing. Now type the command "XF0<E>" (The 0 is a zero). This forces the current location to
zero. You can verify this by typing the
command "X<E>". The
controller should respond with X0. Now
turn the output shaft of the motor 10 turns, and line up the mark on the shaft
again. Now type the command
"X<E>" again. The
controller should respond with Xnnnn.
Divide this number by 10, and you have the effective encoder ticks per
revolution of the motor.
To put the motor back in the
Auto mode, type the command "XA<E>". You can repeat this with the azimuth motor by
substituting 'X' with 'Y'.
To change the ramp or
acceleration value, type the command "XRnnn<E>" where nnn is
the acceleration. You can change the ramp or acceleration value during a move,
but this may confuse the controller, and it may ramp down, and overshoot, and
have to back up again. This is no
problem, but if you notice it, that's the reason why. Play around with this number until you like what
you see. Typical workable values are
about 1000.
After you like what you see,
type the command "XW<E>".
The controller will write these values to the flash
You can issue a motion
command to the X (altitude) and the Y (azimuth) sequentially, and they will
both be moving at the same time.
For a complete list of the
ASCII command set, see the section labeled "ASCII Command Set".
The controller is compatible
with the old style of BBAstroDesign's hand pad.
If you have a handpad of this type, be sure to put the 3 position jumper
near the hand pad connector toward the micro processor (towards center of the
board). If you are using a new handpad
type (there is no switch on a new type, there is only push buttons), you need
to be sure the jumper is toward the edge of the board.
The new handpad design allows
the movement of both axis's at once, and also allows upgrading to the wireless
handpad. The Slew/Pan switch on the old
handpad is replaced with a push button.
The controller turns the push-button into a "switch"
internally, which is used to change between slewing or panning. There are certain functions in the Drag and
Track and in the Platform mode that are not available if you don't have a new
handpad type.
One of the XBits bits (bit
number 6) needs to be set when using the new handpad. Add 64 to whatever number needs to be in the
XBits for proper operation.
To test the handpad, set up
X_Bits for the 6th bit set (bit 5), and if using a new handpad, with
the 7th bit set (bit 6).
Issue the command "XB<E>". The controller will respond with a
number. If you're not a computer whiz,
you may not know which bit is which, and what number is what. Don't worry, you can use the windows
calculator, and under the view menu, select the Scientific calculator. Now enter the number that was displayed by
the XB command. Now click on the Bin
option. The displayed number will be the
binary value. The 1st bit is
the one on the right. Now enter that
same binary number but be sure that the 6th bit is a one (1), and if
you are using a new handpad, be sure the 7th bit is a one (1). Make sure all other bits are the same as
before. Now click on the Dec
option. The displayed number will be the
decimal equivilent. Enter this displayed
number in the X_Bits command. Enter
"XBnn<E>".
Now you must set up your
telescope slew and pan rates. This is accomplished with the extend command
set. First, you need to know what
numbers to enter.
The number used in the slew
or pan speed command can be calculated by the formula N=E*RPM*.55924053
The number used in the slew
or pan speed command can also be
calculated by the formula N=E*RPS*33.554432
Where N is the number that is
entered into the parameter, and E is the number of effective encoder ticks per
revolution of the motor.
To set up the altitude slew
rate, figure what RPM or RPS you want, then enter the number into the parameter
using your terminal software by entering the command
"XXAnnnn<E>" where nnnn is the number you figured from the
formula above. You may enter a negative
number, and it will respond with opposite directions. To read what this number is, enter the
command "XXA<E>" without a number parameter. The controller will respond with the altitude
slew rate.
To set up the azimuth slew rate,
figure what RPM or RPS you want, then enter the number into the parameter using
your terminal software by entering the command "XXBnnnn<E>"
where nnnn is the number you figured from the formula above. You may enter a negative number, and it will
respond with opposite directions. To
read what this number is, enter the command "XXB<E>" without a
number parameter. The controller will
respond with the azimuth slew rate.
To set up the altitude pan
Rate, figure what RPM or RPS you want, then enter the number into the parameter
using your terminal software by entering the command
"XXCnnnn<E>" where nnnn is the number you figured from the
formula above. You may enter a negative
number, and it will respond with opposite directions. To read what this number is, enter the
command "XXC<E>" without a number parameter. The controller will respond with the altitude
pan rate.
To set up the azimuth pan
Rate, figure what RPM or RPS you want, then enter the number into the parameter
using your terminal software by entering the command
"XXDnnnn<E>" where nnnn is the number you figured from the
formula above. You may enter a negative
number, and it will respond with opposite directions. To read what this number is, enter the
command "XXD<E>" without a number parameter. The controller will respond with the azimuth
pan rate.
Now write the parameters
using the command "XW<E>".
Now if your motors are
working properly, you can slew or pan using the 4 direction switches. If you are using the old handpad, the switch
will change you from the slew or pan mode.
If you are using the new hand paddle, pressing the center button for
about ¼ of a second will switch between the slew and pan modes.
If you are using an old hand
paddle, you can't use all of the possible direction modes together, (including
altitude and azimuth together). If you
are using a new hand paddle, you may use all modes of directions, including
altitude and azimuth at the same time.
TELESCOPE
ENCODER WIRING AND SETUP:
Study the connection drawing
at the end of this document, and you will see that you need to make a Y cable
for the telescope encoders. A 6 position
modular jack is used on one end of a flat cable. The cable must be fabricated so it branches
off to both telescope encoders. The 5
volts and ground must appear at both encoders.
Once you have your encoders wired properly, connect your computer to the
controller with the serial cable again, run your terminal software again, and
you can test them out. Type the command
"XZ<E>". The controller
responds with a number that is the value of the altitude encoder. Turn the encoder one revolution. Type the command again. It should have changed the effective encoder
ticks per revolution of your encoder. If
you have a 1024 resolution encoder, there should be a 4096 (or somewhere close)
difference.
Now let's have some fun. Before your encoder is mounted on your
telescope, clamp a small arm on the shaft of the encoder. Turn the arm until it is lined up perfectly
with something on the body of the encoder.
Now let's force the encoder ticks to be zero by entering the command
"XZ0<E>" (again the 0 is a zero). You can verify the location by typing the
command "XZ<E>". It
should respond with 0. Now hold the
encoder and swing the arm around as fast as you can, and count the turns. Now swing back to the starting point, and
line up the arm to the orginal position, and type the command
"XZ<E>" again. The
difference between the starting number and this number should fall within the
pointing accuracy of your alignment.
This is a true high speed encoder interface.
You can substitute 'Y' for
'X' to test out the azimuth encoder.
The Drag and Track mode is
used if you would like to push your telescope by hand, or slew with the
handpad, but don't need super-accurate tracking, or goto capabilities, but
would like accurate tracking, the Drag and Track or Slew and Track mode may be
a nice feature to use. If you have a
telescope of aperature 16 inches or more, it may be more cost effective, and
there are many other advantages to use the dual servo controller and the Drag
and Track mode instead of a tracking platform.
To use the drag and track
mode, your Alt/Az telescope must have the following features:
1. A pair of servo motors to
drive the telescope in altitude and azimuth
2. Clutches on both altitude
and azimuth connected between the motors and the telescope, so you can
"drag" the telescope anywhere in the sky, without damaging the servo
motors.
3. A pair of encoders mounted
to your telescopes' altitude and azimuth axis's.
4. (Optional) A handpad.
5. A 12 -24 volt power
supply.
A computer is not required
for operation, only to configure your servo controller.
Setting up
the Drag and Track mode:
For the drag and track mode
to work properly, the controller must "know" several things.
1. The number of telescope encoder ticks for a complete
revolution of the telescope in both the altitude and the azimuth
2. The number of motor encoder ticks for a complete
revolution of the telescope in both the altitude and the azimuth
3. How fast the slew setting
should be
4. How fast the pan speed
should be
5. (Optional) Latitude of the
observing session
When you calculate the
encoder ticks, it's important to understand the resolution of your
encoders. Generally speaking, the
effective number of ticks is 4 times the resolution of the encoder. This document uses the effective encoder
ticks unless otherwise stated.
To enter the Drag and Track
mode, you must set the 4th bit in the X_Bits parameter. To read the X_Bits, from your terminal
software, type the command "XB<E>". To set up for Drag and Track mode, whatever
number is returned, type in "XBnn<E>", where nn is the number,
with an 8 added to it.
To set up the number of
altitude telescope encoder ticks, from
terminal software, enter the command "XXTnnn<E>" where
<E> is the Enter Key, and nnn is a decimal number. As an example, if you have an 8192 effective
resolution encoder, and it is hooked up directly to the telescope altitude
axis, enter the command "XXT8192<E>". To read what is programmed into the altitude
encoder ticks, enter the command "XXT<E>" with no number
parameter. The controller will respond
with the number of encoder ticks for a full revolution of the altitude axis.
To set up the number of
azimuth telescope encoder ticks,
from terminal software, enter the command "XXZnnn<E>" where
<E> is the Enter Key, and nnn is a decimal number. As an example, if you have an 8192 effective
resolution encoder, and it is hooked up directly to the telescope altitude
axis, enter the command "XXZ8192<E>" To read what is programmed
into the azimuth encoder ticks, enter the command "XXZ<E>" with
no number parameter. The controller will
respond with the number of encoder ticks for a full revolution of the azimuth
axis.
To set up the number of
altitude motor encoder ticks, from
terminal software, enter the command "XXUnnnn<E>" where nnnn is
the number of motor encoder ticks
for one full revolution of the altitude.
As an example, if you have an effective 2000 resolution encoder, a 5.9:1
reducer on the motor, and 1000:1 on the telescope gear ratio, this would be
11,800,000 encoder ticks. Enter the
command "XXU11800000<E>". To read what is programmed into the
altitude encoder ticks, enter the command "XXU<E>" with no
number parameter. The controller will
respond with the number of encoder ticks for a full revolution of the altitude
axis.
To set up the number of
azimuth motor encoder ticks, from
terminal software, enter the command "XXVnnnn<E>" where nnnn is
the number of motor encoder ticks
for one full revolution of the azimuth.
As an example, if you have a 2000 effective resolution encoder, a 5.9:1
reducer on the motor, and 1000:1 on the telescope gear ratio, this would be
11,800,000 encoder ticks. Enter the command
"XXV11800000<E>". To read what is programmed into the azimuth
encoder ticks, enter the command "XXV<E>" with no number
parameter. The controller will respond
with the number of encoder ticks for a full revolution of the azimuth axis.
It would be good, but not
absolutely necessary to enter the latitude of your observing site. This is done by entering the command
"XXLnnnn<E>" where nnnn is your latitude times 100. As an example, if your latitude is 45 degrees
north, enter "XXL4500<E>".
Next we need to set up the
slew speed for the altitude. This is
done using terminal software, and entering the command
"XXAnnnn<E>" where nnnn is the speed of the motor.
The number to program into
the controller is calculated by the formula N=E*RPM*.55924053
You can also calculate it
using RPS instead of RPM by the formula N=E*RPS*33.554432
Where N is the number that is
entered into the Slew or Pan parameters, and E is the number of effective
encoder ticks per revolution of the motor.
A velocity calculator is included
with the SiTech configuration program option of Scope II.

To set up the altitude slew
rate, figure what RPM or RPS you want, then enter the number into the parameter
using your terminal software by entering the command
"XXAnnnn<E>" where nnnn is the number you figured from the
formula above. To read what this number
is, enter the command "XXA<E>" without a number parameter. The controller will respond with the altitude
slew rate.
To set up the azimuth slew
rate, figure what RPM or RPS you want, then enter the number into the parameter
using your terminal software by entering the command
"XXBnnnn<E>" where nnnn is the number you figured from the
formula above. To read what this number
is, enter the command "XXB<E>" without a number parameter. The controller will respond with the azimuth
slew rate.
To set up the altitude pan
Rate, figure what RPM or RPS you want, then enter the number into the parameter
using your terminal software by entering the command
"XXCnnnn<E>" where nnnn is the number you figured from the
formula above. To read what this number
is, enter the command "XXC<E>" without a number parameter. The controller will respond with the altitude
pan rate.
To set up the azimuth pan
Rate, figure what RPM or RPS you want, then enter the number into the parameter
using your terminal software by entering the command
"XXDnnnn<E>" where nnnn is the number you figured from the
formula above. To read what this number
is, enter the command "XXD<E>" without a number parameter. The controller will respond with the azimuth
pan rate.
It's important to note that
the UP handpad key needs to move the telescope up in altitude, and the RIGHT
key move the telescope azimuth in a clockwise direction. It would be easy to put a negative number
into the slew and pan rates, and the controller would respond with the opposite
direction, but the trigonometry would still be wrong, and the controller
wouldn't track in the proper direction.
You must change the direction of the motor by changing the X_Bits, and/or
Y_Bits (See section on changing X_Bits), until proper direction is observed
with the push buttons.
It's also important to note
that when the telescope is moving clockwise, the azimuth encoder should be
increasing, and when the telescope is moving up, the altitude encoder should be
moving up. If these move backwards, then
the direction needs to be changed by changing the 3rd bit of X_Bits
(altitude) or Y_Bits (azimuth) (See section on changing X_Bits).
To save all this information
to the flash ROM, type "XW<E>".
Operation of
Drag and Track mode:
If you want the scope to
start tracking without initialization, point the telescope at the celestial
pole, and then turn the power on the controller. At this point, if you've already set up and
saved your latitude, the system will be initialized. It will immediately start tracking. No further initialization is required.
If your latitude isn't
initialized and saved to flash rom, you will have to initialze at the scope
zenith and the celestial pole. To initialize
the Altitude, move the scope (by hand or with the handpaddle) up to the scope
zenith. It could be convenient to have a
stop mounted on your scope, so it is easy to find this location. Press and hold the top right key for more than 4 seconds. At this point, the controller adjusts your
altitude so it reads 90 degrees.
To initialize the azimuth,
move the scope to the celestial pole.
Now press and hold the top left
key for more than 4 seconds. At this point, the controller initializes the
azimuth, and if you haven't initialized the altitude, it initializes the
altitude to your saved latitude, otherwise it initializes the latitude.
If you have initialized both
the altitude and azimuth, you may save the new latitude value by pressing and
holding both top keys for more than 10 seconds.
This saves the latitude to the flash ROM, so next time you can simply
initialize the scope on the celestial pole, and press the left hand key for
more than 4 seconds.
To perform photography, it
may be necessary to enter the guide mode.
This is done by holding down the top right key, then pressing the right
key. Now the speed changes by adding or
subtracting the guide rate from the current tracking rates. To revert back to the normal mode, hold down
the top right key, and press the right key again. This feature only works with the new handpad.
You may slew the telescope
with the handpad, or move the telescope by hand, and when done slewing or
moving, the telescope will immediately start tracking again, at the new drive
rates based on the telescopes altitude, azimuth and the latitude. To stop tracking, press the top right
key. To start tracking again, press it
again.
Review of Initialization options:
It may be confusing, because
there are several ways to initialize the telescope. The user has three choices.
Choice 1:
Step 1. Before turning on
power to the controller, position the telescope to the celestial pole. Turn on power.
The controller initializes
the azimuth, and initializes the altitude to the same value as the last saved
latitude. Using Choice 1 means you don't
even have to use the hand paddle, although you must have previously saved your
latitude.
Choice 2:
Step 1. Move the scope to the telescope
zenith and hold down the right hand bottom button for 4 seconds
The controller initializes the
altitude position at 90 degrees.
Step 2. Move scope to celestial pole, and
hold down the left hand bottom button for 4 seconds
The controller initializes the
azimuth, and initializes the latitude.
Choice 3:
Step 1. Move scope to celestial pole, and
hold down the left hand bottom button for 4 seconds
The controller initializes the
azimuth, and initializes the altitude at the same value as the last saved
latitude.
Before a user can use choice
1 or choice 3, the latitude needs to be set up.
If a user used choice 2, they
may want to save the latitude, so next time they don't have to initialize at
the zenith. This is done by holding down
both the left and the right hand bottom buttons for more than 10 seconds. This action will save the latitude into the
flash ROM, thereby making it possible that next time the telescope is set up
(assuming the base is reasonably level, and you are near the same latitude),
the user will not have to use choice 2, but only choice 1 or choice 3.
While the controller is in
the Drag and Track mode, the serial port can be connected to a laptop running
almost any planetarium software. Set
your software to connect to a "Tangent" encoder interface box, and
you will be able to surf the sky using the planetarium software! When setting up your planetarium software,
set up both encoder resolutions to 18000.
Also, do not use the option that your telescope is on a tracking
platform. Think of it like a telescope
without a platform where you have this little guy pushing it all the time,
exactly keeping up with the stars.
That's what your planetarium program will "think".
Also, set the baud rate of
your planetarium software to 19200, no parity, 8 data bits, and 1 stop
bit.
This mode is similar to the
drag and track mode, but is used if you don't have clutches on your servo
motors, and/or don't have shaft encoders on the altitude and azimuth of the
telescope. You must have a handpad.
To use the Slew and Track
mode, your Alt/Az telescope must have the following features:
1. A pair of servo motors to
drive the telescope in altitude and azimuth
2. A handpad.
3. A 12 -24 volt power
supply.
This mode uses the servo
motor encoders as the telescope position.
You must use the handpad to slew the telescope. You must set up the Y_Bits with the 4th bit
set. If you have any other Y_Bits set up
for proper operation of the motors, you must add the number 8 to whatever
number is the correct number for Y_Bits.
To read the Y_Bits, from your terminal software, type the command
"YB<E>". To set up for
Slew and Track mode, whatever number is returned, type in
"YBnn<E>", where nn is the number, with an 8 added to it. Normally this will be 8. You must also add 8 as described above to the
X_Bits (Drag and Track mode)
You must also set up the
number of telescope encoder ticks to be the same number as the number of motor
encoder ticks, in other words, the XXT command should use the same number as
the XXV command, and the XXZ command should use the same number as the XXU
command (see section on Setting Up the Drag and Track Mode).
For the SlewNTrack mode to
work, you need to set both the slewNtrack and the dragNtrack bits.
When you power up the controller,
it assumes you're at the saved latitude, and you're pointed at the celestial
pole. It will be tracking, although
since the pole doesn't move, you won't detect any movement until you actually
slew the telescope. You don't have to
use the keys on the handpad to initialize the slew and track mode or the drag
and track mode if you point at the CP before powering up and you've saved your
latitude. If you didn't point to the CP
before powering up, and if you've already saved your latitude, simply slew to
the CP, then hold the top
left button for about 4 seconds.
Setting up the platform mode:
To enter the platform mode,
bit number 4 of XBits must be set. Type
XB16<E>
If using the New handpaddle
design, the 7th bit must also be set. Type XB80<E>
When in the platform mode,
the handpaddle is automatically enabled, this sets bit number 5, so a read of
XBits after entering XB16 will return
B48. After XB96, it will return B112
From terminal, type
"XXEnnn<E>" for the rate the controller will automatically run
when in the platform mode.
From terminal, type
"XXFnnn<E>" for the rate adder/subtractor for fine tuning the
rate.
From terminal, type
"XXGnnn<E>" for the final position the servo motor will stop
tracking. If the motor turns the wrong
way, enter a negative number here.
For the hand pad to work
correctly, we need to move the X axis (the altitude) at it's slowest rate. Enter the command "XS1<E>".
You may want to adjust the
acceleration for a smooth return while rewinding.
Adjust this by typing
"YRNNN<E>". A typical
number would be about 1000. Lower
numbers accelerate slower, while higher numbers accelerate faster.
If you are using the altitude
motor, you can also set up it's velocity for smooth operation. Substitute 'X' for the 'Y' in above command.
You can set up all of the
hand paddle rates too. See setting up
the hand paddle rates!!!!.
To save all this information
to the flash ROM, type "XW<E>".
Operation of tracking
platform mode:
Before powering up the
controller, be sure the platform is fully rewound. This will be it's home position.
Upon power up, or upon
rewind, the Right Ascension motor will turn at the configured speed, until it
reaches the configured goal.
To rewind, press both top
switches. This is possible at anytime. The servo motor will return to the same
location it was when power was turned on; at it's programmed slew speed rate.
To Cancel rewind, press any
direction key.
To stop tracking at any time,
press the top right button.
To start tracking again,
press the top right button again.
Only the new handpad will
allow fine tuning the tracking speed.
To raise the tracking speed,
press the top left key, and while holding it down (think of it as an ALT key)
press the up direction.
To lower the tracking speed,
press the top left key, and while holding it down (think of it as an ALT key)
press the down direction.
To perform photography, it
may be necessary to enter the guide mode.
This is done by holding down the top right key, then pressing the right
key. Now the speed changes by adding or
subtracting the guide rate from the current rates. To revert back to the normal mode, hold down
the top right key, and press the right key again. This feature only works with the new handpad.
Challenging Idea: If you have or have access to, a very large
aperture telescope, 28 inches or larger, you may be able to see the crab pulsar
blink. Here's how. Obtain a servo motor with encoder that is
able to run at least 1,800 RPM, you could connect this motor to the servo
controller, and put an interrupter on the shaft (a circle with a pie shape cut
out of it), balance it, and hold this interrupter between the secondary mirror
and the eyepiece, while running at somewhat less than 1800 RPM. You may be able to see the pulsar wink in and
out! To test this out, you may use one
of the LED's. It winks at the same
frequency of the crab pulsar while in the platform mode! You can configure the platform mode to
automatically run this motor at the proper speed.
UNDERSTANDING
AND USING THE X_BITS AND Y_BITS:
The controller has two bytes
that are used to change various options.
One byte is dedicated to the X axis (altitude), the other is dedicated
to the Y axis (azimuth). Some of the
bits in the X bits are common to both motors.
A byte is a group of 8
bits. The first bit, bit 0, has a
"weight" of 1. The second bit,
bit 1, has a "weight" of two.
The 3rd bit, bit 2, has a weight of 4, and so on until the
eighth bit, bit 7, has a "weight" of 128.
Bit 0: Weight of 1: Altitude
Motor Encoder Direction
Bit 1: Weight of 2: Altitude
Motor polarity
Bit 2: Weight of 4: Altitude
Scope Encoder Direction
Bit 3: Weight of 8: A
'1' here, puts the controller in the Drag and Track or Slew and Track Mode (X
Only)
Bit 3: Weight of 8: A
'1' here, puts the controller in the Slew and Track Mode (Y Only)
Bit 4: Weight of 16: A
'1' here, puts the controller in the Platform mode (X Only).
Bit 5: Weight of 32: A
'1' here, enables the handpad to control the motors. You must also set up the Slew and Pan rates
(X Only).
Bit 6: Weight of 64 A
'1' here, tells the controller you're using a "new" handpad, one with
only push buttons, no switch (X Only).
Bit 7: Weight of 128: A '1' here, tells the controller it's in the
"guide" mode (X Only). In the
guide mode, when a direction button is pushed, the guide value is added or
subtracted from the current speed. You
must also set up the Guide rates.
To figure out what number to
program into the X or Y bits, figure out the modes you want, then add up all
the "weights" of the bits that are a '1', and that is the number you
use.
As an example, lets say you
want to use the drag and track mode, you're using a new handpad, you're
altitude motor needs to be reversed and the altitude telescope encoder needs to
be reversed.
Bit 1 = 2, reverse the motor
polarity
Bit 2 = 4, reverse the scope
encoder
Bit 3 = 8, Drag and Track
mode
Bit 5 = 32, Enable the
handpad
Bit 6 = 64, Using a new
handpad.
This adds up to 110. Issue the command
"XB110<E>". Now read
back the value, "XB<E>", the controller responds with
"B110". Now save this to flash
by issueing the command "XW<E>".
Substitute 'Y' for 'X' for
the azimuth motor.
Here is a description of the
bits:
Bit 0: If this bit is a '0', the motor encoder is
incremented normally. If this bit is a
'1', then it is reversed.
Bit 1: If this bit is a '0', the motor moves one
direction for a given number. If it is a
1, it moves the opposite direction.
This being said about bit 0
and bit 1, it is important to understand the implications of changing these
bits. Lets say that the controller has
just been powered up. In this state,
before you've pressed a handpad button, or given the motor a command to move,
the controller is trying very hard to keep the motor at position zero. If the position moves to 1, 2, or 3, the
controller responds by putting an output to the motor to move it the opposite
direction, and it will move back, 3, 2, 1, 0.
If the motor starts moving in the other direction, -1, -2, -3, the
controller responds by putting an output to the motor to move it back to zero,
the opposite polarity as in the first example.
Now try to think what would happen if the position moved to 1, 2, or 3,
but the controller responded by moving the motor to even higher numbers. This would create positive feedback, and the
motor will "run away" out of control.
More Error would create more wrong voltage, which would create more
error, etc, until maximum output voltage is reached.
Bit 0 and bit 1 of X_Bits and
Y_Bits give you control over which direction the motor turns, and which way the
encoder counts.
Bit 0 and bit 1 rules:
1. If the motor runs away, you can invert either one
of the bits, bit zero or bit 1. The
motor will now run properly.
2. If the motor runs properly, but in the wrong
direction, you must invert both bits.
Bit 2: If this bit is a '0', the telescope encoder is incremented
normally. If this bit is a '1', then it
is reversed.
List of ASCII commands (all
get terminated with an <E> (13)
). Be sure to use upper case.
For the Y servo, use 'Y'
instead of 'X' The # symbol means there
is a number required.
The X servo is the Altitude
or Declination. The Y servo is the
Azimuth or Right Ascension.
X# Move Servo (-2147483648 to +2147483647) You can tag a speed command at the end. Example X-2345S1000000<E>
X Returns the X position of the servo
XF# Forces the X position to be equal to the
number (-2147483648 to +2147483647) (This stops the controller if moving)
XS# Velocity of X Servo (0-2147483647)
XR# Ramping speed or Acceleration of X servo
(0-2147483647)
XP# Proportional Band of X servo (0-32767)
XI# X Integral (0-32767)
XD# X Derivative (0-32767)
XE# Maximum position error limit before servo
turns off (0-32767)
XE Returns the position error of the servo
XEL# sets maximum position
error limit
XO# X Output limit (0-255)
XO Returns the PWM output of the servo (0-255)
XC# X Current Limit (0-240 = 0-2.40 amps)
XC Returns the X motor current * 100 (240 MAX)
XM# X to manual mode, the number is the PWM
value, 0-255.
XA X to Auto mode.
XN X Normal Stop (ramps down, then stops. Automatically clears when new position is
given)
XNT stops all motors, then
resumes tracking when velocity drops below 524,287.
XG X Emergency stop (stops immediately, may damage equipment if
large inertial load on it)
XL# Set Integral Limit (0-32767)
XL Returns Integral Limit
XB Returns servo bits like specific errors,
modes, etc.
XB# Number sets the servo bits like direction,
etc. (0-255)
XZ# Forces the scope encoder position to be equal
to the number (-2147483648 to +2147483647)
XZ Returns the scope shaft encoder position
The rest of the commands don't have a 'Y'
command, only X.
They affect both servo's
XK Returns the keypad info in Decimal.
XH Returns the temperature of the cpu chip (in
degrees F)
XV Returns the firmware version * 10.
XJ Returns the motor power supply voltage * 10
(please divide returned number by 10)
XQ Resets the servo system (both)
XU Programs factory defaults into the flash
rom.
XW Writes the configuration of both the x and y
parameters to flash rom.
XT Reads the configuration from the Flash Rom.
UFN upgrades flash now
All of the following XX
extended commands have a corresponding read command as an example, if you type
"XXL<E>" it responds with the latitude.
XXL# Store the latitude to
the controller (4500 = 45 degrees north, -4500 = 45 degrees south)
XXZ# Store the azimuth
encoder ticks per full circle.
XXT# Store the altitude
encoder ticks per full circle.
XXU# Store the number of
encoder ticks for the Altitude Motor Encoder to the controller
XXV# Store the number of
encoder ticks for the Azimuth Motor Encoder to the controller
XXA# Stores the Altitude Slew
Rate to the controller
XXB# Stores the Azimuth Slew
Rate to the controller
XXC# Stores the Altitude Pan
Rate to the controller
XXD# Stores the Azimuth Pan
Rate to the controller
XXE# Stores the Platform
tracking rate to the controller
XXF# Stores the Platform
up/down adjuster to the controller
XXG# Stores the Platform Goal
to the controller
XXH# Stores the Altitude
Guide Rate to the controller
XXI# Stores the Azimuth Guide
Rate to the controller
AD# Program the Address of module. This can be 1,3 or 5 (No X or Y command)
(Be sure to only have one module
listening!!!)
0AAh Puts the servo into the
PicServo Emulate mode (no CR required)
Proportional, Integral,
Derivative, Output limit, Current Limit, Maximum ServoError,
Ramp speed, Velocity,
Integral Limit, Servo Bits and Address are stored from ram to the Flash
Rom when the XW command is
received.
All of the extended commands
(XXx) are saved too.
The flash ram values are
loaded from the flash Rom to Ram on reset.
Both the X and Y parameters
are stored to the flash rom.
Use X and Y for module
address 1.
If the module address is 3,
use 'T' and 'U', for address 5, it's 'V' and 'W'.
Description of the bits for
the X_BITS and Y_BITS:
0 if 1, the motor encoder is incremented the
other direction
1 if 1, the motor polarity is reversed
2 if 1, the azimuth (or altitude) encoder is
reversed
3 if 1, (x only) we're in the computerless
drag and track mode
3 if 1, (y only) we're in the computerless
slew and track mode (no clutches, must
use handpad to slew)
(must be in drag and track too)
4 if 1, (x only) we're in the tracking
platform mode
5 if 1, (x only) we enable the hand paddle
6 if 1, (x only) hand paddle is compatible
with New Hand Paddle (allows slewing in two directions, and guiding)
7 if 1, (x only) we're in the guide mode. The
pan rate is added or subtracted from the current tracking rate.
Here's the definition of the
X and Y bits.
* N_BITS 00000000b*
||||||||
|||||||Inverts the servo encoder
||||||Inverts the motor direction
|||||Inverts the scope encoder
||||Drag and Track mode(X only) Slew
and Track mode (Y only)
|||Tracking Platform Mode (X only)
||Enable the Hand Paddle for
slewing/panning (X only)
|New Hand Paddle Type (allows slew in
both alt and az at once (X only)
Guide Mode (X only)
BLOCK DIAGRAMS OF SOME POSSIBLE CONFIGURATIONS:





What is
Scope II, the Java version?

Scope II is a telescope
control application written in Java.
Scope II builds on the success and popularity of scope.exe, a DOS based
stepper motor control application.
Scope II can run on many
operating systems, including Windows, Linux, and Mac. While perhaps 85% of users run Windows, a
significant and not to be overlooked number run Linux and Mac. Java enables the same code to be run on many
platforms, a great plus. The
disadvantage is that Windows users will need to install Java.
Scope II works in conjunction
with Sidereal Technology servo motor controllers, and with controllers from
JRKerr and RXDesignOnline. Scope II also
supports a number of external encoder boxes.
Communications is via serial or USB to serial converter. Scope II can control up to 4 motors.
Scope II works with many
encoder controllers.
Scope II is a precision goto,
tracking, guiding, command sequencer, analysis, and logging application.
Scope II comes with an
extensive object library covering over 55,000 quality objects; many objects
with positions corrected by fellow amateur astronomers.
Scope II comes with 23
defined mounting types and 8 specific mounting characteristics.
Scope II includes limit
motion windows which can be defined in both local site horizon and elevation
values and in telescope coordinates.
Error correcting includes:
ü
backlash
ü
refraction
ü
unlimited number
of simultaneous periodic error corrections, which can be based on any desired
periods or gear ratios: includes auto-synchronization capability with suitable
hardware
ü
drift corrections
in equatorial and altazimuth axes
ü
guiding
corrections, including rotation of guide axes over time
ü
the 3 mount axis
errors
ü
axis to axis
corrections, including altitude vs altitude, azimuth vs azimuth, and altitude
vs azimuth
ü
pointing model
corrections using weighted corrective values
ü
coordinate
precession
ü
coordinate
nutation
ü
coordinate annual
aberration.
Scope II contains a command
sequencer that accepts commands from:
ü
the user
interface
ü
scroll files
ü
a local file
where commands can be saved to
ü
LX200 styled
commands from either serial (USB), UDP, or TCP sources
ü
Scope II specific
commands from either serial (USB), UDP, or TCP sources
ü
commands from
file interaction with Project Pluto Guide
ü
ASCOM compatible via
the LX200 generic driver.
Scope II is network aware and
can be run across the LAN. Scope II is
very much a middleware server application, accepting commands across the LAN,
transmitting them to the controller via any one of the multiple channel
options, analyzing the controller status, and returning the results across the
LAN.
Scope II can write real-time
status web pages.
Scope II can act as its own
simulator.
Scope II can relay
communications from one type of channel to another, ie, serial to TCP.
Scope II includes extensive
analysis and logging.
There are nine styles of
tracking, the default being proportional velocity tracking. Some involve
trajectory matching formulae that I developed. See the test option 'track' for
a complete listing.
Scope II includes 80 test
functions to verify accuracy and fitness.
Scope II requirements:
1. Java runtime 1.4
installed; Windows: 2000 or XP (though Sun does not support Java on Win9x
because of operating system resource issues, ScopeII does runs satisfactorily
on my old P166 laptop with 80 meg memory running Win95); Linux/Mac: OS capable
of handling Java 1.4. For more see http://java.sun.com/
.
2. RXTX communications
package. RXTX is included with the Scope
II distribution files. Originated by Trent Jarvi, RXTX is a versatile serial
communications package that runs on a variety of platforms, including XP, Windows 2000, NT*, Windows 9*, WinCE,
Solaris 2.x x86 and sparc, Linux, FreeBSD 3.x 4.x, Mac OS X, HP-UX 10.x, SCO
OpenServer 5.x, UnixWare, Digital/UNIX.
Since Scope II requires RXTX, the ultimate limit is the number of
platforms that RXTX will run on. For
more see http://rxtx.org/
.
1. Install Java 1.4
runtime. If not available on the CD,
then download JRE (Java Runtime Environment) from http://java.sun.com/j2se/1.4.2/download.html
. You only need install J2SE v 1.4.2_04 JRE, the J2SE Java Runtime Environment. Note the directory where Java is installed.
2. Copy the files as found on
the CD to a directory of your choosing.
3. Verify that the Java
install has added the java\bin location to the path. For XP, check My Computer | Properties |
Advanced | Environmental Variables | User variables | path. If not present, the exact directory path to
Java can be added here, ie, c:\j2sdk1.4.2_02\bin . If the path is not present and you don’t wish
to add it here, then edit scope.bat to include the exact path, ie, c:\Program
Files\j2sdk1.4.2_02\bin\java ...
4. Make a shortcut on your
desktop that points to scope.bat. Do
this by right-clicking on scope.bat, and selecting 'send to desktop (create
shortcut)'. Checking the properties of
the newly created shortcut, the shortcut's target will point to the location of
the scope.bat file: in my case, 'C:\mel\cot\SERVO\JAVA\scope.bat', and 'start
in' will reflect the same location: in my case, 'C:\mel\cot\SERVO\JAVA'.
5. Double click on the
shortcut and verify that scope fires up successfully by presenting you with a
user interface. You can also open a
command window (click on Start|Run...|type in 'cmd' and hit return), go to the
directory where scope.bat is located, then type in scope and hit return.
Congratulations: you've
successfully installed Java and Scope II !
This section contributed by
The MacDob project page is at
http://home.comcast.net/~d.sopchak/macdobs/MacDob.html
.
Scope II, as a pure Java
application, is perfectly capable of being run on a Macintosh computer running
OS X. However, Scope II sometimes relies on being launched from a command line
using some special arguments in order to access some of its features. It also
uses an open-source library called RXTXcomm to access the serial port. Because
of this, one must be prepared to handle Scope II in slightly different ways
than a typical Macintosh application, and in slightly different ways than Mel's
instructions specify for other platforms. Note: These instructions are for a
Mac running OS X 10.3.x
(Panther) and Java 1.4.2, but
should also work under OS X 10.2.x (Jaguar) running earlier versions of Java
(1.x)
Most Macs that run OS X do
not have serial ports. If this describes your setup, you must first purchase a
USB to serial adapter, such as those sold by Keyspan, and install the drivers
for the adapter. This is a fairly simple process. If you have one already, with
a suitable serial cable, great!
Next, install the RXTXcomm
Java serial libraries. You can download the OS X Installer package here. For
the curious, this package installs two libraries in the
/Library/Java/Extensions folder on your computer: RXTXcomm.jar and
librxtxSerial.jnilib.
Once that's done, you're
ready for:
Unzip the Scope II Mac.zip
file and place the "scope" Java application into a folder with all
the other support files. Double clicking the scope app's icon should launch
Scope II. If the necessary support files are not found by scope, it will
automatically create essential support files in the folder it resides.
Scope II requires the full
path name of serial ports to be specified for it to operate properly. The
default serial port can be specified in the scope.cfg file, or accessed by one
of the popup menus in the Controller pane of Scope II. Mac OS X lists its
available serial ports, along with a lot of other stuff, in the /dev folder,
which can be accessed by launching the Terminal application, usually located in
the /Applications/Utilities folder. After it launches, type in the window:
cd /dev
hit the return key
and then
ls
and hit the return key
you will get a bunch of
strange names. Scroll up and down the window and look for one that looks like
the name of your serial port:
Typically, a Keyspan
USB-serial adapter will have a name such as tty.USA19813P1.1
There will also be names
starting with "cu.", such as cu.USA19813P1.1
DON'T use the names starting
with "cu." in the scope.cfg file or choose this option from the popup
menu. Scope II won't open up the serial port if you do. If you want to enter the name of your serial
port into the scope.cfg file, you must put in the whole path name, so it should
look something like /dev/tty.USA19813P1.1
Since USB is a dynamic, hub
based system, you will probably get a different name for your USB-serial
adapter if plug it into a different port between uses. This is normal, but it
might confuse you if you aren't aware of it!
More
Information and Control with Scope II
If you would like to see and
do more, "behind the scenes" information when running Scope II, you
can launch it from Apple's Terminal application. There are a couple of ways of
doing this:
1. Launching Terminal and
Scope II from the Finder:
Control-click on the scope
app's icon. This will bring up a contextual menu. Choose "Show Package
Contents". Go into Contents>MacOS. There you will find a dark grey icon
labeled "scope". Double-clicking on this will launch the Terminal app
and through it, Scope II. The Terminal will then show all the command-line
information being generated as Scope II executes.
2. Launch Terminal, then
launch Scope II from Terminal:
Launch the Terminal app, then
move to the folder that the scope app is in by typing, at the prompt, for
example:
Locate the folder where the
scope app is in the Finder, and drag and drop the "scope" icon onto
the Terminal window after first typing "cd " (without the quotes, but
with that space after the cd) in the terminal window. Then hit the return key.The
prompt should now change to reflect that you are in the scope.app folder:
[dave's
computer]:~/Desktop/scopeII/scope.app] dave%
dig down a little more by
typing
cd Contents/MacOS
and hit the return key again
again, the prompt will change
to reflect that you've changed folders:
[dave's
computer:scope.app/Contents/MacOS] dave%
Alternately, you can move to
the folder that the scope app is in the old fashioned way, by typing the path
name at the prompt:
[dave's computer:~] dave% cd
~/Desktop/scopeII/scope.app/Contents/MacOS
Once you're in the right
folder in the Terminal, type in
../scope
and Scope II should launch!
Having access to the command
line allows you to launch Scope II with various arguments, as mentioned in the
manual, so typing
../scope -h
would show the command line
options available
The look and feel setting in
scope.cfg should be set to ‘CrossPlatformLookAndFeelClassName’.


1. Plug the controller's
serial cable into a comm port on the PC, or into a USB to serial
converter. A basic USB converter will
work fine. At last check, these
converters can be had for $20 and up.
2. Note for Linux users: it may be necessary to add yourself to uucp
and lock groups. You may also have to
change permissions on the comm port, eg, /dev/ttyS0, or /dev/ttyS1.
3. Power up the controller.
4. Launch Scope II.
5. Select the 'Controller'
tab, then select 'SiTech' from the 'Motors' combo box drop down list in the
'Set Controller Types' panel. Click on
the 'reset' toggle button and check in the terminal window that a series of
'set...' commands occurred with 'OK' status returns.
6. Click on the 'file save
cfg' toggle button in the upper left of the main title panel display.
Congratulations: you've
successfully hooked up the controller to Scope II !
It may be necessary to
configure controller specific values.
Consult the controller manual’s configuration section. You can use a serial communication terminal
program such as Windows HyperTerminal to talk to the controller. A Java configuration program has been created
for your convenience. To run it, double
click on SiTech.bat, or enter SiTech at a DOS command line prompt in a DOS
window inside of Windows. To launch a DOS window, click Start | Run | enter
‘cmd’ | press return. It may be
necessary to edit the file in the same manner as scope.bat.

Start by selecting the proper
comm port, then clicking on the connect toggle button. The comm status should turn green. If it turns red, then there was a problem
opening the comm port. Specific comm
port settings are read from the Scope II configuration file, scope.cfg, in the
servo section.
Many values can be read or
written at a single stroke. These are
indicated by the blue toggles. Success
of the ‘get all blue’ command is indicated by the color of the adjacent label.
Relevant variables can be
saved directly to Scope II’s configuration file by clicking on the ‘save to
Scope II cfg’ toggle button in the upper left corner.
An overview of configuration:
1. Step through the numbered
panels in the two tabbed panes 'Controller' and 'Startup' to configure the
basic parameters: controller types, counts per revolution, direction of
movement, site location, mounting type, and starting coordinates.
2. For more involved
configuration such as error corrections and external control options like ASCOM
interfacing, edit the scope.cfg file while studying the file:\\\parms.html webpage.
3. Advanced configurations
like limit windows and certain error corrections require the creation and
editing of additional files. See the file:\\\filesUsed.html page and instructions later on.
Basic configuration is
divided into two sections: 'Controller' and 'Startup'.
Use the 'Controller' tabbed
pane to set the motor controller and servo controller types, the motor and
encoder counts per revolution, and the motor and encoder directions.
Scope II will work with servo
motor controllers from Sidereal Technology and from JRKerr (RXDesignOnline uses
JRKerr controllers). Communication is
RS232 serial at 19,200 bits per second.
For laptops with no serial ports, a simple USB to serial converter will
work fine. When you install the
converter, an additional comm port will be added to your machine. You do not have to configure the USB's comm
port settings as scope II uses its own parameters.
For remote operation, there
are several options. See the sections on
remote operation and external commands.
Scope II will work with most
encoder controllers. The Sidereal
Technology motor controller combines an external encoder controller, so a
separate purchase of an encoder box is not needed. These controllers use RS232
communications. As with the motor controller,
it is possible to communicate with the encoder controller over a LAN.
Motor and encoder counts
measure the complete rotation of the telescope's axis. This can be calculated from known gear
ratios. For instance, if the servo
motor's encoder is rated at 512 pulses per revolution, the servo motor uses a
gearhead of 5.9:1, and the main drive gear has 359 teeth and a single turn
worm, then the calculation is as follows: 512 pulses / motor revolution * 4
quadrature decoded counts / motor encoder pulse * 5.9 gearhead ratio * 359 main
gear ratio = 4337869 counts per telescope axis revolution. To determine the number of counts per
arcsecond, divide the counts per telescope axis revolution by 1,296,000, the
number of arcseconds in 360 degrees.
Here, 4337869 / 1296000 = 3.347 counts per arcsecond. Safe values range from 3 counts per arcsecond
upward. However, too many counts per
arcsecond limits the high speed slew rate.
Otherwise, counts per axis revolution will have to be determined from
rotating the telescope axis by using the motor, and noting the number of counts
moved by inspecting the motor's status window in Scope II's display. If the axis cannot be fully rotated, then use
a precision level and a precision 90 degree angle, moving the axis from level
to vertical, and noting the counts moved.
Multiply by 4 to arrive at the counts for a full 360 degree revolution
of the axis. Roller drives often slip,
so after carefully balancing the telescope to prevent preferential slippage in
one direction, move the telescope axis by motor control back and forth several
times, taking the average. Obtain the
counts per revolution accurate to at least four digits. This translates to a one arcminute error when
moving from horizon to horizon.
The final step under controller
setup is to set the direction of motion for both motors and encoders. Move the telescope axis upward or
clockwise. To determine clockwise
direction, imagine placing your body along the axis, with your head aimed at
the axis' pole. For equatorial mounts,
your head will be aimed at the celestial pole.
For altazimuth mounts, your head will be aimed at the zenith. Now imagine yourself in the middle of a
clock. Clockwise motion will be the same
direction as the clock's hands move.
Click on the file save cfg
after this last procedure is finished, to save your work.
Use the 'Startup' tabbed pane
to set site, mounting type, and starting coordinates.
Site is used for determining
refraction, as refraction is based on the object's elevation above the
horizon. Site can also be used for
telescope alignment. If an altazimuth
telescope is precisely leveled, and the 0 degree azimuth set to true north
(regardless of hemisphere), then an altazimuth alignment can be adopted for the
initialization. Goto and tracking will
be as accurate as the scope is level, site values are correct, and the
computer's time is accurate. Similarly,
for an equatorial telescope, if the site values and computer's time is
accurate, then a synchronization to a star is not required.
Two dozen telescope mounting
types are supported, each distinguished by the parameters: canMoveToPole,
canMoveThruPole, primaryAxisFullyRotates, meridianFlipPossible,
meridianFlipRequired, autoMeridianFlip, and autoMeridianFlipFuzzDeg. CanMoveToPole means that the telescope can
reach the pole of the primary (azimuth, or Right Ascension) axis. Certain mount types such as the equatorial
yoke cannot. Some mounting types such as
the equatorial fork can swing through the pole, denoted by canMoveThruPole. Some mounts do not allow the primary axis to
fully rotate, such as the equatorial horseshoe and equatorial splitring,
denoted by primaryAxisFullyRotates.
Finally, meridian flips are possible in some mounting types, and
required in still others. The meridian
flip can be made to occur automatically by setting the autoMeridianFlip. The distance that the telescope is allowed to
traverse past the meridian before flipping is configured by the
autoMeridianFlipFuzzDeg. Besides the
telescope mounting types already configured, a custom mounting type can be
defined by unique combinations of these parameters.
Supported mounting types:
mountTypeCustom: user
configured
mountTypeEquatorial: plain
old equatorial mount where primary axis that rotates 360 deg aimed at pole
mountTypeAltazimuth: plain
old altazimuth mount where primary axis that rotates 360 deg aimed at local
zenith
mountTypeAltAlt: altazimuth
mount where where primary axis that rotates 360 deg aimed at horizon
mountTypeHorseshoe: can swing
to pole but cannot swing past pole
mountTypeEquatorialFork: can
swing to and past pole into sub-polar region
mountTypeEquatorialYoke:
cannot swing near pole
mountTypeCrossAxisEnglish:
can track well past meridian when aimed toward celestial equator, but cannot
cross meridian while aimed at sub-polar region due to poleward support post
mountTypeSplitRing: can swing
through pole, cannot rotate primary axis full circle in RA
mountTypeGermanEquatorialMount:
requires meridian flip
mountTypeExtendedGerman: no
meridian flip, no pole support to impede crossing meridian while pointing
underneath pole
mountTypeOffAxisTorqueTube:
configured same as extended german
mountTypeWeightStressCompensated:
per famous Zeiss example: dec and ota pivot on top of RA axis, counterweights
held by bars that are placed outside ota and hang down past pivot
mountTypeInvertedFork: top of
RA axis is split into fork that moves in dec, ota held by outside inverted fork
that fits over the RA fork, this outside fork also holds the counterweights for
the ota
mountTypeSiderostat: means
stationary star, tube horizontal pointed at pole, flat is mounted equatorially
mountTypePolarSiderostat:
means stationary star, tube parallel to polar axis looking down into flat, flat
is mounted equatorially
mountTypeUranostat: tube
horizontal pointed at pole, flat is mounted altazimuthly
mountTypeHeliostat: same as
siderostat but looks at the Sun, only one axis of movement
mountTypePolarHeliostat: same
as heliostat but tube aimed up at polar axis
mountTypeCoelostat: developed
from siderostat; means stationary sky, siderostat mirror fixed parallel to
polar axis, tube moves in dec; plane mirror mounted facing the celestial
equator on axis pointing to celestial pole, when driven around axis the reflected
beam remains stationary and does not alter its orientation; sometimes a 2nd
mirror used to reflect the light into the telescope
mountTypeCoude: 2 mirrors,
the upper rotates in Dec, the lower rotates in RA
mountTypeSpringfield: 2
diagonals produce stationary eyepiece, needs meridian flip
The final stage in the
Startup tabbed pane is to set the starting coordinate. You should also synchronize the telescope
coordinates as calculated from motor positions and external encoders. If using an altazimuth mount, azimuth can be
any value, and altitude need only be accurate to 30 degrees. The initialization option to calculate
correct altitude will be used later to improve the altitude value.
Initializations
All tracking and goto
telescopes must align themselves with the celestial sphere. Telescope coordinates must be translated to
the celestial sphere's coordinates. Two
initialization points are needed to accomplish this. Each initialization consists of the star's
celestial coordinates, the telescope's coordinates when pointed at the star,
and the sidereal time of the initialization.
Since the celestial sphere appears to move across the sky at the
sidereal rate, the observation's time must be recorded. A single initialization establishes an
axis. The second initialization
establishes the second axis.
Initializations come in
several flavors.
If the scope is equatorially
aligned, and the local sidereal time known, then no subsequent initializations
are needed: the polar alignment provides one initialization and the local
sidereal time giving the right ascension at the meridian or hour angle offset
providing the second initialization.
Equatorial mounts are actually four axis mountings, with the altazimuth
mount typically of very limited extent and only used to polar align the scope's
primary axis.
For an altazimuth scope, if
the site's latitude and longitude are accurately known, the local sidereal time
accurately known, the scope is accurately leveled, the scope's azimuth with
respect to the equatorial pole known, and the scope's altitude reading is
accurate, the two initialiations can be calculated from standard spherical
trigometric equations.
Otherwise, two
initializations or observations must be made.
Curiously, starting sidereal time need not be accurately known, only the
difference in sidereal time between the two observations. Similarly, the scope's starting azimuth need
not be known, as again, the difference in azimuth between the two observations
counts. Finally, the scope;s starting
altitude need not be known accurately, as it is possible to deduce the correct
starting altitude after the two initializations have been made. This is done by comparing the angular
separation in celestial coordinates to the angular separation in telescope
coordinates. Only one particular value
of altitude will give the correct angular separation.
Consequently, there are
several methods to initialize the telescope depending on the mount's alignment
and what coordinates are known.
1. Previously initialized and
scope not moved since software shutdown and local sidereal time accurately
known: goto and tracking can resume as if the software was never shutdown.
2. Previously initialized but
scope moved after software shutdown or local sidereal time not known: set the
computer date/time as accurately as possible, center on a star, then perform a
reset to current equatorial coordinates.
This will result in resetting the telescope's coordinates.
3. Scope is equatorially
aligned: adopt an equatorial alignment at software startup, center a star and
perform a reset to current equatorial coordinates. This will result in resetting the telescope's
coordinates.
4. Scope is altazimuthly
aligned and leveled with respect to the ground, site latitude and longitude
accurately known, azimuth of zero is set to the north, and local sidereal time
is known: adopt altazimuth alignment at software startup.
5. The instant eyeball
initialization which is good enough for visual tracking: set altitude as
accurately as possible, set azimuth of zero to the north, adopt an altazimuth
alignment at software startup, center a star, then perform a reset to
equatorial coordinates.
6. Tracking initialization:
set altitude as accurately as possible, center a star or planet or even a
crater on the Moon, perform an initialization #1, follow the object with the
handpaddle for a couple of minutes, then perform an initialization #2. The object should 'freeze' in the eyepiece or
camera, though some slow drift will be noticed over time, and, goto to other sectors
of the sky will not be accurate.
7. Traditional two star
initialization: center a star, perform initialization #1, center a second star,
perform initialization #2.
Performing initializations.
There are several ways to set
up the initialization equatorial coordinates.
1. At program startup, go
into the Initialization tabbed pane and select NoAlignment. Two suggested alignment stars along with
instructions will be displayed. An
initialization's equatorial coordinates can be changed by clicking the 'change'
toggle button to the right of the initialization equatorial coordinates
display. Then handpad will be placed in
handpadModeAutoInit12. Use the handpad
to center the first star, then press either the left or right mode key. Use the handpad to center the second star,
then once again, press either the left or right mode key.
2. On the main at-a-glance
panel, click on the set any coordinate toggle button. Select init#1 or init#2 and proceed to choose
an object's coordinates from the object library, from an individual datafile,
or by manually entering the equatorial coordinates.
3. Go to the CmdFiles tabbed
pane, click on the select telescope command combobox, and choose
cmd_scope_init1 or cmd_scope_init2.
Manually edit the line, adding the desired coordinates.
For options #2 and #3, place
the handpad in handpadModeInit#1, use the handpad to center the star, then
press the left or right mode key. Repeat
for the second star, after placing the handapd in handpadModeInit#2.
4. Use a scroll file built
ahead of time to feed the initialization equatorial coordinates to Scope II.
Such a file might consist of:
prompt starting
initialization command file
init1 [RaHr] [RaMin] [RaSec]
[decDeg] [DecMin] [DecSec] <- edit and replace with desired equatorial
coordinates of star #1
init2 [RaHr] [RaMin] [RaSec]
[decDeg] [DecMin] [DecSec] <- edit and replace with desired equatorial
coordinates of star #2
prompt ending initialization
command file
now run by going into the
tabbed pane CmdFiles, clicking on select command file, and finding the file
that you've built. When the first star
is centered, press either the left or right mode keys on the handpad. Move on to the second star, and when it is
centered, repeat the handpad left or right mode key button press.
Check the initialization
status display in the lower right hand side of the program display to verify
that all went according to plan. For an
equatorial telescope, the latitude should read 90 degrees, and for an altazimuth
telescope, the latitude should agree closely with your site's latitude. The hour angle offset should be very small.
Select target coordinates by
either clicking on the at-a-glance panel's new toggle button next to the target
coordinates, or, select the set any coordinate toggle button and after the Get
Coordinate window appears, from the combo box's dropdown list, choose new
target. Now, select an object from the
library, or from a datafile, or by manually entering the equatorial coordinates. The scope will slew to the object and track
on it when the Ok toggle button is clicked.
Remote
control across the network
Remote control can be divided
into two categories: LAN, and WAN. LAN
communications, as can be found in a home observatory network, sit inside a
firewall and have fast reliable communication.
WAN communications go out over the internet, where response time is
variable.
Scope II can act as a piece
of middleware, receiving commands from across the LAN or WAN, and communicating
with the motor and encoder controllers via a serial or USB link. Scope II can also communicate with the
controllers over a LAN, the WAN being too variable to use for this segment.
Commands to and from Scope II
can take the following forms: shared file with ASCII commands, serial com/USB
ports, UDP, TCPclient, TCPserver, and TCP (tries client, then switches to
server if no server found).
Commands between Scope II and
the motor and encoder controllers need to be fast and reliable. Commands need to be received by the
controllers as soon as they are issued, and the controllers' statuses need to
be returned to Scope II as fast as possible.
The serial link to the
controllers can be wireless. See
products such as AirCable’s wireless serial link and DigiInternational’s
Wavespeed/S. These substitute a wireless
link for the serial cable. USB can be
sent wireless with such products as DigiInternational’s AnywhereUSB. An USB to RS232 serial converter is needed to
attach the controllers to the USB port.
Scope II can act as a relay,
taking commands from the LAN (UDP, TCP) and relaying them onto a serial
link. To run Scope II in relay mode, use
the relay.bat file which adds a '-relay' command line argument to scope.jar,
or, run test.bat and select the test item 'ioRelay'. Enter the configuration information for both
channels that you wish to connect together.
For instance, configure the remote copy of Scope II running on a machine
in your living room to talk to the motor controller on UDP port 1000, configure
the ioRelay copy of Scope II running on a machine in the observatory next to
the motor controller to connect UDP port 1000 to COM3, and plug in the
controller to COM3 of the ioRelay machine.
Now, the remote copy of Scope II can communicate to the motor controller
via UDP across the LAN.
Alternatively, use a serial
to network converter such as a Lantronix unit.
Attach the Lantronix unit to the motor controller. Configure Scope II for TCP communications
with the Lantronix unit, by setting scope.cfg's servoIOType, servoRemoteIPName,
and servoRemoteIPPort settings to match the Lantronix unit's values.
To conclude, for Scope II to
controller communications, best is a serial link, though if needed, commands
can be networked over the LAN and translated to serial commands by either Scope
II acting as a relay, or by a hardware device such as a Lantronix unit.
Commands between controlling
or scheduling programs and Scope II can be more relaxed. Security may be an issue across the WAN.
For an external control
approach with LX200 styled commands: run a planetarium or software
planning/scheduling program that supports LX200 commands either natively or
through the ASCOM drivers. Commercial
products such as Virtual Serial Port Kit connect applications through the
creation of virtual comm ports. For instance,
Com8 and Com9 might be created and tied together. Configure the controlling application to use
Com8 and ScopeII to use Com9. For a
freeware alternative, use HW_VirtualSerialPort software running on the remote
machine to relay generic LX200 driver serial commands to a TCP channel. Configure Scope II running on a machine local
to the motor controller to receive LX200 styled commands from the TCP channel
by setting the LX200IOType to TCPServer, LX200RemoteIPName, and
LX200RemoteIPPort parameters in scope.cfg.
When considering ASCOM hubs
and similar multi-application environments, treat Scope II as a telescope
driver, specifically as a Meade LX200 generic driver. See the instructions on how to configure
Scope II to communicate with LX200 outputted commands.
For both LAN and WAN, the
most straightforward approach is to use remote control software, such as XP's
Remote Desktop Connection, PcAnywhere, VNC variants, and so forth.
Configuring
for ASCOM/ external LX200 control
Use Meade generic LX200 driver
via a com port:
For HW Virtual port manager, configure as follows:
HW config:
Scope II config in the
scope.cfg file:
example config:
[*** LX200 input protocol
section ***]
LX200Control true
LX200IOType TCPServer
LX200homeIPPort 1000
LX200remoteIPName 10.146.98.32
LX200RemoteIPPort 1000
Controlling software, ie,
planetarium program config:
Verify that all works:
TCP local server socket
connection set on port 1000
...waiting to receive TCP
packets...
3. fire up planetarium
control program and attempt to connect: you should obtain a successful
connection, and see traffic in HW
Virtual port manager log window;
see in Scope II terminal window:
client has closed TCP connection
closed TCP server listening on port 1000
TCP serverThread ending
TCP local server socket connection set on
port 1000
...waiting to receive TCP packets...;
and in Scope II LX200 status with auto
update turned on, the various LC200 commands flowing into Scope II;
and finally in the controlling planetarium
program, after turning on any necessary 'display telescope' or 'track telescope' options, see the scope's
position in real-time.
The user has control over the
appearance of the user interface.
Valid configuration file
UILookAndFeel values are:
(an empty value)
metouia (metouia look and
feel, GNU LGPL license, written by Taoufik Romdhane, http://mlf.sourceforge.net/index.php?home
)
systemLookAndFeel
crossPlatformLookAndFeel
com.sun.java.swing.plaf.motif.MotifLookAndFeel
com.sun.java.swing.plaf.windows.WindowsLookAndFeel
com.sun.java.swing.plaf.gtk.GTKLookAndFeel
javax.swing.plaf.metal.MetalLookAndFeel
javax.swing.plaf.basic.BasicLookAndFeel
(appears to be same as metal look and feel)
apple.laf.AquaLookAndFeel
(Mac only)
usePanelColors turns on/off
the panel colorization as defined by the subsequent lightPanel, mediumPanel,
and darkPanel color values (a row of 3 numbers from 0 to 255, red green blue)
stopToggle and goToggle are
designed for red and green appearance.
The user can change these values if desired.
radioButton and comboBox
colors can also be changed by the user.
External encoders are the
optional encoders placed directly on the telescope’s axes as an independent
external position reporting device. If
the telescope axis slips, either accidently (say, roller drive and the altitude
axis is severely unbalanced), or purposefully (hand pushing the scope using a
clutched drive), then some sort of external position sensor is needed. Otherwise, the user must issue a reset or
synchronize command after centering an object in order to orient Scope II
Scope II supports a variety
of external encoders. They include:
encoderNone (no external
encoders present)
encoder
encoderBSeg (Bob Segrest
interface box)
encoderSkyCommander (Sky
Commander box)
encoderTangentNoReset
(Tangent box without reset capability)
encoderTangentResetViaR
(Tangent box that resets with ‘R’ command)
encoderTangentResetViaZ
(Tangent box that resets with ‘Z’ command)
encoderSiTech (Sidereal
Technology controller with integrated encoder interface)
If in doubt as to encoder
type, consult the encoder interface box manufacturer. The box’s manual often states the reset
protocol. The user can also launch the
encoder terminal window from the Scope II: Controller tabbed pane: 1. Set
Controller Types panel. Enter a reset
command and watch for the encoder box’s return.
If successful, you will see something along the lines of +1234 +5678.
The user can choose how the
telescope behaves when a discrepancy arrises between the external encoders and
the motors position as reported by the motor controller.
Scope II will not take any
action until the discrepancy exceeds the user configured parameter:
encoderErrorThresholdDeg.
The user is advised to
characterize the true accuracy of their external encoder system, and
consequently not to lower the error detection threshold below this amount. A common way is to move the telescope in the
daytime between a high stop and a low stop.
Note the variation in the encoder readings, as shown in the Scope II
Startup tabbed pane: 3. Set Coordinates panel.
Assuming the drive or clutch is not slipping, the user can also monitor
the encoder resets during operation by inspecting the
scope.encoders.reset.log. This is a log
of encoder to scope and scope to encoder resets. Typically the user will wish to set the
threshold so as to at least guarantee centering of the object. If using a digital camera with a small CCD,
the threshold may be set very tight. If
purely visual use, then the threshold may be set relatively coarse, such as 0.1
deg. If using the Sidereal Technology
integrated encoder interface, and using strongly geared encoders, it’s possible
to set the threshold extremely tight, down into the arcseconds range.
If Scope II detects an
unacceptable error threshold, then the resulting behaviors will be controlled
by the following user configured parameters:
resetScopeToEncodersTrackOffResetTarget:
if encoder vs current position exceeds error threshold when tracking is off,
then reset the target coordinates. The
default is true, as most users, when tracking is off, will wish the scope to
set the target positioning to the current position as determined by the
external encoders. This ensures accurate
tracking rates when tracking is started or a slew is begun.
resetScopeToEncodersTrackingResetTarget:
if encoder vs current position exceeds error threshold when tracking, then
reset the target coordinates. The
default is false, as most users will wish Scope II to ensure that the scope continues
to be centered on the target position.
Typical uses include star parties, where guests may accidently bump the
telescope off-target, or windy conditions, where a strong wind gust might most
the scope around. However, if you wish
to push the telescope a great deal by hand, and you do not care to use the
handpad’s tracking on/off mode to cycle tracking off when hand moving the
scope, then you will want to set this value to true. This will cause a reset of the target
position to wherever the scope finds itself when the user has finished hand
positioned the telescope.
resetScopeToEncodersSlewingResetTarget:
if encoder vs current position exceeds error threshold when slewing to a target
position, then reset the target coordinates.
This is a reset during slewing: contrast this with the above parameter
which is a reset during tracking. The
default is false, since it is likely that the user will desire Scope II to
complete a slew to position, avoiding target coordinate resets, even if the
external encoders trigger a motor or axis position reset.
A slew is defined as any
commanded move that results in a distance to move of greater than one
arcminute. If the scope’s drives have a
tendency to slip, slewing to position will be problematic without this
behavior, as any slippage will result in a target reset to current position,
effectively ending the slew. If this
value is false, the slew completes to the external encoder position as Scope II
adopts this externally set position during every threshold-exceeded reset.
With a value of false, used
in combination with resetScopeToEncodersTrackingResetTarget = true, the user
can command slews to complete yet hand push the scope as desired after reaching
target.
Scope II reads custom LX200
commands, including ability to read any Scope II cmd_scope… command by
prepending the custom ‘XZ’.
Cartes du Ciel’s advanced
plugin supports these commands. The CDC
software is available from http://renato.bonosoft.it/scope/
XAM gets ASCOM mounting type,
format single digit of 0, 1, or 2
XgF gets focusing fast speed
in deg/sec, format 999
Xgf gets focusing slow speed
in arcsec/sec, format 999
Xgp gets focuser position,
format 9999
XsF sets focusing fast speed
in deg/sec, format 999
Xsf sets focusing slow speed
in arcsec/sec, format 999
XGG get guiding rate in
arcseconds per second, format 9999
XGR get field rotation in
degrees, format 999.99
XHa through XHt set
handpadMode
XHL simulate press of handpad
left mode key
XHR simulate press of handpad
right mode key
XI1 initialize #1 with
current altazimuth and input equatorial coordinates
XI2 initialize #2 with current
altazimuth and input equatorial coordinates
XI3 initialize #3 with
current altazimuth and input equatorial coordinates
XS set guiding rate in
arcseconds per second, format 9999
XN set object name
XP getPierSide, format single
digit 0 (east side facing west) or 1 (west side facing east)
XX unused in Scope II; used
in scope.exe for clearing the LX200 display area
XZ<cmd_scope...># used
to encapsulate a cmd_scope command
Here is the list of
recognized LX200 commands, including the custom commands:
|
Standard commands: ack alignAltaz alignLand alignPolar reticle distance focusOut focusIn focusQuit focusSetFast focusSetSlow getRa getDec getAlt getAz getSidT getLocalT24 getLocalT12 getSiteName getMinQualityFind getDate getClockStatus getLat getLongitude getTz getField timeQuartz LI setNGCLibrary setStarLibrary nudgeGuideNorth |
nudgeGuideSouth nudgeGuideEast nudgeGuideWest moveDirRateNorth moveDirRateSouth moveDirRateEast moveDirRateWest startSlew stopSlew stopMotionNorth stopMotionSouth stopMotionEast stopMotionWest setMotionRateGuide setMotionRateCenter setMotionRateFind setMotionRateSlew setRate1 (Rates 2-9 not
supported) setRa setDec setField setCurrentHigherLimit setSidT setLocalT setDate setGMTOffset setSiteNumber_S setLat setLongitude setBrightMagLimitFind setFaintMagLimitFind largeSizeLimitFind |
smallSizeLimitFind nextMinQualityFind setTypeStringForFind swCommand sync setSiteNumber_W toggleLongFormat getFirmwareIDString getFirmwareDate getProductName Custom commands: getASCOMmountType getFocusFastDegSec getFocusSlowArcsecSec getFocusPos setFocusFastDegSec setFocusSlowArcsecSec getGuideArcsecSec setGuideArcsecSec setHandpadMode handpadLeftKey handpadRightKey setInit1 setInit2 setInit3 sendFieldR setObjectName getPierSide clearDisplay stringCommand |
Interfacing
with other programs
Scope II acts as a generic
Meade LX200 telescope, so any program that is compliant with ASCOM, or,
includes a LX200 telescope driver, can interact with Scope II. To configure, see the section Configuring for ASCOM/ external LX200
control.
Scope II interfaces with
Guide, a planetarium program by Project Pluto (
Configure Guide by going to
Settings, then Scope Control. Select an unused comm port, and pick
'altaz'. This is a special driver option for Scope II and the DOS stepper
version scope.exe. You will see a new
drop down menu option appear, "Scope Pad". Select it.
Configure Scope II by editing the following lines in scope.cfg:
[*** external program
interface section ***]
ProjectPlutoGuidePath C:\GUIDE8\
ProjectPlutoGuideExec guide8.exe
To send coordinates from
Guide to Scope II, select 'slew scope' on the scope pad menu. To receive
coordinates into Guide from Scope II,
select 'slew guide'. All actions
in Scope II are automatic: nothing need be done by the user.
The interfacing files are
located typically in the controlling planetarium program subdirectory, pointed
to by scope.cfg’s ProjectPlutoGuidePath variable, ie, c:\guide8\
The file that is used to read
in coordinates from the controlling planetarium program is called slew.dat and
has two lines with the following format:
R
<Ra degrees>
D
<Dec degrees>
The file that is used to
write coordinates to the controlling planetarium program is called slew_out.dat
and has one line with the following format:
R
<Ra degrees> <Dec degrees>
Any controlling program can
thus add a little software to communicate with ScopeII in this manner.
Status Pages Across the WAN
Browsable status pages are
viewable across the LAN, and WAN if security permits. To turn on the display, set updateHTMLFreqSec
in scope.cfg to an appropriate update value, typically 1-5 seconds. Or, use cmd_scope html_update_freq 1. Browse to status.html and servoStatus.html in
the local directory that Scope II is running within.

The handpad is used
extensively for advanced operations that are best executed at the eyepiece or
in front of the imaging device’s control computer.
Several handpad designs are
supported. These are:
handpadDesignStandard: the
standard design as originated in scope.exe, with 4 direction buttons, a speed
switch, and 2 mode keys. The four
momentary-on buttons move the scope in altitude and azimuth. The center switch
selects between fast slewing and slow centering. The upper two momentary
switches select different actions based on the software's current handpad
status. 'Left' is the left mode key, and 'right' is the right mode key.
handpadDesignDirectionOnly:
handpad contains only 4 direction buttons, but the telescope can be commanded
to move in two axes at once, unlike the standard design.
handpadDesignSiTech: uses
handpads designed by Sidereal Technology, including wireless. Here, the middle switch, the speed setting,
is replaced with a push button.
Momentarily press the button to toggle the speed setting. Unlike the handpadDesignStandard design, the
telescope can be commanded to move in two axes at once. The handpad jumper setting on the Sidereal
Technology controller board needs to be set towards the outer edge. This is the jumper’s normal location.
The get keypad button on the
SiTech configuration screen reports the handpad’s state. The keypad return reports logical
values. To see the state of the raw
input ports, use the main ScopeII motor status windows. Look for limit1 and input displays.
SiTech keypad return values for handpad button
presses:
|
Button pressed |
Fast speed toggled |
Slow speed toggled |
Logical value |
|
None |
128 |
144 |
16 |
|
Down |
132 |
148 |
4 |
|
Up |
136 |
152 |
8 |
|
Counterclockwise |
130 |
146 |
2 |
|
Clockwise |
129 |
145 |
1 |
|
Left mode |
192 |
208 |
64 |
|
Right mode |
160 |
176 |
32 |
The handpad can be placed into a number of operational
modes. These are:
handpadModeOff: no special
mode.
handpadModeAutoInit12: works with Scope II’s auto-init method, where Scope II
selects the two best stars to initialize with, then gives instructions in the
Initialization tabbed pane. The scope is
maneuvered by the handpad’s 4 direction buttons, and when the first star is
centered, either left or right mode key is pressed, causing the
initialization. Repeat for star #2.
handpadModeAutoInit123: each
press of the left or right mode key initializing the next position. It is up to the user to position the scope
using the handpad’s direction buttons, and enter the initialization’s
equatorial coordinates via the Get Coordinates window or via a scroll file.
handpadModeInit1: a press of
the left or right mode key initializes position #1. It is up to the user to position the scope
using the handpad’s direction buttons, and enter the initialization’s
equatorial coordinates via the Get Coordinates window or via a scroll file.
handpadModeInit2: a press of
the left or right mode key initializes position #2. It is up to the user to position the scope
using the handpad’s direction buttons, and enter the initialization’s
equatorial coordinates via the Get Coordinates window or via a scroll file.
handpadModeInit3: a press of
the left or right mode key initializes position #3. It is up to the user to position the scope
using the handpad’s direction buttons, and enter the initialization’s
equatorial coordinates via the Get Coordinates window or via a scroll file.
handpadModePolarAlign: step
through the polar align sequence; for more on this, see the polar alignment
sequence instructions
handpadModeAnalyze: a press of the left or right mode key analyzes the current
object’s position. After performing a
goto to the object, center the object in the handpad, then analyze the results. The movement required to center the object
after the goto is recorded as a positioning error that can be used for mount
analysis and to generate error correcting files.
handpadModeGuide: press of
the left mode key places the scope into guiding mode. If the scope is already in guiding mode,
which can occur from an external command channel, then the press of the left
mode key begins the recording of guiding actions for later analysis and
conversion into PEC files. Press of the
right mode key ends the recording of guiding actions. A subsequent press of the right mode key ends
guiding mode. Drift values are
calculated and adopted. At the end of
the guiding mode, the scope is returned to the position at the start of
guiding.
handpadModeGuideStay: as
above, but at the cessation of guiding mode, the guide star is kept centered.
handpadModeGuideStayRotate:
as above, with the 4 direction buttons gradually rotated per the field rotation
angle.
handpadModeGuideStayDrag:
drift or drag values from the scope.cfg file are added to the current drift
when the left mode button is pressed, and subtracted from the current drift
values when the right mode switch is pressed; this is for knife edge
autoguiders that rely on the guide star being constantly dragged back across
the knife edge.
handpadModeGuideSiTech: press
of the left mode key places the application in guide mode and the Sidereal
Technology controller into its guide mode.
Here, guiding corrections are sensed through the controller’s handpad
input port, and applied directly by the controller within a couple of
milliseconds as +- velocity changes to the current tracking rate without the
application’s mediation. The eliminates
servo lag. The application passively
deduces the controller’s guiding corrections, while continuing to pass to the
controller all the available error correction such as periodic errors, mounting
alignment errors, and pointing model corrections. Press of the right mode key takes the
application out of guide mode and returns the Sidereal Technology controller to
normal operating mode.
handpadModeGrandTour: mode
keys are used to move forward or backwards through an already loaded grand tour
file: left key advances and right key slews back to previous object.
handpadModeScrollTour: with
an already loaded scroll tour file, left key moves onto next command (which can
be a command to turn on autoscrolling), right key returns to previous command.
handpadModeScrollTourAuto:
with an already loaded scroll tour file, left key turns on autoscrolling and
right key ends autoscrolling.
handpadModeRecordEquat: a
mode key press will write the current scope equatorial coordinates to the
scope.equat file: either left or right mode key can be used.
handpadModeRecordAltaz: a
mode key press will write the current scope altazimuth coordinates to the
scope.altaz file: either left or right mode key can be used.
handpadModeToggleTrack: left
mode key turns on tracking, right mode key turns off tracking.
handpadModeFRFocus: left mode
key press turns on field rotation/focus control via the 4 direction buttons, and
right mode key press ends the 4 direction button control of field rotation and
focus. The Up/down direction buttons
operate the field rotation motor while the clockwise/counterclockwise buttons
operate the focus motor.
handpadModeSpiralSearch: left
mode key begins spiral search, right mode key ends search.


(Copyright Sidereal
Technology)
If scope cannot find a
configuration file, it will generate a default configuration file. To generate
a default configuration file, start, then exit the program. You can also
generate a default configuration by running java scope in test mode, and
selecting test option 'cfg'.
Here are all the
configuration options
Configuration parameters
|
siteName |
geographic
location's name |
|
latitudeDeg |
geographic
location's latitude in decimal degrees |
|
longitudeDeg |
geographic
location's longitude in decimal degrees; positive values indicates west of |
|
mountType |
mounting
type, options are: |
|
canMoveToPole |
if
the telescope can point at the pole, then set this value to 'true', else
'false' |
|
canMoveThruPole |
if
the telescope can swing through the pole into the sub-polar region, then set
this value to 'true', else 'false' |
|
primaryAxisFullyRotates |
if
the mount's primary axis can rotate through a full circle, then set this
value to 'true', else 'false' |
|
meridianFlipPossible |
if
a meridian flip is possible, then set this value to 'true', else 'false' |
|
meridianFlipRequired |
if
a flip is required when the telescope crosses the meridian, then set this
value to 'true', else 'false' |
|
autoMeridianFlip |
automatically
flip the telescope if crossing the meridian; true/false |
|
autoMeridianFlipFuzzDeg |
distance
that scope can track past the meridian before engaging the meridian flip, in
decimal degrees |
|
eyepieceFocus |
an
eyepiece's name and focus position |
|
handpadPresent |
if
handpad is connected to the PIC servo control boards, then 'true' else
'false' |
|
handpadMode |
starting
handpad mode, options are: handpadModeGuideSiTech |
|
handpadDesign |
starting
handpad direction button meaning, options are: |
|
handpadFlipUpDown |
reverse
the up/down handpad buttons |
|
handpadFollowMeridianFlip |
flip
handpad's up/down buttons if meridian flipped since declination direction
inverted when meridian flipped |
|
SiTechRampDownDelaySec |
ramp
down delay after releasing a handpad direction button: prevents the scope
from back tracking |
|
spiralSearchRadiusDeg |
spiral
search pattern's radius, or, the distance between spiral sweeps |
|
spiralSearchSpeedDegSec |
speed
at which to traverse the spiral search pattern |
|
initState |
starting
initialization state, options are: |
|
initOne |
let
the program enter these values; initialization one coordinate values, ie,
'0.0 90.0 44.0 0.0 0.0' |
|
initTwo |
let
the program enter these values; initialization two coordinate values, ie,
'0.0 90.0 44.0 0.0 0.0' |
|
initThree |
let
the program enter these values; initialization three coordinate values, ie,
'0.0 90.0 44.0 0.0 0.0' |
|
z1Deg |
axis
misalignment error in decimal degrees |
|
z2Deg |
azimuth
offset error in decimal degrees |
|
z3Deg |
altitude
offset error in decimal degrees |
|
dataFileCoordYear |
coordinate
year for the data files |
|
precessionNutationAberration |
turn
on/off precession, nutation, and annual aberration corrections, particularly
when reading the data files |
|
refractAlign |
mount
alignment to use to calculate refraction, options are: |
|
backlashActive |
'true'
if backlash correction active, otherwise 'false' |
|
useAltAzEC |
'true'
if using altitude vs azimuth axis error correction, otherwise 'false' |
|
useAltAltEC |
'true'
if using altitude vs altitude axis error correction, otherwise 'false' |
|
useAzAzEC |
'true'
if using azimuth vs azimuth axis error correction, otherwise 'false' |
|
usePMC |
'true'
if using pointing model error correction, otherwise 'false' |
|
buildPEC |
how
to build PEC file, format: servoID description motorStepsPerPECArray PECSize
guidingCycles Rotation PECIxOffset |
|
guideDragRaArcsecPerMin |
Right
Ascension drag in arcseconds per minute of time so that guiding corrections
occur in one direction when handpadMode is handpadModeGuideStayDrag |
|
guideDragDecArcsecPerMin |
Declination
drag in arcseconds per minute of time so that guiding corrections occur in
one direction when handpadMode is handpadModeGuideStayDrag |
|
handpadUpdateDrift |
if
'true', then adopt drift values as calculated from guiding efforts, else
'false' |
|
driftRaDegPerHr |
drift
in Right Ascension in degrees per hour |
|
driftDecDegPerHr |
drift
in Declination in degrees per hour |
|
encoderType |
encoder
interface box type, options are: |
|
encoderIOType |
what
type of IO method to use for the encoders, options are: |
|
encoderSerialPortName |
serial
port to use for the encoders, ie, 'COM1' if Windows, '/dev/ttyS0' if Linux' |
|
encoderBaudRate |
serial
port baud rate for encoders |
|
encoderHomeIPPort |
if
using UDP method for the encoders, then the home port# to use |
|
encoderRemoteIPName |
if
using UDP or TCP method for the encoders, then the remote machine's IP
address |
|
encoderRemoteIPPort |
if
using UDP or TCP method for the encoders, then the remote machine's port# |
|
encoderFileLocation |
if
using files to transmit/receive, then location of the files |
|
encoderTrace |
record
all communications to trace file |
|
encoderAltDecCountsPerRev |
altitude
axis encoder counts per shaft revolution |
|
encoderAzRaCountsPerRev |
azimith
axis encoder counts per shaft revolution |
|
encoderAltDecDir |
direction
that altitude axis encoder counts increment, options are: |
|
encoderAzRaDir |
di |