596 lines
13 KiB
Markdown
596 lines
13 KiB
Markdown
Various motor documents
|
|
-----------------------
|
|
- /home/zamofing_t/Documents/doc-ext/SwissFEL/ESB-MX-Stage
|
|
|
|
Parker stage
|
|
------------
|
|
```
|
|
- encoder is incremental encoder
|
|
25mm or 50mm travel stage
|
|
Stall Current Continuous 0.8
|
|
Peak Current Amps RMS 2.4 (->sqrt(2)*2.4=3.39A_peak)
|
|
Resistance Ohms 8.8
|
|
Inductance mH 2.4
|
|
Max.BuxVoltage V 80
|
|
|
|
Continous Force 4N -> assume 1kg load -> acceleration=a=F/m=4m/s^2
|
|
Weight top stage: 250g=2.5N
|
|
```
|
|
|
|
|
|
Mecapion rot stage
|
|
------------------
|
|
```
|
|
http://www.lsmecapion.com/eng/
|
|
http://www.lsmecapion.com/eng/contents/sub01/sub02_03.php
|
|
http://www.a2v.fr/program/mdm-dc06d.htm
|
|
http://www.parkem.ch/medien/produkte/direktantriebstechnik/pdf/MDM_Rundtisch_katalog.pdf
|
|
http://www.goto.si/wp-content/uploads/2016/kat/L7%20Series%20catalog.pdf
|
|
http://farasys.ir/wp-content/uploads/2015/Direct%20Drive%20Rotary%20Motors.pdf
|
|
http://www.inmoco.co.uk/Upload/product/1037_DD_Series_Motors_79.pdf
|
|
|
|
- encoder is biss 20 bit
|
|
- Rated Current 1.46 Arms
|
|
- Max Current 4.38 Arms
|
|
- 32 pole (16 einraster per rev)
|
|
```
|
|
|
|
Testing ServoFrq.
|
|
-----------------
|
|
```
|
|
!common(PhaseFreq=20000,PhasePerServo=4) -> 25000points, 20um error leads the trajectory in x
|
|
!common(PhaseFreq=20000,PhasePerServo=2) -> 25000points, 6.6um error
|
|
!common(PhaseFreq=20000,PhasePerServo=1) -> 25000points, 6.1um error ossilates in y, x is quite good
|
|
|
|
-> the servo loop has to be optimized!
|
|
```
|
|
|
|
Testing linear,pvt,spline moves
|
|
-------------------------------
|
|
```
|
|
Tested with shapepath.py: THE BEST TRAJECTORY RESULT IST WITH PVT MOTION
|
|
```
|
|
|
|
|
|
Optimize/Test Parameters with Parker Stage
|
|
------------------------------------------
|
|
```
|
|
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg
|
|
gpasciiCommander --host SAR-CPPM-EXPMX1 -i
|
|
!mx-stage()
|
|
#1..3$
|
|
&1
|
|
#1..3j/
|
|
|
|
load program prg/testPerfGrid.prg
|
|
b2r
|
|
|
|
cd ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/src/usrServo
|
|
make #will install the user servo loop
|
|
watch P3000 (average following error)
|
|
tweak servo parameters ->!motor_servo(mot=3,ctrl='ServoCtrl',Kp=20,Kvfb=220,Ki=0.02,Kvff=240,Kaff=1500,MaxInt=1000)
|
|
|
|
Same for motor 2 -> watcp P2000
|
|
Increase load will need an increase of gains to compensate following error
|
|
|
|
Motor[2].Servo.Kp=20
|
|
Motor[2].Servo.Kvfb=1000
|
|
Motor[2].Servo.Ki=0.07
|
|
Motor[2].Servo.Kvff=1000
|
|
Motor[2].Servo.Kaff=4000
|
|
|
|
|
|
Motor[3].Servo.Kp=20
|
|
Motor[3].Servo.Kvfb=220
|
|
Motor[3].Servo.Ki=0.02
|
|
Motor[3].Servo.Kvff=240
|
|
Motor[3].Servo.Kaff=1500
|
|
|
|
./shapepath.py --yx
|
|
average error x 0.313575 um, y 0.461707 um, 0.629583 um
|
|
|
|
./shapepath.py
|
|
average error x 0.371877 um, y 0.317152 um, 0.542073 um
|
|
```
|
|
|
|
Start motion on external signal
|
|
-------------------------------
|
|
```
|
|
open plc 1
|
|
Coord[1].DesTimeBase=0 // freezes timebase at boot
|
|
while(1)
|
|
{
|
|
if(PowerBrick[0].GpioData[0].0.1==1)
|
|
{
|
|
PowerBrick[0].GpioData[0].16.8=255
|
|
Coord[1].DesTimeBase=Sys.ServoPeriod
|
|
}
|
|
else
|
|
{
|
|
PowerBrick[0].GpioData[0].16.8=7
|
|
Coord[1].DesTimeBase=0
|
|
}
|
|
}
|
|
close
|
|
enable plc 1
|
|
-> run motion program. press gpio 0 to run at 100%
|
|
|
|
```
|
|
|
|
29.9.17 Testing in MX-LAB
|
|
-------------------------
|
|
```
|
|
Start the powerbrick. ioc is started automatically
|
|
zamofing_t@ganymede:~$ ssh x06mx-cons-1
|
|
|
|
caget SAR-ESB_MX:MOTOR_AX
|
|
cd /net/slsfs-crtl/export/sf/common/config/qt/
|
|
startDM -macro 'P=SAR-ESB_MX' ESB_MX_exp
|
|
press homing button
|
|
-> all axes can be moved.
|
|
|
|
(on thierrys laptop only)
|
|
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python
|
|
./shapepath.py
|
|
will execute the custom motion. No problems with EPICS
|
|
|
|
(on other machines)
|
|
module is installed in:
|
|
ls /net/slsfs-crtl/export/sf/ioc/modules/ESB_MX/zamofing_t/R3.14.12/
|
|
PATH=/net/slsfs-crtl/export/sf/controls/bin/:$PATH
|
|
source /opt/gfa/python-2.7/2.3.0/bin/activate xblpython > /dev/null 2>&1
|
|
cd /net/slsfs-crtl/export/sf/ioc/modules/ESB_MX/zamofing_t/R3.14.12/
|
|
./shapepath.py
|
|
|
|
```
|
|
|
|
|
|
export EPICS_CA_ADDR_LIST="129.129.109.255"
|
|
export EPICS_CA_ADDR_LIST="129.129.126.255"
|
|
caQtDm -macro 'P=SAR-ESB_MX' ESB_MX_exp
|
|
|
|
HelicalScan
|
|
-----------
|
|
```
|
|
PPMAC=MOTTEST-CPPM-CRM0485
|
|
|
|
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX
|
|
PBInspect --host $PPMAC --cfg PBInspect1.pbi
|
|
|
|
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg
|
|
gpasciiCommander --host $PPMAC sim_8_motors.cfg -i
|
|
|
|
ssh root@$PPMAC
|
|
sendgetsends -1
|
|
cpx send 1"SampleMessage\n"
|
|
|
|
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python
|
|
./helicalscan.py
|
|
```
|
|
|
|
fwd/inv kinematic stuff
|
|
-----------------------
|
|
```
|
|
Coord[1].SegMoveTime=.05, will calculate all 0.05 sec the inverse kinematic.
|
|
default Coord[1].SegMoveTime=0, calculates inv kin. only at endpoints
|
|
|
|
&1p ->this will trigger:forward kinematic
|
|
cpx pmatch ->this will trigger:forward kinematic
|
|
|
|
cpx ;linear rel; X0Y0Z0B0 ->this will trigger: inverse
|
|
|
|
test_coord_trf() (w is in mdeg) -> Output:
|
|
input : cx:0.2 cz:0.3 w:5729.58 fy:0.4
|
|
fwd_trf: dx:-1.14768 dz:-19.0991 w:5729.58 fy:0.4
|
|
inv_trf: cx:0.2 cz:0.3 w:5729.58 fy:0.4
|
|
|
|
input : dx:0.2 dz:0.3 w:5729.58 fy:0.4
|
|
inv_trf: cx:1.54768 cz:19.6991 w:5729.58 fy:0.4
|
|
fwd_trf: dx:0.2 dz:0.3 w:5729.58 fy:0.4
|
|
|
|
#4j=0.2 //cx
|
|
#5j=0.3 //cz
|
|
#3j=5729.58 //w
|
|
#1j=0.4 //fy
|
|
&1p
|
|
forward kinematic 0.199997 0.300003 5729.58 0.399994
|
|
forward result -1.14769 -19.0991 5729.58 0.399994
|
|
|
|
cpx ;linear abs; X.2Y.4Z.3B5729.58
|
|
inverse kinematic 0.2 0.3 5729.58 0.4
|
|
inverse result 1.54579 19.7026 5729.58 0.4
|
|
|
|
|
|
input : cx:10 cz:20 w:171887 fy:40
|
|
fwd_trf: dx:28.9419 dz:-5.52304 w:171887 fy:40
|
|
inv_trf: cx:10 cz:20 w:171887 fy:40
|
|
#4j=10 //cx
|
|
#5j=20 //cz
|
|
#3j=171887 //w
|
|
#1j=40 //fy
|
|
&1p
|
|
forward kinematic 10 20 171887 40
|
|
forward result 28.942 -5.52296 171887 40
|
|
|
|
input : dx:10 dz:20 w:171887 fy:40
|
|
inv_trf: cx:-8.94193 cz:45.523 w:171887 fy:40
|
|
fwd_trf: dx:10 dz:20 w:171887 fy:40
|
|
|
|
cpx ;linear abs; X10 Z20 B171887 Y40
|
|
inverse kinematic 10 20 171887 40
|
|
inverse result -8.94198 45.523 171887 40
|
|
```
|
|
|
|
Motors final setup 20.12.17
|
|
---------------------------
|
|
```
|
|
SAR-CPPM-EXPMX1: biss:y timing:y
|
|
1: fy
|
|
2: fx
|
|
3: ry
|
|
4: cx
|
|
5: cz
|
|
6: interfero y
|
|
7: interfero x
|
|
|
|
labels:
|
|
MOT_FY EXPMX1.1 MOT_FX EXPMX1.2 MOT_ROT_Y EXPMX1.3 MOT_CX EXPMX1.4 MOT_CZ EXPMX1.5
|
|
ENC_FY EXPMX1.1 ENC_FX EXPMX1.2 ENC_ROT_Y EXPMX1.3 ENC_CX EXPMX1.4 ENC_CZ EXPMX1.5
|
|
IFR_FY EXPMX1.6 IFR_FX EXPMX1.7
|
|
|
|
SAR-CPPM-EXPMX2: biss:n timing:n
|
|
1: wedge1
|
|
2: wedge2
|
|
3: wedge3
|
|
4: wedge4
|
|
5: backlight
|
|
6: cryojet
|
|
|
|
SAR-CPPM-EXPMX3: biss:n timing:y
|
|
1: girder1
|
|
2: girder2
|
|
3: girder3
|
|
4: girder4
|
|
5: girder5
|
|
|
|
|
|
PPMAC=MOTTEST-CPPM-CRM0485
|
|
ssh root@$PPMAC
|
|
cd /ioc/SAR-CPPM-EXPMX1;iocsh startup.script
|
|
sendgetsends -1
|
|
|
|
|
|
ssh x06mx-cons-1
|
|
export CAQTDM_DISPLAY_PATH=/net/slsfs-crtl/export/sf/common/config/qt/:/net/slsfs-crtl/export/sf/controls/config/qt/
|
|
|
|
|
|
export EPICS_CA_ADDR_LIST="129.129.126.255"
|
|
caqtdm -macro "P=SAR-EXPMX" ESB_MX_exp.ui
|
|
|
|
```
|
|
|
|
TODO 5.1.18
|
|
-----------
|
|
```
|
|
Fwd/inv kinematic is not yet fully correct for PVT moves:
|
|
Inverse kinematic need to calculate velocities:
|
|
Now a simplified approach with no dependencies is implemented:
|
|
vqCX=vDX
|
|
vqCZ=vDZ
|
|
vqW=vW
|
|
vqFY=vY
|
|
|
|
To see the differences compare:
|
|
hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=1,cntHor=1,cntVert=5,wRng=(120000,120000),pt2pt_time=100)
|
|
hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=1,cntHor=1,cntVert=5,wRng=(120000,120000),pt2pt_time=100,smt=0)
|
|
|
|
hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=1,cntHor=1,cntVert=5,wRng=(0,360000))
|
|
hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=1,cntHor=1,cntVert=5,wRng=(0,360000),smt=0)
|
|
|
|
When using segmented mode (SegMoveTime>0) the velocities are not needed.
|
|
With SegMoveTime=0 these velocities are needed and will result in a non optimal trajectory (with the current buggy calculation).
|
|
```
|
|
|
|
|
|
Testing Helicalscan with real motors 8.1.18
|
|
-------------------------------------------
|
|
```
|
|
PPMAC=SAR-CPPM-EXPMX1
|
|
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg
|
|
gpasciiCommander --host $PPMAC -i
|
|
|
|
$$$***
|
|
!common()
|
|
!SAR-EXPMX1()
|
|
enable plc 1
|
|
|
|
export EPICS_CA_ADDR_LIST=$PPMAC
|
|
caQtDM -macro 'P=SAR-EXPMX' ESB_MX_exp
|
|
|
|
do homing (or call plc 1)
|
|
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python
|
|
./helicalscan.py
|
|
```
|
|
|
|
|
|
Testing Wedge mover
|
|
-------------------
|
|
```
|
|
PPMAC=SAR-CPPM-EXPMX2
|
|
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX
|
|
PBInspect --host $PPMAC --cfg PBInspect2.pbi
|
|
|
|
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg
|
|
gpasciiCommander --host $PPMAC -i
|
|
$$$***
|
|
!common()
|
|
!SAR-EXPMX2()
|
|
|
|
```
|
|
|
|
```
|
|
!!! WATCH OUT !!!
|
|
if the send buffer overruns, the programs will abort in an unexplainable way:
|
|
send 1"inv_res %f %f %f %f\\n",qCX,qCZ,qW,qFY
|
|
without reading it with sendgetsends -1
|
|
```
|
|
|
|
|
|
5 CAM mover
|
|
-----------
|
|
```
|
|
/home/zamofing_t/Documents/doc-ext/SwissFEL/Devices/5CAM
|
|
/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/5CAM_SYSTEM/
|
|
git@git.psi.ch:epics_ioc_modules/5CAM_SYSTEM.git
|
|
|
|
copied the coordTrf.py from /home/zamofing_t/Documents/doc-ext/SwissFEL/Devices/5CAM
|
|
to /cfg/MX3_coordTrf.py and modify it
|
|
|
|
PPMAC=MOTTEST-CPPM-CRM0485
|
|
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX
|
|
PBInspect --host $PPMAC --cfg PBInspect3.pbi
|
|
|
|
PPMAC=MOTTEST-CPPM-CRM0485
|
|
ssh root@$PPMAC
|
|
sendgetsends -1
|
|
|
|
|
|
|
|
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg
|
|
gpasciiCommander --host $PPMAC -i
|
|
$$$***
|
|
!common()
|
|
!SAR-EXPMX3()
|
|
```
|
|
|
|
5 CAM mover commissioning EH60 27.3.18
|
|
--------------------------------------
|
|
```
|
|
PPMAC=SAROP11-CPPM-MOT6765
|
|
PPMAC=MOTTEST-CPPM-CRM0515
|
|
PBInspect --host $PPMAC
|
|
|
|
gpasciiCommander --host $PPMAC -i
|
|
$$$***
|
|
!common()
|
|
PowerBrick[0].GpioData[0].17=1
|
|
16 fail
|
|
17 ok
|
|
18 fail
|
|
19 ok
|
|
20 fail
|
|
21 fail on box
|
|
22 fail on box
|
|
23 fail on box
|
|
21 fail on box
|
|
|
|
Testing on motor 2
|
|
|
|
$$$***
|
|
!common()
|
|
!encoder_sim(enc=2,tbl=2,mot=2)
|
|
!motor(mot=2,dirCur=1000,JogSpeed=1024)
|
|
!encoder_ssi(enc=2,tbl=10,mot=10,numBits=18)
|
|
|
|
PowerBrick[0].GpioData[0].17=1
|
|
#2j:102400
|
|
PowerBrick[0].GpioData[0].17=0
|
|
#2k
|
|
|
|
#2j:10240000 == 360 deg = 262037.6288 inc = 360000mdeg
|
|
|
|
|
|
//the motor has 512*200*100 usteps per revolution (512 uystep/step, 200 steps/rev 1:100 gear)
|
|
//the ssi-encoder has 2**18=262144 steps per revolution
|
|
|
|
|
|
//motor_u_steps/inc_enc_step=39.0625
|
|
//the ssi-encoder has 2**18=262144 steps per revolution
|
|
|
|
//10240000 ustep == 262144 encCnt == 360deg=360000mdeg
|
|
//posSf = userUnits/encoder_steps=360000/262144=5625./4096.
|
|
//servoSf=motor_u_steps/userUnits 10240000/360000=256./9.
|
|
|
|
|
|
$$$***
|
|
!common()
|
|
!encoder_ssi(enc=2,numBits=18,posSf=5625./4096.)
|
|
!motor(mot=2,dirCur=1000,JogSpeed=40,servoSf=256./9.,HomeOffset=0)
|
|
PowerBrick[0].GpioData[0].17=1
|
|
#2j:360000
|
|
PowerBrick[0].GpioData[0].17=0
|
|
#2k
|
|
!cm_brake(mot=2,curOn=1000,cs=1,delay=200,gpio=17)
|
|
|
|
|
|
|
|
cpx r0=180000;call 20 //motor 2 180deg
|
|
cpx r0=0 ;call 20 //motor 2 0 deg
|
|
|
|
|
|
|
|
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg/
|
|
gpasciiCommander --host $PPMAC -i
|
|
$$$***
|
|
!common()
|
|
!SAR-EXPMX3()
|
|
cpx call 15 //current on, open breaks
|
|
#1..5j=180000
|
|
#1..5j=0
|
|
cpx call 16 //close breaks, current off
|
|
&1
|
|
cpx r0=180000;call 20 //motor 2 180deg
|
|
|
|
open prog 10
|
|
call15
|
|
abslinear
|
|
X(10) Y(0) U(0) V(0) W(0)
|
|
call16
|
|
close
|
|
b10r
|
|
|
|
open prog 11
|
|
call15
|
|
abslinear
|
|
jog1=0
|
|
jog2=0
|
|
jog3=0
|
|
jog4=0
|
|
jog5=0
|
|
call16
|
|
close
|
|
b11r
|
|
|
|
open prog 12
|
|
call15
|
|
abslinear
|
|
jog1=180000
|
|
jog2=180000
|
|
jog3=180000
|
|
jog4=180000
|
|
jog5=180000
|
|
call16
|
|
close
|
|
b12r
|
|
&1p
|
|
```
|
|
|
|
5 CAM coord trf EH60 27.3.18
|
|
----------------------------
|
|
```
|
|
PPMAC=MOTTEST-CPPM-CRM0515
|
|
ssh root@$PPMAC
|
|
sendgetsends -1
|
|
|
|
|
|
open prog 12
|
|
call15
|
|
abslinear
|
|
jog1=180000
|
|
jog2=180000
|
|
jog3=180000
|
|
jog4=180000
|
|
jog5=180000
|
|
call16
|
|
close
|
|
b12r
|
|
&1p
|
|
```
|
|
|
|
5 CAM coord trf EH60 27.3.18
|
|
----------------------------
|
|
```
|
|
PPMAC=MOTTEST-CPPM-CRM0515
|
|
ssh root@$PPMAC
|
|
sendgetsends -1
|
|
|
|
$$$***
|
|
!common()
|
|
!SAR-EXPMX3()
|
|
|
|
|
|
&1p -> execute forward kinematics
|
|
|
|
cpx call 15
|
|
#1..5j=0
|
|
cpx abslinear X(0)Y(0)U(0)V(0)W(0) ->executes inverse kinematic
|
|
cpx call 16
|
|
|
|
|
|
|
|
|
|
L6=2000/3000
|
|
L7=1000/1.41421356237
|
|
L11=L7*sin(L1*1.74532925199e-05)
|
|
L12=L7*sin(L2*1.74532925199e-05)
|
|
L13=L7*sin(L3*1.74532925199e-05)
|
|
L14=L7*sin(L4*1.74532925199e-05)
|
|
L15=L7*sin(L5*1.74532925199e-05)
|
|
|
|
|
|
$$$***
|
|
!common()
|
|
!SAR-EXPMX3()
|
|
&1
|
|
#1..5j/
|
|
#1..5hmz
|
|
|
|
open prog 1
|
|
//homez1..5
|
|
call 15
|
|
jog1..5=0
|
|
call 16
|
|
L0 = Sys.Time + 2
|
|
while (L0 > Sys.Time){}
|
|
call 15
|
|
jog1..5=180000
|
|
call 16
|
|
call 15
|
|
abslinear X(1000)Y(0)U(0)V(0)W(0)
|
|
dwell 100
|
|
abslinear X(0)Y(1000)U(0)V(0)W(0)
|
|
dwell 100
|
|
abslinear X(0)Y(0)U(0)V(0)W(0)
|
|
dwell 100
|
|
jog1..5=0
|
|
call 16
|
|
close
|
|
b1r
|
|
cpx call15;abslinear X(1000)Y(0)U(0)V(0)W(0);call16;
|
|
cpx call15;jog1..5=0;call16;
|
|
```
|
|
|
|
|
|
|
|
towards IOC 29.3.18
|
|
-------------------
|
|
```
|
|
PPMAC=MOTTEST-CPPM-CRM0515
|
|
ssh root@$PPMAC
|
|
cd /ioc/SAR-CPPM-EXPMX3
|
|
iocsh startup.script
|
|
dbl
|
|
|
|
export EPICS_CA_ADDR_LIST="129.129.126.255"
|
|
|
|
export EPICS_CA_ADDR_LIST=$PPMAC
|
|
caQtDM -macro 'P=SAR-EXPMX' ESB_MX_exp
|
|
caQtDM -macro 'P=SAR-EXPMX' ESB_MX_5cam
|
|
|
|
|
|
|
|
|
|
PPMAC=SAR-CPPM-EXPMX2
|
|
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX
|
|
PBInspect --host $PPMAC --cfg PBInspect2.pbi
|
|
|
|
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg
|
|
gpasciiCommander --host $PPMAC -i
|
|
$$$***
|
|
!common()
|
|
!SAR-EXPMX2()
|
|
|
|
|
|
|
|
```
|