半導體零件毛邊去除品質要求,驗收標準制定方法

Published on: | Last updated:

唉...最近跟幾個朋友聊到半導體零件的毛邊問題,就覺得頭很痛。搞這行的,都知道這是個超級無敵龜毛的領域 🐢。客戶一句「我不要有毛邊」,聽起來很簡單,但魔鬼真的都藏在細節裡。

你以為的「乾淨」,跟客戶顯微鏡下的「乾淨」,可能根本是兩個世界...這件事真的超煩,但也超重要。所以想說來隨便聊聊,這個所謂的「驗收標準」,到底是個什麼樣的玄學。😅

聊這個之前,先問一個很煩的問題...

就是...什麼是「毛邊」? 這問題聽起來像廢話,但真的不是。是沖壓跑出來的金屬屑屑? 還是切削完邊邊那種摸起來有點割手的感覺? 是肉眼看得到就算,還是要用放大鏡?幾倍的放大鏡? 光是這個定義,你跟客戶如果沒有對清楚,後面基本上就是吵架吵到天荒地老。😂

我聽過最扯的,是一個案子都快交貨了,客戶突然拿一台超高倍率的顯微鏡來說某個角落有「微觀突起」,然後整批退貨。當下那個PM的臉色,真的是比終端機的黑畫面還要黑。所以說,一切的源頭,真的就是要先跟客戶在「同一個維度」溝通。你不能用公分在思考,但人家是用奈米在檢查。半導體產業的品質要求真的不是開玩笑的,差一個奈米可能整個產品就廢了。

客戶的標準跟你的認知,就像兩片對不上的拼圖,永遠有個縫。
客戶的標準跟你的認知,就像兩片對不上的拼圖,永遠有個縫。

「沒有毛邊」這句話,跟「我愛你」一樣抽象

這是我一個做品保的朋友講的幹話,但真的超有道理。你怎麼「量化」一句承諾?在工程上,任何不能被量化的要求,都是耍流氓。

所以,「沒有毛邊」這句話必須被翻譯成工程語言。例如:

  • 尺寸定義:毛邊的高度不能超過多少微米 (µm)?根部的厚度呢?
  • 檢測方法:是用光學顯微鏡 (OM)?還是要用到掃描式電子顯微鏡 (SEM)? 放大倍率要多少?
  • 檢測區域:是所有邊緣都要看?還是只有特定幾個關鍵位置?
  • 允收率:一個零件上能接受幾個瑕疵點?一整批的允收率 (AQL) 是多少?

這些東西,全部都要白紙黑字寫下來,變成一份叫做「驗收規範」的文件。而且最好,是附上圖片。你知道的,一張圖勝過千言萬語,尤其是在跟不同部門或不同公司的人溝通時。

所以那個標準,到底要怎麼生出來?

好,理論講完了,但實務上這份文件要怎麼來?總不能自己在家裡幻想吧。🤔

最常見也最土砲,但可能最有效的方法,就是「金樣 (Golden Sample)」。

簡單說,就是你跟客戶一起,找一個或幾個你們雙方都同意「這就是我要的完美狀態」的樣品。然後把它封印起來,當成聖物一樣供著。以後所有的驗貨,通通都以這個金樣為標準。驗貨員一手拿著金樣,一手拿著待驗品,兩個比對一下,就知道有沒有過關。

這方法的好處是超級直觀,沒什麼好爭議的。壞處就是...那個金樣本身很難生啊!可能要從一百個裡面才挑得出一個。而且,如果金樣不小心弄壞或搞丟了...那畫面太美我不敢看。😂

當然,除了金樣,你還需要一套很明確的檢驗流程文件,從抽樣計畫、檢驗設備、操作SOP到允收/拒收的判定標準,都要寫得清清楚楚。特別是檢驗人員的訓練,也非常重要,要確保每個人的「眼力」和判斷標準是一致的。

