On Wednesday 21 March 2018 10:47:31 Ken Strauss wrote: > I need to thread mill some tapered threads (similar to normal pipe > threads -- NPT). I am considering using polar coordinates in > incremental mode to approximate a tapered helix. Is that reasonable? > Is there a better way? Will cumulative errors bite me after hundreds > of incremental moves? > How big, Ken? Inside I assume... I have used both the G76 and G33.1 for low angle stuffs by setting the entrance or exit paper length to 1 pitch less than the length of the thread. The man page is wrong when says the taper limit is 1/2 the thread length. I think that could be extended by doing the first using that rule of one pitch less than the total stroke, and if thats not deep enough, advance the z a multiple of the pitch, I've not proved it, might need some adjusting, and reduce the starting r by the height difference used in the first pass.
I have used this code to make a socket in the end of a shaft, that with a matching taper threaded nut, and making 4 petals out of the walls with edm, to compress an A2 shaft onto a smallish ball screw, by tightening the nut. Its driving the x axis of my Sheldon 11x36 right now. With some green threadlocker in the socket, I don't expect it to slip until I loosen the nut. Here is that file, quite complex because I tend to make a one trip Bumstead out of projects like this, so it can be switched from boreing to turning yadda yadda. Setup ATM for making the nut described above. load it into LinuxCNC, and expand the backplot to get a good view of what it does. Reading the code will show you where and what to modify for your project, if its usable at all. ===================cut here> % ( this is to make use of the g33 routine to carve a thread in the format ) ( of a pipe thread, in this case an odd size that would resemble a 3/16" ) ( pipe thread is indeed there ever was such a thing. :) ( because that seems to be a Merican only thing, all starting dimensions are in inch) ( there is a BS spec, looks a lot like ASTME to me :) ( since everything is converted to metric below, make sure its in metric mode) ( We start not with a Merican fractonal, but at any arbitrary size ) ( and tpi, and degrees of taper desired if desired. ) ( length of taper will be based on the thickness of the nut, which will determine ) ( that the stated angle will be true for the length of the nut ) ( however, the actual Z travel will be longer since the initial Z should be a ) ( couple mm's from first contact.) (logopen,/home/gene/linuxcnc/g33debug.txt) G21 (metric) G8 (lathe radius mode) G61 S350 ( set straight, like g76 by bypassing the G33 stuff) #<_do_taper> = 0.000000 #<_taper_deg> = 7 ( degrees here, translates to sin[7] later) #<_bore_turn> = 0.00000000 ( 1 for bore, zero for an external profile) #<_input_is_inch> = 1.00000000 ( zero for all metric inputs) #<_tpi> = 50 (adjustable. If input is inches, use inch, else PUT mm's here) #<_mkmmfctr> = 25.4 (inch <-> metric conversion) ( constants from Cecils images ) #<_e_xz_fctr> = 0.7082000000 ( external -x +z combined feed factor) #<_e_doc_fctr> = 0.6134000000 ( external thread d.o.c. external cuts deeper) #<_i_xz_fctr> = 0.6250000000 ( internal +x +z combined feed factor) #<_i_doc_fctr> = 0.5427000000 ( internal thread d.o.c. internal is shallower) (edit these) #<_start_OD> = 0.75500000 ( this is inches at the min/max OD of thread it fits) #<_thread_len> = 0.56000000 (is inches, thickness of nut I started with ) #<_passes> = 25.00000000 (easy on the tool, constant advance) #<_spring_passes> = 5.00000000 (z advance derived from Cecils images IS NOT 100% CORRECT YET) #<_e_z_advance> = [[#<_e_xz_fctr> - #<_e_doc_fctr>] / #<_passes>] #<_i_z_advance> = [[#<_i_xz_fctr> - #<_i_doc_fctr>] / #<_passes>] (log,38 e z advance per pass=#<_e_z_advance>) (log,39 i z advance per pass=#<_i_z_advance>) ( now the x increments) #<_e_x_advance> = [#<_e_doc_fctr> / #<_passes>] #<_i_x_advance> = [#<_i_doc_fctr> / #<_passes>] (log,43 e x advance per pass=#<_e_x_advance>) (log,44 i x advance per pass=#<_i_x_advance>) ( these figures s/b very small ) o005 IF [#<_input_is_inch> gt 0.50000000] #<_tpmm> = [#<_mkmmfctr> / #<_tpi>] (mm's! - is correct ) #<_start_OD> = [#<_start_OD> * 0.5000000 * #<_mkmmfctr>] #<_thread_len> = [#<_thread_len> * #<_mkmmfctr>] o005 ELSE #<_tpmm> = #<_tpi> o005 ENDIF (log,57 tpmm=#<_tpmm>) (log,58 start OD in mm=#<_start_OD>) (log,59 thread length in mm=#<_thread_len>) ( now we have the Major radius start_OD that everything else references one way or another ) #<_e_x_mnr_R> = [#<_start_OD> + [#<_e_doc_fctr> * #<_tpmm>]] ( final d.o.c. ) #<_e_x_mjr_R> = [#<_start_OD> + #<_tpmm>] #<_i_x_mjr_R> = #<_start_OD> ( final size of thread s/b correct ) ( s/b reasonable mm's? below ) (log,65 i_x_mjr_R=#<_i_x_mjr_R>) #<_i_x_mnr_R> = [#<_i_x_mjr_R> - [#<_i_doc_fctr>* #<_tpmm>]] ( starting bore size for the nut ) (log,68 tpmm=#<_tpmm>) (log,69 e_mjr_R=#<_e_x_mjr_R>) (log,70 e_mnr_R=#<_e_x_mnr_R>) (log,71 i_mjr_R=#<_i_x_mjr_R>) (log,72 i_mnr_R=#<_i_x_mnr_R>) #<_e_pass> = [#<_e_x_advance> / #<_passes>] (log,75 e_pass=#<_e_pass>) #<_i_pass> = [#<_i_x_advance> / #<_passes>] (log,77 i_pass=#<_i_pass>) ( now 4 more things that will be needed, P/8 will be assumed as ) ( real tip flat + 0.000, but real tip flat width has yet TBD. So ) ( assume it has a finite value = pdiv8 with the sign made negative ) ( so pdiv8=0.00, pdiv6 and pdiv4 reduced accordingly. This DOES NOT ) ( change with the thread being cut, but with the chip doing the cutting ) ( So P/6 will be P/6 - real tip flat ) ( and P/4 will be P/4 - real tip flat ) #<_realtipflat> = -0.1175930000 (will make pdiv8=0.0000 until I know better ) #<_pdiv8> = [[#<_tpmm> / 8.00000000 ] + #<_realtipflat>] #<_pdiv6> = [[#<_tpmm> / 6.00000000 ] + #<_realtipflat>] #<_pdiv4> = [[#<_tpmm> / 4.00000000 ] + #<_realtipflat>] (log,90 realtipflat=#<_realtipflat>) (log,91 pdiv8=#<_pdiv8>) (log,92 pdiv6=#<_pdiv6>) (log,93 pdiv4=#<_pdiv4>) ( now we can adjust realtipflat until its correct, but my machine ) ( is not THAT accurate. Time to make that tapered front gib. ) ( 2 months later!) ( done, made both, turned out to be hell with a twisted file!) ( looks like I might be ready to state the premise of what we do with ) ( all this data. ) o100 IF [#<_bore_turn> gt 0.500000] (we're making a nut) #<_start_rad> = #<_i_x_mjr_R> #<_end_rad> = #<_i_x_mnr_R> #<_x_advance> = #<_i_x_advance> #<_z_advance> = -#<_i_z_advance> #<_back_clear> = [#<_end_rad> - [#<_tpmm> * 0.50000000]] #<_z_end> = -#<_thread_len> #<_x_taper> = -[0.50000000 * #<_thread_len> * SIN[#<_taper_deg>]] o100 ELSE ( we are turning a shaft) #<_e_x_mnr_R> = [#<_start_OD> - [#<_e_doc_fctr> * #<_tpmm>]] ( final d.o.c. ) #<_e_x_mjr_R> = [#<_start_OD> + #<_tpmm>] (we're cutting an external taper) #<_start_rad> = #<_e_x_mnr_R> #<_end_rad> = #<_e_x_mjr_R> #<_x_advance> = #<_e_x_advance> #<_z_advance> = #<_e_z_advance> #<_back_clear> = [#<_start_rad> + 1] #<_z_end> = -#<_thread_len> #<_x_taper> = [0.50000000 * #<_thread_len> * SIN[#<_taper_deg>]] o100 ENDIF (log,115 start rad=#<_start_rad>) (log,116 end rad=#<_end_rad>) (log,117 x advance per pass=#<_x_advance>) (log,118 z advance per pass=#<_z_advance>) (logclose) (m6t6) m3 #<_z_tmp> = 0.00000000 #<_x_tmp> = 0.00000000 (G1 f650 Z2) (G1 X#<_start_rad>) o600 IF [#<_do_taper> gt .5000000] o500 WHILE [#<_passes> gt 0.0000000] (G1f400 Z#<_z_tmp>) G1 F500 X[#<_start_rad> - #<_x_tmp>] G1 Z#<_z_tmp> (G33 x z k) G33 Z[#<_z_end> + #<_z_tmp>] X[#<_end_rad> - #<_x_tmp>] K#<_tpmm> G1 F800 x#<_back_clear> G1 F950 z#<_z_tmp> #<_z_tmp> = [#<_z_tmp> + [-#<_z_advance> * 4.0000000]] #<_x_tmp> = [#<_x_tmp> + #<_x_advance>] #<_passes> = [#<_passes> - 1.00000000] o500 ENDWHILE #<_count> = #<_spring_passes> o550 WHILE [#<_count> ge 0.00000] g1 x#<_back_clear> g1 F750 z#<_z_tmp> G1 F600 X[#<_start_rad> - #<_x_tmp>] G33 Z[#<_z_end> + #<_z_tmp>] X[#<_end_rad> - #<_x_tmp>] K#<_tpmm> #<_count> = [#<_count> - 1.000000] o550 ENDWHILE G1 F500 Z0.0000 (back at starting Z) #<_z_tmp> = 0.00000 #<_x_tmp> = 0.00000 G1 F50 x[#<_start_OD> + 2.355000000] (in mm's folks, shrink to cut deeper) G1 z#<_z_tmp> (debug,start_od=#<_start_OD>) #<_thread_len> = [#<_thread_len> + 0.25000] (debug,thread_len=#<_thread_len>) #<_i_tmp> = -1.75000 (debug,_tpmm=#<_tpmm>) #<_k_tmp> = [#<_tpmm> * 1.95000] (debug,k_tmp=#<_k_tmp>) o600 ENDIF #<_k_tmp> = [#<_tpmm> * 1.95000] #<_i_tmp> = 0.90000 G1 F400 x[#<_start_OD> - 2.400] G1 F400 z0.0000 ( and back to the starting z) ( one line added to cut rear tapered nut) #<_e_taper> = ABS[#<_thread_len> - #<_tpmm>] G76 Z-#<_thread_len> I#<_i_tmp> j.150 P#<_tpmm> K#<_k_tmp> Q29.9 R1.7 H10 E#<_e_taper> L2 G1 x[#<_start_OD> - 2.000] G1 F950 z200 m5 m2 <cut here================== -- Cheers, Gene Heskett -- "There are four boxes to be used in defense of liberty: soap, ballot, jury, and ammo. Please use in that order." -Ed Howdershelt (Author) Genes Web page <http://geneslinuxbox.net:6309/gene> ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Emc-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/emc-users
