2016-12-08 16:54:05 +01:00
2016-12-08 16:54:05 +01:00
2016-12-08 16:54:05 +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

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

Parker stage

Using IDE

1 detect current sensor direction Motor[1].PhaseOffset 683 Motor[1].PwmSf 2154 2 current bias Motor[1].IaBias=0 Motor[1].IbBias=0 3 Voltage six step Motor[1].PhaseOffset -683 Motor[1].PwmSf -2154 Motor[1].PhasePosSf=2048/(1256213333.3333) 4 Tune Current Loop (Mag=200, dur=50) Motor[1].IiGain 10.5 Motor[1].IpfGain=0 Motor[1].IpbGain=14.7 5 Current six step Motor[1].PhasePosSf=2048/(1161440000.) 6 Phase ref search Motor[1].PhaseFindingDac=160.95 Motor[1].PhaseFindingTime=50

Open Loop

20mm = 1003994 enc_step 20mm = 1'000'000 enc_step -> 20nm/enc step 1 pole= 600'000 enc_step -> 12mm

DONT FORGET <<<<<<<<<<< $$$*** !common()

open loop with encoder counts <<< !encoder_sim(enc=1,tbl=1,mot=1) !encoder_inc(enc=1,tbl=9,mot=9,encctrl=7,posSf=1./1) !motor(mot=1,dirCur=400,contCur=500,peakCur=2400,timeAtPeak=1,IiGain=1,IpfGain=0,IpbGain=2,JogSpeed=1.,numPhase=3,invDir=True) #1j/ #1,9hmz

#1j:2048 -> moves one pole= 600'000 enc_step =12mm

512= 90deg -> check phase *

                          *      o      x                         *      o      x
                        *   *  o   o  x   x                     *   *  o   o  x   x
                      *      o*     xo      x                 *      o*     xo      x
                    *      o    * x    o      x             *      o    * x    o      x
                  *      o      x *      o      x         *      o      x *      o      x

------o------x-----------o------x-----------o------x-----------o------x-----------o------x-----------o------x

  •  o      x *      o      x         *      o      x *      o      x         *      o      x *      o      x
    
    •  o    * x    o      x             *      o    * x    o      x             *      o    * x    o      x
      
      •  o*     xo      x                 *      o*     xo      x                 *      o*     xo      x
        
          • o o x x * * o o x x * * o o x x
        •  o      x                         *      o      x                         *      o      x
          

0 512 1024 1536 2048

scaling encoder etc to um <<< !encoder_sim(enc=1,tbl=1,mot=1,posSf=12000./2048) !encoder_inc(enc=1,tbl=9,mot=9,encctrl=7,posSf=12000./600000) !motor(mot=1,dirCur=400,contCur=500,peakCur=2400,timeAtPeak=1,IiGain=1,IpfGain=0,IpbGain=2,JogSpeed=1.*12000./2048,numPhase=3,invDir=True)

JogSpeed=1.*12000./2048 6um/ms =6mm/s

close the loop with inc-encoder <<< servoSf : motorusteps/userUnits

!encoder_sim(enc=1,tbl=9,mot=9,posSf=12000./2048) !encoder_inc(enc=1,tbl=1,mot=1,encctrl=7,posSf=12000./600000) !motor(mot=1,dirCur=400,contCur=500,peakCur=2400,timeAtPeak=1,IiGain=1,IpfGain=0,IpbGain=2,JogSpeed=6.,numPhase=3,invDir=True,servoSf=2048/12000.)

close the loop with inc-encoder removing direct current<<< servoSf : motorusteps/userUnits

!encoder_inc(enc=1,tbl=1,mot=1,encctrl=7,posSf=12000./600000) !motor(mot=1,dirCur=0,contCur=500,peakCur=2400,timeAtPeak=1,IiGain=1,IpfGain=0,IpbGain=2,JogSpeed=6.,numPhase=3,invDir=True,servoSf=2048/12000.)

ServoOut set value from 0.5099 to -0.5099 (= MaxPosErrKp) when moving at different position Motor[1].Servo.MaxPosErr=1000.0169 Motor[1].Servo.Kp=0.000512 1000.01690.000512=0.5120086528

Motor[1].Servo.Kp=0.0007 Motor[1].Servo.MaxPosErr=1000.0169 1000.0169*0.0007=0.70001183

close the loop with inc-encoder removing direct current<<<

-> the current/speed must be set with that PWM-scale factor

Motor idx 1 3 Motor[x].AdvGain 0.020479999 0 Motor[x].PhasePosSf 0 0.0160000000000000003 Motor[x].PhaseCtrl 6 4 Motor[x].PhaseMode 1 0 Motor[x].PwmSf -15134.891 4309 Motor[x].SlipGain 0.25 0 Motor[x].PhaseFindingDac 0 95.976563 Motor[x].PhaseFindingTime 0 22.586512

