PCBドリル補償について

About PCB Drill Compensation

偉大な個人は存在せず、偉大なチームだけが存在する。チームが一丸となることで、PCB CAM自動化プロジェクトの第一段階である ネットハンドリング そして ドリルハンドリング が完了しました。次に PCB ルールエンジンに進みます。ここでは PCB エンジニアリングでのドリル補正について話します。PCB エンジニアリング開発者として、それが何で、なぜ機能するのかを知っておく必要があります。以下に、ドリル補正についての重要なポイントを共有します。.


1.なぜドリルのサイズを補正するのか?

顧客から渡されたPCBファイルの穴のサイズは、通常、以下のサイズを意味します。 最終 穴のサイズ。PCB製造中、穴の内側に銅メッキが施されます(または穴はHASL、ENIG、OSPなどの表面仕上げが施されます)。これにより穴が小さくなります。最終的な穴のサイズが要件を満たすことを確認するために、CAMステップはドリルサイズを修正します。これがドリル補正です。.

実際の例だ:
最終的な穴の大きさ: 1.00 mm. .表面仕上げ: エニグ (ニッケル厚さ 2.54μm、金厚さ 0.0254μm)。IPCクラスIIに準拠し、平均メッキ銅厚は 20 µm. .もし 0.10 mm を報酬値として選ぶ。 1.10 mm ドリルビット。.

Real example


2.ドリル補償の方法は?

まず、ドリル報酬の3つの重要なパラメータを明確にする:
(1) ドリルビットの増分、,
(2) 補償額、,
(3) ステップアップのしきい値(先行値)。.
この3つによって補償の適用方法が決まる。.

1) ドリルビットの増分

これは会社が購入するドリルビットによる。業界で一般的な増分は 50 µm. .一般的なドリルのサイズは 0.10 mm への 6.35 mm. .通常、ドリルビット間の最小段差は 0.05 mm. .そのため、ドリルライブラリには次のようなサイズがあります。 0.10mm、0.15mm、0.20mm、0.25mm, などなど。.

2) 報酬額

プロセスチームは、工場でのテスト結果に基づいて補償ルールを設定する。補償値は業界間であまり変わらない。一般的なルール

  • HASLボード (スプレー缶): 0.15mmを補う.

  • HASLなしのボード (ENIG、無電解スズ、OSPなど): 0.10mmを補正.

3) ステップアップしきい値

プロセスチームは、丸めルールに似た、ドリルビットを選ぶ戦略も設定する。例えば、増分が 20 µm, もしインクリメントで割った余りが ≥ 20 µm 以上, そうでない場合は、小さい方のサイズを維持する。.


最終的な穴の大きさ 1.025 mm, 補償金 0.10 mm, 従って、補正後のサイズ 1.125 mm. .しかし 1.125 mm ライブラリーでドリル。ステップアップルールを使用する。0.05mmのステップに対して1.125mmの残りは 25 µm. .それ以来 25 µm > 20 µm, を選択し、50μm四捨五入する。 1.15 mm ドリルだ。.


ドリル補償の実例

仮定:ドリルのインクリメント 50 µm, ステップアップしきい値 20 µm

オリジナルホール 報酬 補償後 整数部 残り 選ばれたドリル
1.025 mm 0.10 1.125 mm 1.10 0.025 mm 1.15 mm
1.016 mm 0.10 1.116 mm 1.10 0.016 mm 1.10 mm

選択したドリルサイズの計算方法

ドリルインクリメントを使用して、補正穴サイズを整数部と余り部に分割する:

テイク 1.125 mm を例に挙げる:
1.125÷0.05=22.5→床から22→整数部=22×0.05=22 1.10 mm.
残り=1.125 % 0.05 0.025 mm.

次に、残りをステップアップしきい値(たとえば20μm)と比較する:

  • 余り>閾値の場合、ドリルサイズ=整数部+0.05mm。.

  • 余り≦閾値の場合、ドリルサイズ=整数部+0.00mm。.


ステップアップ閾値についてのまとめ

