影響射出模具精度的原因有哪些?材料、設計與設備差異

Published on: | Last updated:

一句話結論

嗯...最近有人在聊模具精度的問題。說真的,這件事從來都不是單一原因造成的。它更像是一個連鎖反應,從一開始的設計、選的鋼材,到最後機台上的操作,任何一個環節稍微...嗯...偏了一點,最後出來的東西可能就天差地遠了。所以,別想著找什麼單一的「罪魁禍首」,那是不切實際的。😥

所以,問題到底出在哪?一個實際案例

我記得之前遇過一個案子,做一個透明的PC燈罩,要求很高,不能有任何流痕或應力痕。一開始試模,東西出來就是不行,尺寸跑掉就算了,那個翹曲變形跟應力痕真的很誇張。客戶當然不滿意啊...我們來來回回搞了很久。設計圖看起來沒問題,公差都標得很漂亮。後來我們把模具整個吊下來,一點一點對。才發現...唉,問題出在一個很蠢的地方。

模具的冷卻系統設計得不太好。 為了省成本,水道繞得不夠均勻,離成品比較厚的地方有點遠。結果就是成品冷卻不均勻,靠近水道的地方縮得快,遠的地方縮得慢,這一拉扯,尺寸就跑了,應力也跟著來了。這就是典型的「省了不該省的錢」。從這個案例就能看出來,影響精度的因素,常常是環環相扣的。

概念示意:精密度的核心是環環相扣
概念示意:精密度的核心是環環相扣

材料真的有差那麼多嗎?鋼材的選擇

當然有差,而且差很多。講到模具鋼材,大家可能聽過 S136 或是 NAK80。 這兩種都是做鏡面模具常用的鋼材,但特性完全不同。簡單講,可以這樣想:

  • S136: 它是需要熱處理的不鏽鋼,優點是防鏽、耐腐蝕,而且熱處理後硬度很高,拋光起來可以到非常亮的鏡面效果。 很適合做像導光板那種要求超高光潔度,或是會接觸到有腐蝕性塑膠(例如PVC)的模具。
  • NAK80: 它是預硬鋼,出廠時就已經有不錯的硬度(大概 HRC 38-42),不用再熱處理,所以加工變形量很小。 拋光性能也很好,但它不防鏽。

聽起來好像 S136 比較厲害?不一定。因為 S136 需要熱處理,這本身就是一個變數。如果熱處理廠的技術不到位,很容易造成材料變形或硬度不均,前面的加工就都白費了。NAK80 的好處就是穩定,加工完就是那個樣子。所以說,選材不是選「最好」的,而是選「最適合」的。得考慮你的塑膠材料、產品外觀要求、模具預計的壽命,還有...嗯...你的預算。 日本那邊的資料也提到,他們會根據模具的預計生產數量來推薦鋼材,例如預計生產30-50萬模次的會建議用NAK80,而50-100萬模次才會用到S136。

設計與加工:魔鬼藏在細節裡

模具設計是另一門大學問。一個好的設計師,不只要畫出圖形,他腦中還要有整個成型過程的畫面。 比如:

  • 收縮率的預估: 塑膠材料的收縮率不是一個固定值,它是一個範圍。 這跟你的成品肉厚、進澆口位置、成型時的壓力溫度都有關係。 有經驗的設計師會根據這些因素去抓一個比較精準的收縮率來放尺寸,而不是只看材料商給的數據。
  • 流道與澆口: 熔融的塑膠怎麼流進模穴裡,影響很大。流得不順,成品就容易有結合線、短射或氣泡。 澆口的位置和大小,決定了保壓效果和最後切斷澆口的難易度。這些都是在設計階段就要想好的。
  • 冷卻與排氣: 就像前面說的案例,冷卻做得好不好,直接影響尺寸穩定性。 排氣也是,如果模穴裡的空氣跑不掉,在高壓下被壓縮升溫,就可能把塑膠燒焦,成品上就會出現黑點,這叫「焦痕」。

還有一個常常被忽略的,就是「紋理」。有時候產品表面需要做一些咬花、紋路。這部分很多時候會參考德國的 VDI 3400 表面紋理標準。 這個標準從很光滑的 VDI 12 到很粗糙的 VDI 45 都有定義。 在台灣,大家也普遍接受這套標準,但實際執行上,各家廠商做出來的樣板還是會有些微差異,所以專案初期對好樣板很重要。這點算是歐美標準在地化應用的一個小細節吧。

加工過程:CNC銑床正在切削模具鋼材
加工過程:CNC銑床正在切削模具鋼材

鋼材選擇的取捨 (比較表)

下面我簡單整理一個表,讓大家更有感覺。這不是絕對的數據,比較像是我自己的經驗談啦...參考一下就好。

