CNCMill: Difference between revisions

From Traxel Wiki
Jump to navigation Jump to search
No edit summary
 
(146 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Category:Hacking]]
[[Category:Hacking]]
= Links =
* Radial and Axial Depth of Cut
** [https://www.cnccookbook.com/2-tools-calculating-cut-depth-cut-widthstepover-milling/ Cut Depth and Stepover]
** https://www.harveyperformance.com/in-the-loupe/depth-of-cut/
*** Perimeter Milling
**** RDOC
***** Finishing: 3% - 5% of tool diameter
***** Roughing: 10% to 50% of tool diameter
**** ADOC
***** Shallower for roughing, deeper for finishing.
*** Slotting
**** ADOC
***** Roughing: 10% to 50% of tool diameter
***** Finishing (bottom): 3% - 5% of tool diameter
* Feeds & Speeds
** https://www.the-carbide-end-mill-store.com/Feeds-and-Speeds.html
** [[Feeds_and_Speeds]]


= G-Code =
= G-Code =


This may be specific to Acorn CNC at HSL.
This may be specific to Acorn CNC at HSL.
* https://en.wikipedia.org/wiki/G-code


== Comments ==
== Comments ==
Line 71: Line 92:
== Arc Cuts ==
== Arc Cuts ==


G2 is a clockwise cut from the current position to the destination at { X, Y, Z } about the center { I, J, K }.
G2 is a clockwise cut from the current position { X1, Y1, Z1 } to the destination at { X2, Y2, Z2 } about the center { X1 + I, Y1 + J, Z1 + K }.
 
G3 is counterclockwise.


If the active plane is XY, all three Z's must be the same and do not need to be specified. The same applies for ZX and Y, and for YZ and X.
If the active plane is XY, all three Z's must be the same and do not need to be specified. The same applies for ZX and Y, and for YZ and X.
'''Note:''' I, J, and K are always incremental measurements from X1, Y1, Z1


<pre>
<pre>
Line 79: Line 104:
G90 (set absolute coordinates)
G90 (set absolute coordinates)
G1 X-1 Y0 Z0 (cut line to {-1, 0, 0 } at feed rate)
G1 X-1 Y0 Z0 (cut line to {-1, 0, 0 } at feed rate)
G2 X1 Y0 I0 J0 (cut arc to { 1, 0, 0 } about center at { 0, 0, 0 } )
G2 X1 Y0 I1 J0 (cut arc to { 1, 0, 0 } about center at { -1 + 1, 0 + 0, 0 } )
</pre>
</pre>


== Drill Array Pecking ==
== Drill Array Pecking ==


= Example =
TBD


== Bearing Cup ==
= Bearing Cup =
* [[BearingCupVersionOne]]
* [[BearingCupVersionTwo]]
* [[BearingCupVersionThree]]


=== Find Center of Part ===
= Gear Cutting =


* 25.4mm from long edge
== G-Code ==
* 13mm from short edge


=== Face Material ===
[[GearCuttingVersionOne]]


Lightest Possible Grazing Pass
== Notes ==


Zero Z with 1/2 End Mill
* On a 30mm radius gear, error from 1 degree involute curve approximation is on the order of thousandths of a millimeter.
* 20 degrees is the typical pressure angle.
* http://www.otvinta.com/gear.html
** http://www.otvinta.com/tutorial01.html
** Also: cnc-mill/involute_gear/calculator/Otvinta.com -- Involute Gear Calculator


<pre>
== Not Profile-Shifted ==
G21 (set units to millimeters)
G90 (set measurements to absolute, relative to machine zero)
F300 (set feed rate to 300mm per minute)
G0 Z20 (traverse to 20mm above part)
G0 X25 Y-50 (traverse to outside part)
G0 Z5 (traverse to 5mm above part)
G1 Z1 (feed to 1mm above part)
G1 X-235.35 (feed to stock end)
G1 Y50 (feed to stock far side)
G1 X25 (feed to stock right end)
G1 Y-45 (feed to first cutting pass)


G1 Z0
* Bottom of Root to Pitch Radius = module
G1 X-235.35 (feed to stock end)
* Pitch Radius to Tip Radius = module
G1 Y50 (feed to stock far side)
* module = distance along pitch radian from pitch circle at 0 radians to base circle at standard pressure angle radians
G1 X25 (feed to stock right end)
** See: https://www.tec-science.com/mechanical-power-transmission/involute-gear/undercut/
G1 Y-45 (feed to first cutting pass)
** "Calculation of the minimum number of teeth"
* 14 teeth minumum (17 hypothetical, 14 practical, some stretch to 12)


G0 Z20
== Profile Shifted ==
</pre>


=== Drill Center ===
* z=10, x=.4 pretty safe
* z=8, x=.4 probably works in practice
* https://khkgears.net/new/gear_knowledge/abcs_of_gears-b/gear_profile_shift.html
* http://www-mdp.eng.cam.ac.uk/web/library/enginfo/textbooks_dvd_only/DAN/gears/generation/generation.html


Zero Tool Z Manually w/ 5/16 drill, zero Z to drill shoulder.
== Mesh Check ==


<pre>
Looks promising:
G21 (set units to millimeters)
G90 (set measurements to absolute, relative to machine zero)
G0 Z20 (traverse to 20mm above part)
G0 X0 Y0 (traverse to origin XY)
F100 (set feed rate to 100mm per minute)
G1 Z-6 (peck to 6mm deep)
G0 Z6 (retract to 6mm above)
G0 Z0 (traverse to 0mm above)
G1 Z-12 (peck to 12mm deep)
G0 Z20 (traverse to 20mm above)
</pre>
 
Zero Tool Z Manually w/ 5/8 drill, zero Z to drill shoulder.


<pre>
[[File:Mesh check.png|thumb]]
G21 (set units to millimeters)
G90 (set measurements to absolute, relative to machine zero)
G0 Z20 (traverse to 20mm above part)
G0 X0 Y0 (traverse to origin XY)
F100 (set feed rate to 100mm per minute)
G1 Z-4 (peck to 4mm deep)
G0 Z6 (retract to 6mm above)
G0 Z0 (traverse to 0mm above)
G1 Z-9 (peck to 9mm deep)
G0 Z20 (traverse to 20mm above)
</pre>


=== Drill Screw Holes ===
= Geometry =


==== Drill Threaded Hole ====
== Circle from 3 Points ==


Use bit that came with M4-0.7 tap.
https://stackoverflow.com/questions/4103405/what-is-the-algorithm-for-finding-the-center-of-a-circle-from-three-points#4103418
 
Remove parallels.
 
Zero Z to drill bit shoulder.


<pre>
<pre>
G21 (set units to millimeters)
  public static Circle circleFromPoints(final Point p1, final Point p2, final Point p3)
G90 (set measurements to absolute, relative to machine zero)
  {
G0 Z20 (traverse to 20mm above part)
    final double offset = Math.pow(p2.x,2) + Math.pow(p2.y,2);
G0 X9.5 Y9.5 (traverse to screw hole center XY)
    final double bc =  ( Math.pow(p1.x,2) + Math.pow(p1.y,2) - offset )/2.0;
F150 (set feed rate to 150mm per minute)
    final double cd =  (offset - Math.pow(p3.x, 2) - Math.pow(p3.y, 2))/2.0;
G1 Z-5 (peck to 5mm deep)
    final double det =  (p1.x - p2.x) * (p2.y - p3.y) - (p2.x - p3.x)* (p1.y - p2.y);
G0 Z6 (retract to 6mm above)
   
G0 Z0 (traverse to 0mm above)
    if (Math.abs(det) < TOL) { throw new IllegalArgumentException("Yeah, lazy."); }
G1 Z-10 (peck to 10mm deep)
G0 Z6 (retract to 6mm above)
G0 Z0 (traverse to 0mm above)
G1 Z-15 (peck to 15mm deep)
G0 Z20 (traverse to 20mm above)
</pre>
 
==== Drill Slip Hole ====
 
Use .166" or 4.25mm bit.
 
Remove parallels.
 
Zero Z to drill bit shoulder.
 
<pre>
G21 (set units to millimeters)
G90 (set measurements to absolute, relative to machine zero)
G0 Z20 (traverse to 20mm above part)
G0 X-9.5 Y-9.5 (traverse to screw hole XY)
F150 (set feed rate to 150mm per minute)
G1 Z-5 (peck to 5mm deep)
G0 Z6 (retract to 6mm above)
G0 Z0 (traverse to 0mm above)
G1 Z-10 (peck to 10mm deep)
G0 Z6 (retract to 6mm above)
G0 Z0 (traverse to 0mm above)
G1 Z-15 (peck to 15mm deep)
G0 Z20 (traverse to 20mm above)
</pre>
 
=== Arc Bore Center ===
 
Zero Tool Z w/ 3/8 Square End Mill
 
==== Bearing Retainer ====
 
<pre>
G21 (set units to millimeters)
G90 (set measurements to absolute, relative to machine zero)
G0 Z20 (traverse to 20mm above part)
G0 X0 Y0 (traverse to origin XY)
F300 (set feed rate to 300mm per minute)
G0 Z5 (traverse to 5mm above part)
 
G1 Z1 (feed to 1mm above part)
G1 X4.23 (feed to bore size)
G2 X4.23 Y0 I0 J0 (bore circle to same location around machine zero)
G1 X0 Y0 (feed to origin)
 
G1 Z-2 (feed to 2mm below surface)
G1 X4.23 (feed to bore size)
G2 X4.23 Y0 I0 J0 (bore circle to same location around machine zero)
G1 X0 Y0 (feed to origin)
 
G1 Z-4 (feed to 4mm below surface)
G1 X4.23 (feed to bore size)
G2 X4.23 Y0 I0 J0 (bore circle to same location around machine zero)
G1 X0 Y0 (feed to origin)
 
G1 Z-6 (feed to 6mm below surface)
G1 X4.23 (feed to bore size)
G2 X4.23 Y0 I0 J0 (bore circle to same location around machine zero)
G1 X0 Y0 (feed to origin)
 
G1 Z-8 (feed to 8mm below surface)
G1 X4.23 (feed to bore size)
G2 X4.23 Y0 I0 J0 (bore circle to same location around machine zero)
G1 X0 Y0 (feed to origin)
 
G1 Z-10 (feed to 10mm below surface)
G1 X4.23 (feed to bore size)
G2 X4.23 Y0 I0 J0 (bore circle to same location around machine zero)
G1 X0 Y0 (feed to origin)
 
G0 Z20 (traverse to 20mm above part)
</pre>
 
==== Bearing Cup ====
 
<pre>
G21 (set units to millimeters)
G90 (set measurements to absolute, relative to machine zero)
G0 Z20 (traverse to 20mm above part)
G0 X0 Y0 (traverse to origin XY)
F300 (set feed rate to 300mm per minute)
G0 Z5 (traverse to 5mm above part)
 
G1 Z1 (feed to 1mm above part)
G1 X6.3 (feed to bore size)
G2 X6.3 Y0 I0 J0 (bore circle to same location around machine zero)
G1 X0 Y0 (feed to origin)
 
G1 Z-2 (feed to 2mm below surface)
G1 X6.3 (feed to bore size)
G2 X6.3 Y0 I0 J0 (bore circle to same location around machine zero)
G1 X0 Y0 (feed to origin)
 
G1 Z-4 (feed to 4mm below surface)
G1 X6.3 (feed to bore size)
G2 X6.3 Y0 I0 J0 (bore circle to same location around machine zero)
G1 X0 Y0 (feed to origin)
 
G1 Z-6 (feed to 6mm below surface)
G1 X6.3 (feed to bore size)
G2 X6.3 Y0 I0 J0 (bore circle to same location around machine zero)
G1 X0 Y0 (feed to origin)
 
G1 Z-7 (feed to 7mm below surface)
G1 X6.3 (feed to bore size)
G2 X6.3 Y0 I0 J0 (bore circle to same location around machine zero)
G1 X0 Y0 (feed to origin)
 
G0 Z20 (traverse to 20mm above part)
</pre>
 
=== Arc Cut Perimeter ===
 
Zero Tool Z w/ 3/8 Square End Mill
 
Check for Z-9 Clearance above Vise
 
==== Bearing Retainer ====
 
<pre>
G21 (set units to millimeters)
G90 (set measurements to absolute, relative to machine zero)
F300 (set feed rate to 300mm per minute)
G0 Z20 (traverse to 20mm above part)
G0 X25 Y5.7 (traverse to cut start XY)
G0 Z5 (traverse to 5mm above part)
 
G1 Z1 (feed to 1mm above part)
G1 X16.23 (feed to first arc start)
G2 X-5.7 Y-16.23 I0 J0 (arc cut to second arc start)
G2 X-16.23 Y-5.7 I-9.5 J-9.5 (arc cut to third arc start)
G2 X5.7 Y16.23 I0 J0 (arc cut to fourth arc start)
G2 X16.23 Y5.7 I9.5 J9.5 (arc cut to first arc start)
G1 X25 (cut to outside part)
 
G1 Z-2 (feed to 2mm below part)
G1 X16.23 (feed to first arc start)
G2 X-5.7 Y-16.23 I0 J0 (arc cut to second arc start)
G2 X-16.23 Y-5.7 I-9.5 J-9.5 (arc cut to third arc start)
G2 X5.7 Y16.23 I0 J0 (arc cut to fourth arc start)
G2 X16.23 Y5.7 I9.5 J9.5 (arc cut to first arc start)
G1 X25 (cut to outside part)
 
G1 Z-4 (feed to 4mm below part)
G1 X16.23 (feed to first arc start)
G2 X-5.7 Y-16.23 I0 J0 (arc cut to second arc start)
G2 X-16.23 Y-5.7 I-9.5 J-9.5 (arc cut to third arc start)
G2 X5.7 Y16.23 I0 J0 (arc cut to fourth arc start)
G2 X16.23 Y5.7 I9.5 J9.5 (arc cut to first arc start)
G1 X25 (cut to outside part)
 
G1 Z-6 (feed to 6mm below part)
G1 X16.23 (feed to first arc start)
G2 X-5.7 Y-16.23 I0 J0 (arc cut to second arc start)
G2 X-16.23 Y-5.7 I-9.5 J-9.5 (arc cut to third arc start)
G2 X5.7 Y16.23 I0 J0 (arc cut to fourth arc start)
G2 X16.23 Y5.7 I9.5 J9.5 (arc cut to first arc start)
G1 X25 (cut to outside part)
 
G1 Z-8 (feed to 8mm below part)
G1 X16.23 (feed to first arc start)
G2 X-5.7 Y-16.23 I0 J0 (arc cut to second arc start)
G2 X-16.23 Y-5.7 I-9.5 J-9.5 (arc cut to third arc start)
G2 X5.7 Y16.23 I0 J0 (arc cut to fourth arc start)
G2 X16.23 Y5.7 I9.5 J9.5 (arc cut to first arc start)
G1 X25 (cut to outside part)
 
G1 Z-9 (feed to 9mm below part)
G1 X16.23 (feed to first arc start)
G2 X-5.7 Y-16.23 I0 J0 (arc cut to second arc start)
G2 X-16.23 Y-5.7 I-9.5 J-9.5 (arc cut to third arc start)
G2 X5.7 Y16.23 I0 J0 (arc cut to fourth arc start)
G2 X16.23 Y5.7 I9.5 J9.5 (arc cut to first arc start)
G1 X25 (cut to outside part)


G0 Z20 (traverse to 20mm above part)
    final double idet = 1/det;
   
    final double centerx =  (bc * (p2.y - p3.y) - cd * (p1.y - p2.y)) * idet;
    final double centery =  (cd * (p1.x - p2.x) - bc * (p2.x - p3.x)) * idet;
    final double radius =
      Math.sqrt( Math.pow(p2.x - centerx,2) + Math.pow(p2.y-centery,2));
   
    return new Circle(new Point(centerx,centery),radius);
  }
</pre>
</pre>

Latest revision as of 06:11, 4 August 2022


Links

G-Code

This may be specific to Acorn CNC at HSL.

Comments

Comments are in parentheses.

G0X0Y0 (rapid traverse to origin - the traverse will be executed, but this parenthetical comment is ignored)

Active Units

G20 (set active units to inches)
G21 (set active units to millimeters)

Absolute v. Incremental

G90 (absolute measurements, relative to machine zero)
G91 (incremental measurements, relative to previous ending position)

Feeds

F sets the feed rate in the active units.

G20 (inches)
F15 (15 inches per minute)
G1 X0 Y0 (traverse to origin at 15 IPM) (spaces are optional)
G21 (millimeters)
F375 (375 mm per minute)
G1X0Y0 (traverse to origin at 375mmPM)

Straight Line Traversal

G0 is fast traversal. Careful not to run the tool into the part. Each axis is run at full speed until reaching its destination (ie: the tool follows multiple line segments, not an interpolated straight line).

G21 (set millimeters)
G90 (set absolute coordinates)
G0X3 (fast traverse the X axis to origin + 3 millimeters)
G0X1Y-2.6Z3 (fast traverse to { 1, -2.6, 3 } millimeters)
G0X0Y0Z0 (fast traverse to origin)
G0 X1 Y-2.6 Z3 (fast traverse to { 1, -2.6, 3} mm with spaces for readability)

Straight Line Cuts

G1 is an interpolated straight line from current position to the new position, moving at feed rate.

G21 (set millimeters)
G90 (set absolute coordinates)
F350 (set feed speed to 350mm per minute)
G0X0Y0Z0 (move to origin)
G1X10Y20Z-5 (move in a straight line from {0,0,0} to {10,20,-5} at 350mm per minute)

Plane Selection

G17, G18, G19 select XY, ZX, or YZ as the active plane.

Arc Cuts

G2 is a clockwise cut from the current position { X1, Y1, Z1 } to the destination at { X2, Y2, Z2 } about the center { X1 + I, Y1 + J, Z1 + K }.

G3 is counterclockwise.

If the active plane is XY, all three Z's must be the same and do not need to be specified. The same applies for ZX and Y, and for YZ and X.

Note: I, J, and K are always incremental measurements from X1, Y1, Z1

G17 (set plane to XY)
G90 (set absolute coordinates)
G1 X-1 Y0 Z0 (cut line to {-1, 0, 0 } at feed rate)
G2 X1 Y0 I1 J0 (cut arc to { 1, 0, 0 } about center at { -1 + 1, 0 + 0, 0 } )

Drill Array Pecking

TBD

Bearing Cup

Gear Cutting

G-Code

GearCuttingVersionOne

Notes

Not Profile-Shifted

Profile Shifted

Mesh Check

Looks promising:

Mesh check.png

Geometry

Circle from 3 Points

https://stackoverflow.com/questions/4103405/what-is-the-algorithm-for-finding-the-center-of-a-circle-from-three-points#4103418

  public static Circle circleFromPoints(final Point p1, final Point p2, final Point p3)
  {
    final double offset = Math.pow(p2.x,2) + Math.pow(p2.y,2);
    final double bc =   ( Math.pow(p1.x,2) + Math.pow(p1.y,2) - offset )/2.0;
    final double cd =   (offset - Math.pow(p3.x, 2) - Math.pow(p3.y, 2))/2.0;
    final double det =  (p1.x - p2.x) * (p2.y - p3.y) - (p2.x - p3.x)* (p1.y - p2.y); 
    
    if (Math.abs(det) < TOL) { throw new IllegalArgumentException("Yeah, lazy."); }

    final double idet = 1/det;
     
    final double centerx =  (bc * (p2.y - p3.y) - cd * (p1.y - p2.y)) * idet;
    final double centery =  (cd * (p1.x - p2.x) - bc * (p2.x - p3.x)) * idet;
    final double radius = 
       Math.sqrt( Math.pow(p2.x - centerx,2) + Math.pow(p2.y-centery,2));
    
    return new Circle(new Point(centerx,centery),radius);
  }