forked from epics_driver_modules/motorBase
215 lines
6.1 KiB
Plaintext
215 lines
6.1 KiB
Plaintext
Newport ESP300
|
|
==============
|
|
|
|
Serial communication using the GreensSpring XM Octal I/O.
|
|
---------------------------------------------------------
|
|
|
|
The GreensSpring XM Octal I/O has a 16 pin jumper block for each serial port.
|
|
Assume (the manual does not define this) that the jumper pins are numbered
|
|
from, top to bottom, and from left to right; i.e.,
|
|
1 2 3 4
|
|
5 6 7 8
|
|
9 10 11 12
|
|
13 14 15 16
|
|
|
|
Then the "Default jumbering ..." depicted in Fig. 2 of the GreensSpring XM
|
|
Octal I/O manual is jumpered as follows; 1-5, 2-6, 9-13, 10-14.
|
|
|
|
The correct jumpering for the ESP300 is; 1-5, 2-6, 9-13, 10-11, 15-16.
|
|
|
|
|
|
Setting the motor resolution (MRES) field.
|
|
------------------------------------------
|
|
|
|
For DC motors, set MRES to the ESP300's response to the SU? command.
|
|
|
|
If there is no other mechanism (e.g., generic serial record, dumb terminal,
|
|
etc.) to communicate to the ESP300, the response to the SU? command can be
|
|
determined by following this procedure;
|
|
|
|
1 - uncomment the "USR_CFLAGS += -DDEBUG" line in the NewportSrc/Makefile.Vx
|
|
file (This selects the diagnostic messages to be compiled).
|
|
2 - "cd <motor>/motorApp/NewportSrc; gnumake clean; gnumake"; this re-compiles
|
|
the device drivers with the diagnostic messages selected.
|
|
3 - Rebuild your IOC; "cd <IOC>; gnumake".
|
|
4 - Add "drvESP300debug = 4" to the IOC's st.cmd file before "iocInit".
|
|
5 - Connect to the VxWorks shell and reboot the IOC.
|
|
|
|
The VxWorks shell output should contain lines like the following;
|
|
|
|
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
Starting iocInit
|
|
recv_mess(): message = ""
|
|
send_mess(): message = VE?
|
|
recv_mess(): message = "ESP300 Version 3.03 04/13/00"
|
|
send_mess(): message = ZU
|
|
recv_mess(): message = "0H"
|
|
send_mess(): message = 01ST
|
|
send_mess(): message = 02ST
|
|
send_mess(): message = 03ST
|
|
send_mess(): message = 01SU?
|
|
recv_mess(): message = "0.00005101"
|
|
send_mess(): message = 01MD
|
|
recv_mess(): message = "1"
|
|
send_mess(): message = 01TP
|
|
recv_mess(): message = "0.00000"
|
|
send_mess(): message = 01PH
|
|
recv_mess(): message = "18000000H, 7H"
|
|
send_mess(): message = 01MO?
|
|
recv_mess(): message = "0"
|
|
send_mess(): message = 02SU?
|
|
recv_mess(): message = "0.00005101"
|
|
send_mess(): message = 02MD
|
|
recv_mess(): message = "1"
|
|
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
Note the response to the SU? commands and set MRES to that value.
|
|
|
|
6 - Turn off diagnostic messages. Either set drvESP300debug = 0 in the st.cmd
|
|
file (there is a very small amount of CPU overhead associated with leaving
|
|
the diagnostic messages loaded), or go to step #1, and reverse the steps;
|
|
comment out the "USR_CFLAGS += -DDEBUG" line in the NewportSrc/Makefile.Vx,
|
|
etc., etc.,
|
|
|
|
|
|
Newport ESP100
|
|
==============
|
|
|
|
Configuration
|
|
-------------
|
|
|
|
- Unlike the ESP300, the ESP100 must be told what type of motor it is connected
|
|
to. This is done using the "Set Motor Type" command; QM. "QM" arguments are
|
|
as follows:
|
|
0 - motor type undefined (default).
|
|
1 - DC servo motor.
|
|
2 - stepper motor.
|
|
3 - commutated stepper motor.
|
|
4 - commutated brushless DC servo motor.
|
|
After setting the motor type, the value must be saved to non-volatile memory
|
|
using the "SM" command.
|
|
|
|
Example
|
|
-------
|
|
|
|
Setting and saving an ESP100 for use with a DC servo motor driven stage (e.g.,
|
|
850G);
|
|
|
|
1QM 1<CR>
|
|
SM<CR>
|
|
|
|
|
|
Newport MM4000
|
|
==============
|
|
|
|
The MM4000 controller has an approximately 50ms delay before it responds to a
|
|
status query. Hence, it is impossible to get more that a 20 Hz update rate
|
|
from the MM4000; 7 or 8 Hz is attainable. This 50ms delay exists with both
|
|
RS232 and GPIB communication interfaces.
|
|
|
|
|
|
Newport PM500
|
|
=============
|
|
|
|
The PM500 has high and low speed loops. Since the EPICS PM500 device driver
|
|
does not set any of the low speed parameters (i.e., LSIZE, LACCEL, LDECEL, LV),
|
|
the low speed loop feature may interfere with EPICS setting the slew velocity.
|
|
I recommend preventing the PM500 from ever using the low speed velocity loop by
|
|
setting the Low Speed Loop Threshold (LSIZE) to the motor record's Retry
|
|
Deadband field (RDBD).
|
|
|
|
The LSIZE can be set from the EPICS motor record by entering the PM500 command
|
|
in the record's INIT field. LSIZE is in units of either um or arc-sec. For
|
|
example, if your RDBD = 0.123 mm, then set the INIT field to "LSIZE 123.0".
|
|
|
|
|
|
Newport SMC100
|
|
==============
|
|
The SMC100 controller has a fixed baud rate of 57,600. This means that it
|
|
cannot be used with the IP-Octal232. If you want to use it from a vxWorks ioc,
|
|
you will need to connect it via a Moxa or similar. I have tested this code on
|
|
both Linux and Cygwin soft ioc's. The stage I tested it with is a GTS30V.
|
|
Initially, the controller needs to be connected to the stage it will be running,
|
|
and then configured with Newport's software. I used Newport's PC program called
|
|
"SMC100 User Tool", which allows for the controller to set and keep all of the
|
|
settings for the stage.
|
|
|
|
|
|
********************************************************************************
|
|
What's what in this directory
|
|
-----------------------------
|
|
|
|
misc EPICS stuff
|
|
----------------
|
|
NewportRegister.cc
|
|
NewportRegister.h
|
|
|
|
Model 2 asyn driver
|
|
-------------------
|
|
XPSAsynInterpose.c
|
|
XPSAsynInterpose.h
|
|
drvXPSAsyn.c
|
|
drvXPSAsyn.h
|
|
tclCall.cc
|
|
tclCall.h
|
|
|
|
asyn-model-independent
|
|
----------------------
|
|
drvXPSAsynAux.c (non-motor aspects of XPS controller)
|
|
|
|
Model 3 asyn driver
|
|
-------------------
|
|
XPSAxis.cpp
|
|
XPSAxis.h
|
|
XPSController.cpp
|
|
XPSController.h
|
|
SMC100Driver.cpp
|
|
SMC100Driver.h
|
|
SMC100Register.cc
|
|
SMC100Register.h
|
|
|
|
support code common to models 2 and 3
|
|
-------------------------------------
|
|
XPS_C8_drivers.cpp
|
|
XPS_C8_drivers.h
|
|
XPS_C8_errors.h
|
|
strtok_r.c
|
|
strtok_r.h
|
|
Socket.cpp
|
|
Socket.h
|
|
asynOctetSocket.cpp
|
|
|
|
Model 1 device support
|
|
----------------------
|
|
devESP300.cc
|
|
devMM3000.cc
|
|
devMM4000.cc
|
|
devPM500.cc
|
|
|
|
|
|
Model 1 drivers
|
|
---------------
|
|
drvESP300.cc
|
|
drvMM4000Asyn.c
|
|
drvMM4000Asyn.h
|
|
drvMM3000.cc
|
|
drvMM4000.cc
|
|
drvMMCom.h
|
|
drvPM500.cc
|
|
|
|
other - Note the XPS Model 3 driver has built-in trajectory scanning. XPS_trajectoryScan.st is
|
|
- for use with the Model 2 XPS driver.
|
|
-----
|
|
trajectoryScan.h
|
|
xps_ftp.c
|
|
xps_ftp.h
|
|
XPS_trajectoryScan.st
|
|
MM4005_trajectoryScan.st
|
|
|
|
test code
|
|
---------
|
|
XPSGathering.c
|
|
XPSGathering2.c
|
|
XPSGatheringMain.c
|
|
XPSGatheringRegister.c
|