ドリルの増分が 50 µm, ステップアップのしきい値は重要です。補正されたドリルサイズの2回目の補正を行います。これは、“ステップアップ ”か “ステイ ”かを決定します。このしきい値を変更すると、選択されたドリル・サイズが直接変更されます。.

その他の例(ドリルの増分=50μm):

オリジナルホール 報酬 コンプ後. 整数 残り ステップアップ閾値 ドリル
1.022 mm 0.1 1.122 mm 1.10 0.022 mm 0.02 1.15 mm
1.022 mm 0.1 1.122 mm 1.10 0.022 mm 0.025 1.10 mm

ステップアップ基準値の設定に関する個人的見解

長所と短所 補正後、最終的な穴が少し大きければ、少なくとも部品は挿入できる。穴が小さすぎると、部品は挿入できません。そこで通常、ステップアップのしきい値を 20 µm の代わりに 25 µm. .正確な選択は、各プロセスと報酬の価値に見合うものでなければならない。.

報酬額との兼ね合い: 補正が必要なHASL付きボードの場合 0.15 mm, その場合、すでに少し「補正しすぎ」ており、最終的な穴がわずかに大きくなる傾向がある。その場合、ステップアップのしきい値は 25 µm も使える。ドリルを選ぶときは「最も近い」ルールを使う。.


3.補正後の最終的な穴の大きさが要件を満たしていることを確認する方法は?

方法1:特殊なドリルビットを購入する

標準的なドリルの増分は 50 µm (1.00、1.05、1.10、1.15 mmのように0.05 mmステップ)。PTH公差が±3 milの場合、50 µmのドリルセットで公差をカバーできます。公差がこれより小さい場合は、特殊なドリル・ビットを使用する。.

例1 - 50μm刻みと25μm刻みを比較:
オリジナルホール 0.922 mm, 補償金 0.10 mm, 補正サイズ 1.022 mm.

オリジナル 報酬 補償 インクリメント 選ばれたドリル
0.922 0.10 1.022 0.05 (50 µm) 1.05
0.922 0.10 1.022 0.025 (25 µm) 1.025

差:1.050-1.022=0.028mm、1.025-1.022=0.003mm。差は小さい方が良いので 1.025 mm (25μm刻み)が良い。.

例2 - 50 µm対特殊ドリル:
オリジナルホール 0.611 mm, 補償金 0.10 mm, 補償される 0.711 mm.

オリジナル 報酬 補償 インクリメント / タイプ 選ばれたドリル
0.611 0.10 0.711 0.05 (50 µm) 0.70
0.611 0.10 0.711 特別訓練 0.711

差:0.700 - 0.711 = -0.011 mm; 0.711 - 0.711 = 0.000 mm。差は小さい方が良い。つまり 0.711 mm 特殊ドリル がベストだ。.

方法2:プロセスと設備を改善する

  • パターン分布による厚みの不均一を減らすため、2回目の基板メッキ工程を追加する。.

  • ネガフォト・ダイレクトエッチングを使用し、基板全体にメッキを施すことで、銅の厚みムラを抑える。.

  • 電流密度を下げる(典型的な電流密度は19ASF)。電流密度をわずかに下げると、めっきの均一性は向上するが、めっき時間が長くなる。.

  • 水平めっきラインにアップグレードしてください。垂直めっきラインは、高アスペクト比の穴の場合、穴の縁の銅が厚くなり、穴の中心の銅が薄くなることがよくあります。水平ラインはその問題を軽減することができます。.

方法3:CAM戦略の改善

  • 銅が孤立している部分の穴には、1インクリメント余分に補正をかける。孤立した部分は銅が少ないので、メッキ中に局所的な電流密度が高くなり、銅の厚みが増えます。.

  • 片側が密で、もう片側が疎の設計(例えば、電源基板)の場合、疎側を内側に、密側を外側に配置し、逆パネルめっきを使用する。パネルめっきでは、基板端に近い部分は電流密度が高くなり、めっきが厚くなります。逆パネル化により、めっき分布のバランスをとることができる。.

  • 上下の銅面積が大きく異なる場合は、プラス/マイナス(陰陽)パネリングを使用する。銅の面積が不均等だと「ベルマウス」ビアが発生し、基板が厚く銅が多いほど、その影響はひどくなります。.

  • 基板のエッジやスロットに近い孤立したエリアの穴には、エッジやスロットの近くに銅の「ピックアップ」エリアや銅パッドを追加してください。孤立した穴はメッキが厚くなりすぎ、小さくなりすぎることがあります。.