左邊是沒處理好的毛邊地獄,右邊是處理完的光滑天堂。
左邊是沒處理好的毛邊地獄,右邊是處理完的光滑天堂。

整個流程跑下來,其實就是在建立一個「共同的語言」。因為半導體產業的供應鏈太長了,從設計、材料、加工、清洗、組裝...每個環節都可能有不同廠商。如果大家對品質的定義不一樣,那最後兜起來的產品絕對是災難。

我聽說有一招叫「電解拋光」,好像蠻酷的

說到去毛邊,傳統方法不外乎就是機械研磨、噴砂、刷磨等等。這些方法都...怎麼說呢,有點「暴力」。 很容易產生二次毛邊,或者對零件本身造成一些微小的尺寸改變或應力。對於越來越小、越來越精密的半導體零件來說,這些傳統方法有時候真的有點力不從心。

之前聽一個業界前輩提到,現在有一種比較先進的玩法叫做「電化學加工 (ECM)」或「電解拋光 (Electropolishing)」。 我自己不是這方面的專家啦,但聽起來大概的原理,就是把零件當成陽極,泡在特殊的電解液裡面通電,然後利用電化學反應,優先溶解掉那些凸出來的毛邊。整個過程不是用「磨」的,而是用「溶」的,所以非常溫和,不會有應力問題,而且可以處理到非常細微的角落。

聽說這種方法處理完的表面,潔淨度跟光滑度都高一個檔次。特別是對於像316L不鏽鋼這種在半導體製程中常用的材料,電解拋光不只可以去毛邊,還可以提升表面的抗腐蝕能力,因為它會讓表層的鉻元素富集,形成更強的鈍化層。

台灣好像比較少廠商專門在做這個,我記得之前查資料有看到一家叫 [台電化股份有限公司] 的,他們就是專門在弄電化學加工技術。 感覺是蠻新的技術,專門處理一些難加工的金屬或很要求的精密去毛邊。如果你的零件又小又複雜,傳統方法搞不定,或許可以去問問看這種解決方案。感覺是把錢花在刀口上的那種...畢竟弄壞一批精密零件的成本,可能比加工費貴上好幾百倍。😅

一個完美的零件,背後是無數的精密工序和檢驗標準。
一個完美的零件,背後是無數的精密工序和檢驗標準。

國外跟台灣的玩法,好像有點不一樣?

聊到標準,就不能不提國際標準。像 ISO 就有針對毛邊的定義和圖面標示法,例如 ISO 13715。 它會教你怎麼在工程圖上,用標準化的符號去標示「這邊的邊緣,允許 +0.3mm 到 -0.1mm 的毛邊或導角」。這就很精確,可以避免很多溝通上的誤會。

不過老實說,在台灣的加工廠,我比較少看到大家真的完全照著 ISO 標示在走的。很多時候還是老師傅一句「啊這個幫我倒一下角,讓它順順的就好」。這種「心領神會」的文化,在做一般零件時可能很有效率,但一碰到半導體這種超級龜毛的產業,就很容易出問題。

我看一些國外的資料,特別是歐美的,他們對於「文件化」這件事非常執著。 任何要求都要有相對應的標準文件支持,不管是國際的 SEMI standard 還是公司內部的規範。這點跟我們在台灣的文化真的有點不一樣。台灣比較重「彈性」跟「效率」,有時候覺得寫那些文件很浪費時間。但反過來說,當真的出問題要抓戰犯、要追溯源頭的時候,那些被嫌浪費時間的文件,就變成最重要的證據了。

所以沒有哪個一定比較好,可能就是看產業特性吧。但如果是要做半導體或醫療這種人命關天、不容許一絲差錯的產業,我覺得還是乖乖把標準建立起來比較保險。

