From fc944cdc3b0701a9fe285159e606441302c597cc Mon Sep 17 00:00:00 2001 From: Thierry Zamofing Date: Mon, 11 Dec 2023 13:36:10 +0100 Subject: [PATCH] try to enhance CY --- Readme.md | 65 ++++++++++++++++++++++++++++++++++++++++++++--- cfg/MX1_setup.cfg | 22 +++++++++++++--- generate.py | 15 ++++++++++- 3 files changed, 95 insertions(+), 7 deletions(-) diff --git a/Readme.md b/Readme.md index ebc7e13..a777a0b 100644 --- a/Readme.md +++ b/Readme.md @@ -1022,8 +1022,8 @@ FrontUnivOut5 Gate3[1].Chan[1].UserFlag 6 FrontUnivOut6 Gate3[1].Chan[2].UserFlag 7 Event 254 -> Pulser 0 -> FrontUnivOut4 Gate3[1].Chan[0].UserFlag -Event 40 -> Pulser 1 -> FrontUnivOut4 Gate3[1].Chan[1].UserFlag -Event 22 -> Pulser 2 -> FrontUnivOut4 Gate3[1].Chan[2].UserFlag +Event 40 -> Pulser 1 -> FrontUnivOut5 Gate3[1].Chan[1].UserFlag +Event 22 -> Pulser 2 -> FrontUnivOut6 Gate3[1].Chan[2].UserFlag caput SAR-CVME-TIFALL5-EVG0:SoftEvt-EvtCode-SP 254 @@ -1477,7 +1477,66 @@ the cabeling has to change so that it fits as it worked before. SAR-EXPMX:MOT_CX: moves in closed loop, limitswitch +- must be swapped SAR-EXPMX:MOT_CZ: moves in closed loop, limitswitch +- must be swapped SAR-EXPMX:MOT_CY: before commissioning check encoder signal Level TTL? - -> we need the old stage to be able to check and compare each motor step by step. + now working and new stage CY is roughly commissined +``` + +24.11.23 Tweak CY stages +------------------------ +``` +stage without load: slowest open loop motion: +#3out-14 +#3out 15 +(14-15% of nominal curttent ~275mA) + +sometimes stuck and needs up to 35% !!! of nominal current to start mofing againg. +This is the drawback of brushes that do not provide a smooth current switching and continous torque + + +> #3out15 +> Motor[3].ServoOut +Motor[3].ServoOut=290.403002929687489 + +Motor[3].Servo.OutDbOn +Motor[3].Servo.OutDbOff +Motor[3].Servo.OutDbSeed + +Motor[3].Servo.OutDbOn=200 +Motor[3].Servo.OutDbOff=400 +Motor[3].Servo.OutDbSeed=0 + +Motor[3].Servo.OutDbOn=200 +Motor[3].Servo.OutDbOff=400 +Motor[3].Servo.OutDbSeed=200 + +Motor[3].Servo.Kp=50 +Motor[3].Servo.BreakPosErr=5 +Motor[3].Servo.Ki=.0004 + +./PBGatherPlot.py -r2 --ssh_tunnel -p '{"motId":3,"address":"Sys.ServoCount,Motor[{motId}].DesPos,Motor[{motId}].PosError,Motor[{motId}].ServoOut,Motor[{motId}].IaMeas,Motor[{motId}].Integrator"}' + + pp={ + 'openloop':False, + 'file' :fn, + 'motor' :3, + #'amp' :40, # openloop: % of maximal amplitude + 'amp' :100, # closed loop: um amplitude + 'minFrq' :1, + 'maxFrq' :20, + 'tSec' :6., + 'mode' :1, + } + tune.bode_chirp(**pp) + fig=plt.figure(1) + fig.suptitle('CY closedloop 6 sec. 1-20Hz amp=100um') + plt.show() + +./PBGatherPlot.py -r0 --ssh_tunnel + +./PBGatherPlot.py -r3 --ssh_tunnel -p '{"motId":3,"rng":[0,5000 ]}' + +./PBGatherPlot.py -r3 --ssh_tunnel -p '{"motId":3,"rng":[0,2000 ],"wait":0.2, "repeat":3}' -d2 + + ``` diff --git a/cfg/MX1_setup.cfg b/cfg/MX1_setup.cfg index b040dca..36d6996 100644 --- a/cfg/MX1_setup.cfg +++ b/cfg/MX1_setup.cfg @@ -107,9 +107,25 @@ Motor[2].pEncLoss=0 !encoder_inc(enc=3,tbl=3,mot=3,posSf=0.25) !motor_servo(mot=3,ctrl='ServoCtrl',Kp=10,Kvfb=0,Ki=0.0,Kvff=0,Kaff=0,MaxInt=1000,Kfff=0) !motor(mot=3,dirCur=0,contCur=1000,peakCur=2000,timeAtPeak=1,IiGain=1,IpfGain=3,IpbGain=3,JogSpeed=12.,numPhase=2,invDir=False,servo=None,PhasePosSf=0,PhaseFindingDac=0,PhaseFindingTime=0,SlipGain=0,AdvGain=0,PwmSf=10000,FatalFeLimit=3000,WarnFeLimit=1000,InPosBand=10,homing='enc-index') -Motor[3].Servo.Kp=50 -Motor[3].Servo.BreakPosErr=5 -Motor[3].Servo.Ki=.0004 +Motor[3].Servo.Kp=20 +Motor[3].Servo.BreakPosErr=1 +Motor[3].Servo.KBreak=10 +Motor[3].Servo.Ki=0 +Motor[3].Servo.OutDbOn=150 +Motor[3].Servo.OutDbOff=150 + +//Motor[3].Servo.Kp=80 +//Motor[3].Servo.BreakPosErr=0 +//Motor[3].Servo.KBreak=2 +//Motor[3].Servo.Ki=0 +//Motor[3].Servo.OutDbOn=150 +//Motor[3].Servo.OutDbOff=150 + +//Motor[3].Servo.Kp=50 +//Motor[3].Servo.BreakPosErr=5 +//Motor[3].Servo.Ki=.0005 +//Motor[3].Servo.OutDbOn=200 +//Motor[3].Servo.OutDbOff=200 //Stada stage diff --git a/generate.py b/generate.py index a21af68..c5e2cc5 100755 --- a/generate.py +++ b/generate.py @@ -70,7 +70,7 @@ class Generate: 'motLst':( ( 'DESC' , 'M' , 'ADDR' , 'DIR' , 'VELO' , 'HVEL' , 'MRES' , 'PREC' , 'EGU' ) , ( '"Sample F-Trans Y"' , 'MOT_FY' , 1 , 0 , 16 , 2 , 0.001 , 4 , 'mm' ) , - ( '"Sample F-Trans X"' , 'MOT_FX' , 2 , 1 , 16 , 2 , 0.001 , 4 , 'mm' ) , + ( '"Sample F-Trans X"' , 'MOT_FX' , 2 , 0 , 16 , 2 , 0.001 , 4 , 'mm' ) , ( '"Sample C-Trans Y"' , 'MOT_CY' , 3 , 0 , 12 , 4 , 0.001 , 4 , 'mm' ) , ( '"Sample C-Trans X"' , 'MOT_CX' , 4 , 0 , 2 , 2 , 0.001 , 4 , 'mm' ) , ( '"Sample C-Trans Z"' , 'MOT_CZ' , 5 , 0 , 2 , 2 , 0.001 , 4 , 'mm' ) , @@ -215,6 +215,19 @@ runScript $(mrfioc2_DIR)/mrfioc2_evr-PCIe.cmd, "DEVICE=EVR0,EVR_SUBS=$(ESB_MX_DI # https://git.psi.ch/epics_driver_modules/mrfioc2_regDev require mrfioc2_regDev runScript $(mrfioc2_regDev_DIR)/mrfioc2_regDev_pulseID_RX.cmd, "DEVICE=EVR0,SYS=SAR-EXPMX" + +require PB_EXTRA +dbLoadRecords("$(PB_EXTRA_TEMPLATES)motorStatus.db" "SYS=SAR-EXPMX, PORT=PPMAC, M=MOT_FY, M_NO=1") +dbLoadRecords("$(PB_EXTRA_TEMPLATES)motorStatus.db" "SYS=SAR-EXPMX, PORT=PPMAC, M=MOT_FX, M_NO=2") +dbLoadRecords("$(PB_EXTRA_TEMPLATES)motorStatus.db" "SYS=SAR-EXPMX, PORT=PPMAC, M=MOT_CY, M_NO=3") +dbLoadRecords("$(PB_EXTRA_TEMPLATES)motorStatus.db" "SYS=SAR-EXPMX, PORT=PPMAC, M=MOT_CX, M_NO=4") +dbLoadRecords("$(PB_EXTRA_TEMPLATES)motorStatus.db" "SYS=SAR-EXPMX, PORT=PPMAC, M=MOT_CZ, M_NO=5") + +dbLoadRecords("$(PB_EXTRA_TEMPLATES)killOne.db" "SYS=SAR-EXPMX, PORT=PPMAC, M=MOT_FY, M_NO=1") +dbLoadRecords("$(PB_EXTRA_TEMPLATES)killOne.db" "SYS=SAR-EXPMX, PORT=PPMAC, M=MOT_FX, M_NO=2") +dbLoadRecords("$(PB_EXTRA_TEMPLATES)killOne.db" "SYS=SAR-EXPMX, PORT=PPMAC, M=MOT_CY, M_NO=3") +dbLoadRecords("$(PB_EXTRA_TEMPLATES)killOne.db" "SYS=SAR-EXPMX, PORT=PPMAC, M=MOT_CX, M_NO=4") +dbLoadRecords("$(PB_EXTRA_TEMPLATES)killOne.db" "SYS=SAR-EXPMX, PORT=PPMAC, M=MOT_CZ, M_NO=5") ''' tplEXPMX2='''