4.どれだけの補償が必要で、それはどのように導き出されるのか?

補正値はプロセステストから得られたものです。以下は、様々な工程後のホールサイズの変化を測定した1セットです(レポートからのデータ):

プロセスの流れ メカニカルドリル→無電解銅→電気めっき→パターン転写→エッチング→AOI→ウェットフィルム→HASL

プロセスパラメーター:

  • ドリル:ドリル・ビット・サイズ0.95 mm、再研磨3回、ドリル補正0.15 mm;;

  • メッキ:銅厚≥18μm、平均≥20μm;;

  • HASL:最終穴要件0.80mm、公差±0.08mm(3mil);;

  • 試験:パネル10枚、コーナートリミング済み、板厚2.0mm。.

穴の大きさが段階的に変化

1) 穴あけ後 - 測定された穴のサイズ

  • 合計1920ホール(10パネル、各384ホール)。サンプル:200ホール(各パネル20ホール)。穴の範囲: 0.93-0.94 mm, 平均 0.931 mm.
    (その後、サンプリングされた値の長いリストが表示されるが、そのほとんどは0.93か0.94である)。

2)パターンめっき後-銅の厚さ

  • 各パネルにつき、10個の穴をテストする。銅の厚さの範囲 18-31 µm, 会合≥18 µm、平均≥20 µm。.
    (その後、多くの銅の厚さのサンプル値)。

3) パターンめっき後-穴サイズ

  • 合計1920ホール、サンプル200。ホール範囲: 0.84-0.88 mm, 平均 0.858 mm.
    (その後、多くのサンプル値が出たが、ほとんどが0.85-0.88だった)。

4) HASL後 - ホールサイズ

  • 合計1920ホール、サンプル200。ホール範囲: 0.82-0.86 mm, 平均 0.836 mm.
    (それから多くのサンプル値)。

テスト概要

ステップ ホール範囲 平均ホール
掘削後 0.93-0.94 mm 0.931 mm
銅めっき後 0.84-0.88 mm 0.858 mm
HASL後 0.82-0.86 mm 0.836 mm

結論 HASLボードのドリル補正 0.15 mm は「過補正」であり、最終的な穴が大きくなる。このテストでの最適な補正値は 0.125 mm.


5.ドリル補償コードの実装(ルール)

  1. 報酬とステップアップ規定

アスペクト 完成した穴 表面仕上げ 板厚 ステップアップ閾値 ビア銅<26 µmの場合 26-37 µm 37-47 µm 47-67 µm 67-86 µm
厚さ比 < 12:1 ≤ 1.90 mm HASL(有鉛または鉛フリー) ≥ mm 0.01952 5ミル 6ミル 7マイル 8マイル 9マイル
厚さ比 < 12:1 ≤ 1.90 mm HASL(有鉛または鉛フリー) < 3.5 mm 0.01952 4.5ミリオン 5.5ミル 6.5ミル 7.5ミリオン 8.5ミル
厚さ比 < 12:1 ≤ 1.90 mm その他の仕上げ / 0.01952 4ミル 5ミル 6ミル 7マイル 8マイル
厚さ比 < 12:1 > 1.90 mm ハスル / 0.0246 5.5ミル 6.5ミル 7.5ミリオン 8.5ミル 9.5ミリオン
厚さ比 < 12:1 > 1.90 mm その他の仕上げ / 0.01952 4.5ミリオン 5.5ミル 6.5ミル 7.5ミリオン 8.5ミル
厚さ比 ≥ 12:1 全穴 ハスル / 0.0246 5.5ミル 6.5ミル 7.5ミリオン 8.5ミル 9.5ミリオン
厚さ比 ≥ 12:1 全穴 その他の仕上げ / 0.01952 5ミル 6ミル 7マイル 8マイル 9マイル
  1. 特殊ドリルサイズ(公差が3mil未満の場合は特殊ドリル、25μm刻みの場合は最も近いドリルルールを使用)

				
					List ContainDrillToolList = new List();