AdvGain
PhasePosSf 0 does not work at all -> must be calculated correctly as below PhaseCtrl 6 not working. must be 4 for phase feedback and 6 for direct microstepping PhaseMode 0,1 both are working, should be 0 for 3 phase PwmSf 0 2000 4309 -> the higher, the more torque on error SlipGain 0.25 squeezing PhaseFindingDac 0 no change PhaseFindingTime 0 no change $$$*** !common() !encoder_inc(enc=3,tbl=3,mot=3,encctrl=7,posSf=1./2000) !motor_servo(mot=3,ctrl='ServoCtrl',Kp=4.04241992000, Kvfb=160.436462000,Kvff=160.436462000,Kaff=3184.58182000) !motor(mot=3,numPhase=3,servo=None, homing=None,dirCur=0,contCur=1790,peakCur=5400,timeAtPeak=1,IiGain=1.0628819,IpfGain=0,IpbGain=6.5684085,AdvGain=0,FatalFeLimit=2000,WarnFeLimit=1000,InPosBand=0,PhasePosSf=0.016,PhaseCtrl=6,PhaseMode=1,PwmSf=1000,SlipGain=0,PhaseFindingDac=95,PhaseFindingTime=22) !sh sleep 1 #3j/ !sh sleep 10 #3j:100

#3out10 sets directly the Motor[3].ServoOut value , sets to 10% of Motor[x].MaxDac Motor[3].MaxDac=4526.9282 Out ServoOut iqCmd IqVolts #3out100 -> 4526.9 set to 100 %of Motor[x].MaxDac #3out50 -> 2263.46411 2263.4641 #3out10 -> 452.692822 452.69281

iqMeas=iqCmd if motor is blocked, when motor moves, iqCmd stays and iqMeas drops PwmSf IqCmd iqMeas(when blocked) Motor[3].PwmSf;Motor[3].IqCmd;Motor[3].IqMeas;Motor[3].IqVolts PwmSf=500 IqCmd=2263.4641 IqMeas=232.44925 IqVolts=34406.398 PwmSf=1000 IqCmd=2263.4641 IqMeas=779.05316 IqVolts=34406.398 PwmSf=2000 IqCmd=2263.4641 IqMeas=1944.9929 IqVolts=34406.398 PwmSf=3000 IqCmd=2263.4641 IqMeas=2234.2734 IqVolts=34406.398

Motor[x].PhasePosSf scale factor to convert encoder position to phase position Motor[3].pPhaseEnc=PowerBrick[0].Chan[2].PhaseCapt.a Motor[3].PhaseEncLeftShift=0 Motor[3].PhaseEncRightShift=0 1 rev=2000*256 enc_steps (PowerBrick[0].Chan[2].PhaseCapt)

4 Pole magnet, 2000 enc_steps/rev encoder configured to have 1 enc_step per revolution PhasePosSf=0.016=1/62.5=32/2000= (42048)/(2562000) = (numPolesconst)/(2562000) const=Power PMAC divides a commutation cycle into 2048 parts

Motor[3].PhasePos position of the phase: 0..2048 this does not change if the motor is blocked


origin setup by ide+ tweaks <<< !encoder_inc(enc=3,tbl=3,mot=3,encctrl=7,posSf=1./2000) !motor_servo(mot=3,ctrl='ServoCtrl',Kp=4.04241992000, Kvfb=160.436462000,Kvff=160.436462000,Kaff=3184.58182000) !motor(mot=3,numPhase=3,servo=None, homing=None,dirCur=0,contCur=1790,peakCur=5400,timeAtPeak=1,IiGain=1.0628819,IpfGain=0,IpbGain=6.5684085,AdvGain=0,FatalFeLimit=2000,WarnFeLimit=1000,InPosBand=0,PhasePosSf=0.016,PhaseCtrl=4,PhaseMode=0,PwmSf=4309,SlipGain=0,PhaseFindingDac=95.976563,PhaseFindingTime=22.586512)

#3j/

PowerBrick[0].AdcAmpCtrl = $f00cfe00 $f00cfe00 PowerBrick[0].Chan[0].InCtrl = $47 $47 PowerBrick[0].Chan[0].OutCtrl = $f000001 $f000101 PowerBrick[1].AdcAmpCtrl = $f00cfe00 $f00cfe00 Motor[1].Servo.Kp = 4.0424199 4.0424199 Motor[1].Servo.Kvifb = 0 0 Motor[1].Servo.Kviff = 0 0 Motor[1].Servo.Kvfb = 160.43646 40.951927 Motor[1].Servo.Kvff = 160.43646 40.951927 Motor[1].Servo.Kafb = 0 0 Motor[1].Servo.Kaff = 3184.5818 207.48897 Motor[1].Servo.Ki = 2.6301687e-4 0.0010304153 Motor[1].Servo.Kfff = 0 0 Motor[1].PhasePosSf = 0.0160000000000000003 1.59999999999999993e-5 Motor[1].IiGain = 1.0628819 0.2278125 Motor[1].IpbGain = 6.5684085 0.0099999998 Motor[1].MotorTa = -10 -10 Motor[1].MotorTs = -50 -50 Motor[1].I2tSet = 1499.7477 418.92395 Motor[1].I2tTrip = 18220758 2632459 Motor[1].JogOffset = 0 0 Motor[1].AdcMask = $fffc0000 $fffc0000 Motor[1].PhaseOffset = 683 -683 Motor[1].Stime = 0 0 Motor[1].PwmSf = 4309 -2154 Motor[1].MaxDac = 4524.3784 1675.6958 Motor[1].PhaseFindingDac = 95.976563 0 Motor[1].PhaseFindingTime = 22.586512 1 Motor[1].TraceSize = 0 0 Motor[1].Control[0] = $14000100 $14000100 Motor[1].Control[1] = $0 $0 Node15[0].MasterNum = 255 255 Node15[1].MasterNum = 255 255 Node15[2].MasterNum = 255 255 Node15[3].MasterNum = 255 255

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