CNCMill: Difference between revisions

From Traxel Wiki
Jump to navigation Jump to search
No edit summary
 
(16 intermediate revisions by the same user not shown)
Line 16: Line 16:
***** Roughing: 10% to 50% of tool diameter
***** Roughing: 10% to 50% of tool diameter
***** Finishing (bottom): 3% - 5% 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 107: Line 112:


= Bearing Cup =
= Bearing Cup =
[[BearingCupVersionOne]]
* [[BearingCupVersionOne]]
[[BearingCupVersionTwo]]
* [[BearingCupVersionTwo]]
== Drill Ears ==
* [[BearingCupVersionThree]]
<pre>
;; ------------------------------
;; Drill Ears (001)
;; ------------------------------
;; Use 1/2" x 2" rectangle 6061 T6, at least 28mm long.
;; Spindle RPM to 1200
;; Zero X to 14mm left of end
;; Zero Y to middle of material
;; Insert Appropriate drill bit (.166 for slip, M4-0.7 tap drill bit for threads)
;; Zero Z to shoulder of drill bit
;; Check H128 for zero offset
;; Check T128 for zero diameter
 
G21 (set units to millimeters)
G90 (set measurements to absolute, relative to machine zero)
F60 (set feed rate to 60mm per minute, 0.025 mm per tooth)
T128 (tool with zero height and diameter)
G43 H128 (height offset zero)
 
G0 Z20 (traverse to 20mm above part)
 
G0 X8 Y12.09 (traverse to screw hole center XY)
G0 Z5 (traverse to 5mm above)
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 - top has not been faced yet)
 
G0 Z20 (traverse to 20mm above)
 
M30 (end of program)
</pre>
== Drill Center ==
<pre>
;; ------------------------------------
;; Drill Center, Starter Bit (002)
;; ------------------------------------
;; Insert 5/16" or 8mm drill bit
;; Zero Z to shoulder of drill bit
 
G21 (set units to millimeters)
G90 (set measurements to absolute, relative to machine zero)
F60 (set feed rate to 60mm per minute, 0.025 mm per tooth)
T128 (tool with zero height and diameter)
G43 H128 (height offset zero)
 
G0 Z20 (traverse to 20mm above part)
 
G0 X0 Y0 (traverse to screw hole center XY)
G0 Z5 (traverse to 5mm above)
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 - top has not been faced yet)
 
G0 Z20 (traverse to 20mm above)
 
M30 (end of program)
</pre>
<pre>
;; ------------------------------------
;; Drill Center, Final Bit (003)
;; ------------------------------------
;; Insert 1/2" or 13mm drill bit
;; Zero Z to shoulder of drill bit
 
G21 (set units to millimeters)
G90 (set measurements to absolute, relative to machine zero)
F60 (set feed rate to 60mm per minute, 0.025 mm per tooth)
T128 (tool with zero height and diameter)
G43 H128 (height offset zero)
 
G0 Z20 (traverse to 20mm above part)
 
G0 X0 Y0 (traverse to screw hole center XY)
G0 Z5 (traverse to 5mm above)
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 - top has not been faced yet)


G0 Z20 (traverse to 20mm above)
= Gear Cutting =


M30 (end of program)
== G-Code ==
</pre>


== Face Part ==
[[GearCuttingVersionOne]]
<pre>
;; ----------------------------------------
;; Face Part (004)
;; ----------------------------------------
;; Insert 6mm carbide square end mill
;; Set RPM to 5,000, 300 SFM
;; Zero Z to a grazing cut.


G21 (set units to millimeters)
== Notes ==
G90 (set measurements to absolute, relative to machine zero)
F500 (set feed speed to 500mm per minute, 0.025 mm per tooth)
T128 (tool with zero height and diameter)
G43 H128 (height offset zero)


G0 Z20 (traverse to 20mm above part)
* 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


G17 (set XY coordinate system for arc cuts)
== Not Profile-Shifted ==