表一:兩種驗收方法的隨興比較
方法 優點(我猜的啦) 缺點(感覺很煩的地方)
金樣比對 (Golden Sample) 超直觀,沒話說。連新人看一下就知道標準在哪,訓練快。 金樣很難生!而且要是只有一個,弄壞了就世界末日。也很吃檢驗員的眼力。
文件化標準 (Documented Standard) 很客觀,有憑有據。就算人員流動,標準也還在。吵架的時候可以拿出來當聖旨。 光是定義那些數字跟寫文件,可能就要開好幾個會,累死...而且寫得不夠清楚一樣沒用。

所以,我的murmur是...

搞到最後,我覺得制定半導體零件的去毛邊驗收標準,好像在談戀愛。😂

一開始,你們要先定義彼此的「愛的語言」(什麼是毛邊?)。接著,要給出具體的承諾,而不是空泛的山盟海誓(量化標準)。然後,你們需要一個定情信物(金樣),或者一本寫滿兩人規則的愛情合約(規範文件)。過程中,還要不斷溝通、確認彼此的想法有沒有跑掉。

這件事沒有捷徑。它很煩、很耗時,但只要前期願意投入時間去磨合,把這個「共同語言」建立起來,後面的路就會順暢很多。不然,就只能等著在出貨前夕,面對客戶那張比冰塊還冷的臉了。真的,不要不信邪。🫠


聊了這麼多,換你們說說看了:

如果你是品保或採購,你最痛恨聽到供應商說哪一句話?是「差不多啦」、還是「這個應該可以」?在下面留言分享一下你踩過的坑吧!

🎁 解鎖本篇限定Google外掛

半導體零件毛邊檢查標準表—專業級驗收紀錄與統計工具

半導體產線常被「毛邊」搞得心很累,現場交接驗收一沒跟上流程,後面全廠都在追貨。多次遇過主管下班前急問毛邊合格率,現場工程師只能翻紙本、手算百分比,根本來不及。表單填寫、紀錄、統計,通通丟 Google Sheet,加上一套標準化輸入流程,才能真的搞定。

標準化檢查&統計表單工具—複製程式碼立即用

這工具可輸入批號、檢查人、毛邊類型等關鍵驗收數據,自動寫入 Sheet、統計當日合格率、即時顯示歷史紀錄,廠務驗收流程一條龍管理。


// === 半導體毛邊去除驗收標準化工具 ===

function doGet(e) {
  var html = [];
  html.push('<div style="font-family:monospace;max-width:520px;'
    + 'margin:24px auto;background:#f7f7f7;padding:28px;border-radius:8px;">');
  html.push('<h2>半導體零件毛邊去除品質驗收表</h2>');
  html.push('<form id="mbForm">');
  html.push('批號:<input type="text" name="batch" required style="width:120px"> ');
  html.push('檢查人:<input type="text" name="inspector" required style="width:90px"><br>');
  html.push('毛邊類型:');
  html.push('<select name="type">');
  html.push('<option value="邊角">邊角</option>');
  html.push('<option value="孔洞">孔洞</option>');
  html.push('<option value="表面">表面</option>');
  html.push('<option value="其他">其他</option>');
  html.push('</select> ');
  html.push('數量:<input type="number" name="qty" min="1" style="width:55px" required> ');
  html.push('合格:');
  html.push('<select name="result">');
  html.push('<option value="OK">OK</option>');
  html.push('<option value="NG">NG</option>');
  html.push('</select><br>');
  html.push('<button type="button" onclick="submitMB()">送出紀錄</button>');
  html.push('</form>');
  html.push('<div id="msg" style="color:green;margin:8px 0 16px 0"></div>');
  html.push('<hr>');
  html.push('<button onclick="refreshTable()" style="margin-bottom:12px">刷新紀錄/統計</button>');
  html.push('<div id="recordBox"></div>');
  html.push('</div>');
  html.push('<script>'
    + 'function submitMB(){'
    + 'var f=document.getElementById("mbForm");'
    + 'var d=new FormData(f);'
    + 'fetch("?action=save", {method:"POST",body:d})'
    + '.then(r=>r.text()).then(t=>{document.getElementById("msg").innerHTML=t;'
    + 'f.reset();refreshTable();});}'
    + 'function refreshTable(){'
    + 'fetch("?action=read").then(r=>r.text()).then(t=>{'
    + 'document.getElementById("recordBox").innerHTML=t;});}'
    + 'refreshTable();'
    + '</script>'
  );
  var query = e && e.parameter ? e.parameter : {};
  if (query.action=="read") return ContentService.createTextOutput(getTableHTML())
    .setMimeType(ContentService.MimeType.HTML);
  if (query.action=="save" && e.postData) {
    var param = parseMultipart(e.postData.contents);
    saveRecord(param);
    return ContentService.createTextOutput("已儲存")
      .setMimeType(ContentService.MimeType.TEXT);
  }
  return HtmlService.createHtmlOutput(html.join(""));
}