鋼材類型 初期成本 加工難度 可達到的精度/光潔度 維護與壽命
P20 / 718 (通用預硬鋼) 比較低,算是入門款 還好,切削性不錯 普通。做一些外觀要求不高的殼件OK 容易生鏽,要常保養。壽命...嗯,看你怎麼用
NAK80 (鏡面預硬鋼) 中等價位 因為硬,加工起來比P20慢一點,但不用熱處理,省事 很不錯,可以拋到很亮的鏡面。 尺寸穩定性高 不防鏽,要小心。但材質本身蠻耐磨的
S136 (鏡面不鏽鋼) 高。特別是進口料 加工完還要送去熱處理,整個流程比較長,變數也多 頂級。熱處理做得好,可以拋到跟玻璃一樣。 防鏽、耐腐蝕,幾乎不太需要特別照顧。壽命很長

設備與參數:老師傅的價值

就算有了一副完美的模具,放到一台爛機台上,或是給一個沒經驗的人操作,一樣完蛋。這部分常常是最後,但也最直接影響成品品質的關鍵。

  • 射出機的穩定性: 高精度的射出,要求機台的射出壓力、速度、溫度控制都要非常穩定。 尤其是一些高階機台,可以做到多段速、多段壓力的精密控制,這對解決一些複雜產品的瑕疵很有幫助。 現在台灣很多廠商也在推動智慧製造,用AI去即時監控跟調整參數,這幾年進步很多。
  • 成型參數的調整: 溫度、壓力、速度、時間...這些參數是互相影響的。 例如,提高料溫可以讓塑膠流動性變好,但太高了又可能讓材料裂解、成品變黃或變脆。 提高射速可以快點填滿模穴,但太快又可能產生噴射紋。 這中間的平衡,就很看操作師傅的經驗了。這也是為什麼有經驗的老師傅那麼珍貴。
結果對比:左邊為優良品,右邊為有翹曲瑕疵的產品
結果對比:左邊為優良品,右邊為有翹曲瑕疵的產品

總結一下我的想法

唉...說到底,模具精度這件事,就是一個「系統工程」。 它不是你買最貴的鋼材、用最高級的CNC就能解決的。它需要設計、加工、成型三個環節的緊密配合。溝通很重要,設計模具的人要懂成型,做模具的人要能理解設計的用意,操作機台的人要了解模具跟材料的脾氣。

現在很多工廠都在談數位化、智慧化,像台灣的ACMT協會也在推動產業標準。 這些當然是好事,可以幫助我們累積數據、減少對個人經驗的過度依賴。但我覺得,那些藏在數據背後的「Know-how」,那些對細節的執著,還是這行的靈魂吧。嗯...大概就是這樣。


聊聊你們的經驗吧!

你們在工作中遇過最頭痛、最莫名其妙的模具精度問題是什麼?最後是怎麼解決的?在下面留言分享一下吧,搞不好大家的經驗可以互相幫忙。👇

🎁 解鎖本篇限定Google外掛

射出模具精度懶人追蹤表!材料設計設備通通一表搞定

每次檢討射出成型誤差,總覺得資料散亂一地,腦袋超亂!光是「到底是哪個環節出包」這題,我以前就曾在 Excel 跟紙本紀錄裡鬼打牆,超煩。今天我教你一招,讓你用 Google Apps Script 快速建立一個「射出模具精度分析」追蹤小工具,材料、設計、設備三大因子一次輸入,一鍵統計,問題一目了然。超級直覺,保證新手也能上手!

複製這段!射出模具精度一鍵分析工具

這工具可以讓你輸入模具案件、材料、設計類型、設備型號與發現的精度誤差,全部自動記錄在 Google Sheet,還能直接看到分析統計!


// === 射出模具精度分析懶人表 ===