G0 X20 Y0.56 (traverse to outside part)
* Bottom of Root to Pitch Radius = module
G0 Z5 (traverse to 5mm above part)
* Pitch Radius to Tip Radius = module
G1 Z0 (feed to grazing cut)
* module = distance along pitch radian from pitch circle at 0 radians to base circle at standard pressure angle radians
G1 X6.34 Y9.59 (feed to start of upper right ear)
** See: https://www.tec-science.com/mechanical-power-transmission/involute-gear/undercut/
G2 X6.34 Y9.59 I1.66 J2.5 (CW arc cut to same position about upper right ear)
** "Calculation of the minimum number of teeth"
G3 X-6.34 Y-9.59 I-6.34 J-9.59 (CCW arc cut to lower left ear about origin)
* 14 teeth minumum (17 hypothetical, 14 practical, some stretch to 12)
G2 X-6.34 Y-9.59 I-1.66 J-2.5 (CW arc cut to same position about lower left ear)
G3 X6.34 Y9.59 I6.34 J9.59 (CCW arc cut back to where we stared about origin)


G0 Z20 (traverse to 20mm above)
== Profile Shifted ==
M30 (end of program)
</pre>


== Round Pocket in Center ==
* z=10, x=.4 pretty safe
<pre>
* z=8, x=.4 probably works in practice
;; --------------------------------------
* https://khkgears.net/new/gear_knowledge/abcs_of_gears-b/gear_profile_shift.html
;; Round Pocket in Center (005)
* http://www-mdp.eng.cam.ac.uk/web/library/enginfo/textbooks_dvd_only/DAN/gears/generation/generation.html
;; --------------------------------------
G21 (set units to millimeters)
G90 (set measurements to absolute, relative to machine zero)
F500 (set feed speed to 500mm per minute, 0.025 mm per tooth)
T128 (tool with zero height and diameter)
G43 H128 (height offset zero)


G0 Z20 (traverse to 20mm above)
== Mesh Check ==


G0 X0 Y0 (traverse to starting point)
Looks promising:


;; Rough Cut for Retainer
[[File:Mesh check.png|thumb]]
G0 Z5 (traverse to 5mm above part)
G1 Z-2 (2mm below surface)
G1 X5.75 Y0 (8.75mm R / 17.5 mm D)
G3 X5.75 Y0 I-5.75 J0 (circle about origin)
G0 X0 Y0
G1 Z-4 (4mm below surface)
G1 X5.75 Y0 (8.75mm R / 17.5 mm D)
G3 X5.75 Y0 I-5.75 J0 (circle about origin)
G0 X0 Y0
G1 Z-6 (6mm below surface)
G1 X5.75 Y0 (8.75mm R / 17.5 mm D)
G3 X5.75 Y0 I-5.75 J0 (circle about origin)
G0 X0 Y0
G1 Z-8 (8mm below surface)
G1 X5.75 Y0 (8.75mm R / 17.5 mm D)
G3 X5.75 Y0 I-5.75 J0 (circle about origin)
G0 X0 Y0
G1 Z-9 (9mm below surface)
G1 X5.75 Y0 (8.75mm R / 17.5 mm D)
G3 X5.75 Y0 I-5.75 J0 (circle about center)
G0 X0 Y0


;; Rough Cut for Bearing Cup
= Geometry =
G0 Z5 (traverse to 5mm above part)
G1 Z-2 (2mm below surface)
G1 X7.75 Y0 (10.75mm R / 21.5 mm D)
G3 X7.75 Y0 I-7.75 J0 (circle about origin)
G0 X0 Y0
G1 Z-4 (4mm below surface)
G1 X7.75 Y0 (10.75mm R / 21.5 mm D)
G3 X7.75 Y0 I-7.75 J0 (circle about origin)
G0 X0 Y0
G1 Z-6 (6mm below surface)
G1 X7.75 Y0 (10.75mm R / 21.5 mm D)
G3 X7.75 Y0 I-7.75 J0 (circle about origin)
G0 X0 Y0
G1 Z-6.85 (6.85mm below surface)
G1 X7.80 Y0 (10.80mm R / 21.6 mm D)
G3 X7.80 Y0 I-7.80 J0 (circle about origin)
G0 X0 Y0


;; Finish Cut for Retainer
== Circle from 3 Points ==
G0 X0 Y0 (traverse to origin XY)
F200 (set feed speed to 200mm per minute, 0.010 mm per tooth)
G1 Z-9 (feed to 9mm below part)
G1 X6 Y0 (9mm R / 18mm D)
G3 X6 Y0 I-6 J0 (circle about origin)
G0 X0 Y0


