Jump to content
OMRON Forums

Cassiano90

Members
  • Posts

    2
  • Joined

  • Last visited

Everything posted by Cassiano90

  1. Hi Richard, thanks for the reply! The first image is the motor been moved by the delta tau controller, in the second image I'm moving the stage by hands. I was looking at the halls because, the position that the stage stops, is always the same. I was trying to correlate to some phase transition. I will do a double check at the wirings anyway. Regards,
  2. 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,
×
×
  • Create New...