wip 5cam mover

This commit is contained in:
2018-03-29 16:53:23 +02:00
parent c7a3ac8f36
commit 69ffc089bf
11 changed files with 739 additions and 62 deletions

View File

@@ -1,50 +1,96 @@
//5 simulated cam movers
//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
//calibration values such that 0 mdeg is the highest point (+5mm) and 180000mdeg = lowest point (-5mm)
//#1: homeoffset: -20907.5928142
//#2: homeoffset: 102320.329068
//#3: homeoffset: 168946.772022
//#4: homeoffset: -87830.7554146
//#5: homeoffset: -47956.2759182
!encoder_ssi(enc=1,numBits=18,posSf=5625./4096.)
!motor(mot=1,dirCur=1000,JogSpeed=40,servoSf=256./9.,InPosBand=0,FatalFeLimit=1000,HomeOffset=-20907.)
!encoder_ssi(enc=2,numBits=18,posSf=5625./4096.)
!motor(mot=2,dirCur=1000,JogSpeed=40,servoSf=256./9.,InPosBand=0,FatalFeLimit=1000,HomeOffset=102320.)
!encoder_ssi(enc=3,numBits=18,posSf=5625./4096.)
!motor(mot=3,dirCur=1000,JogSpeed=40,servoSf=256./9.,InPosBand=0,FatalFeLimit=1000,HomeOffset=168946.)
!encoder_ssi(enc=4,numBits=18,posSf=5625./4096.)
!motor(mot=4,dirCur=1000,JogSpeed=40,servoSf=256./9.,InPosBand=0,FatalFeLimit=1000,HomeOffset=-87830.)
!encoder_ssi(enc=5,numBits=18,posSf=5625./4096.)
!motor(mot=5,dirCur=1000,JogSpeed=40,servoSf=256./9.,InPosBand=0,FatalFeLimit=1000,HomeOffset=-47956.)
!encoder_sim(enc=1,tbl=1,mot=1)
!motor(mot=1,dirCur=0,contCur=100,peakCur=100,timeAtPeak=1,JogSpeed=8.,numPhase=3,invDir=True)
Motor[1].pLimits=0;Motor[1].AmpFaultLevel=0;Motor[1].pAmpEnable=0;Motor[1].pAmpFault=0
define(SP_RelBrk='15',SP_LockBrk='16')
!encoder_sim(enc=2,tbl=2,mot=2)
!motor(mot=2,dirCur=0,contCur=100,peakCur=1000,timeAtPeak=1,JogSpeed=8.,numPhase=3,invDir=True)
Motor[2].pLimits=0;Motor[2].AmpFaultLevel=0;Motor[2].pAmpEnable=0;Motor[2].pAmpFault=0
// ---------- Custom Motion Programs ----------
!encoder_sim(enc=3,tbl=3,mot=3)
!motor(mot=3,dirCur=0,contCur=100,peakCur=1000,timeAtPeak=1,JogSpeed=8.,numPhase=3,invDir=True)
Motor[3].pLimits=0;Motor[3].AmpFaultLevel=0;Motor[3].pAmpEnable=0;Motor[3].pAmpFault=0
!cm_prem_post(ax=1,prem=15,post=16) //generates subprog 10,11,12,13
!cm_prem_post(ax=2,prem=15,post=16) //generates subprog 20,21,22,23
!cm_prem_post(ax=3,prem=15,post=16) //generates subprog 30,31,32,33
!cm_prem_post(ax=4,prem=15,post=16) //generates subprog 40,41,42,43
!cm_prem_post(ax=5,prem=15,post=16) //generates subprog 40,41,42,43
!encoder_sim(enc=4,tbl=4,mot=4)
!motor(mot=4,dirCur=0,contCur=100,peakCur=1000,timeAtPeak=1,JogSpeed=8.,numPhase=3,invDir=True)
Motor[4].pLimits=0;Motor[4].AmpFaultLevel=0;Motor[4].pAmpEnable=0;Motor[4].pAmpFault=0
!cm_prem_post(ax='X',axid=9,prem=15,post=16) //generates subprog 90,91,92,93
!cm_prem_post(ax='Y',axid=10,prem=15,post=16) //generates subprog 100,101,102,103
!cm_prem_post(ax='U',axid=11,prem=15,post=16) //generates subprog 110,111,112,113
!cm_prem_post(ax='V',axid=12,prem=15,post=16) //generates subprog 120,121,122,123
!cm_prem_post(ax='W',axid=13,prem=15,post=16) //generates subprog 120,121,122,123
!encoder_sim(enc=5,tbl=5,mot=5)
!motor(mot=5,dirCur=0,contCur=100,peakCur=1000,timeAtPeak=1,JogSpeed=8.,numPhase=3,invDir=True)
Motor[5].pLimits=0;Motor[5].AmpFaultLevel=0;Motor[5].pAmpEnable=0;Motor[5].pAmpFault=0
// ---------- PREM POST Programs ----------
//prem
open subprog SP_RelBrk
define(EndTime='L1'); // Local variable
Motor[1].IdCmd=1000;Motor[1].InPosBand=2
Motor[2].IdCmd=1000;Motor[2].InPosBand=2
Motor[3].IdCmd=1000;Motor[3].InPosBand=2
Motor[4].IdCmd=1000;Motor[4].InPosBand=2
Motor[5].IdCmd=1000;Motor[5].InPosBand=2
PowerBrick[1].GpioData[0].16.5=$1f
//send 1"wait\n"
//EndTime = Sys.Time + .1; // time + 10 sec.
//while (EndTime > Sys.Time){}
//send 1"wait done\n"
close
//post
open subprog SP_LockBrk
define(EndTime='L1'); // Local variable
//wait until all motors are in pos
EndTime = Sys.Time + 10; // time + 10 sec.
//send 1"wait."
while (EndTime > Sys.Time)
{
if(Coord[1].InPos)
{
send 1"inPos\n"
break
}
//if(Motor[1].InPos && Motor[2].InPos&& Motor[3].InPos&& Motor[4].InPos&& Motor[5].InPos)
// break
//send 1"."
}
//send 1"done\n"
Motor[1].IdCmd=0;Motor[1].InPosBand=10
Motor[2].IdCmd=0;Motor[2].InPosBand=10
Motor[3].IdCmd=0;Motor[3].InPosBand=10
Motor[4].IdCmd=0;Motor[4].InPosBand=10
Motor[5].IdCmd=0;Motor[5].InPosBand=10
PowerBrick[1].GpioData[0].16.5=$0
close
// //NEW:
// //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
// //JogSpeed=102.4 ustep/ms=102400ustep/s = 512*200= 1 rev/sec
// posSf : position scale factor: encoder position to motor u-steps, 1 motor step is 512 motor u-steps
// motor_u_steps=posSf*encoder_steps -> posSf = motor_u_steps/encoder_steps
// default is 1.0 (1 motor_u_steps = 1 encoder_steps)
//for motor #2
//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)
// !encoder_ssi(enc=1,numBits=18,posSf=39.0625)
// !encoder_ssi(enc=2,numBits=18,posSf=39.0625)
// !encoder_ssi(enc=3,numBits=18,posSf=39.0625)
// !encoder_ssi(enc=4,numBits=18,posSf=39.0625)
// !encoder_ssi(enc=5,numBits=18,posSf=39.0625)
// !motor(mot=1,dirCur=600,JogSpeed=102.4)
// !motor(mot=2,dirCur=600,JogSpeed=102.4)
// !motor(mot=3,dirCur=600,JogSpeed=102.4)
// !motor(mot=4,dirCur=600,JogSpeed=102.4)
// !motor(mot=5,dirCur=600,JogSpeed=102.4)
// !cm_brake(mot=1,curOn=600,cs=1,delay=200,gpio=16)
// !cm_brake(mot=2,curOn=600,cs=1,delay=200,gpio=17)
// !cm_brake(mot=3,curOn=600,cs=1,delay=200,gpio=18)
// !cm_brake(mot=4,curOn=600,cs=1,delay=200,gpio=19)
// !cm_brake(mot=5,curOn=600,cs=1,delay=200,gpio=20)

