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 gpasciiCommander --host $PPMAC mx-stage_sim.cfg -i Coord[1].SegMoveTime=.05 will calculate all 0.05 sec the inverse kinematic. default Coord[1].SegMoveTime=0, calculates inv kin. only at endpoints ssh root@$PPMAC sendgetsends -1 send 1"SampleMessage\n" execute helicalscan.py SCRATCH ------- &1p ->this will trigger:forward kinematic cpx pmatch ->this will trigger:forward kinematic cpx ;linear abs; X0Y0Z0B0 ->this will trigger: inverse #7j=0.1 //cx #8j=0.2 //cy #1j=0.3 //w #2j=0.4 //fx (cx,cz,w,fy) (2.6164986454377614, 17.758728111340563, 0.1, 4.3) (dx,dz,w,y) (0.2, 0.3, 0.1, 4.3) #7j=2.6164986454377614 #8j=17.758728111340563 #1j=5729.578 // 0.1*1000.*360./(2*pi) #2j=4.3 &1p B0.1 X0.2 Y4.3 Z0.3 cpx ;linear abs; X0.2 Z0.3, B0.1 Y4.3 Motor[1,27,8].JogSpeed=8 #1,2,7,8j=10000 cpx ;linear abs; X0.2 Z0.3 B0.1 Y00000 cpx ;linear abs; X0.2 Z0.3 B0.1 Y10000 input : dx:0.2 dz:0.3 w:5.72958 fy:3.3 inv_trf: cx:2.34244 cz:18.2563 w:5.72958 fy:3.3 fwd_trf: dx:0.2 dz:0.3 w:5.72958 fy:3.3 #7j=2.34244;#8j=18.2563;#1j=5729.58;#2j=3.3 &1p ``` 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 ssh x06mx-cons-1 export CAQTDM_DISPLAY_PATH=/net/slsfs-crtl/export/sf/common/config/qt/:/net/slsfs-crtl/export/sf/controls/config/qt/ caqtdm -macro "P=SAR-EXPMX" ESB_MX_exp.ui ``` SCRATCH -------- PPMAC=SAR-CPPM-EXPMX1 gpasciiCommander --host $PPMAC -i $$$*** !common() !SAR-EXPMX1() PPMAC=SAR-CPPM-EXPMX1 PBInspect --host $PPMAC -i Coord[1].SegMoveTime=.05 will calculate all 0.05 sec the inverse kinematic. default Coord[1].SegMoveTime=0, calculates inv kin. only at endpoints ssh root@$PPMAC sendgetsends -1 send 1"SampleMessage\n"