- Posts: 59
- Thank you received: 0
Problem with SoE servos AMK and DC
5 years 2 weeks ago #223358
by rollfree
Problem with SoE servos AMK and DC was created by rollfree
I have AMK servos with an integrated EtherCAT controller. They work with SoE protocol.
Older AMK iDT5 servos need Distributed Clocks for their operation. They don't work at all without DC. Newer AMK ihX servos run with or without DC.
The problem is that when the DC si turned on, servos occasionally crash (roughly every 20-30 seconds) and stop. They start again within 2 seconds. If DC is off (which is only possible on the ihX servo), this does not happen.
I also tried to set the PLL mode, where the master should synchronize with the DC (refClockSyncCycles = "-1"), but it's even worse. Then it falls every about 5 seconds.
I assume that the problem is that the servo does not get a PDO in time due to jitter and so it drops out.
So I set the servo-thread cycle in LinuxCNC to 0.98ms instead of 1ms. The setting of the NC-cycle and Sercos-cycle in the servo remained 1ms.
And at that moment the servo does not fall and runs without problems.
But I don't know what it will do with reading the feedback from the encoder, which probably takes place according to the settings of the Sercos-cycle still with a period of 1ms.
I tried it on different servos (iDT5, ihX) and on different platforms (PC, RPi4). The same problem is everywhere.
LCNC 2.8.2 and 2.9pre, EtherCAT master is patched version github.com/ribalda/ethercat .
Does anyone have a tip, please, what might be the problem?
Thanks in advance.
Older AMK iDT5 servos need Distributed Clocks for their operation. They don't work at all without DC. Newer AMK ihX servos run with or without DC.
The problem is that when the DC si turned on, servos occasionally crash (roughly every 20-30 seconds) and stop. They start again within 2 seconds. If DC is off (which is only possible on the ihX servo), this does not happen.
I also tried to set the PLL mode, where the master should synchronize with the DC (refClockSyncCycles = "-1"), but it's even worse. Then it falls every about 5 seconds.
I assume that the problem is that the servo does not get a PDO in time due to jitter and so it drops out.
So I set the servo-thread cycle in LinuxCNC to 0.98ms instead of 1ms. The setting of the NC-cycle and Sercos-cycle in the servo remained 1ms.
And at that moment the servo does not fall and runs without problems.
But I don't know what it will do with reading the feedback from the encoder, which probably takes place according to the settings of the Sercos-cycle still with a period of 1ms.
I tried it on different servos (iDT5, ihX) and on different platforms (PC, RPi4). The same problem is everywhere.
LCNC 2.8.2 and 2.9pre, EtherCAT master is patched version github.com/ribalda/ethercat .
Does anyone have a tip, please, what might be the problem?
Thanks in advance.
Please Log in to join the conversation.
5 years 2 weeks ago #223364
by db1981
Replied by db1981 on topic Problem with SoE servos AMK and DC
Hi,
on which typ of NIC you are running your system? Have you tryied an propitary nic driver or generic?
what are telling the ethercat debug messages in dmesg?
tried this? : github.com/sittner/ec-debianize/tree/mas...aster/debian/patches
on which typ of NIC you are running your system? Have you tryied an propitary nic driver or generic?
what are telling the ethercat debug messages in dmesg?
tried this? : github.com/sittner/ec-debianize/tree/mas...aster/debian/patches
Please Log in to join the conversation.
5 years 1 week ago #223385
by rollfree
Replied by rollfree on topic Problem with SoE servos AMK and DC
Thank you for answer.
On the PC I tried the generic and native driver (ec_8139too). Only generic on RPi, the native driver does not exist there yet. Sometime in the future I plan to write it.
In the log, it's like "Unspecified error":
[ 254.684372] EtherCAT 0: Slave states on main device: OP.
[ 258.757891] EtherCAT 0: Domain 0: Working counter changed to 1/3.
[ 258.768431] EtherCAT 0: Slave states on main device: SAFEOP + ERROR.
[ 258.784437] EtherCAT ERROR 0-main-0: AL status message 0x0001: "Unspecified error".
[ 258.800419] EtherCAT 0: Slave states on main device: SAFEOP.
[ 258.800425] EtherCAT 0-main-0: Acknowledged state SAFEOP.
[ 258.832417] EtherCAT 0: Slave states on main device: INIT.
[ 258.884409] EtherCAT 0: Slave states on main device: PREOP.
[ 259.760904] EtherCAT 0: Domain 0: Working counter changed to 0/3.
[ 263.948489] EtherCAT WARNING 0-main-0: Slave did not sync after 5004 ms.
[ 264.247960] EtherCAT 0: Domain 0: Working counter changed to 3/3.
[ 264.268509] EtherCAT 0: Slave states on main device: SAFEOP.
[ 265.156489] EtherCAT 0: Slave states on main device: OP.
Interestingly, when the servo is the only one on the bus (and thus it works as a clock-master for DC), the situation is worse than when there is another device in front of it, which then acts as a clock-master. Then it falls too, but not so often. Let's say every 40-50 seconds. It's absolutely crazy.
The configuration is absolutely minimal, the tests are run as a simple HAL-script.
Uses DC, crashes:
<masters>
<master idx="0" appTimePeriod="1000000" refClockSyncCycles="1000">
<slave idx="0" type="generic" vid="000001eb" pid="0000000a" name="ihx" configPdos="true">
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="-25000"/>
<syncManager idx="2" dir="out">
<pdo idx="0018">
<pdoEntry idx="0086" subIdx="0" bitLen="16" halPin="control_word" halType="u32"/>
<pdoEntry idx="002f" subIdx="0" bitLen="32" halPin="position_command" halType="s32"/>
<pdoEntry idx="0024" subIdx="0" bitLen="32" halPin="velocity_command" halType="s32"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="0010">
<pdoEntry idx="0087" subIdx="0" bitLen="16" halPin="status_word" halType="u32"/>
<pdoEntry idx="0033" subIdx="0" bitLen="32" halPin="position_feedback" halType="s32"/>
<pdoEntry idx="0028" subIdx="0" bitLen="32" halPin="velocity_feedback" halType="s32"/>
</pdo>
</syncManager>
</slave>
</master>
</masters>
Different value of sync0Shift has no effect.
Not using DC, running OK.
<masters>
<master idx="0" appTimePeriod="1000000" refClockSyncCycles="1000">
<slave idx="0" type="generic" vid="000001eb" pid="0000000a" name="ihx" configPdos="true">
<syncManager idx="2" dir="out">
<pdo idx="0018">
<pdoEntry idx="0086" subIdx="0" bitLen="16" halPin="control_word" halType="u32"/>
<pdoEntry idx="002f" subIdx="0" bitLen="32" halPin="position_command" halType="s32"/>
<pdoEntry idx="0024" subIdx="0" bitLen="32" halPin="velocity_command" halType="s32"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="0010">
<pdoEntry idx="0087" subIdx="0" bitLen="16" halPin="status_word" halType="u32"/>
<pdoEntry idx="0033" subIdx="0" bitLen="32" halPin="position_feedback" halType="s32"/>
<pdoEntry idx="0028" subIdx="0" bitLen="32" halPin="velocity_feedback" halType="s32"/>
</pdo>
</syncManager>
</slave>
</master>
</masters>
Servo-thread standard 1ms, crashes with DC, without DC it runs well:
loadrt threads name1=master period1=1000000
loadusr -W lcec_conf /ec/ihx.xml
loadrt lcec
addf lcec.read-all master
addf lcec.write-all master
start
setp lcec.0.ihx.control_word 0xe000
setp lcec.0.ihx.velocity_command 5000000
Servo-thread 0.98ms, runs well with DC and without DC:
loadrt threads name1=master period1=980000
loadusr -W lcec_conf /ec/ihx.xml
loadrt lcec
addf lcec.read-all master
addf lcec.write-all master
start
setp lcec.0.ihx.control_word 0xe000
setp lcec.0.ihx.velocity_command 5000000
I haven't tried those referenced patches from Sittner. I'll try. Thank you.
I'll try to study and run another master (SOEM) if it works OK there.
Thanks once again.
On the PC I tried the generic and native driver (ec_8139too). Only generic on RPi, the native driver does not exist there yet. Sometime in the future I plan to write it.
In the log, it's like "Unspecified error":
[ 254.684372] EtherCAT 0: Slave states on main device: OP.
[ 258.757891] EtherCAT 0: Domain 0: Working counter changed to 1/3.
[ 258.768431] EtherCAT 0: Slave states on main device: SAFEOP + ERROR.
[ 258.784437] EtherCAT ERROR 0-main-0: AL status message 0x0001: "Unspecified error".
[ 258.800419] EtherCAT 0: Slave states on main device: SAFEOP.
[ 258.800425] EtherCAT 0-main-0: Acknowledged state SAFEOP.
[ 258.832417] EtherCAT 0: Slave states on main device: INIT.
[ 258.884409] EtherCAT 0: Slave states on main device: PREOP.
[ 259.760904] EtherCAT 0: Domain 0: Working counter changed to 0/3.
[ 263.948489] EtherCAT WARNING 0-main-0: Slave did not sync after 5004 ms.
[ 264.247960] EtherCAT 0: Domain 0: Working counter changed to 3/3.
[ 264.268509] EtherCAT 0: Slave states on main device: SAFEOP.
[ 265.156489] EtherCAT 0: Slave states on main device: OP.
Interestingly, when the servo is the only one on the bus (and thus it works as a clock-master for DC), the situation is worse than when there is another device in front of it, which then acts as a clock-master. Then it falls too, but not so often. Let's say every 40-50 seconds. It's absolutely crazy.
The configuration is absolutely minimal, the tests are run as a simple HAL-script.
Uses DC, crashes:
<masters>
<master idx="0" appTimePeriod="1000000" refClockSyncCycles="1000">
<slave idx="0" type="generic" vid="000001eb" pid="0000000a" name="ihx" configPdos="true">
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="-25000"/>
<syncManager idx="2" dir="out">
<pdo idx="0018">
<pdoEntry idx="0086" subIdx="0" bitLen="16" halPin="control_word" halType="u32"/>
<pdoEntry idx="002f" subIdx="0" bitLen="32" halPin="position_command" halType="s32"/>
<pdoEntry idx="0024" subIdx="0" bitLen="32" halPin="velocity_command" halType="s32"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="0010">
<pdoEntry idx="0087" subIdx="0" bitLen="16" halPin="status_word" halType="u32"/>
<pdoEntry idx="0033" subIdx="0" bitLen="32" halPin="position_feedback" halType="s32"/>
<pdoEntry idx="0028" subIdx="0" bitLen="32" halPin="velocity_feedback" halType="s32"/>
</pdo>
</syncManager>
</slave>
</master>
</masters>
Different value of sync0Shift has no effect.
Not using DC, running OK.
<masters>
<master idx="0" appTimePeriod="1000000" refClockSyncCycles="1000">
<slave idx="0" type="generic" vid="000001eb" pid="0000000a" name="ihx" configPdos="true">
<syncManager idx="2" dir="out">
<pdo idx="0018">
<pdoEntry idx="0086" subIdx="0" bitLen="16" halPin="control_word" halType="u32"/>
<pdoEntry idx="002f" subIdx="0" bitLen="32" halPin="position_command" halType="s32"/>
<pdoEntry idx="0024" subIdx="0" bitLen="32" halPin="velocity_command" halType="s32"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="0010">
<pdoEntry idx="0087" subIdx="0" bitLen="16" halPin="status_word" halType="u32"/>
<pdoEntry idx="0033" subIdx="0" bitLen="32" halPin="position_feedback" halType="s32"/>
<pdoEntry idx="0028" subIdx="0" bitLen="32" halPin="velocity_feedback" halType="s32"/>
</pdo>
</syncManager>
</slave>
</master>
</masters>
Servo-thread standard 1ms, crashes with DC, without DC it runs well:
loadrt threads name1=master period1=1000000
loadusr -W lcec_conf /ec/ihx.xml
loadrt lcec
addf lcec.read-all master
addf lcec.write-all master
start
setp lcec.0.ihx.control_word 0xe000
setp lcec.0.ihx.velocity_command 5000000
Servo-thread 0.98ms, runs well with DC and without DC:
loadrt threads name1=master period1=980000
loadusr -W lcec_conf /ec/ihx.xml
loadrt lcec
addf lcec.read-all master
addf lcec.write-all master
start
setp lcec.0.ihx.control_word 0xe000
setp lcec.0.ihx.velocity_command 5000000
I haven't tried those referenced patches from Sittner. I'll try. Thank you.
I'll try to study and run another master (SOEM) if it works OK there.
Thanks once again.
Please Log in to join the conversation.
5 years 1 week ago #223392
by rollfree
Replied by rollfree on topic Problem with SoE servos AMK and DC
I do not use the ec-debianize package at all. I don't know what I need it for. I only use the EC master (package ethercat-master) and then the LinuxCNC link to EtherCAT (linuxcnc-ethercat-master).
I found no reason to include another ec-debianize package.
Is it bad?
I found no reason to include another ec-debianize package.
Is it bad?
Please Log in to join the conversation.
5 years 1 week ago #223394
by db1981
Replied by db1981 on topic Problem with SoE servos AMK and DC
can you check if following sync mode works with your drive?
<dcConf assignActivate="730" sync0Cycle="250000" sync0Shift="0" sync1Cycle="750000" sync1Shift="0"/>
I had to config this for another SoE Drive, got issues too when only using Sync 0 .
<dcConf assignActivate="730" sync0Cycle="250000" sync0Shift="0" sync1Cycle="750000" sync1Shift="0"/>
I had to config this for another SoE Drive, got issues too when only using Sync 0 .
Please Log in to join the conversation.
5 years 1 week ago #223396
by rollfree
Replied by rollfree on topic Problem with SoE servos AMK and DC
I tried.
If there is anything other than *1 or 1000000 in "sync0Cycle", the motor will not start at all.
If "assignActivate" is anything other than 3xx, the engine will not start at all.
Adding "sync1Cycle" has no effect.
That must be cursed.
If there is anything other than *1 or 1000000 in "sync0Cycle", the motor will not start at all.
If "assignActivate" is anything other than 3xx, the engine will not start at all.
Adding "sync1Cycle" has no effect.
That must be cursed.
Please Log in to join the conversation.
5 years 1 week ago #223398
by db1981
Replied by db1981 on topic Problem with SoE servos AMK and DC
do you have an manufactures xml description for this drive?
Please Log in to join the conversation.
5 years 1 week ago #223399
by rollfree
Replied by rollfree on topic Problem with SoE servos AMK and DC
Yes I have.
But I didn't find anything inspiring in it.
Is in the attachment.
But I didn't find anything inspiring in it.
Is in the attachment.
Attachment not found
Please Log in to join the conversation.
5 years 1 week ago #223402
by db1981
Replied by db1981 on topic Problem with SoE servos AMK and DC
Do you set S-0-0001 and S-0-0002 at startup time to 0x03E8 (1000us Synctime) ?
Please Log in to join the conversation.
Time to create page: 0.063 seconds