19
cfg/MX3_setup_sim.cfg Normal file
View File

@@ -0,0 +1,19 @@
!encoder_sim(enc=1,tbl=1,mot=1)
!motor(mot=1,dirCur=0,contCur=100,peakCur=100,timeAtPeak=1,JogSpeed=100.,numPhase=3,invDir=True)
Motor[1].pLimits=0;Motor[1].AmpFaultLevel=0;Motor[1].pAmpEnable=0;Motor[1].pAmpFault=0
!encoder_sim(enc=2,tbl=2,mot=2)
!motor(mot=2,dirCur=0,contCur=100,peakCur=1000,timeAtPeak=1,JogSpeed=100.,numPhase=3,invDir=True)
Motor[2].pLimits=0;Motor[2].AmpFaultLevel=0;Motor[2].pAmpEnable=0;Motor[2].pAmpFault=0
!encoder_sim(enc=3,tbl=3,mot=3)
!motor(mot=3,dirCur=0,contCur=100,peakCur=1000,timeAtPeak=1,JogSpeed=100.,numPhase=3,invDir=True)
Motor[3].pLimits=0;Motor[3].AmpFaultLevel=0;Motor[3].pAmpEnable=0;Motor[3].pAmpFault=0
!encoder_sim(enc=4,tbl=4,mot=4)
!motor(mot=4,dirCur=0,contCur=100,peakCur=1000,timeAtPeak=1,JogSpeed=100.,numPhase=3,invDir=True)
Motor[4].pLimits=0;Motor[4].AmpFaultLevel=0;Motor[4].pAmpEnable=0;Motor[4].pAmpFault=0
!encoder_sim(enc=5,tbl=5,mot=5)
!motor(mot=5,dirCur=0,contCur=100,peakCur=1000,timeAtPeak=1,JogSpeed=100.,numPhase=3,invDir=True)
Motor[5].pLimits=0;Motor[5].AmpFaultLevel=0;Motor[5].pAmpEnable=0;Motor[5].pAmpFault=0

