Gearchange configuring
18 Aug 2016 14:52 - 18 Aug 2016 16:14 #79000
by terkaa
Gearchange configuring was created by terkaa
Hi,
Ok project goes on and it is time to consider spindle and gear changing. This has two gears 1st gear is lowered 1:6 and second gear is 1:1. We can rotate our spindle motor with VFD from 100-3600 RPM. VFD runs motor in closed loop.(But it will be open loop between VFD and LinuxCNC) So 1st gear speed range is 100-600 and second gear range 600-3600 rpm. Will gearchange component work with this combo? Any examples ?
Tero
Ok project goes on and it is time to consider spindle and gear changing. This has two gears 1st gear is lowered 1:6 and second gear is 1:1. We can rotate our spindle motor with VFD from 100-3600 RPM. VFD runs motor in closed loop.(But it will be open loop between VFD and LinuxCNC) So 1st gear speed range is 100-600 and second gear range 600-3600 rpm. Will gearchange component work with this combo? Any examples ?
Tero
Last edit: 18 Aug 2016 16:14 by terkaa.
Please Log in or Create an account to join the conversation.
19 Aug 2016 13:40 #79072
by andypugh
Replied by andypugh on topic Gearchange configuring
Yes, the gearchange .comp should work.
If you want to get fancy you might be able to auto-detect the gear:
forum.linuxcnc.org/forum/47-hal-examples...indle-gear-detection
If you want to get fancy you might be able to auto-detect the gear:
forum.linuxcnc.org/forum/47-hal-examples...indle-gear-detection
Please Log in or Create an account to join the conversation.
24 Aug 2016 16:52 #79361
by terkaa
Replied by terkaa on topic Gearchange configuring
Ok,
I have been studying this and I would like to have auto gear selection, ie. if under 600 RPM is needed then low gear is selected and output to engage low gear hydraulic solenoid is activated. If over 600 is needed then high gear is selected. Gear switching is only possible when spindle is still. Would it be simple solution to modify gearchange component a bit? Also we have to check limit switch for correct gear is activated before enable is output.
Is feedback of spindle absolutely necessary? I have only encoder on input shaft(before gearbox). Encoder has A,B,Z pulses. A and B are already used by VFD for closed loop control. Encoder output is push-pull by OL7272 line driver. Can I build feedback with these and Mesa 7i84? Or 7i70?
Tero
I have been studying this and I would like to have auto gear selection, ie. if under 600 RPM is needed then low gear is selected and output to engage low gear hydraulic solenoid is activated. If over 600 is needed then high gear is selected. Gear switching is only possible when spindle is still. Would it be simple solution to modify gearchange component a bit? Also we have to check limit switch for correct gear is activated before enable is output.
Is feedback of spindle absolutely necessary? I have only encoder on input shaft(before gearbox). Encoder has A,B,Z pulses. A and B are already used by VFD for closed loop control. Encoder output is push-pull by OL7272 line driver. Can I build feedback with these and Mesa 7i84? Or 7i70?
Tero
Please Log in or Create an account to join the conversation.
24 Aug 2016 19:05 - 24 Aug 2016 19:06 #79372
by andypugh
Which "gearchange component" ? The one included with LinuxCNC isn't really ideal for your situation.
A better solution is the system I have on my lathe (I didn't realise you had an electronically controlled gearbox).
It uses this HAL component (confusingly also called "gearchange"):
You can save the file as gearchange.comp then install it on your system withIf you want to not over-write the built-in gearchange then change the filename _and_ the "component gearchange" line.
It allows for manual over-ride to high or low (in my case with a three-way switch) and also allows for manual or auto brake engagement (again, controlled by a switch on my machine).
This is the HAL.
Replied by andypugh on topic Gearchange configuring
Ok,
I have been studying this and I would like to have auto gear selection, ie. if under 600 RPM is needed then low gear is selected and output to engage low gear hydraulic solenoid is activated. If over 600 is needed then high gear is selected. Gear switching is only possible when spindle is still. Would it be simple solution to modify gearchange component a bit?
Which "gearchange component" ? The one included with LinuxCNC isn't really ideal for your situation.
A better solution is the system I have on my lathe (I didn't realise you had an electronically controlled gearbox).
It uses this HAL component (confusingly also called "gearchange"):
component gearchange "A component to choose spindle gears according to spindle speed";
pin in float speed-command;
pin in bit spindle-on;
pin in bit manual-low;
pin in bit manual-high;
pin in bit brake-enable;
pin out float motor-speed;
pin out bit low-gear;
pin out bit high-gear;
pin out bit brake;
param rw float low-ratio=3;
param rw float high-ratio=1;
param rw float max-low = 500;
author "andy pugh";
license "GPL";
function _;
;;
FUNCTION(_){
static int old_M3;
if (spindle_on) {
if (!old_M3){ // spindle off to on transition
if (manual_high) {
high_gear = 1;
low_gear = 0;
brake = 0;
}
else if (manual_low){
high_gear = 0;
low_gear = 1;
brake = 0;
} else if (speed_command <= max_low){
high_gear = 0;
low_gear = 1;
brake = 0;
} else {
high_gear = 1;
low_gear = 0;
brake = 0;
}
}
} else { //spindle off
high_gear = 0;
low_gear = 0;
brake = brake_enable;
}
old_M3 = spindle_on;
if (high_gear){
motor_speed = speed_command * high_ratio;
} else if (low_gear){
motor_speed = speed_command * low_ratio;
}
}
You can save the file as gearchange.comp then install it on your system with
sudo halcompile --install gearchange.comp
It allows for manual over-ride to high or low (in my case with a three-way switch) and also allows for manual or auto brake engagement (again, controlled by a switch on my machine).
This is the HAL.
loadusr -W hy_vfd -d /dev/ttyUSB0
loadrt gearchange
addf gearchange.0 servo-thread
setp gearchange.0.max-low 500
setp gearchange.0.high-ratio 1
setp gearchange.0.low-ratio 3
setp gearchange.0.brake-enable 0
setp pid.s.Pgain [SPINDLE_9]P
setp pid.s.Igain [SPINDLE_9]I
setp pid.s.Dgain [SPINDLE_9]D
setp pid.s.bias [SPINDLE_9]BIAS
setp pid.s.FF0 [SPINDLE_9]FF0
setp pid.s.FF1 [SPINDLE_9]FF1
setp pid.s.FF2 [SPINDLE_9]FF2
setp pid.s.deadband [SPINDLE_9]DEADBAND
setp pid.s.maxoutput [SPINDLE_9]MAX_OUTPUT
setp pid.s.error-previous-target true
setp pid.s.maxerror .0005
net spindle-index-enable <=> pid.s.index-enable
net spindle-enable => pid.s.enable
net spindle-vel-cmd-rpm => pid.s.command
net spindle-vel-fb-rpm => pid.s.feedback
net spindle-output <= pid.s.output
# ---Encoder feedback signals/setup---
net spindle-revs <= hm2_5i24.0.resolver.04.position
net spindle-vel-fb-rps <= hm2_5i24.0.resolver.04.velocity
net spindle-index-enable <=> hm2_5i24.0.resolver.04.index-enable
# ---setup spindle control signals---
net spindle-vel-cmd-rps <= motion.spindle-speed-out-rps
net spindle-vel-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
net spindle-vel-cmd-rpm <= motion.spindle-speed-out
net spindle-vel-cmd-rpm-abs <= motion.spindle-speed-out-abs
net spindle-enable <= motion.spindle-on
net spindle-cw <= motion.spindle-forward
net spindle-ccw <= motion.spindle-reverse
net spindle-brake <= motion.spindle-brake
net spindle-revs => motion.spindle-revs
net spindle-at-speed => motion.spindle-at-speed
net spindle-vel-fb-rps => motion.spindle-speed-in
net spindle-index-enable <=> motion.spindle-index-enable
# ---Connect the VFD---
net spindle-at-speed hy_vfd.spindle-at-speed
net machine.on.delayed hy_vfd.enable
net spindle-enable hy_vfd.spindle-on gearchange.0.spindle-on
net spindle-cw hy_vfd.spindle-forward
net spindle-ccw hy_vfd.spindle-reverse
net spindle-vel-cmd-rpm-abs gearchange.0.speed-command
net manual-low gearchange.0.manual-low <=
net manual-high gearchange.0.manual-high <=
net motor-speed gearchange.0.motor-speed => hy_vfd.speed-command
net low-gear gearchange.0.low-gear => hm2_7i84.008a.output-11
net high-gear gearchange.0.high-gear => hm2_7i84.008a.output-10
net brake gearchange.0.brake => hm2_7i84.008a.output-12
Last edit: 24 Aug 2016 19:06 by andypugh.
Please Log in or Create an account to join the conversation.
25 Aug 2016 08:10 #79398
by terkaa
Replied by terkaa on topic Gearchange configuring
Ok,
This is what I am looking for thank you. I am a bit confused by line:
net spindle-enable hy_vfd.spindle-on gearchange.0.spindle-on
according to hy_vfd manpage spindle-on is input also gearchange.0.spindle-on is an input??
Should I connect motion.spindle-on => gearchange.0.spindle-on
Tero
This is what I am looking for thank you. I am a bit confused by line:
net spindle-enable hy_vfd.spindle-on gearchange.0.spindle-on
according to hy_vfd manpage spindle-on is input also gearchange.0.spindle-on is an input??
Should I connect motion.spindle-on => gearchange.0.spindle-on
Tero
Please Log in or Create an account to join the conversation.
25 Aug 2016 09:28 #79399
by andypugh
There are three lines connecting up the spindle-enable signal. You can keep adding things to a net, and even spread the net commands through several separate HAL files.
Replied by andypugh on topic Gearchange configuring
This is what I am looking for thank you. I am a bit confused by line:
net spindle-enable hy_vfd.spindle-on gearchange.0.spindle-on
There are three lines connecting up the spindle-enable signal. You can keep adding things to a net, and even spread the net commands through several separate HAL files.
...
net spindle-enable => pid.s.enable
...
net spindle-enable <= motion.spindle-on
...
net spindle-enable hy_vfd.spindle-on gearchange.0.spindle-on
Please Log in or Create an account to join the conversation.
25 Aug 2016 11:51 #79409
by terkaa
Replied by terkaa on topic Gearchange configuring
Ok, Now I see it. I added sensing of low/high gear switches before outputting motor-speed(added to gearchange.comp) Also renamed this component to gearbox. Now it works by using MDI commands ie. M3 S500 / M04 S1200. But when using manual buttons for some reason CCW rotation always engages low gear.... I have to check why.
Tero
Tero
Please Log in or Create an account to join the conversation.
25 Aug 2016 11:58 #79410
by andypugh
That is why I added the manual-high and manual-low inputs. The manual spindle buttons start the spindle at 100 rpm, and go up in increments. Once the spindle is running the component won't change gear.
Or, to put it another way, the component has no way to tell what speed you intend to go to when you first start the spindle with the manual buttons.
Replied by andypugh on topic Gearchange configuring
But when using manual buttons for some reason CCW rotation always engages low gear.... I have to check why.
That is why I added the manual-high and manual-low inputs. The manual spindle buttons start the spindle at 100 rpm, and go up in increments. Once the spindle is running the component won't change gear.
Or, to put it another way, the component has no way to tell what speed you intend to go to when you first start the spindle with the manual buttons.
Please Log in or Create an account to join the conversation.
25 Aug 2016 12:44 - 25 Aug 2016 13:14 #79414
by terkaa
Replied by terkaa on topic Gearchange configuring
It does that also after rotating spindle with MDI commands. Reason is that I used motion.spindle-speed-out it outputs negative numbers when rotating ccw. I fixed this by editing gearchange component. to check if speed-command is between negative and positive value.
Tero
Tero
Last edit: 25 Aug 2016 13:14 by terkaa.
Please Log in or Create an account to join the conversation.
25 Aug 2016 13:48 #79418
by andypugh
Ah
else if (manual_low){
high_gear = 0;
low_gear = 1;
brake = 0;
} else if (absf(speed_command) <= max_low){
high_gear = 0;
low_gear = 1;
brake = 0;
Replied by andypugh on topic Gearchange configuring
It does that also after rotating spindle with MDI commands. Reason is that I used motion.spindle-speed-out it outputs negative numbers when rotating ccw. I fixed this by editing gearchange component. to check if speed-command is between negative and positive value.
Ah
else if (manual_low){
high_gear = 0;
low_gear = 1;
brake = 0;
} else if (absf(speed_command) <= max_low){
high_gear = 0;
low_gear = 1;
brake = 0;
Please Log in or Create an account to join the conversation.
Time to create page: 0.111 seconds