1220801328 Posted July 6 Share Posted July 6 Hi all. I've recently encountered a difficulty while debugging an SSI encoder using the CK3M series with a 1515 axis module (firmware 2.6.1.1) After I set up the parameters according to the manual, he was able to read out the scale position information correctly and mapped it to the motor correctly. I found small fluctuations in the normal open loop curve during the open loop motion, next I found parabolic fluctuations after adjusting the PID parameters and while adjusting the Kvff and other parameters. And then I found in the actual JOG movement, when the motor is closed loop and at rest, the motor is noiseless, when I move the motor the motor emits noise, and the faster I move, the more drastic the noise. I tried to use the oscilloscope in the tool to capture the current real time motor speed which is (Motor[x].ActVel) to push the table by hand in open loop, and found that the data captured also has the problem that the faster the speed, the more violent the fluctuation in the data, it is like superimposing a regular noise on the actual speed. (Phase 16K servo period 8K) I tried two types of trigger sources, two types of edges, and all transmission frequencies, all without solving the problem. But it makes a difference when I change the transmission frequency. (The waveform looks like this at the arrow if the frequency is low and I think it's working properly.Phase 16K servo period 8K,SSI is 0.5M frequency) And then I tried using a different manufacturer's scale, a different protocol, and of course I set it up correctly according to the manual (the second one I tried was the MC15 from RSF with EnDat 2.2) and the same thing happened. However, I have noticed a correlation between this fluctuation and the servo or phase period I have set, but I am not sure what is causing it. (Phase 16K servo period 4K) Attached are the parameters I have set (SSI is 2M frequency, 31 bits of data, binary, no parity, 2.5nm) Sys.WpKey = $AAAAAAAA Gate3[0].PhaseFreq = 16000 Gate3[0].ServoClockDiv = 1 Sys.ServoPeriod = 1000 * (Gate3[0].ServoClockDiv + 1) / Gate3[0].PhaseFreq Sys.PhaseOverServoPeriod = 1 / (Gate3[0].ServoClockDiv + 1) Sys.RtIntPeriod=1 Gate3[0].SerialEncCtrl = $31000002 Gate3[0].Chan[0].SerialEncCmd = $0000101F Gate3[0].Chan[0].SerialEncEna = 1 EncTable[1].type = 1 EncTable[1].index1=0 EncTable[1].index2=0 EncTable[1].index3=0 EncTable[1].index4=0 EncTable[1].index5=0 EncTable[1].index6=0 EncTable[1].pEnc1=Sys.pushm EncTable[1].pEnc = Gate3[0].Chan[0].SerialEncDataA.a EncTable[1].MaxDelta=0 EncTable[1].ScaleFactor = 1 Motor[1].ServoCtrl = 1 Motor[1].pEnc = EncTable[1].a Motor[1].pEnc2 = EncTable[1].a Any suggestions on this that could solve the problem? Thanks in advance Quote Link to comment Share on other sites More sharing options...
MoMo Posted July 7 Share Posted July 7 (edited) From the above data, there is a problem with the lowest bit of the returned data. Can you confirm that the number of encoder bits is 31 bits? If the number of transmission bits is incorrect, it will lead to incorrect results. In addition, you can also check whether the parity bits of the following Gate3[i].Chan[j].SerialEncDataB are correct. Maybe there is a correlation with the cable you are using, are you using twisted pair shielded cable? And the correct differential pair are twisted. Or reduce the transmission frequency and change to servo trigger. Encoders using Gray code can improve data stability. You can try the following configuration to erase low bits data. Of course, this may cause loss of accuracy. EncTable[1].type = 1 EncTable[1].index1=2 EncTable[1].index2=2 EncTable[1].index3=0 EncTable[1].index4=0 EncTable[1].index5=0 EncTable[1].index6=0 EncTable[1].pEnc1=Sys.pushm EncTable[1].pEnc = Gate3[0].Chan[0].SerialEncDataA.a EncTable[1].MaxDelta=0 EncTable[1].ScaleFactor = 1 Edited July 7 by MoMo Quote Link to comment Share on other sites More sharing options...
1220801328 Posted July 8 Author Share Posted July 8 I have tried all possible values from 32 to 25 bits in the parameter Gate3[0].Chan[0].SerialEncCmd, and without exception the speed fluctuates the same, but the number of bits in the encoder feedback table I have not modified, it has always been 32Bit. I tried this encoder feedback table configuration and the final speed fluctuation is not significantly different from the previous one. Quote Link to comment Share on other sites More sharing options...
1220801328 Posted July 8 Author Share Posted July 8 On 7/7/2024 at 10:32 AM, MoMo said: From the above data, there is a problem with the lowest bit of the returned data. Can you confirm that the number of encoder bits is 31 bits? If the number of transmission bits is incorrect, it will lead to incorrect results. In addition, you can also check whether the parity bits of the following Gate3[i].Chan[j].SerialEncDataB are correct. Maybe there is a correlation with the cable you are using, are you using twisted pair shielded cable? And the correct differential pair are twisted. Or reduce the transmission frequency and change to servo trigger. Encoders using Gray code can improve data stability. You can try the following configuration to erase low bits data. Of course, this may cause loss of accuracy. EncTable[1].type = 1 EncTable[1].index1=2 EncTable[1].index2=2 EncTable[1].index3=0 EncTable[1].index4=0 EncTable[1].index5=0 EncTable[1].index6=0 EncTable[1].pEnc1=Sys.pushm EncTable[1].pEnc = Gate3[0].Chan[0].SerialEncDataA.a EncTable[1].MaxDelta=0 EncTable[1].ScaleFactor = 1 I also tried setting Gate3[0].SerialEncCtrl to $31020002, including using a falling edge, which ultimately didn't work. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.