View File

@@ -1,5 +1,32 @@
!MX3_setup()
//!MX3_setup_sim() // comment out !MX3_setup() when this is active
//!MX3_home()
//using 360000 for 1 rev. -> 1.7453292519943296e-05=np.pi/180000
!MX3_coordTrf(exc=1000,height=2000,width=3000,length=4000,camSf=1.7453292519943296e-05)
//excentricity= 5mm
//height = 2mm ?
//width = 50cm ?
//length = 100cm ?
!MX3_coordTrf(exc=5000,height=2000,width=500000,length=1000000,camSf=1.7453292519943296e-05)
Coord[1].Ta=10
Coord[1].Td=10
Coord[1].AltFeedRate=1000
Coord[1].Tm=-10000 //1000um/FeedTime -> 1mm/sec
Coord[1].FeedTime=1000 //default value 1000um
Motor[1].InPosBand=10
Motor[2].InPosBand=10
Motor[3].InPosBand=10
Motor[4].InPosBand=10
Motor[5].InPosBand=10
#1..5hmz
#1..5j/
&1
cpx call 16 //lock brakes, motor current off

View File

@@ -1,6 +1,6 @@
//simulated 8 motors without needing real ones
$$$***
!common()
//$$$***
//!common()
//use some step and direction lines to setup simulate motors
// /afs/psi.ch/user/h/humar_t/public/Modules/XMI/cfg/xmi.cfg