2018-01-15 11:28:14 +01:00
2017-01-27 11:23:31 +01:00
2017-06-12 09:51:02 +02:00
2017-11-08 14:48:02 +01:00
2017-12-22 12:12:59 +01:00
2017-12-22 12:12:59 +01:00
2017-12-22 12:12:59 +01:00

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

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()
Motor[1].pLimits=0
Motor[2].pLimits=0
Motor[3].pLimits=0
Motor[4].pLimits=0

Description
No description provided
Readme 10 MiB
Languages
Python 57.2%
C 15.7%
MATLAB 12.5%
TeX 11.3%
Makefile 3.3%