Spindle Uppper and Lower Limit (Or, how to change speed step size)

More
21 Jan 2023 00:03 #262531 by andypugh

So I just went to Chat GPT and asked it...

setp my_lincurve.table 0 0 0 0 1 9500 1 2 10500 2 3 15500 3 4 20500 40000 4

That won't work. It would be nice if it did, but you have to put in the x and y individually. 
 
The following user(s) said Thank You: Askjerry

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

  • Askjerry
  • Askjerry's Avatar Topic Author
  • Offline
  • Elite Member
  • Elite Member
More
21 Jan 2023 00:13 #262532 by Askjerry
And a quick Google search later... from this forum :-/

loadrt lincurve personality=4
addf lincurve.0 servo-thread
setp lincurve.0.x-val-00 0
setp lincurve.0.y-val-00 0
setp lincurve.0.x-val-01 200
setp lincurve.0.y-val-01 250
setp lincurve.0.x-val-02 550
setp lincurve.0.y-val-02 500
setp lincurve.0.x-val-03 1000
setp lincurve.0.y-val-03 1000
net spindle-raw motion.spindle-out => lincurve.0.in
net spindle-corrected lincurve.0.out => pwmgen.0.in

So I should just have to adjust the numbers to fit my demands... ah... forward progress! Thank you andypugh !!

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

  • rodw
  • rodw's Avatar
  • Away
  • Platinum Member
  • Platinum Member
More
21 Jan 2023 02:51 #262541 by rodw
You and Andy must be teachin it Jerry!

it gave me this:
loadrt lincurve

setp lincurve.0.x1 0
setp lincurve.0.y1 0
setp lincurve.0.x2 9500
setp lincurve.0.y2 1

setp lincurve.0.x3 10500
setp lincurve.0.y3 2
setp lincurve.0.x4 15500
setp lincurve.0.y4 3

setp lincurve.0.x5 20500
setp lincurve.0.y5 4
setp lincurve.0.x6 40000

# Connect lincurve output to your program
net lincurve-out-0 => your-program-variable

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

  • Askjerry
  • Askjerry's Avatar Topic Author
  • Offline
  • Elite Member
  • Elite Member
More
21 Jan 2023 15:11 - 21 Jan 2023 15:22 #262585 by Askjerry
I do not think lincurve is the answer to my issue.
I installed the following code into my HAL for testing...
#-------------------------------------------------
# Install LINCURVE
loadrt lincurve personality=5
addf lincurve.0 servo-thread

# OFF
setp lincurve.0.x-val-00 0
setp lincurve.0.y-val-00 0

# 10K
setp lincurve.0.x-val-01 1
setp lincurve.0.y-val-01 10500

# 15K
setp lincurve.0.x-val-02 10500
setp lincurve.0.y-val-02 15500

# 20K
setp lincurve.0.x-val-03 15500
setp lincurve.0.y-val-03 20500

# 25K
setp lincurve.0.x-val-04 20500
setp lincurve.0.y-val-04 40000

# Tie Commanded Spindle Speed to LINCURVE
net spindle-cmd => lincurve.0.in
#-------------------------------------------------

The spindle I have uses four signals, S0 S1 S2 S3 to operate.
S0 will be connected to pin SPINDLE-ON where it will activate or deactivate the VFD.

My speed choices then are
10,000 :  S1=1      S2=0     S3=0   (Decimal 1    Binary 001)
15,000 :  S1=0      S2=1     S3=0   (Decimal 2    Binary 010)
20,000 :  S1=1      S2=1     S3=0   (Decimal 3    Binary 011)
25,000 :  S1=0      S2=0     S3=1   (Decimal 4    Binary 100)

The bit pattern continues to 40,000 RPM... but I want to stop at 25,000 so anything from 25K to 40K should equal 25K, or bit pattern 100

S0 = PARAPORT PIN 8       Spindle ON/OFF
S1 = PARAPORT PIN 9       VFD S1 Input high/low
S2 = PARAPORT PIN 16      VFD S2 Input high/low
S3 = PARAPORT PIN 17      VFD S3 Input high/low

My goal was to get a number 1 to 4, take that bit pattern and put it onto the appropriate S1 to S3 pins... and have them net to the appropriate PARAPORT pin.

The problem...

If I send M3 S5000 I would expect to get an answer of "1" so a bit pattern of 001 could be sent to the pins. Instead, the result is 10500 which is incorrect.

As you can see... this is not an output from 1 to 4.
Attachments:
Last edit: 21 Jan 2023 15:22 by Askjerry.

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

More
21 Jan 2023 16:45 - 21 Jan 2023 16:50 #262590 by chris@cnc
Hi, i would do it with a short custom comp or pure hardware digital rotary switch.
I made short working example. Ready to use...
 