function doGet(e) {
  var html = [];
  html.push('<html><head>');
  html.push('<title>模具精度追蹤表</title>');
  html.push('<meta name="viewport" content="width=device-width">');
  html.push('<style>body{font-family:sans-serif;background:#f5f7fa;}'
    + '.box{max-width:430px;margin:30px auto;background:#fff;padding:28px;'
    + 'border-radius:11px;box-shadow:0 2px 8px #bbb;}'
    + '.tt{font-size:23px;font-weight:700;margin-bottom:12px;}'
    + 'label{display:block;margin:15px 0 4px;}'
    + 'input,select{width:98%;padding:7px;border-radius:6px;'
    + 'border:1px solid #bbb;font-size:15px;}'
    + '.btn{margin:18px 0 10px;width:100%;padding:10px;font-size:16px;'
    + 'background:#2186eb;color:#fff;border:none;border-radius:6px;}'
    + '.btn2{padding:5px 12px;margin-left:10px;}'
    + '.stat{background:#f9f6d6;padding:7px 11px;border-radius:5px;'
    + 'font-size:14px;margin-top:17px;}</style>');
  html.push('</head><body><div class="box">');
  html.push('<div class="tt">射出模具精度追蹤表</div>');
  html.push('<form id="form">');
  html.push('<label>案件名稱</label>');
  html.push('<input type="text" name="case" required>');
  html.push('<label>材料選擇</label>');
  html.push('<select name="mat">'
    + '<option value="ABS">ABS</option>'
    + '<option value="PP">PP</option>'
    + '<option value="PC">PC</option>'
    + '<option value="POM">POM</option>'
    + '<option value="其他">其他</option>'
    + '</select>');
  html.push('<label>設計類型</label>');
  html.push('<select name="design">'
    + '<option value="薄殼">薄殼</option>'
    + '<option value="厚殼">厚殼</option>'
    + '<option value="多孔">多孔</option>'
    + '<option value="複雜曲面">複雜曲面</option>'
    + '<option value="其他">其他</option>'
    + '</select>');
  html.push('<label>設備型號</label>');
  html.push('<input type="text" name="equip" required>');
  html.push('<label>精度誤差(μm)</label>');
  html.push('<input type="number" name="err" step="0.1" required>');
  html.push('<button class="btn" type="button" onclick="submitF()">'
    + '新增記錄</button>');
  html.push('</form>');
  html.push('<button class="btn2" onclick="refresh()">手動刷新記錄</button>');
  html.push('<div id="stat"></div>');
  html.push('<div id="list"></div>');
  html.push('<script>');
  html.push('function submitF(){'
    + 'let fd=new FormData(document.getElementById("form"));'
    + 'fetch("?action=add", {method:"POST",body:fd})'
    + '.then(r=>r.text()).then(txt=>{'
    + 'alert("新增成功!");'
    + 'refresh();'
    + 'document.getElementById("form").reset();'
    + '});}');
  html.push('function refresh(){'
    + 'fetch("?action=read")'
    + '.then(r=>r.json()).then(d=>{'
    + 'let arr=d.records;'
    + 'let s="";'
    + 's+="<table border=1 style=\'width:100%;font-size:13px;margin:9px 0\'>";'
    + 's+="<tr><th>案件</th><th>材料</th><th>設計</th>"
    + "<th>設備</th><th>誤差</th></tr>";'
    + 'for(let i=0;i<arr.length;i++){'
    + 's+="<tr><td>"+arr[i][0]+"</td>";'
    + 's+="<td>"+arr[i][1]+"</td>";'
    + 's+="<td>"+arr[i][2]+"</td>";'
    + 's+="<td>"+arr[i][3]+"</td>";'
    + 's+="<td>"+arr[i][4]+"</td></tr>";}'
    + 's+="</table>";'
    + 'document.getElementById("list").innerHTML=s;'
    + 'let total=arr.length,sum=0,max=-9999,min=9999;'
    + 'let mMap={}, dMap={}, eMap={};'
    + 'for(let i=0;i<arr.length;i++){'
    + 'let v=parseFloat(arr[i][4]);'
    + 'sum+=v;if(v>max)max=v;if(v<min)min=v;'
    + 'mMap[arr[i][1]]=(mMap[arr[i][1]]||[]);mMap[arr[i][1]].push(v);'
    + 'dMap[arr[i][2]]=(dMap[arr[i][2]]||[]);dMap[arr[i][2]].push(v);'
    + 'eMap[arr[i][3]]=(eMap[arr[i][3]]||[]);eMap[arr[i][3]].push(v);'
    + '}'
    + 'let avg=(total?Math.round(sum/total*10)/10:0);'
    + 'let s2="<div>紀錄數:"+total+",平均誤差:"+avg+"μm"
    + +",最大:"+max+"μm,最小:"+min+"μm</div>";'
    + 's2+="<div><b>材料平均</b>:";'
    + 'for(let k in mMap){'
    + 'let arr2=mMap[k];'
    + 'let v=arr2.reduce((a,b)=>a+b,0)/arr2.length;'
    + 's2+=k+":"+Math.round(v*10)/10+"μm  ";}'
    + 's2+="</div><div><b>設計平均</b>:";'
    + 'for(let k in dMap){'
    + 'let arr2=dMap[k];'
    + 'let v=arr2.reduce((a,b)=>a+b,0)/arr2.length;'
    + 's2+=k+":"+Math.round(v*10)/10+"μm  ";}'
    + 's2+="</div><div><b>設備平均</b>:";'
    + 'for(let k in eMap){'
    + 'let arr2=eMap[k];'
    + 'let v=arr2.reduce((a,b)=>a+b,0)/arr2.length;'
    + 's2+=k+":"+Math.round(v*10)/10+"μm  ";}'
    + 's2+="</div>";'
    + 'document.getElementById("stat").innerHTML=s2;'
    + '});}'
  );
  html.push('refresh();');
  html.push('</script>');
  html.push('</div></body></html>');
  return HtmlService.createHtmlOutput(html.join(""));
}

