Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.

More
23 Aug 2018 08:35 #116476 by tecno
Hmmm, I sent a reply to this but something must gone wrong.

Anyways I am not 100% sure it is a Dahlander wound motor but I can`t find any details on this motor. So I am assuming it is.



Attachments:

Please Log in or Create an account to join the conversation.

More
23 Aug 2018 09:34 #116477 by tecno
This is what I think will be the solution to get most out of speed range without too many gears/switches to handle.

This browser does not support PDFs. Please download the PDF to view it: Download PDF



Motor in Hi only for A and B in Hi/Lo gear ~1001 to 2500rpm

Motor in Lo for B to E in Hi/Lo gear ~80 to 1000rpm
Attachments:

Please Log in or Create an account to join the conversation.

More
23 Aug 2018 12:44 #116485 by tecno
Andy

Is this close to a working comp with the new arrangement of gears and motorspeed + part of hal??
component gearblocker;

pin in bit spindle-enable-in;
pin out bit spindle-enable-out;
pin in float spindle-speed-in;
pin out float motor-speed-out;

pin in float gear.#.min-speed[12];
pin in float gear.#.max-speed[12];
pin in float gear.#.ratio[12]; >>>>>>>>>>> is this needed as motor goes H/L and small adjusts via VFD within min/max of gear?

pin in bit high-gear;
pin in bit gear-AH;
pin in bit gear-BH;
pin in bit gear-B;
pin in bit gear-C;
pin in bit gear-D;
pin in bit gear-E;



license "gpl";
function _;

;;

FUNCTION(_){
int i;
int gear;
if (spindle_speed_in == 0) return;
switch  (gear_AH  + gear_BH * 2 + gear_B * 4  + gear_C * 8 + gear_D * 16 + gear_E *32) {
case 1: // Gear AH
    gear = (high_gear != 0) ? 1 : 7;
    break;
case 2: // Gear BH
    gear = (high_gear != 0) ? 2 : 8;
    break;
case 4: // Gear B
    gear = (high_gear != 0) ? 3 : 9;
    break;
case 1: // Gear C
    gear = (high_gear != 0) ? 4 : 10;
    break;
case 1: // Gear D
    gear = (high_gear != 0) ? 5 : 11;
    break;
case 1: // Gear E
    gear = (high_gear != 0) ? 6 : 12;
    break;
case else: // gear selection is bitmasked to be able to spot double-engagement
    gear = 0;
}

if (spindle_speed_in >= min_speed(gear) && spindle_speed_in <= max_speed(gear)) {

    motor_speed_out = spindle_speed_ * gear_ratio(gear);
    spindle_enable_out = spindle_enable_in;
} else {
    motor_speed_out = 0;
    spindle_enable_out = 0;
}
}



hal

net input-ah-signal => gearblocker.0.input-ah  <=  hm2_7i76e.0.7i76.0.0.input-09
net input-bh-signal => gearblocker.0.input-bh  <=  hm2_7i76e.0.7i76.0.0.input-10

net input-ah-signal => hm2_7i76e.0.7i76.0.0.output-10
net input-bh-signal => hm2_7i76e.0.7i76.0.0.output-10


net input-b-signal => gearblocker.0.input-b  <=  hm2_7i76e.0.7i76.0.0.input-10
net input-c-signal => gearblocker.0.input-c  <=  hm2_7i76e.0.7i76.0.0.input-11
net input-d-signal => gearblocker.0.input-d  <=  hm2_7i76e.0.7i76.0.0.input-12
net input-e-signal => gearblocker.0.input-e  <=  hm2_7i76e.0.7i76.0.0.input-13

Please Log in or Create an account to join the conversation.

More
24 Aug 2018 11:19 #116532 by andypugh
Well, the repeated case 1: is a definite fault. Didn't I post an updated version?

Please Log in or Create an account to join the conversation.

More
24 Aug 2018 11:22 #116533 by tecno
Oboy that´s a typo from my part as I did copy and paste.

No I have not seen any updated version.

Please Log in or Create an account to join the conversation.

More
24 Aug 2018 11:24 #116534 by tecno
Hope this part is more OK
FUNCTION(_){
int i;
int gear;
if (spindle_speed_in == 0) return;
switch  (gear_AH  + gear_BH * 2 + gear_B * 4  + gear_C * 8 + gear_D * 16 + gear_E *32) {
case 1: // Gear AH
    gear = (high_gear != 0) ? 1 : 7;
    break;
case 2: // Gear BH
    gear = (high_gear != 0) ? 2 : 8;
    break;
case 3: // Gear B
    gear = (high_gear != 0) ? 3 : 9;
    break;
case 4: // Gear C
    gear = (high_gear != 0) ? 4 : 10;
    break;
case 5: // Gear D
    gear = (high_gear != 0) ? 5 : 11;
    break;
case 6: // Gear E
    gear = (high_gear != 0) ? 6 : 12;
    break;
case else: // gear selection is bitmasked to be able to spot double-engagement
    gear = 0;
}

if (spindle_speed_in >= min_speed(gear) && spindle_speed_in <= max_speed(gear)) {

    motor_speed_out = spindle_speed_ * gear_ratio(gear);
    spindle_enable_out = spindle_enable_in;
} else {
    motor_speed_out = 0;
    spindle_enable_out = 0;
}
}

Please Log in or Create an account to join the conversation.

More
24 Aug 2018 11:28 #116535 by andypugh
The version here:
forum.linuxcnc.org/39-pncconf/33069-help...ing?start=460#116030

Should work better.

But doesn't actually disallow high speed in low gears.

But the other component does a better job of suggesting which gear should be used.

Please Log in or Create an account to join the conversation.

More
24 Aug 2018 11:35 #116537 by tecno
Same same but different mine is.

I have yours as a base but now motor speeds HI and LO needs to be implemented.

Have a closer look at
forum.linuxcnc.org/39-pncconf/33069-help...ing?start=560#116477

Please Log in or Create an account to join the conversation.

More
27 Aug 2018 11:58 #116645 by tecno
This compiles, but I would like to know what following lines actually does (as I think it is wrong).

pin in float gear.#.ratio[12];
motor_speed_out = spindle_speed_in * gear_ratio(gear);

As the spindle should go max at HI/LO motorspeed on each gear max and only adjust to min speed of that gear via VFD.



component GB_2speed;

pin in bit spindle-enable-in;
pin out bit spindle-enable-out;
pin in float spindle-speed-in;
pin out float motor-speed-out;

pin in float gear.#.min-speed[12];
pin in float gear.#.max-speed[12];
pin in float gear.#.ratio[12]; 
pin in bit high-gear;
pin in bit gear-AH;
pin in bit gear-BH;
pin in bit gear-B;
pin in bit gear-C;
pin in bit gear-D;
pin in bit gear-E;

license "gpl";
function _;

;;

FUNCTION(_){
int gear;

if (spindle_speed_in == 0) return;
switch  (gear_AH  + gear_BH * 2 + gear_B * 4  + gear_C * 8 + gear_D * 16 + gear_E *32) {
case 1: // Gear AH
    gear = (high_gear != 0) ? 1 : 7;
    break;
case 2: // Gear BH
    gear = (high_gear != 0) ? 2 : 8;
    break;
case 3: // Gear B
    gear = (high_gear != 0) ? 3 : 9;
    break;
case 4: // Gear C
    gear = (high_gear != 0) ? 4 : 10;
    break;
case 5: // Gear D
    gear = (high_gear != 0) ? 5 : 11;
    break;
case 6: // Gear E
    gear = (high_gear != 0) ? 6 : 12;
    break;
default: // gear selection is bitmasked to be able to spot double-engagement
    gear = 0;
}

if (gear >= 0 && spindle_speed_in >= gear_min_speed(gear) && spindle_speed_in <= gear_max_speed(gear)) {
    motor_speed_out = spindle_speed_in * gear_ratio(gear);
    spindle_enable_out = spindle_enable_in;
} else {
    motor_speed_out = 0;
    spindle_enable_out = 0;
}
}

Please Log in or Create an account to join the conversation.

More
28 Aug 2018 12:24 #116704 by andypugh
The cases need to be 1, 2, 4, 8, 16 etc.
(Like the updated version that I posted, and gave you a link to).

Are you saying that you want to always run the VFD at 50 Hz?

The code that you have highlighted is intended to calculate the motor speed for the current spindle speed. as input it has a HAL pin where you need to set the ratio for each gear.

Please Log in or Create an account to join the conversation.

Moderators: cmorley
Time to create page: 0.644 seconds
Powered by Kunena Forum