Non-circular boring. (Linuxcnc fun)

More
6 years 7 months ago #159619 by skunkworks
made a surprisingly simple hal component that takes the spindle position and converts to x/y motion to create a polygon.

Please Log in to join the conversation.

More
6 years 7 months ago #159632 by cmorley
I think you should add some docs to linuxcnc to show some of this crazy stuff you try.
Pretty damn cool!

Please Log in to join the conversation.

More
6 years 7 months ago #159651 by tommylight
I agree with Cmorley ! :)
Very nice, indeed.

Please Log in to join the conversation.

More
6 years 7 months ago #159670 by skunkworks
here is me fiddling with the parameters.. (no tool offset applied)

Please Log in to join the conversation.

More
6 years 7 months ago #159741 by skunkworks
Painfully slow bore.. (ran it a bit slow)



Please Log in to join the conversation.

More
6 years 7 months ago #159745 by skunkworks
Really really messy - does a spindle encoder index enable and such. Some comments.
Code:
// This is a component for Linuxcnc HAL // Copyright 2020 Sam Sokolik <samcoinc@gmail.com> // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. component polygon "Create a spindle synced motion that carves a polygon using eoffset inputs. Assumes positive rotation."; pin in bit enable; pin in unsigned numsides=3 "Number of sides in the polygon"; pin in float inscribedradius=1 "inscribed radius of the polygon"; pin in float cutterdiam "cutter diameter"; pin in float eoffsetscale "scale that eoffset is set to."; pin in float toolang "angle difference between index and actual tool poition"; pin in float spindlepos "Spindle position scaled to 1 per rev"; pin out float spindlerad "Spindle postion in radians"; pin out float polyradius "radious of the polygon at given spindle position"; pin out float xoffset "x offset to send to offset componant"; pin out float yoffset "y offset to send to the offset componant"; pin out signed xeoffset "x eoffset output"; pin out signed yeoffset "y eoffset output"; pin out bit isindex "set index enable only once"; pin io bit indexenable "hooked to index enable of encoder"; function _; license "GPL"; ;; #include <rtapi_math.h> #define PI 3.14159265358979323846 float spinang; float scale; float spinangoffset; if (!enable) { xoffset=0; yoffset=0; xeoffset=0; yeoffset=0; isindex = false; return; } // only set index enable once if (enable && !isindex) { isindex = true; indexenable = true; return; } // wait for spindle index before actually enabling if (enable && isindex && indexenable){ return; } //convert spinangoffset to ratio.. for adding to spindle pos - plus a couple rotations //so the spindle position isn't negative spinangoffset = (toolang/360)+2; //formual I found is for circumscribed - convert to inscribed - makes more sense. scale=inscribedradius/cos(PI/numsides); spinang = ((spindlepos + spinangoffset) - (int)(spindlepos + spinangoffset))*2*PI; polyradius = (cos(PI/numsides)/cos((fmod(spinang, (2*PI/numsides))-PI/numsides)))*scale-cutterdiam/2; //actual offsets applied - could be used for offset componant. xoffset = cos(spinang)*polyradius * -1; yoffset = sin(spinang)*polyradius; //counts for use with eoffset functionality xeoffset = xoffset / eoffsetscale; yeoffset = yoffset / eoffsetscale; spindlerad = spinang;

Please Log in to join the conversation.

More
6 years 7 months ago #159836 by skunkworks
Rotatable polygon.. 12 point anyone? (2 hexes one rotated 30 degrees)


Code:
// This is a component for Linuxcnc HAL // Copyright 2020 Sam Sokolik <samcoinc@gmail.com> // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. component polygon "Create a spindle synced motion that carves a polygon using eoffset inputs. Assumes positive rotation."; pin in bit enable; pin in unsigned numsides=3 "Number of sides in the polygon"; pin in float inscribedradius=1 "inscribed radius of the polygon"; pin in float cutterdiam "cutter diameter"; pin in float eoffsetscale "scale that eoffset is set to."; pin in float toolang "angle difference between index and actual tool poition"; pin in float polyang "angle of the polygon"; pin in float spindlepos "Spindle position scaled to 1 per rev"; pin out float spindlerad "Spindle postion in radians"; pin out float polyradius "radious of the polygon at given spindle position"; pin out float xoffset "x offset to send to offset componant"; pin out float yoffset "y offset to send to the offset componant"; pin out signed xeoffset "x eoffset output"; pin out signed yeoffset "y eoffset output"; pin out bit isindex "set index enable only once"; pin io bit indexenable "hooked to index enable of encoder"; function _; license "GPL"; ;; #include <rtapi_math.h> #define PI 3.14159265358979323846 float spinang; float scale; float spinangoffset; float polyangoffset; if (!enable) { xoffset=0; yoffset=0; xeoffset=0; yeoffset=0; isindex = false; return; } // only set index enable once if (enable && !isindex) { isindex = true; indexenable = true; return; } // wait for spindle index before actually enabling if (enable && isindex && indexenable){ return; } //convert spinangoffset to ratio.. for adding to spindle pos - plus a couple rotations //so the spindle position isn't negative spinangoffset = (toolang/360-polyang/360)+2; polyangoffset = (polyang/360)*2*PI; //formual I found is for circumscribed - convert to inscribed - makes more sense. scale=inscribedradius/cos(PI/numsides); spinang = ((spindlepos + spinangoffset) - (int)(spindlepos + spinangoffset))*2*PI; polyradius = (cos(PI/numsides)/cos((fmod(spinang, (2*PI/numsides))-PI/numsides)))*scale-cutterdiam/2; //actual offsets applied - could be used for offset componant. xoffset = cos(spinang+polyangoffset)*polyradius * -1; yoffset = sin(spinang+polyangoffset)*polyradius; //counts for use with eoffset functionality xeoffset = xoffset / eoffsetscale; yeoffset = yoffset / eoffsetscale; spindlerad = spinang;

Please Log in to join the conversation.

More
6 years 7 months ago #159855 by cmorley
very cool.
Gonna try aluminum next? I dare you lol

Sanvik capto tool holders use a tapered polygon for connectons....

Please Log in to join the conversation.

More
6 years 7 months ago #160235 by skunkworks
now you can attach the radius to the x axis.. - create a profile.. (this is a radius into a taper..) You can see the resolution of the spindle encoder



Please Log in to join the conversation.

More
6 years 7 months ago #160244 by tommylight
Awesome !

Please Log in to join the conversation.

Time to create page: 0.062 seconds
Powered by Kunena Forum