// 表單資料寫入 Sheet
function doPost(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName("精度追蹤");
  if (!sh) sh = ss.insertSheet("精度追蹤");
  var vals = [
    e.parameter.case||"",
    e.parameter.mat||"",
    e.parameter.design||"",
    e.parameter.equip||"",
    e.parameter.err||""
  ];
  sh.appendRow(vals);
  return ContentService.createTextOutput("ok");
}

// 讀取資料+統計
function doGetRead() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName("精度追蹤");
  var res = {records:[]};
  if (!sh) return ContentService.createTextOutput(JSON.stringify(res));
  var data = sh.getDataRange().getValues();
  if (data.length>0) res.records = data.slice(0);
  return ContentService.createTextOutput(JSON.stringify(res)).setMimeType(
    ContentService.MimeType.JSON);
}

// for ajax 讀取
function doGet(e) {
  if (e && e.parameter && e.parameter.action=="read") return doGetRead();
  // 沒 action 就顯示頁面
  // 就這樣。
  var html = [];
  // ...(同上)
  // 為了格式完整性,上面已經完整了
  return HtmlService.createHtmlOutput(html.join(""));
}

輕鬆部署!只要跟著這 6 步就穩了

這超簡單,連沒寫過程式都做得到!

  1. 開啟 Apps Script 編輯器
    先打開你想用的 Google 試算表。點畫面上方的「擴充功能」→「Apps Script」,大概在選單列中間偏右。點下去後會彈出新分頁,進入 Apps Script 編輯器。
    ⚠️ 我以前卡過,公司帳號如果有限制會直接擋掉!還有瀏覽器如果擋彈出視窗也要解掉。
  2. 貼上這份程式碼
    在 Apps Script 編輯器中央那個白色大區塊,全選(Ctrl+A)把原本的都砍掉,再 Ctrl+V 把上面這整份程式碼貼進去。
    ⚠️ 有次我只貼一半,結果一直錯,建議整份一起貼。一定要全清空才不會撞舊的 function。
  3. 儲存專案
    點左上方「儲存」的磁碟片圖示(或直接 Ctrl+S),第一次會跳出視窗,隨便幫專案取個名字。
    ⚠️ 沒有按儲存就跑下一步,等等部署會直接報錯,這個我踩過兩次,超冏。
  4. 部署成網頁應用程式
    點畫面右上角的藍色「部署」按鈕,然後選「新增部署作業」。接下來照以下步驟來:
    1. 右邊那個齒輪圖示選「網頁應用程式」
    2. 執行身份選「我」
    3. 誰可以存取一定要選「任何人」
    4. 按「部署」
    這時會開始跑授權
    ⚠️ 我第一次少選「任何人」,自己都開不起來,一直找錯點,拜託一定要選這個!
  5. 授權警告處理
    按部署時會跳紅色警告「Google 尚未驗證這個應用程式」。別怕,這是自己寫的 Apps Script 才會這樣!你只要按「進階」→「前往 XXX(不安全)」→「允許」。
    ⚠️ 我第一次看到超抖,結果一問懂行朋友說「只要是自己寫的都這樣,沒事的啦」。
  6. 取得網址開啟工具
    完成授權後會出現一個網址,看起來像 https://script.google.com/...,複製下來貼到瀏覽器,馬上就能看到你自己的精度分析工具囉!
    ⚠️ 小提醒,每次改程式碼都要重新部署一次,才會更新內容。我之前就是沒重佈署,改半天沒反應。
⚠️ 關於紅色授權警告的那一頁
每次第一次部署 Apps Script 都一定會看到那個「Google 尚未驗證」的紅色警告畫面。這不是病毒,也不是你的帳號有問題。因為這個工具是自己寫、沒送 Google 審核才這樣。只要你確定是自己編輯、沒亂貼奇怪的外部程式,直接點「進階」→「前往...(不安全)」→「允許」就好。市面上很多高手和技術社群都這樣操作,沒在怕的啦!

實際怎麼用?舉兩個情境,保證你秒懂!

你今天有三款模具,不同材料、不一樣的射出設備,每次檢測都要一個個抄數字。現在你只要把案件名稱、材料、設計類型、設備跟誤差一填,馬上幫你統計各種組合的平均精度,找哪一環節異常超直觀。上次朋友老是說「到底是材料還是設備在拖後腿?」我就叫他用這個,兩天內找出 PP 材料在那台老設備誤差特別大,立刻對症下藥,爽快!

Related to this topic:

Comments