;; Finish Cut for Bearing Cup
https://stackoverflow.com/questions/4103405/what-is-the-algorithm-for-finding-the-center-of-a-circle-from-three-points#4103418
G0 X0 Y0 (traverse to origin XY)
F200 (set feed speed to 200mm per minute, 0.010 mm per tooth)
G1 Z-7.1 (feed to 7.1mm below surface)
G1 X8.05 Y0 (11.05mm R / 22.1mm D)
G3 X8.05 Y0 I-8.05 J0 (circle about origin)
G0 X0 Y0


G0 Z20 (traverse to 20mm above)
M30 (end of program)
</pre>
== Perimeter Cut ==
<pre>
<pre>
;; --------------------------------------
  public static Circle circleFromPoints(final Point p1, final Point p2, final Point p3)
;; Perimeter Cut (006)
  {
;; --------------------------------------
    final double offset = Math.pow(p2.x,2) + Math.pow(p2.y,2);
G21 (set units to millimeters)
    final double bc =  ( Math.pow(p1.x,2) + Math.pow(p1.y,2) - offset )/2.0;
G90 (set measurements to absolute, relative to machine zero)
    final double cd =  (offset - Math.pow(p3.x, 2) - Math.pow(p3.y, 2))/2.0;
F500 (set feed speed to 500mm per minute, 0.025 mm per tooth)
    final double det =  (p1.x - p2.x) * (p2.y - p3.y) - (p2.x - p3.x)* (p1.y - p2.y);  
T128 (tool with zero height and diameter)
   
G43 H128 (height offset zero)
    if (Math.abs(det) < TOL) { throw new IllegalArgumentException("Yeah, lazy."); }
 
G0 Z20 (traverse to 20mm above)
 
G0 X20 Y7.2 (traverse to starting point)
G0 Z5 (traverse to 5mm above part)
 
;; Rough Cut for Perimeter
G1 Z-2 (feed to 2mm below surface)
G2 X-1.14 Y-15.71 I-14.01 J-7.2 (A to B)
G2 X-14.01 Y-7.2 I-6.86 J3.62 (B to C)
G2 X1.14 Y15.71 I14.01 J7.2 (C to D)
G2 X14.01 Y7.2 I6.86 J-3.62 (D to A)
G0 X20 Y7.2
G1 Z-4 (feed to 2mm below surface)
G2 X-1.14 Y-15.71 I-14.01 J-7.2 (A to B)
G2 X-14.01 Y-7.2 I-6.86 J3.62 (B to C)
G2 X1.14 Y15.71 I14.01 J7.2 (C to D)
G2 X14.01 Y7.2 I6.86 J-3.62 (D to A)
G0 X20 Y7.2
G1 Z-6 (feed to 2mm below surface)
G2 X-1.14 Y-15.71 I-14.01 J-7.2 (A to B)
G2 X-14.01 Y-7.2 I-6.86 J3.62 (B to C)
G2 X1.14 Y15.71 I14.01 J7.2 (C to D)
G2 X14.01 Y7.2 I6.86 J-3.62 (D to A)
G0 X20 Y7.2
G1 Z-8 (feed to 2mm below surface)
G2 X-1.14 Y-15.71 I-14.01 J-7.2 (A to B)
G2 X-14.01 Y-7.2 I-6.86 J3.62 (B to C)
G2 X1.14 Y15.71 I14.01 J7.2 (C to D)
G2 X14.01 Y7.2 I6.86 J-3.62 (D to A)
G0 X20 Y7.2
G1 Z-9 (feed to 2mm below surface)
G2 X-1.14 Y-15.71 I-14.01 J-7.2 (A to B)
G2 X-14.01 Y-7.2 I-6.86 J3.62 (B to C)
G2 X1.14 Y15.71 I14.01 J7.2 (C to D)
G2 X14.01 Y7.2 I6.86 J-3.62 (D to A)
G0 X20 Y7.2
 
G0 X20 Y7.23 (traverse to starting point)
 
;; Finish Cut for Perimeter
F200 (set feed speed to 200mm per minute, 0.010 mm per tooth)
G1 Z-9 (feed to 9mm below part)
G2 X-1.14 Y-15.71 I-14.01 J-7.2 (A to B)
G2 X-14.01 Y-7.2 I-6.86 J3.62 (B to C)
G2 X1.14 Y15.71 I14.01 J7.2 (C to D)
G2 X14.01 Y7.2 I6.86 J-3.62 (D to A)
G0 X20 Y7.23


G0 Z20 (traverse to 20mm above)
    final double idet = 1/det;
M30 (end of program)
   
    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);
  }