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() ```