Component for tandem stepper axes - please test
05 Oct 2015 07:08 #63438
by cmorley
Component for tandem stepper axes - please test was created by cmorley
So was fiddling with a HAL component to facilitate tandem stepper axis homing.
I've tested a bit in a sim - seems to work.
it takes the position cmd from an axis and makes two position commands for two step drivers.
While homing it will stop and start one as it hits homing switches and create an offset for the two commands.
one thing it doesn't do is decelerate when stopping so the speeds may need to be relatively slow.
It requires two home switches and you would need to adjust the switches to adjust the racking.
If anyone would like to test, I'd love to know if it works.
I would load it with:
loadrt tandem_home names=x2
The pin connection should be fairly self explanatory
The idea is it must go between linuxcnc motion controller and the step driver component.
Chris M
I've tested a bit in a sim - seems to work.
it takes the position cmd from an axis and makes two position commands for two step drivers.
While homing it will stop and start one as it hits homing switches and create an offset for the two commands.
one thing it doesn't do is decelerate when stopping so the speeds may need to be relatively slow.
It requires two home switches and you would need to adjust the switches to adjust the racking.
If anyone would like to test, I'd love to know if it works.
component tandem_home "Tandem homing";
pin in bit is_homing;
pin in bit home_input1;
pin in bit home_input2;
pin out bit is_on_switch;
pin in float cmd;
pin out float fb;
pin out float joint_cmd1;
pin out float joint_cmd2;
pin in float joint_fb1;
pin in float joint_fb2;
pin out s32 state;
variable int enable1 = 1;
variable int enable2 = 1;
variable float offset1 = 0;
variable float offset2 = 0;
variable float switch_position1 = 0;
variable float switch_position2 = 0;
function _;
license "GPL";
;;
FUNCTION(_) {
if(is_homing) {
switch(state) {
case 0:
if(home_input1) {
switch_position1 = cmd;
enable1 = 0;
state = 1;
}
if(home_input2) {
switch_position2 = cmd;
enable2 = 0;
state = 1;
}
offset1 = 0;
offset2 = 0;
break;
case 1:
if(home_input1 && home_input2) {
if(!enable1){offset1 = switch_position1-cmd;}
if(!enable2){offset2 = switch_position2-cmd;}
enable1 = 1;
enable2 = 1;
is_on_switch = 1;
}
break;
case 2:
break;
default:
break;
}
}else{
state = 0;
}
if(!home_input1 && !home_input2) {is_on_switch = 0;}
if(enable1){
joint_cmd1 = cmd + offset1;
}
if(enable2){
joint_cmd2 = cmd + offset2;
}
if (!enable1){
fb = joint_fb2 - offset2;
}else{
fb = joint_fb1 - offset1;
}
}
I would load it with:
loadrt tandem_home names=x2
The pin connection should be fairly self explanatory
The idea is it must go between linuxcnc motion controller and the step driver component.
Chris M
The following user(s) said Thank You: BigJohnT
Please Log in or Create an account to join the conversation.
06 Oct 2015 21:45 #63496
by andypugh
The stepgens have their own accel limits, so this might not matter.
Replied by andypugh on topic Component for tandem stepper axes - please test
one thing it doesn't do is decelerate when stopping so the speeds may need to be relatively slow.
The stepgens have their own accel limits, so this might not matter.
Please Log in or Create an account to join the conversation.
28 Jan 2016 12:37 #69192
by Clive S
Replied by Clive S on topic Component for tandem stepper axes - please test
I was wondering if there has been any progress on this as it looks promising.
Please Log in or Create an account to join the conversation.
Time to create page: 0.081 seconds