Attachments:
Last edit: 21 Jan 2023 16:50 by chris@cnc.
The following user(s) said Thank You: Askjerry

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

  • Askjerry
  • Askjerry's Avatar Topic Author
  • Offline
  • Elite Member
  • Elite Member
More
21 Jan 2023 18:27 #262596 by Askjerry
This is exactly it... now I just need to learn how to implement it...

This part I understand... perfect... I can install it in the LAGUNA.HAL or in the CUSTOM.HAL comfortable with that...
loadrt decoder
addf decoder.0 servo-thread
setp decoder.0.spindelspeed 0

net spindle-cmd-rpm-abs <= spindle.0.speed-out-abs => decoder.0.spindelspeed
net spindel-s1 <= decoder.0.out1 
net spindel-s2 <= decoder.0.out2
net spindel-s3 <= decoder.0.out3

What I do not understand is what to do with this code...
component decoder " ";description 
"""
//Compile :
//halcompile --compile decoder.comp
//sudo halcompile --install decoder.comp
//Halfile load :
//loadrt decoder
//addf decoder.0 servo-thread
//setp decoder.0.spindelspeed 0
/* 4 Bit Spindelspeed decoder
	If speed 0-10000 -> out1
	If speed 10000-15000 -> out2
	If speed 15000-20000 -> out1 + out2
	If speed 20000-25000 -> out3		
*/
""";
 
author "Christian Schorsch";

license "GPL";

// Input pins
pin in float spindelspeed=0;		//speed float in
   

// Output pins
pin out bit out1=0;			
pin out bit out2=0;			
pin out bit out3=0;			

// Global variables
//variable float timer=0;

function _;

;;

#include "rtapi_math.h"

FUNCTION(_) {	
   		
	if((spindelspeed) >0 && (spindelspeed) <=10000) {
		out1=1;
		out2=0;
		out3=0;
		}	

	else if((spindelspeed) >=10001 && (spindelspeed) <=15000) {
		out1=0;
		out2=1;
		out3=0;		}	

	else if((spindelspeed) >=15001 && (spindelspeed) <=20000) {
		out1=1;
		out2=1;
		out3=0;
		}		
	
	else if((spindelspeed) >=20001 && (spindelspeed) <=25000) {
		out1=0;
		out2=0;
		out3=1;
		}		
	
	else	{
		out1=0;
		out2=0;
		out3=0;
	}
	
}

Where does it go and/or how do I use it? It looks like C, I get that... but what IDE are you using? What do I need to load?

I'm excited, because if I can learn this... I can probably figure out how to change a bunch of things. I do not need an external encoder... One of my thoughts was to make a pyVCP panel with buttons like...
[ 10K ]
[ 15K ]
[ 20K ]
[ 25K ]

That I know how to do...

looking at your code // seems to be a REM statement as does the /* something /* part. The rest makes sense too.

So how do I compile it and get it into AXIS? I see the loadrt command... so I guess I need...
1) How do I compile the code?
2) Where does the compiled code need to go? (My LAGUNA folder? A system folder?)

Thanks in advance!
Jerry

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

  • Askjerry
  • Askjerry's Avatar Topic Author
  • Offline
  • Elite Member
  • Elite Member
More
21 Jan 2023 18:38 #262598 by Askjerry
GEANY appears to be a compiler... I haven't used it...

I went in, created a new file... pasted your code... saved it.

But BUILD... that fails... likely I'm missing something... sorry I have only coded in GAMBAS and PYTHON in Liunix.

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

More
21 Jan 2023 19:38 #262602 by JPL
Those 2 lines after "Compile:" are the instruction how to compile and install the component:

//Compile :
//halcompile --compile decoder.comp
//sudo halcompile --install decoder.comp

So... to compile and install the component just type:
halcompile --compile decoder.comp
sudo halcompile --install decoder.comp

More info here: linuxcnc.org/docs/html/man/man1/halcompile.1.html

.
The following user(s) said Thank You: Askjerry

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

  • tommylight
  • tommylight's Avatar
  • Away
  • Moderator
  • Moderator
More
21 Jan 2023 19:54 #262603 by tommylight
@AskJerry,
Please do not change subject/tittle when replying.
Thank you.

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

More
21 Jan 2023 19:59 - 21 Jan 2023 20:02 #262604 by chris@cnc
Yes, it is a "C" program and need to compile. After compile and install, you have a working hal component. 
I should copy in linuxcnc hal modul folder. Just load now in your custom.hal
Everything after "//" is comment. I think It's helpful to note how to compile and function of this.  
You need the linuxcnc-uspace-dev package for halcompile
If halcompile not working, post your error. Maybe there is something lost by copy and paste.
Last edit: 21 Jan 2023 20:02 by chris@cnc.
The following user(s) said Thank You: Askjerry

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

Time to create page: 0.124 seconds
Powered by Kunena Forum