จากแบบจำลองดิจิทัลสู่ชิ้นงานจริง ด้วย FreeCAD
การเปลี่ยนแบบจำลอง 3 มิติที่อยู่ในคอมพิวเตอร์ให้กลายเป็นวัตถุที่จับต้องได้จริงคือกระบวนการที่น่าทึ่ง ซึ่งเปรียบเสมือนเวทมนตร์ในโลกยุคใหม่ เอกสารนี้จะพาคุณไปสำรวจภาพรวมของการเดินทางชิ้นนี้ โดยเริ่มต้นจากการออกแบบสเตอร์จักรยานอย่างชาญฉลาดในโปรแกรม FreeCAD ไปจนถึงการสร้างชุดคำสั่งที่พร้อมส่งให้เครื่องจักร CNC สามารถผลิตชิ้นงานออกมาได้จริงทีละขั้นตอน
1. การสร้างแบบจำลอง 3 มิติแบบพาราเมตริก
ก่อนที่เราจะเริ่มการผลิตใดๆ สิ่งแรกที่ต้องมีคือพิมพ์เขียวดิจิทัลที่มีความแม่นยำสูง ในขั้นตอนนี้ เราจะใช้เทคนิคการออกแบบอันทรงพลังที่เรียกว่า “การออกแบบเชิงพาราเมตริก” (Parametric Design) เพื่อสร้างแบบจำลอง 3 มิติที่ยืดหยุ่นและปรับเปลี่ยนได้ง่าย
แนวคิดหลัก: การออกแบบพาราเมตริกคืออะไร?
แนวคิดหลักของการออกแบบเชิงพาราเมตริกคือการสร้างแบบจำลองโดยอ้างอิงกับตัวแปร (Variables) ที่เรากำหนดไว้ล่วงหน้า แทนที่จะกำหนดขนาดเป็นตัวเลขตายตัว เมื่อเราเปลี่ยนค่าของตัวแปร แบบจำลองทั้งหมดที่เชื่อมโยงกับตัวแปรนั้นจะปรับปรุงตัวเองโดยอัตโนมัติ
สำหรับโปรเจกต์สเตอร์จักรยานนี้ มีตัวแปรสำคัญ 2 ตัวคือ:
- number_of_teeth (จำนวนฟัน): นี่คือตัวแปรหลักเพียงตัวเดียวที่เราต้องป้อนค่าด้วยตนเอง มันทำหน้าที่ควบคุมรูปทรงและขนาดโดยรวมทั้งหมดของสเตอร์จักรยาน
- diameter_chain_ring (เส้นผ่านศูนย์กลางสเตอร์): ตัวแปรนี้เป็นค่าที่ถูกคำนวณโดยอัตโนมัติจาก
number_of_teeth
โดยใช้สูตรทางวิศวกรรมที่แม่นยำ ซึ่งอ้างอิงกับระยะพิทช์ (Pitch) มาตรฐานของโซ่จักรยานที่ 12.7 มม.
สรุปขั้นตอนการสร้างแบบจำลอง
- สร้างรูปทรงพื้นฐาน: เริ่มต้นด้วยการสร้างรูปทรงกระบอกง่ายๆ เพื่อกำหนดโครงสร้างหลักและความหนาของสเตอร์
- ออกแบบรูปทรงสำหรับร่องฟันสเตอร์ 1 ช่อง: ออกแบบรูปทรงของ “ช่องว่าง” หรือร่องสำหรับให้ลูกกลิ้งของโซ่จักรยานเข้ามาพอดีอย่างปราณีตเพียง 1 ช่อง
- ทำซ้ำด้วยเครื่องมือ Pattern: ใช้เครื่องมือ “Polar Pattern” เพื่อทำสำเนาร่องฟันสเตอร์ที่ออกแบบไว้รอบสเตอร์ทั้งหมดโดยอัตโนมัติ โดยอ้างอิงจากค่าของตัวแปร
number_of_teeth
- เพิ่มรายละเอียด: ออกแบบรูตรงกลาง, รูสำหรับยึดน็อต, และช่องตกแต่งต่างๆ พร้อมเก็บรายละเอียดขั้นสุดท้าย เช่น การลบมุมโค้ง (fillets) และการลบมุมตัด (chamfers)
ประโยชน์สูงสุดของแนวทางนี้คือความยืดหยุ่น ลองนึกภาพว่าหากเราต้องการเปลี่ยนสเตอร์จาก 44 ซี่เป็น 50 ซี่ เราเพียงแค่เปลี่ยนค่าตัวแปร number_of_teeth
จาก 44 เป็น 50 เท่านั้น แบบจำลอง 3 มิติทั้งหมดจะคำนวณและปรับปรุงรูปทรงใหม่ทั้งหมดให้เราโดยอัตโนมัติ
2. การเตรียมการสำหรับเครื่อง CNC
การมีแบบจำลอง 3 มิติที่สมบูรณ์นั้นยังไม่เพียงพอ ขั้นตอนต่อไปคือการเปลี่ยนไปสู่ส่วนงาน CAM (Computer-Aided Manufacturing) เพื่อเตรียมชุดคำสั่งสำหรับเครื่อง CNC ที่จะใช้กัดชิ้นงาน
การตั้งค่า: Job, Stock, และ Tools
ในการเตรียมงาน CAM เราต้องกำหนดองค์ประกอบพื้นฐาน 3 อย่างนี้ก่อน:
- Job (จ็อบ): เปรียบเสมือนแฟ้มงานหลักที่รวบรวมการตั้งค่าและคำสั่งการผลิตทั้งหมดของโปรเจกต์นี้ไว้ในที่เดียว
- Stock (สต็อก): คือการจำลอง “วัตถุดิบ” ที่เราจะใช้ ในที่นี้คือแผ่นอลูมิเนียมขนาด 200x200x4 มิลลิเมตร
- Tools (เครื่องมือ): คือคลังเครื่องมือตัดดิจิทัลที่เครื่อง CNC จะใช้ ซึ่งสำหรับโปรเจกต์นี้เราต้องการเพียง 2 ดอกเท่านั้น:
- ดอกกัด Endmill ขนาด 3.175 มม. — สำหรับการกัดงานส่วนใหญ่
- ดอก Chamfer 90° — สำหรับการลบมุมโดยเฉพาะ
ความท้าทายของการกัดงานสองด้าน
เนื่องจากสเตอร์จักรยานมีรายละเอียดทั้งด้านหน้าและด้านหลัง เราจึงต้องเผชิญกับความท้าทายในการกัดชิ้นงานทั้งสองด้าน วิธีแก้คือ เราจะกัดงานด้านหนึ่งให้เสร็จก่อน จากนั้นจึงพลิกแผ่นวัตถุดิบกลับด้าน แล้วจึงเริ่มกัดอีกด้านหนึ่ง
สิ่งที่สำคัญที่สุดในขั้นตอนนี้คือการใช้ รูสำหรับกำหนดตำแหน่ง (Positioning Holes) ที่เจาะไว้ล่วงหน้าอย่างแม่นยำ รูเหล่านี้จะถูกใช้เพื่อยึดแผ่นอลูมิเนียมเข้ากับแท่นของเครื่อง CNC อย่างมั่นคง เพื่อให้แน่ใจว่าเมื่อพลิกชิ้นงานแล้ว ทุกอย่างจะยังคงอยู่ในตำแหน่งที่ถูกต้องสมบูรณ์
3. การสร้างเส้นทางเดินของเครื่องมือ
“Toolpath” หรือเส้นทางเดินของเครื่องมือ คือชุดคำสั่งดิจิทัลที่จะบอกเครื่อง CNC ว่าต้องเคลื่อนที่ดอกกัดไปที่ไหน, ด้วยความเร็วเท่าไหร่, และกัดลึกลงไปเท่าไหร่ ซึ่งเป็นหัวใจสำคัญของการผลิต
กล่องเครื่องมือสำหรับสร้าง Operation
Operation (คำสั่ง) | หน้าที่หลัก |
---|---|
Profile (โพรไฟล์) | ใช้สำหรับตัดตามแนวเส้นหรือขอบที่กำหนด คล้ายกับการใช้ที่ตัดคุกกี้ ใช้ในการเจาะรูและตัดชิ้นงานให้ออกจากแผ่นวัตถุดิบ |
Pocket (พ็อกเก็ต) | ใช้สำหรับกัดวัสดุทั้งหมดที่อยู่ “ข้างใน” ขอบเขตที่ปิดล้อม เพื่อสร้างเป็นช่องหรือโพรงที่มีพื้นเรียบ |
3D Pocket (พ็อกเก็ต 3 มิติ) | ใช้สำหรับกัดวัสดุออกจากรูปทรงที่ซับซ้อนและมีระดับความลึกที่แตกต่างกัน จำเป็นอย่างยิ่งสำหรับการสร้างรูยึดน็อตแบบมีบ่ารับ (Counterbore) |
จำลองก่อนกัดจริง: การทดสอบเสมือนจริง
หนึ่งในเครื่องมือที่สำคัญที่สุดคือ CAM Simulator ซึ่งเปรียบเสมือนการ “ทดสอบเสมือนจริง” ที่จะแสดงภาพเคลื่อนไหวให้เราเห็นทีละขั้นตอนว่าวัสดุจะถูกกัดออกไปอย่างไรในทุกๆ คำสั่งที่เราสร้างขึ้น
ประโยชน์หลักของมันคือ ช่วยให้เราสามารถตรวจจับข้อผิดพลาดที่อาจเกิดขึ้นและตรวจสอบกระบวนการทั้งหมดในรูปแบบดิจิทัลได้ก่อนที่จะเริ่มกัดวัสดุจริง ซึ่งช่วยประหยัดเวลาและป้องกันความเสียหายที่มีค่าใช้จ่ายสูงได้
4. บทสรุป: จากโค้ดสู่ชิ้นงาน
เราได้เห็นการเดินทางทั้งหมด ตั้งแต่การเริ่มต้นด้วยตัวแปรอัจฉริยะเพียงตัวเดียวในการออกแบบเชิงพาราเมตริก, ผ่านการตั้งค่าอย่างรอบคอบในสภาพแวดล้อมของ CAM, ไปจนถึงการสร้างเส้นทางเดินของเครื่องมือที่แม่นยำ และสิ้นสุดที่ชุดคำสั่งที่สมบูรณ์ซึ่งพร้อมจะถูกส่งไปยังเครื่อง CNC
นี่คือตัวอย่างที่ชัดเจนว่าการผลิตเชิงดิจิทัล (Digital Manufacturing) ได้เชื่อมโยงโลกแห่งความคิดสร้างสรรค์ในการออกแบบเข้ากับความเป็นจริงทางกายภาพได้อย่างไร้รอยต่อ
GRBLHAL : เวอร์ชันปรับปรุงของ GRBL
GRBLHAL เป็นเวอร์ชันที่ปรับปรุง และ ขยายความสามารถของ GRBL ซึ่งเป็นเฟิร์มแวร์ โอเพ่นซอร์สสำหรับควบคุมเครื่อง CNC โดย GRBLHAL ได้รับการพัฒนาเพื่อให้มีความยืดหยุ่นมากขึ้นในการรองรับฮาร์ดแวร์ที่หลากหลาย และ เพิ่มฟีเจอร์ใหม่ ๆ เพื่อตอบสนองความต้องการของผู้ใช้งานระดับสูง
คำสั่งพื้นฐานของ GRBLHAL
คำสั่งใน GRBLHAL ส่วนใหญ่จะคล้ายกับ GRBL แต่มีการเพิ่มเติมและปรับปรุงบางคำสั่งเพื่อรองรับฟีเจอร์ใหม่ ๆ ต่อไปนี้คือรายละเอียดของคำสั่งหลัก:
1. คำสั่งควบคุมการทำงาน (Real-time Commands)
- ! : หยุดชั่วคราว (Feed Hold)
หยุดการเคลื่อนที่ของเครื่องทันที แต่ยังคงเก็บตำแหน่งปัจจุบันไว้ เมื่อกดเริ่มใหม่ เครื่องจะกลับมาทำงานต่อจากตำแหน่งเดิม - ~ : เริ่มต่อ (Resume)
ใช้เมื่อเครื่องอยู่ในสถานะ Feed Hold เพื่อเริ่มการทำงานต่อ - ? : สอบถามสถานะ (Status Report)
แสดงข้อมูลสถานะปัจจุบัน เช่น ตำแหน่ง, สถานะเครื่อง, และโหมดการทำงาน - ^X : ยกเลิกงาน (Reset)
ยกเลิกการทำงานทั้งหมดและรีเซ็ตระบบ
2. คำสั่ง G-code
- G0/G1 : การเคลื่อนที่
G0: เคลื่อนที่ด้วยความเร็วสูงสุด (Rapid Move)
G1: เคลื่อนที่ด้วยความเร็วที่กำหนด (Linear Interpolation) - G2/G3 : การเคลื่อนที่โค้ง
G2: เคลื่อนที่ตามแนวโค้งแบบตามเข็มนาฬิกา (Clockwise Arc)
G3: เคลื่อนที่ตามแนวโค้งแบบทวนเข็มนาฬิกา (Counter-Clockwise Arc) - G4 : หน่วงเวลา (Dwell)
ตัวอย่าง: G4 P1.5 (หน่วงเวลา 1.5 วินาที)
3. คำสั่ง M-code
- M3/M4/M5 : การควบคุม Spindle
M3: เปิด Spindle หมุนตามเข็มนาฬิกา
M4: เปิด Spindle หมุนทวนเข็มนาฬิกา
M5: ปิด Spindle - M7/M8/M9 : การควบคุม Coolant
M7: เปิด Mist Coolant
M8: เปิด Flood Coolant
M9: ปิด Coolant
คำสั่งเฉพาะของ GRBLHAL
GRBLHAL เพิ่มคำสั่งใหม่ ๆ เพื่อรองรับฟีเจอร์ที่ขยายออกไป:
-
$# : แสดงตำแหน่งงานและออฟเซ็ต
- แสดงค่าพิกัดปัจจุบันและออฟเซ็ตของ Work Coordinate Systems
-
$$ : แสดงการตั้งค่าปัจจุบัน
- แสดงค่าพารามิเตอร์ทั้งหมด เช่น ความเร็วสูงสุด, Acceleration, Step/mm เป็นต้น
-
$x=val : แก้ไขการตั้งค่า
- ตัวอย่าง:
$110=3000
(ตั้งค่าความเร็วสูงสุดของแกน X เป็น 3000 mm/min)
- ตัวอย่าง:
-
$H : Homing Cycle
- เริ่มกระบวนการหา Home Position
-
$I : แสดงข้อมูลระบบ
- แสดงข้อมูลเกี่ยวกับเวอร์ชันและคุณสมบัติของ GRBLHAL
-
$N : แสดง/จัดการ Startup Blocks
- ใช้สำหรับตั้งค่าคำสั่งที่จะรันทุกครั้งเมื่อเปิดเครื่อง
-
$C : เช็ค Connection
- ตรวจสอบการเชื่อมต่อกับเครื่อง
-
$X : ปลดล็อกเครื่อง
- ใช้เมื่อเครื่องถูก Lock จาก Alarm State
สรุป
GRBLHAL เป็นเวอร์ชันที่ปรับปรุงจาก GRBL โดยเพิ่มความสามารถในการรองรับฮาร์ดแวร์ที่หลากหลาย และเพิ่มคำสั่งใหม่ ๆ เพื่อตอบสนองความต้องการของผู้ใช้งานระดับสูง คำสั่งพื้นฐานยังคงเหมือน GRBL แต่มีการเพิ่มเติมคำสั่งเฉพาะและฟีเจอร์ใหม่ เช่น การจัดการ Startup Blocks, การตั้งค่าพารามิเตอร์ที่ละเอียดขึ้น และการรองรับฟังก์ชันเสริมอื่น ๆ
หากต้องการศึกษาเพิ่มเติม แนะนำให้ดูเอกสารประกอบของ GRBLHAL หรือทดลองใช้งานผ่านซอฟต์แวร์ควบคุม CNC เช่น Universal G-code Sender (UGS) หรือ CNCjs
หมายเหตุ: การใช้งาน GRBLHAL ควรศึกษาคู่มือและทดสอบการทำงานบนเครื่องจริงอย่างระมัดระวังเพื่อป้องกันความเสียหายต่อเครื่องหรือชิ้นงาน
เครื่อง CNC สำหรับตัดวัสดุเส้นใย
1. ความสำคัญของการพัฒนา CNC สำหรับวัสดุเส้นใย
การตัดวัสดุที่ไม่ใช่วัสดุแข็ง เช่น วัสดุเส้นใย (Fibrous Materials) ต้องอาศัยเทคนิคเฉพาะที่แตกต่างจากการตัดโลหะหรือไม้ เนื่องจากวัสดุเหล่านี้มักมีโครงสร้างที่ยืดหยุ่น และมีคุณสมบัติเชิงกลที่แตกต่างกันไป เช่น ความอ่อนตัว ความยืดหยุ่น และการฉีกขาดง่าย ดังนั้น การออกแบบเครื่อง CNC ที่เหมาะสมกับวัสดุประเภทนี้จึงต้องมีการพัฒนาเทคโนโลยีที่รองรับลักษณะเฉพาะของวัสดุ
2. ความท้าทายในการพัฒนาเครื่อง CNC สำหรับตัดวัสดุเส้นใย
การออกแบบ CNC สำหรับการตัดวัสดุเส้นใยจำเป็นต้องคำนึงถึงปัจจัยหลายอย่าง เช่น :
- แรงกดและแรงเฉือน: ต้องคำนวณให้เหมาะสมเพื่อไม่ให้วัสดุเสียรูปขณะตัด
- ระบบจับยึดวัสดุ: วัสดุเส้นใยอาจมีความยืดหยุ่นสูง จึงต้องออกแบบระบบยึดที่สามารถจับวัสดุได้แน่นโดยไม่ทำให้เสียรูป
- ประเภทของเครื่องมือตัด: ต้องเลือกหัวตัดที่เหมาะสม เช่น มีดโรตารี (Rotary Blade) หรือ ใบมีดพิเศษที่ลดการฉีกขาดของวัสดุ
- การควบคุมด้วยซอฟต์แวร์: ซอฟต์แวร์ต้องรองรับการกำหนดค่าต่างๆ เช่น ความเร็วของหัวตัด แรงกด และ รูปแบบการตัด เพื่อให้การทำงานแม่นยำ
3. การออกแบบที่เป็นเอกลักษณ์ของเครื่อง CNC สำหรับวัสดุเส้นใย
ในฐานะผู้ผลิต CNC ตามความต้องการของลูกค้า เราได้พัฒนาโซลูชันเฉพาะสำหรับวัสดุเส้นใย โดยมีคุณสมบัติหลักดังนี้ :
- โครงสร้างที่แข็งแรงแต่ลดแรงสั่นสะเทือน เพื่อให้ตัดวัสดุได้แม่นยำ
- ระบบใบมีดตัดแบบพิเศษ ที่ลดแรงเสียดทานและการฉีกขาดของวัสดุ
- การควบคุมแรงกดของหัวตัดแบบไดนามิก เพื่อรองรับวัสดุที่มีความหนาแน่นแตกต่างกัน
- ซอฟต์แวร์ที่สามารถปรับแต่งค่าการตัดอัตโนมัติ ช่วยลดข้อผิดพลาดและเพิ่มประสิทธิภาพการผลิต
4. การแก้ปัญหาให้ลูกค้าในอุตสาหกรรมต่างๆ
เราไม่เพียงแต่ผลิตเครื่อง CNC ตามความต้องการ แต่ยังช่วยแก้ปัญหาการผลิตให้กับลูกค้าในหลากหลายอุตสาหกรรม เช่น :
- อุตสาหกรรมบรรจุภัณฑ์: การตัดวัสดุเส้นใยสำหรับบรรจุภัณฑ์ที่เป็นมิตรต่อสิ่งแวดล้อม
- อุตสาหกรรมสิ่งทอ: การตัดผ้าและวัสดุเส้นใยสำหรับการผลิตเสื้อผ้าและอุปกรณ์ตกแต่ง
- อุตสาหกรรมยานยนต์: การตัดวัสดุฉนวนหรือวัสดุซับเสียงที่ใช้ในรถยนต์
- อุตสาหกรรมเฟอร์นิเจอร์: การตัดวัสดุบุรองเพื่อใช้กับเฟอร์นิเจอร์แบบกำหนดเอง
5. ตัวอย่างเครื่อง CNC ที่เราพัฒนา
จากภาพที่แสดงด้านบน เป็นตัวอย่างเครื่อง CNC ที่ได้รับการออกแบบให้สามารถตัดวัสดุเส้นใยได้อย่างแม่นยำ โดยมีฟังก์ชันที่รองรับการผลิตชิ้นงานที่มีความซับซ้อนสูง นอกจากนี้ เราได้พัฒนาให้สามารถรองรับคำสั่งจากซอฟต์แวร์เฉพาะทาง เพื่อให้สามารถทำงานได้ตามข้อกำหนดของลูกค้า
6. บริการของเรา
- ออกแบบและผลิตเครื่อง CNC ตามสเปคที่ลูกค้าต้องการ
- ให้คำปรึกษาด้านการเลือกวัสดุและเทคนิคการตัด
- พัฒนา และ ปรับแต่งซอฟต์แวร์สำหรับกระบวนการผลิตของลูกค้า
- บริการติดตั้งและบำรุงรักษาเครื่องจักร
7. สรุป
การพัฒนาเครื่อง CNC สำหรับวัสดุเส้นใยต้องอาศัยความรู้ด้านวิศวกรรม ฟิสิกส์ และโปรแกรมมิ่ง เพื่อให้ได้โซลูชันที่เหมาะสมที่สุด ทีมงานของเราพร้อมช่วยให้ลูกค้าได้รับเครื่องจักรที่ตอบโจทย์ทุกความต้องการ ทั้งด้านคุณภาพ ความแม่นยำ และประสิทธิภาพการผลิต
การคำนวณค่าความเร็วรอบ (Spindle Speed), Feed Rate และ Step Down สำหรับการกัดด้วยเครื่อง CNC เราจำเป็นต้องพิจารณาปัจจัยหลายอย่าง เช่น ชนิดของวัสดุที่ใช้, ขนาดของดอกกัด, วัสดุของดอกกัด, และค่าพารามิเตอร์อื่นๆ
สูตรพื้นฐานที่ใช้ในการคำนวณ:
-
Spindle Speed (RPM)
โดยที่:
- : Cutting Speed (เมตร/นาที) ขึ้นอยู่กับชนิดของวัสดุและดอกกัด
- : เส้นผ่านศูนย์กลางของดอกกัด (มิลลิเมตร)
-
Feed Rate (F)
โดยที่:
- : Feed per Tooth (มิลลิเมตร/ฟัน)
- : จำนวนฟันของดอกกัด
-
Step Down (Axial Depth of Cut)
ค่า Step Down จะขึ้นอยู่กับความแข็งแรงของดอกกัดและชนิดของวัสดุ โดยทั่วไปจะกำหนดเป็น % ของเส้นผ่านศูนย์กลางของดอกกัด เช่น:- สำหรับงานหยาบ: 50-70% ของเส้นผ่านศูนย์กลาง
- สำหรับงานละเอียด: 10-30% ของเส้นผ่านศูนย์กลาง
import math
def calculate_spindle_speed(vc, diameter):
"""
Calculate spindle speed (RPM) based on cutting speed and tool diameter.
:param vc: Cutting speed in meters per minute (m/min)
:param diameter: Tool diameter in millimeters (mm)
:return: Spindle speed in revolutions per minute (RPM)
"""
return (vc * 1000) / (math.pi * diameter)
def calculate_feed_rate(rpm, fz, num_teeth):
"""
Calculate feed rate (F) based on RPM, feed per tooth, and number of teeth.
:param rpm: Spindle speed in revolutions per minute (RPM)
:param fz: Feed per tooth in millimeters per tooth (mm/tooth)
:param num_teeth: Number of teeth (Z)
:return: Feed rate in millimeters per minute (mm/min)
"""
return rpm * fz * num_teeth
def calculate_step_down(diameter, material_type):
"""
Calculate step down (axial depth of cut) based on tool diameter and material type.
:param diameter: Tool diameter in millimeters (mm)
:param material_type: Type of material ('rough' or 'finish')
:return: Step down in millimeters (mm)
"""
if material_type == "rough":
return diameter * 0.6 # 60% of diameter for roughing
elif material_type == "finish":
return diameter * 0.2 # 20% of diameter for finishing
else:
raise ValueError("Invalid material type. Use 'rough' or 'finish'.")
# Example usage:
if __name__ == "__main__":
# Input parameters
cutting_speed = 150 # Cutting speed in m/min (example for aluminum)
tool_diameter = 10 # Tool diameter in mm
feed_per_tooth = 0.1 # Feed per tooth in mm/tooth
num_teeth = 4 # Number of teeth on the tool
material_type = "rough" # Material type ('rough' or 'finish')
# Calculations
rpm = calculate_spindle_speed(cutting_speed, tool_diameter)
feed_rate = calculate_feed_rate(rpm, feed_per_tooth, num_teeth)
step_down = calculate_step_down(tool_diameter, material_type)
# Output results
print(f"Spindle Speed (RPM): {rpm:.2f}")
print(f"Feed Rate (mm/min): {feed_rate:.2f}")
print(f"Step Down (mm): {step_down:.2f}")