I think we were able to duplicate and fix this. It was a clock domain issue. The encoder counters run from a 66.66MHz clock (4X) and the logic reading the counters from a 16.66MHz clock. A PLL is supposed to make the clocks synchronous but it seems they were not synchronized well enough. So if the counter was changing while the counter was being read there could be an invalid reading. We changed the encoders to run from the negative clock edge of the 66.66MHz clock. This provides at least 7.5ns from when the counters change to when they are read.
We were able to duplicate the problem by generating a Step/Dir Quadrature signal on Axis 0 Differential Output 6 and wire to Differential Encoder input 14. Then command Axis 0 to Jog at 200001 counts/sec. The +1 causes the count to shift gradually relative to the sampling. A User program then looks for the glitch of a change > 100. A User program should never see any change > 30 at that count rate. This typically detected the glitch within a few seconds. After the fix we ran overnight without a single error.
Code:
#include "KMotionDef.h"
void main()
{
double T0=Time_sec();
double cur, last=ch1->Position;
for (;;)
{
cur = ch1->Position;
if (cur > last + 100 || cur < last - 100)
{
printf("cnt %f new %f last %f diff %f\n", Time_sec()-T0, cur, last, cur-last);
break;
}
last=cur;
}
}
Here is a Firmware Path for Version 5.3.3. Please copy the 3 files below to the DSP_KOGNA folder then Flash New Version and reboot Kogna. The Firmware Version should report as 5.3.3x.
DSPKOGNA.bin
DSPKOGNA.out
DSPKOGNA.sym
Please let us know if it resolves the issue.