Gearchange configuring

More
10 years 2 months ago #79000 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

Please Log in to join the conversation.

More
10 years 2 months ago #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

Please Log in to join the conversation.

More
10 years 2 months ago #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

Please Log in to join the conversation.

More
10 years 2 months ago #79372 by andypugh
Replied by andypugh on topic Gearchange configuring

terkaa wrote: 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"):
Code:
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
Code:
sudo halcompile --install gearchange.comp
If 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.
Code:
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


Attachment not found

Please Log in to join the conversation.

More
10 years 2 months ago #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

Please Log in to join the conversation.

More
10 years 2 months ago #79399 by andypugh
Replied by andypugh on topic Gearchange configuring

terkaa wrote: 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.
Code:
... 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 to join the conversation.

More
10 years 2 months ago #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

Please Log in to join the conversation.

More
10 years 2 months ago #79410 by andypugh
Replied by andypugh on topic Gearchange configuring

terkaa wrote: 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 to join the conversation.

More
10 years 2 months ago #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

Please Log in to join the conversation.

More
10 years 2 months ago #79418 by andypugh
Replied by andypugh on topic Gearchange configuring

terkaa wrote: 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 to join the conversation.

Time to create page: 0.315 seconds
Powered by Kunena Forum