// 處理表單資料寫入
function saveRecord(obj) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("毛邊紀錄")||ss.insertSheet("毛邊紀錄");
  if (sheet.getLastRow()==0)
    sheet.appendRow(["時間","批號","檢查人","毛邊類型","數量","合格"]);
  sheet.appendRow([new Date(), obj.batch, obj.inspector, obj.type,
    obj.qty, obj.result]);
}

// 產生歷史紀錄與合格率統計
function getTableHTML() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet()
    .getSheetByName("毛邊紀錄");
  if (!sheet) return "<div>尚無資料</div>";
  var rows = sheet.getDataRange().getValues();
  if (rows.length<2) return "<div>尚無資料</div>";
  var today = Utilities.formatDate(new Date(), "GMT+8", "yyyy-MM-dd");
  var total=0, ok=0, stat=[];
  var tb = ['<table border="1" cellpadding="4">'
    + '<tr><th>時間</th><th>批號</th><th>人員</th>'
    + '<th>類型</th><th>數量</th><th>合格</th></tr>'];
  for(var i=1;i<rows.length;i++){
    var t = Utilities.formatDate(rows[i][0], "GMT+8", "yyyy-MM-dd");
    var isToday = (t==today);
    var tr = '<tr' + (isToday?' style="background:#efe"':'') + '>';
    tb.push(tr+' <td>'+t+'</td><td>'+rows[i][1]
      +'</td><td>'+rows[i][2]+'</td><td>'+rows[i][3]
      +'</td><td>'+rows[i][4]+'</td><td>'+rows[i][5]
      +'</td></tr>');
    if(isToday) {
      total += Number(rows[i][4])||0;
      if(rows[i][5]=="OK") ok += Number(rows[i][4])||0;
    }
  }
  tb.push("</table>");
  if(total>0){
    tb.push('<div style="margin-top:8px;">'
      +'今日總數:'+total+',合格:'+ok+' '
      +'合格率:'+Math.round(ok/total*100)+'%'
      +'</div>');
  }
  return tb.join("");
}

// 表單內容剖析
function parseMultipart(body) {
  var arr = body.split('&');
  var obj = {};
  for(var i=0;i<arr.length;i++){
    var tmp = arr[i].split('=');
    obj[decodeURIComponent(tmp[0])] = decodeURIComponent(tmp[1]||"");
  }
  return obj;
}

標準化部署六步驟

