guke520 Posted August 26, 2020 Share Posted August 26, 2020 I use direct PWM to control the torque motor, and the step-by-step method to find the phase. Every time the phase search is unsuccessful, no matter if the phase finding current or time is increased, what might be the reason? //ACC-24E2+51E //======================================== Motor1=====================================// Motor[1].AdcMask = $FFF00000 Motor[1].AmpFaultLevel = 1 Motor[1].PhaseCtrl = 4 Motor[1].ServoCtrl=1 Motor[1].Ctrl=Sys.ServoCtrl GLOBAL DcBusInput = 340; GLOBAL Mtr1DCVoltage = 110; Motor[1].PwmSf = 0.95 * 16384 * Mtr1DCVoltage / DcBusInput Gate1[4].Chan[0].EncCtrl =7 //24E2 Gate1[4].Chan[0].OutputMode=0 Motor[1].PhaseOffset = 683 /*************************Motor1 I2T************************/ GLOBAL Ch1MaxAdc = 30; GLOBAL Ch1RmsPeakCur = 20; GLOBAL Ch1RmsContCur = 10; GLOBAL Ch1TimeAtPeak = 0.5; 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 /*************************Motor1 Current Loop************************/ Motor[1].IiGain = 0.2 Motor[1].IpfGain = 5.5 Motor[1].IpbGain = 0 Motor[1].IaBias = 240 Motor[1].IbBias = -935 ///System /opt/ppmac/setup/calcadcoffset 1 /*************************Motor1 Phasing************************/ Motor[1].PhasePosSf = 2048/(256*4*55040/44) //2048 * / (256 * 4* liner per commutation cycle) Motor[1].pPhaseEnc = Gate1[12].Chan[0].PhaseCapt.a Motor[1].PhaseFindingDac = Motor[1].I2tSet*0.5 Motor[1].PhaseFindingTime = 1000*Sys.ServoPeriod Motor[1].AbsPhasePosOffset = 2048/5 /*************************Motor1 setup************************/ Motor[1].pEnc=EncTable[6].a Motor[1].pEnc2=EncTable[6].a Motor[1].pLimits=0 //Gate1[4].Chan[0].Status.a Motor[1].LimitBits=25 Motor[1].pAmpFault=0 //Gate1[4].Chan[0].Status.a Motor[1].AmpFaultBit=23 Motor[1].pDac=Gate1[4].Chan[0].Pwm[0].a Motor[1].pAdc=Gate1[4].Chan[0].Adc[0].a Motor[1].pAmpEnable=Gate1[4].Chan[0].Ctrl.a Motor[1].pEncStatus=Gate1[12].Chan[0].Status.a Motor[1].pCaptFlag=Gate1[12].Chan[0].Status.a Motor[1].pCaptPos=Gate1[12].Chan[0].HomeCapt.a Motor[1].MinPos=0 Motor[1].MaxPos=0 Motor[1].InPosBand=1; /*************************Motor1 PID************************/ Motor[1].Servo.Kp=4 Motor[1].Servo.Kvfb=40 Motor[1].Servo.Kvff=40 Motor[1].Servo.Ki=0 /*************************ACC-51E************************/ Gate1[12].Chan[0].CaptCtrl=1 Gate1[12].Chan[0].EncCtrl=3 EncTable[6].type=4 EncTable[6].pEnc=Gate1[12].Chan[0].Status.a EncTable[6].pEnc1=Gate1[12].Chan[0].Adc[0].a EncTable[6].index5=0 EncTable[6].ScaleFactor=1/32 //1/1024 Link to comment Share on other sites More sharing options...
Omron Forums Support Posted September 15, 2020 Share Posted September 15, 2020 Do you have a good current loop response? Can you manually phase the motor and pass an open loop test? Link to comment Share on other sites More sharing options...
Recommended Posts