ContainDrillToolList.AddRange(new double[] { 610, 635, 711, 838, 914, 1016, 1320, 3120 });</xmp
				
			

3.ドリル補償コード

				
					//
/// ドリル補正パラメータに基づいてドリルビット径を計算する
///
///ドリル工具の基本情報</param
///ドリル補正パラメータ</param
///特殊ドリルビット径リスト</param
/// 計算に成功したら1を返す。
public static int getDrillUpSize(Mod_tool ToolInfo, gToolUpParam UpParam, List ContainDrillToolList)
{
    if (ContainDrillToolList == null) ContainDrillToolList = new List();
    gToolUpParamHole UpParamHole = new G_Helper.gToolUpParamHole();
    switch (ToolInfo.type)
    {
        case "via":
            UpParamHole = UpParam.Via;
            break;
        case "plate":
            UpParamHole = UpParam.Pth;
            break;
        case "nplate":
            UpParamHole = UpParam.Npth;
            break;
    }
    ToolInfo.max_tol = Math.Round(UpParamHole.Max_Tol, 0);
    ToolInfo.min_tol = Math.Round(UpParamHole.Min_Tol, 0);
    if (ToolInfo.finish_size < 50)
    {
        (ToolInfo.finish_size 49) //段差が50μmの場合、特殊なドリルビットは使用しない。
    {
        ContainDrillToolList = new List();
        UpLevel = UpParamHole.UpLevel;
    }
    else
    {
        UpLevel = UpParam.DrillLevel * 0.5; //ステップ間隔の半分でドリルビットを選択します。
    }

    double Drillfinish_size = ToolInfo.finish_size + (ToolInfo.max_tol - ToolInfo.min_tol) * 0.5; //上下の公差の平均値
    int DrillLevelCount = (int)(Math.Floor((Drillfinish_size + UpParamHole.UpVal) / DrillSlotLevel)); //ドリルステップ数
    double DrillsizeInt = DrillLevelCount * DrillSlotLevel; //最も近いドリルステップに切り捨てます。
    double DrillsizeFloat = (Drillfinish_size + UpParamHole.UpVal) % DrillSlotLevel;//ステップ分割後のドリルサイズの残り。
    double DrillsizeLevel = (DrillsizeFloat > UpLevel) ?DrillSlotLevel : 0;//余りを切り上げるかどうかの判定

    //特殊なドリルビットが含まれているかどうかをチェック
    int ContainDrillIndex = ContainDrillToolList.FindIndex(tt => (int)(Math.Floor(tt / DrillSlotLevel)) == DrillLevelCount);
    if (ContainDrillIndex > -1)
    {
        double ContainDrillFloat = ContainDrillToolList[ContainDrillIndex] % DrillSlotLevel;//ステップ分割後の特殊ドリルビットサイズの残量
        if (DrillsizeFloat > UpLevel) // 例:38 > 20
        {
            double diff1 = Math.Abs(DrillsizeFloat - DrillSlotLevel); //例:40-50
            double diff2 = Math.Abs(DrillsizeFloat - ContainDrillFloat); //例:40-38
            DrillsizeLevel = (diff1 < diff2) ?DrillSlotLevel : ContainDrillFloat;
        }
        else //if (ContainDrillFloat < UpLevel)
        {
            double diff1 = Math.Abs(DrillsizeFloat - 0); //例:12-0
            double diff2 = Math.Abs(DrillsizeFloat - ContainDrillFloat); //例:12-16
            DrillsizeLevel = (diff1  UpParamHole.UpLevel) ?DrillSlotLevel : 0;//余りを切り上げるかどうかの判定
            ToolInfo.slot_len = DrillsizeInt + DrillsizeLevel;
        }
        else
        {
            DrillsizeInt = Math.Floor((ToolInfo.slot_len + DiffDrillSizeUp) / 10) * 10; // 10μm単位で切り捨てる。
            ToolInfo.slot_len = DrillsizeInt;
        }
        ToolInfo.drill_size += UpParam.SlotEndNumber; // スロットドリルビットのセグメンテーション用の接尾辞番号を追加する。
    }
    ToolInfo.bit = Math.Round((ToolInfo.drill_size * 0.001), 3).ToString();
    1 を返す;
}

public class gToolUpParam
{
    /// 
    /// VIAホールの補正パラメータ(μm単位)
    /// 
    public gToolUpParamHole Via { get; set; } = new gToolUpParamHole();
    /// 
    /// PTH(めっきスルーホール)の補正パラメータ(単位:μm)
    /// 
    public gToolUpParamHole Pth { get; set; } = new gToolUpParamHole();
    /// 
    /// NPTH (Non-Plated Through Hole)の補正パラメータ (単位: μm)
    /// 
    public gToolUpParamHole Npth { get; set; } = new gToolUpParamHole();
    /// 
    /// 丸ドリル穴のステップ間隔 (μm)
    /// 
    public double DrillLevel { get; set; } = 50;
    /// 
    /// スロットドリル穴のステップ間隔(単位:μm)
    /// 
    public double SlotLevel { get; set; } = 50;
    /// 
    /// スロットドリルビットのセグメンテーション用サフィックス番号
    /// 
    public int SlotEndNumber { get; set; } = 0;
    /// 
    /// スロット長さの追加補正値(単位:μm)
    /// 
    public double SlotLengthUp { get; set; } = 0;
    /// 
    /// スロット長をステップ間隔に丸めるかどうか
    /// 
    public bool isSlotUpLevel { get; set; } = false;
}

public class gToolUpParamHole
{
    /// 
    /// 補正値(μm)
    /// 
    public double UpVal { get; set; } = 100;
    /// 
    /// 切り上げステップ間隔閾値(単位:μm)
    /// 
    public double UpLevel { get; set; } = 25;
    /// 
    /// 上限許容差(μm単位)
    /// 
    public double Max_Tol { get; set; } = 76;
    /// 
    /// 下限許容差(単位:μm)
    /// 
    public double Min_Tol { get; set; } = 76;
}

<//
/// Mod_tool:ドリル工具属性モデル
///
public class Mod_tool
{
    
    public string type { get; set; } // 穴の種類:via/plate(nplate)// 穴タイプ: via/plate(nplate)
    public string shape { get; set; } // 穴の形状:丸/スロット// 穴の形状:ラウンド/スロット
    public double finish_size { get; set; } // 仕上がり穴サイズ(単位:μ)。// 仕上がり穴サイズ(単位:μm)
    public double drill_size { get; set; } // ドリルビットのサイズ(単位:μm)。// ドリルビットのサイズ(単位:μm)
    public double max_tol { get; set; } // 上限公差(単位:μm)。// 許容誤差(μm単位)
    public double min_tol { get; set; } // 下限許容差(μm単位)。// 下限許容差(μm単位)
    public double slot_len { get; set; } // スロットの長さ(単位:μm)。// スロットの長さ(μm単位)
    public string bit { get; set; } // ドリルビットのサイズ(単位:mm// ドリルビットのサイズ(単位:mm、フォーマットされた文字列)
}
				
			

6.なぜボードの厚さがドリルの補正に影響するのですか?

私も最初は理解できなかった。主な理由は 厚さ対直径比 (基板の厚さ÷穴の直径)。比率が高いと、穴の中心の銅は薄くなり、穴の縁の銅は厚くなります。厚さと直径の比率を計算するには、基板の厚さの値が必要です。そのため、板厚はドリル補正ルールに入ります。厚さ対直径の高い穴の場合、補正は大きくなります。.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

トップに戻る