照著做,每一步都關鍵。別漏掉任何一個細節。

  1. 開啟 Apps Script 編輯器
    動作:在 Google 試算表上方選單點「擴充功能」→「Apps Script」
    位置:「擴充功能」在畫面正上方中間偏右,往下找「Apps Script」
    結果:會跳新分頁,進入 Apps Script 編輯器畫面
    ⚠️ 公司帳號、學校帳號有時會被擋;有朋友反映彈出視窗被瀏覽器擋住,結果找不到新分頁。
  2. 清空並貼上程式碼
    動作:Ctrl+A 全選 → Delete 刪除 → Ctrl+V 貼上上面整份程式碼
    位置:編輯器中央那塊大白色區域
    結果:最上面那行 function myFunction() 被你貼上內容取代
    ⚠️ 一定要全選後刪光,不然舊內容殘留會爆錯,我之前就是卡在這。
  3. 儲存專案
    動作:點左上磁碟片圖示(或 Ctrl+S)
    位置:程式碼區上方靠左的工具列
    結果:第一次會跳出要取個專案名稱,亂填也沒關係
    ⚠️ 沒存檔直接部署會出奇怪錯誤訊息,朋友還以為是程式爛,其實只是沒存檔。
  4. 部署為網頁應用程式
    動作:點右上角藍色「部署」→「新增部署作業」
    位置:「部署」按鈕在編輯器最右上角
    結果:會跳出設定畫面
    子步驟:
    1. 點齒輪選「網頁應用程式」
    2. 執行身分選「我」
    3. 誰可以存取要選「任何人」
    4. 點「部署」送出
    ⚠️ 存取權一定要選「任何人」,我看過好幾個社群分享都卡在這裡,自己測都好好的,別人打不開。
  5. 處理授權警告
    動作:照螢幕指示授權,看到紅色「尚未驗證」不用慌
    結果:點「進階」→「前往(不安全)」→「允許」
    ⚠️ 這是 Google 的標準流程,只要自己寫、沒審核過的 Apps Script 一定跳出,我幫朋友部署新工具常常被問是不是中毒。
  6. 取得網址,開始使用
    動作:部署完成後畫面會出現一串 https://script.google.com/xxx 網址,把它複製
    位置:授權完就會自動顯示網頁應用程式網址
    結果:貼到新分頁開啟,就是標準化驗收工具的網頁版
    ⚠️ 記住!每次改過程式碼、欄位,想要新版功能都得再「部署」一次,否則網址還是舊版。
⚠️ 關於紅色授權畫面(Google 尚未驗證這個應用程式)
這種警告只會出現在「自己寫、沒送審」的 Apps Script。Google 不知道這是什麼,自動加一層保護,只要你點「進階」再點「前往」,並確認來源是自己(網址 https://script.google.com/ 開頭),不用擔心安全。社群很多人第一次看到都嚇到,其實完全沒問題,權限都在自己手上。除非你貼給陌生人,否則無風險。

標準化驗收紀錄的典型應用場景

工程師在毛邊去除站收貨,每批檢查時用手機開表單,現場即時登錄檢查人、批號、毛邊類型與合格數量。主管臨時查詢今日毛邊良率,不用再等現場手算,直接一鍵查詢—清楚又標準。有前輩回饋用這個把流程圖、紀錄統計全部收進一張 Sheet,追溯瑕疵批次超快。你絕對會想說:早該這樣了。

Related to this topic:

Comments

  1. profile
    Guest 2025-11-19 Reply
    之前在半導體廠實習,唉,有時候那個零件毛邊真的……很煩。明明已經用肉眼看了好幾遍,覺得都很乾淨,結果老師拿顯微鏡一照,就又說這邊有瑕疵,那邊也不行。其實我一直搞不懂,大家訂驗收標準到底有沒有一個什麼統一的規則?因為,不同公司、客戶好像要求都差蠻多的。 哦對,有一次問學長,他直接說只要毛邊大於0.05mm就全退,可是老師那天又說,要看那個毛邊是在什麼地方,如果會影響到功能就不能收,即使尺寸沒超過。結果變成好像不是單靠一個數字可以判斷,還要討論位置、影響什麼的……這種東西到底怎麼下決定啊? 講到這裡突然想到,你們如果在做專題或上課,會怎麼決定那個驗收標準嗎?老實說我自己完全沒頭緒,每次都覺得是不是太嚴格還是太鬆。有沒有什麼比較簡單的方法推薦?比如小工具什麼的,快速檢查一下。用放大鏡看久了,我真的會看到頭暈眼花……如果你們有省力的撇步拜託跟我分享一下,好奇死了。