Hi all,
I'm using power brick LV to control a Aerotech planar stage 300DL (https://www.aerotech.com/product-catalog/stages/linear-x-y-stages/planardl.aspx) drived by the linear motor BLMC-142-A (https://www.aerotech.com/product-catalog/motors/linear-motor/blmc-series.aspx?p=%2fproduct-catalog%2fmotors%2flinear-motor.aspx%3f), 2 in parallel for each axes. The encoder is an RGSZ scale of 20um with an x1000 interpolation factor interface. I'm using the code bellow to configure e control the stage, but, even after the manual phasing procedure I can't move it more than a few milimeters, it's like the stage hits a hardstop(see figure attached), and the current limit kill the motor. Moving it by hand or by the Aerotech controler I can easily move the 300mm range. We already tryied to change the commutation direction and current limits but all lead to the same problem.
// Granite Z Linear brushless
Sys.WpKey = $AAAAAAAA
//Amp mode
BrickLV.Chan[0].TwoPhaseMode = 0 // Motor #7 amp output mode, 3-phase, brushless
BrickLV.Chan[0].I2tWarnOnly = 0 // Motor #7 Amp I2T action, kill motor & display fault
//Pwmsf
Motor[1].PwmSf = -0.95 * 16384
// I2T
GLOBAL Ch1MaxAdc = 33.85; // Max ADC reading [A peak] -–User Input
GLOBAL Ch1RmsPeakCur = 12; // RMS Peak Current [A rms] -–User Input
GLOBAL Ch1RmsContCur = 5; // RMS Continuous Current [A rms] --User Input(colocar 10% a mais)
GLOBAL Ch1TimeAtPeak = 1; // Time Allowed at peak [sec] --User Input
Motor[1].MaxDac = Ch1RmsPeakCur * 40132.44 / Ch1MaxAdc
Motor[1].I2TSet = Ch1RmsContCur * 40132.44 / Ch1MaxAdc
Motor[1].I2tTrip = (POW(Motor[1].MaxDac,2) - POW(Motor[1].I2TSet,2)) * Ch1TimeAtPeak
// Encoder - [counts]
Gate3[0].EncClockDiv = 2 //Set the encoder clock as 100/(2^(ClockDiv)) MHz
Gate3[0].Chan[0].EncCtrl = 3 // 3: x4 quadrature decode CW. 7: x4 quadrature decode CCW
EncTable[1].type = 1
EncTable[1].pEnc = PowerBrick[0].Chan[0].ServoCapt.a
EncTable[1].pEnc1 = Sys.Pushm
EncTable[1].index1 = 0
EncTable[1].index2 = 0
EncTable[1].index3 = 0
EncTable[1].index4 = 0
EncTable[1].index5 = 0
EncTable[1].ScaleFactor = 1 / (256)
Motor[1].pEncLoss = Gate3[0].Chan[0].Status.a // Points to the Channel
Motor[1].EncLossBit = 30 // bit 28: Loss Status; bit 30: Count Error
Motor[1].EncLossLevel = 1 // High true fault
Motor[1].EncLossLimit = 0
// Ongoing phase
GLOBAL RESMtr1 = 0.00002; // RES is the linear encoder resolution (a.k.a. pitch) in the same unit as the ECL (e.g. 1 µm = 0.001 mm)
GLOBAL ECLMtr1 = 25; // ECL is the linear motor electrical cycle length or magnetic pitch (e.g. 60.96 mm)
Motor[1].pPhaseEnc = PowerBrick[0].Chan[0].PhaseCapt.a
//Motor[1].PhaseEncLeftshift = 0
//Motor[1].PhaseEncRightshift = 0
Motor[1].PhasePosSf = 2048 * RESMtr1 / (256 * ECLMtr1)
// phasing
Motor[1].pAbsPhasePos = PowerBrick[0].Chan[0].Status.a
Motor[1].AbsPhasePosFormat = $0400030C // always for hall 120 spacing
Motor[1].AbsPhasePosSF = 2048 / 12 // 2048/12: if the PowerBrick[1].Chan[3].UVW transition is from 1 to 3. -2048/12: if the PowerBrick[1].Chan[3].UVW transition is from 3 to 1
Motor[1].AbsPhasePosOffset = 688 // is the phase position at that transition. Plot Motor[8].PhasePos and PowerBrick[1].Chan[3].UVW to get this point. Must manually phase the motor before
// Motor 8
Motor[1].ServoCtrl = 1
Motor[1].pEnc = EncTable[1].a
Motor[1].pEnc2 = EncTable[1].a
Motor[1].pLimits = PowerBrick[0].Chan[0].Status.a
Motor[1].AdcMask = $FFFC0000
Motor[1].AmpFaultLevel = 1
Motor[1].PhaseCtrl = 4
Motor[1].phaseMode=0
Motor[1].PhaseOffset = -683
// Motor 8 dynamic gains plus notch and low pass filters
Motor[1].IiGain=0.5
Motor[1].IpfGain=0
Motor[1].IpbGain=0.5
Motor[1].Servo.Kp=0.9
Motor[1].Servo.Kvfb=10
Motor[1].Servo.Kafb=0
Motor[1].Servo.Kvifb = 0
Motor[1].Servo.Ki = 1e-5
Motor[1].Servo.Kvff=0
Motor[1].Servo.Kviff=0
Motor[1].Servo.Kaff=0
Motor[1].Servo.Kfff=0
// Motor 8 speed and accel
Motor[1].FatalFeLimit = 200000 // max pos err: 1mm = 200.000 encoder counts
Motor[1].WarnFeLimit = Motor[1].FatalFeLimit/2
Motor[1].Servo.MaxPosErr= Motor[1].FatalFeLimit*5
Motor[1].MaxSpeed = 200 //4200
Motor[1].JogSpeed = 50//4200/3 // max speed: 21 mm/sec = 4200 counts / msec
Motor[1].JogTa = 1000
Motor[1].JogTs = 100
Motor[1].AbortTa = 5
Motor[1].AbortTs = 1
Motor[1].InPosBand = 50
Had anybody done this before, or saw something like this?
Thanks,