christerEngblom Posted March 10, 2016 Share Posted March 10, 2016 Hello, I am currently setting up a cascading loop and I am having abit of an issue of the outermost motor output, Motor[4].IqCmd. It seems this outputs values that are proportional to the motor position rather than velocity or torque. The setting is as follows: ------- Motor[4].pDac=Sys.pushm; Motor[4].EncType=5 EncTable[4].type=1; EncTable[4].pEnc=PowerBrick[1].Chan[1].ServoCapt.a; EncTable[4].index1=0; EncTable[4].index2=0; EncTable[4].index3=0; EncTable[4].index4=0; EncTable[4].MaxDelta=0; EncTable[4].ScaleFactor=0.00390625; Motor[4].pEnc=EncTable[4].a Motor[4].pEnc2=EncTable[4].a Motor[4].pLimits=0 Motor[4].pAmpEnable=0 Motor[4].pAmpFault=0 Motor[4].JogTs=-0.1 Motor[4].JogTa=-0.1 Motor[4].JogSpeed=8; Motor[4].Stime=4; Motor[4].Servo.Kp=0.079999998; Motor[4].Servo.Kvfb=0.40000001; Motor[4].Servo.Ki = 0.55000001; Motor[4].Servo.Kvff = 0; Motor[4].Servo.Kaff = 0; Motor[4].Servo.Kvifb = 0; Motor[4].Servo.Kviff = 0; Motor[4].Servo.OutDbOn=0; Motor[4].Servo.OutDbOff=0; Motor[4].FatalFeLimit=2000; Motor[4].MaxDac=32768; Motor[4].ServoCtrl=1; ------- The cascade uses Motor[x].MasterCtrl=1 and sets Motor[x].pMasterEnc=EncTable[11].a. The innermost loop then sets EncTable[11].pEnc=Motor[4].IqCmd.a, but since the IqCmd already gives out positional values there is no need to integrate, and EncTable[11].index4=0; This setup is problematic since the PID wont work well with a servo out that is proportional to position, and I have issues of extremely limited range as well. Have I forgotten something? Best Regards, Christer Link to comment Share on other sites More sharing options...
steve.milici Posted March 10, 2016 Share Posted March 10, 2016 Check to see if Motor[4].Ctrl = Sys.PosCtrl - this would make the output of the PID a position command not a torque or velocity command. It should be Motor[4].Ctrl = Sys.ServoCtrl. Link to comment Share on other sites More sharing options...
christerEngblom Posted March 10, 2016 Author Share Posted March 10, 2016 Check to see if Motor[4].Ctrl = Sys.PosCtrl - this would make the output of the PID a position command not a torque or velocity command. It should be Motor[4].Ctrl = Sys.ServoCtrl. Hi Steve and thanks for your response. I checked the parameter and Motor[4].Ctrl is already set to Sys.ServoCtrl. Link to comment Share on other sites More sharing options...
steve.milici Posted March 11, 2016 Share Posted March 11, 2016 My suspicion here is that this motor is not “seeing” any feedback so it is open loop and would appear to be in a “position like” mode. I would need to see your complete cascaded loop setup to help you troubleshoot this issue. Link to comment Share on other sites More sharing options...
Recommended Posts