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

More
3 years 9 months ago #262609 by Askjerry
It's Alive !!
Tommylight - Ok, I'll leave it going forward.

Chris@cnc - I owe you BIG TIME!

It worked like a champ... no errors. I downloaded your file directly into my LAGUNA-BOGUS folder. (Running SIM mode in the house, will go out to the garage shortly and do the same on the real machine.) I followed the compile instructions and had no errors... very simple process once you understand it.

I made a slight change to the function such that anything over 25K will run the same bit pattern. Tested fine.
Code:
FUNCTION(_) {            // 0 to 10K RPM         if((spindelspeed) >0 && (spindelspeed) <=10999) {         out1=1;         out2=0;         out3=0;         }         // 15K       else if((spindelspeed) >=11000 && (spindelspeed) <=15999) {         out1=0;         out2=1;         out3=0;                 }         // 20K     else if((spindelspeed) >=20000 && (spindelspeed) <=24999) {         out1=1;         out2=1;         out3=0;         }             // 25K     else if((spindelspeed) >=25000 ) {         out1=0;         out2=0;         out3=1;         }             }

Again... very excited, and thank you for both giving me a complete solution, and for teaching me a new useful (and dangerous) skill!

Please Log in to join the conversation.

More
3 years 9 months ago #262611 by rodw
writing custom components is linuxcnc's best kept secret. 
Once installed any custom component is treated as if its part of linuxcnc's core.

You don't need to compile before install

sudo halcompie --install mycomp.comp
compiles and installs

Please Log in to join the conversation.

More
3 years 9 months ago #262613 by Askjerry
I went to the garage machine and it does not have the halcompile function.

How do I install linuxcnc-uspace-dev into this machine? (It has a much older version of Linux I believe.)  If needed, I'll reformat the machine and start over. I tried a sudo apt-get but that failed.

The sudo halcompie --install mycomp.comp command also failed. (No surprise.)

Thanks,
Jerry

Please Log in to join the conversation.

More
3 years 9 months ago #262617 by chris@cnc
Thank you for the flowers, and I am happy to make you smile. 
You are right, could be a dangerous skill, but I hope you have peaceful minds. 
To install halcompile 
"apt-get install linuxcnc-uspace-dev"
or copy the file "yourmodul.so" from your simulator
"/usr/lib/linuxcnc/modules/" to your machine 

By the way, you forgot the range from 16K to 19K...

Thank you to Rod and Grotius.
They were my teachers and I want to pay it back.
I hope it wasn't a mistake to open the secret.
And yes is not needed to compile before install, but I need 100 times to test compile and solve grammar or logic errors before install...

And big thanks to all linuxcnc developers and forum admins to do this possible.
This is a really great tool and community, except the forum editor.

Please Log in to join the conversation.

More
3 years 9 months ago #262619 by Askjerry
Ha ha... you are right...
Code:
else if((spindelspeed) >=11000 && (spindelspeed) <=15999) {

should say
Code:
else if((spindelspeed) >=11000 && (spindelspeed) <=19999) {

I will update that downstairs and copy the files to a thumbdrive. Once I have it working, I will add it, and the help you have given me to the next video I make. By the way... this is the playlist:

Thanks again.
Jerry

Please Log in to join the conversation.

More
3 years 9 months ago #262637 by Askjerry
I am really getting the hang of this  I think... much to learn, but comfortable.

I realized the pins are ACTIVE LOW, so I had to reverse the logic in them, and I also added a pin fixedspeed so that I could create a pyvcp panel that shows the commanded speed along with the actual or ADJ speed. It worked out well. I also corrected spindelspeed to spindlespeed while I was in there.
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.spindlespeed 0 /* 4 Bit Spindlespeed 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 spindlespeed=0;        //speed float in     // Output pins pin out bit out1=1;             pin out bit out2=1;             pin out bit out3=1;             pin out float fixedspeed=0; // Global variables //variable float timer=0; function _; ;; #include "rtapi_math.h" FUNCTION(_) {             // 1 to 10K RPM         if((spindlespeed) >100 && (spindlespeed) <=10999) {         out1=0;         out2=1;         out3=1;         fixedspeed=10000;         }     //Spindle Less than 100 RPM     else if((spindlespeed) <101 ) {         out1=1;         out2=1;         out3=1;         fixedspeed=0;         }     // 15K       else if((spindlespeed) >=11000 && (spindlespeed) <=19999) {         out1=1;         out2=0;         out3=1;             fixedspeed=15000;             }         // 20K     else if((spindlespeed) >=20000 && (spindlespeed) <=24999) {         out1=0;         out2=0;         out3=1;         fixedspeed=20000;         }             // 25K     else if((spindlespeed) >=25000 ) {         out1=1;         out2=1;         out3=0;         fixedspeed=25000;         } }

Tomorrow I need to handle one more thing... the sensors output 24vdc and the parallel circuit is 5vdc. The solution is to use three 4N35 optocouplers. I run the input signal to pin-1 va a 3.3K resistor, and connect ground to pin2. The output is taken from pin-4, and a 5vdc ia applied to pin-5. At that point, I define the home switches to the paraport inputs, and it should be fully functional.

I did have one issue that I solved in an oddball way. As the spindle pins are active-low, when I first turn on the computer, the spindle wants to run at 40,000 RPM.   That is not a good thing! The breakout boards have a relay with NC-COM-NO connections, and if the computer is off, they are both off... when the computer is booting and before AXIS, they are both on. So I routed the ground through the NO pin of the first relay, and into the NC pin of the second relay. The only way the spindle can run is if relay-1 is off and relay-2 is on. It is a bit Rube-Goldberg... but it works.

Ok... off to bed! Thanks again everyone!!!
Jerry

 

Please Log in to join the conversation.

More
3 years 9 months ago #262640 by rodw
Gerry,

Sounds great.
Halcompile has one more trick and that is to ceate a man page with this command
Code:
halcompile --document rtexample.comp
 
There is a bit of a syntax for man pages you can read up on but it might be just as easy to consult sone of the existing components in github and follow their lead.. and review the html version on the docs page. or just type man and2 (for example)
github.com/LinuxCNC/linuxcnc/tree/master/src/hal/components

Please Log in to join the conversation.

More
3 years 9 months ago #262651 by chris@cnc

Code:
I did have one issue that I solved in an oddball way. As the spindle pins are active-low, when I first turn on the computer, the spindle wants to run at 40,000 RPM. 
Basically have nothing to run without EMG release.
You could wire the enable Signal S0 to your enable Relay and your VFD should have parameter to invert the input logic.

@ Rod
That is the magic part, witchcraft for me. 

Please Log in to join the conversation.

More
3 years 9 months ago #262652 by chris@cnc
I clean up the mess of comment lines here a clean example

Warning: Spoiler!

Please Log in to join the conversation.

More
3 years 9 months ago #262661 by Askjerry
The problem is upon powering the PC on, that pin also comes up high and then goes low... so the spindle suddenly starts up and as the other pins are low it gets the bit pattern 0,0,0 which is 40,000 RPM and it really screams.

This way, there will NEVER be a situation where they are in the needed relay1=on and relay2=off. It powers up as off/off and when AXIS starts they jump to on/on. It's crazy, but it is now VERY stable... and I have no need to use paraport-14 on the first board anyway.

So the document page makes a local document that can be viewed if the user needs to remember how to use the function? I will give it a try on what I have and see what it looks like... then evaluate what you did (The .P .RS .TP and .RS to see what they do so I understand them better.)

Where is the manual for this version of C? I need to study and experiment with it for future projects and enhancements. And I noticed after upgrading the garage computer... it produces a somefile.ko while inside the house, that computer produces a somefile.so which are both placed into different folders too. Odd... must have something to do with the Linux version used. In either case... they work properly, and I now have this as a reference to compile future works.

But I do need a link to the manual so I can see what else is possible. :-)

Thanks,
Jerry

Please Log in to join the conversation.

Time to create page: 0.835 seconds
Powered by Kunena Forum