Delta Servo position register.
19 Nov 2021 14:15 #226984
by serdigi
Delta Servo position register. was created by serdigi
Hello;
I already checked the ESTUN servo driver with EL6751. The pdo of the target location in the ESTUN driver was U32 bit.
I wanted to run my Delta ASD-A2 drive on the side to improve myself. However, in the Canopen whitepaper I found that the pdo target location consists of High(16bit) and low(16bit) words. As you know, Linuxcnc sends the Float type target location command. To solve this problem I will need low and high 16 bit conversion from Float. And of course, it needs to convert as fast as possible to match real time. My opinion is to convert from float to binary as fast as possible. The Ethercat Hal driver does the rest by dividing and sending complex data type bits. Waiting for your valuable ideas.
Kind regards.
I already checked the ESTUN servo driver with EL6751. The pdo of the target location in the ESTUN driver was U32 bit.
I wanted to run my Delta ASD-A2 drive on the side to improve myself. However, in the Canopen whitepaper I found that the pdo target location consists of High(16bit) and low(16bit) words. As you know, Linuxcnc sends the Float type target location command. To solve this problem I will need low and high 16 bit conversion from Float. And of course, it needs to convert as fast as possible to match real time. My opinion is to convert from float to binary as fast as possible. The Ethercat Hal driver does the rest by dividing and sending complex data type bits. Waiting for your valuable ideas.
Kind regards.
Please Log in or Create an account to join the conversation.
21 Nov 2021 17:29 #227205
by andypugh
Replied by andypugh on topic Delta Servo position register.
LinuxCNC HAL has float-to-int conversion:
linuxcnc.org/docs/2.8/html/man/man9/conv_float_u32.9.html
But it probably makes sense to write a custom component to output two 16-bit values as I imagine that there is some scaling required?
Do you know C at all?
linuxcnc.org/docs/2.8/html/hal/comp.html
linuxcnc.org/docs/2.8/html/man/man9/conv_float_u32.9.html
But it probably makes sense to write a custom component to output two 16-bit values as I imagine that there is some scaling required?
Do you know C at all?
linuxcnc.org/docs/2.8/html/hal/comp.html
The following user(s) said Thank You: serdigi
Please Log in or Create an account to join the conversation.
21 Nov 2021 21:17 #227235
by serdigi
Replied by serdigi on topic Delta Servo position register.
Yes Andy.
I am proficient in C language.
Thanks for your support and advice. Earlier, I converted an integer 16bit value to 2 8bit values (high and low). Of course, it's not that simple when it comes to converting a floating number.
void split(uint16_t pxreg1,uint16_t pxreg2)
{
px2=(uint8_t)(0x00ff)&(pxreg1);// low byte
pxreg1=pxreg1>>8;
px1=(uint8_t)((0x00ff)&pxreg1); high byte
px4=(uint8_t)(0x00ff)&(pxreg2);//low byte
pxreg2=pxreg2>>8;
px3=(uint8_t)((0x00ff)&pxreg2); high byte
}
I'm continuing to work. If I find a fast algorithm like I mentioned, I will share it. Being open to ideas has always improved me.
Best Regards.
I am proficient in C language.
Thanks for your support and advice. Earlier, I converted an integer 16bit value to 2 8bit values (high and low). Of course, it's not that simple when it comes to converting a floating number.
void split(uint16_t pxreg1,uint16_t pxreg2)
{
px2=(uint8_t)(0x00ff)&(pxreg1);// low byte
pxreg1=pxreg1>>8;
px1=(uint8_t)((0x00ff)&pxreg1); high byte
px4=(uint8_t)(0x00ff)&(pxreg2);//low byte
pxreg2=pxreg2>>8;
px3=(uint8_t)((0x00ff)&pxreg2); high byte
}
I'm continuing to work. If I find a fast algorithm like I mentioned, I will share it. Being open to ideas has always improved me.
Best Regards.
Please Log in or Create an account to join the conversation.
21 Nov 2021 22:59 #227242
by andypugh
Replied by andypugh on topic Delta Servo position register.
I don't think that you need to worry too much about speed. The component will run once every mS and will probably complete in nanoseconds.
I would let the compiler convert the float to an int, then split that into two HAL pins.
I would let the compiler convert the float to an int, then split that into two HAL pins.
The following user(s) said Thank You: serdigi
Please Log in or Create an account to join the conversation.
07 Dec 2021 14:39 - 07 Jan 2022 19:52 #228533
by serdigi
Replied by serdigi on topic Delta Servo position register.
Hello. This is a simple component. I have tested on the EL6751. The result is very good. I haven't had any lag issues. I wish you good luck. Kind regards.
SERDIGI.
SERDIGI.
component split "Delta ASD-A2 Firmware 1.03 linear Interpolation position register splitting HIGH Word and LOW Word";
pin in float pos_in;
pin out u32 pos_out;
pin out u32 pos_low;
pin out u32 pos_high;
pin in float resulation;
variable uint32_t xtemp=0;
variable uint16_t px1=0;
variable uint16_t px2=0;
function _;
license "GPL";
author "serdigi";
;;
#include "rtapi_math.h"
FUNCTION(_) {
xtemp = pos_in * resulation;
px1 = (uint16_t)(xtemp)&;(0xFFFF);
px2 = (uint16_t)(xtemp>>16);
pos_low = px1;
pos_high = px2;
}
Last edit: 07 Jan 2022 19:52 by andypugh.
Please Log in or Create an account to join the conversation.
07 Dec 2021 20:32 #228572
by rodw
Replied by rodw on topic Delta Servo position register.
Hi, this is interesting as I'm just starting out with Ethercat. I am wondering why you are using the EL6751 when there is direct support for CIA402 drives which the ASD-A2 drive appears to be
github.com/dbraun1981/hal-cia402
I really want to get internal homing working with my drives via a component.. Stall homing sounds very cool.
It would also be great if the mods could move this to the Ethercat section
github.com/dbraun1981/hal-cia402
I really want to get internal homing working with my drives via a component.. Stall homing sounds very cool.
It would also be great if the mods could move this to the Ethercat section
Please Log in or Create an account to join the conversation.
- tommylight
- Away
- Moderator
Less
More
- Posts: 19188
- Thank you received: 6432
07 Dec 2021 20:46 #228575
by tommylight
Replied by tommylight on topic Delta Servo position register.
Done.
Please Log in or Create an account to join the conversation.
09 Dec 2021 20:20 #228727
by 0x2102
Replied by 0x2102 on topic Delta Servo position register.
He is probably using the ASD-A2-M (CANopen) and not the native EtherCAT drives.
The EL6751 is a CANopen over EtherCAT coupler.
The EL6751 is a CANopen over EtherCAT coupler.
The following user(s) said Thank You: rodw
Please Log in or Create an account to join the conversation.
13 Dec 2021 06:49 #228995
by serdigi
Replied by serdigi on topic Delta Servo position register.
Hello everyone.
I'm late to explain what I'm doing.As you all understand I used igh etherlabmaster and linuxcnc ethercat driver.I was able to run Delta ASD-A2-M (Canopen supported) sevo drivers by including EK1100 and EL6751 in this system.But since the firmware of the drives I have is outdated, the position register in my linear interpolation mode was still u32, but still wanted 2 as u16.I also tried this simple solution. It worked without any problems.
My main goal is to develop hardware for Canopen.Many of you are probably saying that I already have a solution and that I am using it.But EK1100 and EL6751 are not very cheap in every country.We make many passes at the same time. So we're connecting multiple technologies. As an engineer, I've always avoided the unnecessary pile of software and hardware.i.e. I am designing hardware that can be directly integrated with linuxcnc with an FPGA or ARM based controller. I will share the progress.sometimes re-searching the continent of America can improve you.
I apologize to everyone for my bad english.
Best Regards...
I'm late to explain what I'm doing.As you all understand I used igh etherlabmaster and linuxcnc ethercat driver.I was able to run Delta ASD-A2-M (Canopen supported) sevo drivers by including EK1100 and EL6751 in this system.But since the firmware of the drives I have is outdated, the position register in my linear interpolation mode was still u32, but still wanted 2 as u16.I also tried this simple solution. It worked without any problems.
My main goal is to develop hardware for Canopen.Many of you are probably saying that I already have a solution and that I am using it.But EK1100 and EL6751 are not very cheap in every country.We make many passes at the same time. So we're connecting multiple technologies. As an engineer, I've always avoided the unnecessary pile of software and hardware.i.e. I am designing hardware that can be directly integrated with linuxcnc with an FPGA or ARM based controller. I will share the progress.sometimes re-searching the continent of America can improve you.
I apologize to everyone for my bad english.
Best Regards...
The following user(s) said Thank You: rodw
Please Log in or Create an account to join the conversation.
13 Dec 2021 18:44 #229024
by 0x2102
Replied by 0x2102 on topic Delta Servo position register.
Hello serdigi,
I do have a set of ASD-A3-M that I tried to setup with a Beckhoff EK1100 + EL6751 but I never managed to get the EL6751 to OP under LinuxCNC. It was no problem in TwinCAT but LinuxCNC was a no-go for me. This was just a test system, as I will be using the ASD-A3-M with Step/Dir.
I have another set a EtherCAT servo's ASD-A3-E, those work well with LinuxCNC EtherCAT.
Would be great if you should share some details around the EL6751 and how you got it to work. Still unsure why it didn't work for me
Regards,
-Markus
I do have a set of ASD-A3-M that I tried to setup with a Beckhoff EK1100 + EL6751 but I never managed to get the EL6751 to OP under LinuxCNC. It was no problem in TwinCAT but LinuxCNC was a no-go for me. This was just a test system, as I will be using the ASD-A3-M with Step/Dir.
I have another set a EtherCAT servo's ASD-A3-E, those work well with LinuxCNC EtherCAT.
Would be great if you should share some details around the EL6751 and how you got it to work. Still unsure why it didn't work for me
Regards,
-Markus
Please Log in or Create an account to join the conversation.
Time to create page: 0.117 seconds