Tietoja PCB Drill Compensation -järjestelmästä

About PCB Drill Compensation

Suuria yksilöitä ei ole olemassa, vain suuria tiimejä. Kun tiimi työskentelee yhdessä, ensimmäisen vaiheen PCB CAM -automaatioprojekti on tarkoitettu nettokäsittely ja poran käsittely on tehty. Seuraavaksi voimme siirtyä piirilevyn sääntömoottoriin. Tässä puhun porakompensaatiosta piirilevytekniikassa. Piirilevytekniikan kehittäjänä sinun pitäisi tietää, mikä se on ja miksi se toimii. Jaan alla keskeiset kohdat porauksen kompensoinnista.


1. Miksi kompensoimme porakokoja?

Asiakkaan antamien PCB-tiedostojen reikäkoot tarkoittavat yleensä seuraavaa lopullinen reiän koko. Piirilevyjen valmistuksen aikana reikien sisäpuolella on kupari (tai reiät saavat pintakäsittelyn, kuten HASL, ENIG, OSP jne.). Tämä pienentää reikää. Jotta varmistetaan, että reiän lopullinen koko vastaa vaatimusta, CAM-vaiheessa korjataan porakoko. Tämä on poran kompensointi.

Todellinen esimerkki:
Lopullinen reikäkoko: 1.00 mm. Pintakäsittely: ENIG (nikkelin paksuus 2,54 µm, kullan paksuus 0,0254 µm). Noudatetaan IPC-luokkaa II, ja keskimääräinen pinnoitetun kuparin paksuus on seuraava 20 µm. Jos käytämme 0,10 mm korvausarvona, CAM-ryhmä valitsee korvausarvoksi 1,10 mm poranterä.

Real example


2. Miten teemme porauskorvauksen?

Tee ensin selväksi, mitkä ovat porauskorvauksen kolme keskeistä parametria:
(1) Poranterän lisäys,
(2) Korvausarvo,
(3) Step-up-kynnysarvo (ennakkoarvo).
Nämä kolme määräävät, miten korvausta sovelletaan.

1) Poranterän lisäys

Tämä riippuu poranteristä, joita yritys ostaa. Alalla yleisesti käytetty lisäys on 50 µm. Tyypilliset porakoot vaihtelevat välillä 0,10 mm osoitteeseen 6,35 mm. Tavallinen pienin poranterien välinen askel on 0,05 mm. Joten porauskirjastossa on kokoja kuten 0,10 mm, 0,15 mm, 0,20 mm, 0,25 mm., ja niin edelleen.

2) Korvausarvo

Prosessiryhmä asettaa korvaussäännöt tehtaan testitulosten perusteella. Korvausarvot eivät juuri vaihtele eri toimialoilla. Yhteiset säännöt:

  • HASL-levyt (spray-purkki): kompensoi 0,15 mm.

  • Levyt ilman HASL:ää (ENIG, upotustina, OSP jne.): kompensoi 0,10 mm.

3) Step-up-kynnysarvo (ennakkoarvo)

Prosessiryhmä määrittää myös strategian poranterän valintaa varten, joka muistuttaa pyöristyssääntöä. Esimerkiksi kun lisäys on 20 µm, jos jäännös, joka jää jäljelle jakamalla lisäyksellä, on seuraava ≥ 20 µm, pyöristetään 50 µm ylöspäin, muuten säilytetään pienempi koko.

Esimerkki:
Lopullinen reikäkoko = 1,025 mm, korvaus = 0,10 mm, joten kompensoitu koko = 1,125 mm. Mutta ei ole mitään 1,125 mm porata kirjastossa. Käytä step-up-sääntöä. Jäljelle jäävä 1,125 mm verrattuna 0,05 mm:n askeleeseen. 25 µm. Koska 25 µm > 20 µm, pyöristetään 50 µm:llä ylöspäin ja valitaan a 1,15 mm pora.


Esimerkkejä todellisista porauskorvauksista

Oletetaan: porauskasvu = 50 µm, nousukynnys = 20 µm

Alkuperäinen reikä Korvaus Korvauksen jälkeen Kokonaislukuosa Jäännös Valittu pora
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

Miten valittu porakoko lasketaan

Jaa kompensoitu reikäkoko kokonaislukuosaan ja jäännösosaan poran inkrementin avulla:

Ota 1,125 mm esimerkkinä:
1,125 / 0,05 = 22,5 → lattia 22 → kokonaislukuosa = 22 × 0,05 = 1,10 mm.
Jäännös = 1,125 % 0,05 = 0,025 mm.

Sen jälkeen verrataan jäännösosaa step-up-kynnysarvoon (esimerkiksi 20 µm):

  • Jos jäännös > kynnysarvo, porakoko = kokonaislukuosa + 0,05 mm.

  • Jos jäännös ≤ kynnysarvo, porakoko = kokonaislukuosa + 0,00 mm.


Yhteenveto step-up-kynnysarvosta

Kun poran lisäys on 50 µm, step-up-kynnysarvo on kriittinen. Se suorittaa kompensoidun porakoon toisen korjauksen. Se päättää, “step up” vai “stay”. Tämän kynnysarvon muuttaminen muuttaa suoraan valittua porakokoa.

Lisää esimerkkejä (porausaste = 50 µm):

Alkuperäinen reikä Korvaus Kun comp. Kokonaisluku Jäännös Step-up-kynnysarvo Pora
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

Henkilökohtainen näkemys step-up-kynnyksen asettamisesta

Hyödyt ja haitat: Jos lopullinen reikä on kompensoinnin jälkeen hieman suurempi, osa voidaan ainakin asettaa paikalleen. Jos reikä on liian pieni, osaa ei voida asettaa. Asetamme siis yleensä korotuskynnyksen arvoksi 20 µm sen sijaan, että 25 µm. Tarkan valinnan on vastattava kutakin prosessia ja korvausarvoa.

Yhdistettynä korvausarvoon: HASL-levyjen osalta, joissa korvaus on 0,15 mm, “ylikompensoit” jo hieman ja lopulliset reiät ovat yleensä hieman suuria. Tässä tapauksessa step-up-kynnysarvo on 25 µm voi myös toimia. Käytä poraa valitessasi “lähimmän” sääntöä.


3. Miten varmistetaan, että reiän lopullinen koko vastaa vaatimuksia kompensoinnin jälkeen?

Menetelmä 1: Osta erikoisporanteriä

Poran vakiolisäys on 50 µm (0,05 mm:n askelin, kuten 1,00, 1,05, 1,10, 1,15 mm). Kun PTH-toleranssi on ±3 millimetriä, 50 µm:n porasarja voi kattaa toleranssin. Jos toleranssi on tätä pienempi, on käytettävä erikoisporanteriä.

Esimerkki 1 - Vertaa 50 µm:n ja 25 µm:n askelia:
Alkuperäinen reikä = 0,922 mm, korvaus = 0,10 mm, kompensoitu koko = 1,022 mm.

Alkuperäinen Korvaus Korvattu Lisäys Valittu pora
0.922 0.10 1.022 0,05 (50 µm) 1.05
0.922 0.10 1.022 0,025 (25 µm) 1.025

Ero: 1,050 - 1,022 = 0,028 mm; 1,025 - 1,022 = 0,003 mm. Pienempi ero on parempi, joten 1,025 mm (25 µm:n porrastus) on parempi.

Esimerkki 2 - 50 µm vs. erikoispora:
Alkuperäinen reikä = 0,611 mm, korvaus = 0,10 mm, kompensoitu = 0,711 mm.

Alkuperäinen Korvaus Korvattu Lisäys / tyyppi Valittu pora
0.611 0.10 0.711 0,05 (50 µm) 0.70
0.611 0.10 0.711 Erikoispora 0.711

Ero: 0,700 - 0,711 = -0,011 mm; 0,711 - 0,711 = 0,000 mm. Pienempi ero on parempi. Joten 0,711 mm erikoispora on paras.

Menetelmä 2: Parannetaan prosessia ja laitteita

  • Lisää toinen levyn pinnoitusvaihe kuviojakaumasta johtuvan epätasaisen paksuuden vähentämiseksi.

  • Käytä negatiivista valokuvaa suorasyövytyksellä ja levytä koko levy epätasaisen kuparin paksuuden vähentämiseksi.

  • Pienennä virrantiheyttä (tyypillisesti 19 ASF); hieman pienempi virrantiheys voi parantaa pinnoituksen tasaisuutta, mutta pidentää pinnoitusaikaa.

  • Päivitä vaakasuoraan pinnoituslinjaan. Pystysuorat pinnoituslinjat antavat usein paksumman kuparin reiän reunaan ja ohuemman kuparin reiän keskelle, kun reikien kuvasuhde on suuri. Vaakasuora linja voi vähentää tätä ongelmaa.

Menetelmä 3: CAM-strategioiden parantaminen

  • Eristetyillä kuparialueilla oleviin reikiin on sovellettava yhden lisäaskeleen kompensaatiota. Eristetyillä alueilla on vähemmän kuparia, joten pinnoituksen aikana niiden paikallinen virrantiheys on suurempi ja kuparin paksuus suurempi; ylimääräinen kompensointi kompensoi tätä.

  • Jos mallissa on tiheitä jälkiä toisella puolella ja harvoja toisella puolella (esimerkiksi virtalevy), aseta harva puoli sisäänpäin ja tiheä puoli ulospäin ja käytä käänteistä panelointia. Paneelipinnoituksen aikana levyn reunan lähellä olevat alueet saavat suuremman virrantiheyden ja paksumman pinnoituksen. Käänteinen panelointi auttaa tasapainottamaan pinnoitusjakaumaa.

  • Kun kuparipinta-alat ylhäällä ja alhaalla eroavat paljon toisistaan, käytä positiivista/negatiivista (yin-yang) panelointia. Epätasainen kuparipinta-ala aiheuttaa “kellonsuu”-läpivientejä; mitä paksumpi levy ja mitä enemmän kuparia, sitä pahempi vaikutus; yin-yang-paneelointi auttaa tasapainottamaan kuparin jakautumista.

  • Jos eristetyn alueen reiät ovat lähellä levyn reunaa tai aukkoja, lisää kuparisia “poiminta”-alueita tai kuparisia tyynyjä reunan tai aukon lähelle. Eristetyt reiät voivat saada liikaa pinnoituspaksuutta ja muuttua liian pieniksi; ylimääräinen kupari niiden lähellä vähentää paikallista virrantiheyttä ja tasapainottaa pinnoitusta.


4. Kuinka paljon korvausta tarvitaan ja miten se saadaan?

Kompensaatioarvot saadaan prosessitesteistä. Alla on yksi sarja mitattuja reikäkoon muutoksia eri vaiheiden jälkeen (tiedot raportista):

Prosessin kulku: mekaaninen poraus → upotuskupari → galvanointi → kuvionsiirto → syövytys → AOI → märkäkalvo → HASL

Prosessiparametrit:

  • Porakone: poranterän koko 0,95 mm, teroitus/hionta 3 kertaa, porauskorjaus 0,15 mm;

  • Pinnoitus: kuparin paksuus ≥ 18 µm, keskimäärin ≥ 20 µm;

  • HASL: lopullinen reikävaatimus 0,80 mm, toleranssi ±0,08 mm (3 mil);

  • Testi: 10 levyä, kulmat leikattu, levyn paksuus 2,0 mm.

Reiän koko muuttuu vaiheittain

1) Porauksen jälkeen - mitatut reikäkoot

  • Yhteensä 1920 testattua reikää (10 paneelia, 384 reikää kukin). Näyte: 200 reikää (20 reikää paneelia kohti). Reikien vaihteluväli: 0,93-0,94 mm, keskiarvo 0,931 mm.
    (Sitten pitkä luettelo otosarvoja, useimmiten 0,93 tai 0,94.)

2) Kuvioidun pinnoituksen jälkeen - kuparin paksuus

  • Testaa kutakin paneelia kohti 10 reikää. Kuparin paksuusalue 18-31 µm, kokous ≥18 µm ja keskiarvo ≥20 µm.
    (Sitten monet kuparin paksuuden näytearvot.)

3) Kuvioidun pinnoituksen jälkeen - reikäkoko

  • Yhteensä 1920 reikää, näyte 200. Reikien lukumäärä: 0,84-0,88 mm, keskiarvo 0,858 mm.
    (Sitten useita näytearvoja, enimmäkseen 0,85-0,88.)

4) HASL:n jälkeen - reiän koko

  • Yhteensä 1920 reikää, näyte 200. Reikien lukumäärä: 0,82-0,86 mm, keskiarvo 0,836 mm.
    (Sitten monia näytearvoja.)

Testiyhteenveto

Vaihe Reikäalue Keskimääräinen reikä
Porauksen jälkeen 0,93-0,94 mm 0,931 mm
Kuparipinnoituksen jälkeen 0,84-0,88 mm 0,858 mm
HASL:n jälkeen 0,82-0,86 mm 0,836 mm

Johtopäätökset: HASL-levyjen osalta porauskorvaus on 0,15 mm on “ylikompensaatiota” ja aiheuttaa sen, että lopulliset reiät ovat suurempia. Paras kompensointiarvo tässä testissä on 0,125 mm.


5. Porauskorvauskoodin täytäntöönpano (säännöt)

  1. Korvauksia ja korotusta koskevat säännöt

Aspect Valmis reikä Pinnan viimeistely Levyn paksuus Step-up-kynnysarvo Jos kuparin läpivienti < 26 µm 26-37 µm 37-47 µm 47-67 µm 67-86 µm
paksuuden suhde < 12:1 ≤ 1,90 mm HASL (lyijytetty tai lyijytön) ≥ 3,5 mm 0.01952 5 miljoonaa 6 miljoonaa 7 miljoonaa 8 miljoonaa 9 miljoonaa
paksuuden suhde < 12:1 ≤ 1,90 mm HASL (lyijytetty tai lyijytön) < 3.5 mm 0.01952 4.5 mil 5.5 mil 6.5 mil 7.5 mil 8.5 mil
paksuuden suhde < 12:1 ≤ 1,90 mm Other finishes / 0.01952 4 mil 5 miljoonaa 6 miljoonaa 7 miljoonaa 8 miljoonaa
paksuuden suhde < 12:1 > 1.90 mm HASL / 0.0246 5.5 mil 6.5 mil 7.5 mil 8.5 mil 9.5 mil
paksuuden suhde < 12:1 > 1.90 mm Other finishes / 0.01952 4.5 mil 5.5 mil 6.5 mil 7.5 mil 8.5 mil
thickness ratio ≥ 12:1 all holes HASL / 0.0246 5.5 mil 6.5 mil 7.5 mil 8.5 mil 9.5 mil
thickness ratio ≥ 12:1 all holes Other finishes / 0.01952 5 miljoonaa 6 miljoonaa 7 miljoonaa 8 miljoonaa 9 miljoonaa
  1. Special drill sizes (if tolerance < 3 mil, use special drills or 25 µm increment, use nearest drill rule)

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

3. Drill Compensation Code

				
					///<summary>
/// Calculate the drill bit diameter based on drill compensation parameters
///</summary>
///<param name="ToolInfo">Drill tool basic information</param>
///<param name="UpParam">Drill compensation parameters</param>
///<param name="ContainDrillToolList">Special drill bit diameter list</param>
///<returns>Return 1 if calculation is successful</returns>
public static int getDrillUpSize(Mod_tool ToolInfo, gToolUpParam UpParam, List<double> ContainDrillToolList)
{
    if (ContainDrillToolList == null) ContainDrillToolList = new List<double>();
    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 = ToolInfo.drill_size;
    }
    double DrillSlotLevel = (ToolInfo.shape == "slot") ? UpParam.SlotLevel : UpParam.DrillLevel;  //Drill step interval: Round holes have two levels (25/50μm), slot holes have one level (50μm)
    double UpLevel;
    if (UpParam.DrillLevel > 49) //When the step interval is 50μm, do not use special drill bits
    {
        ContainDrillToolList = new List<double>();
        UpLevel = UpParamHole.UpLevel;
    }
    else
    {
        UpLevel = UpParam.DrillLevel * 0.5;   //Select drill bit by half of the step interval
    }

    double Drillfinish_size = ToolInfo.finish_size + (ToolInfo.max_tol - ToolInfo.min_tol) * 0.5;  //Average the upper and lower tolerance
    int DrillLevelCount = (int)(Math.Floor((Drillfinish_size + UpParamHole.UpVal) / DrillSlotLevel)); //Drill step count
    double DrillsizeInt = DrillLevelCount * DrillSlotLevel; //Round down to the nearest drill step
    double DrillsizeFloat = (Drillfinish_size + UpParamHole.UpVal) % DrillSlotLevel;//Remainder of drill size after step division
    double DrillsizeLevel = (DrillsizeFloat > UpLevel) ? DrillSlotLevel : 0;//Determine whether to round up the remainder

    //Check if special drill bits are included
    int ContainDrillIndex = ContainDrillToolList.FindIndex(tt => (int)(Math.Floor(tt / DrillSlotLevel)) == DrillLevelCount);
    if (ContainDrillIndex > -1)
    {
        double ContainDrillFloat = ContainDrillToolList[ContainDrillIndex] % DrillSlotLevel;//Remainder of special drill bit size after step division
        if (DrillsizeFloat > UpLevel) // e.g. 38 > 20
        {
            double diff1 = Math.Abs(DrillsizeFloat - DrillSlotLevel);   //e.g. 40-50
            double diff2 = Math.Abs(DrillsizeFloat - ContainDrillFloat);  //e.g. 40-38
            DrillsizeLevel = (diff1 < diff2) ? DrillSlotLevel : ContainDrillFloat;
        }
        else //if (ContainDrillFloat < UpLevel)
        {
            double diff1 = Math.Abs(DrillsizeFloat - 0);  //e.g. 12-0
            double diff2 = Math.Abs(DrillsizeFloat - ContainDrillFloat);  //e.g. 12-16
            DrillsizeLevel = (diff1 < diff2) ? 0 : ContainDrillFloat;
        }
    }
    ToolInfo.drill_size = DrillsizeInt + DrillsizeLevel;

    double DiffDrillSizeUp = ToolInfo.drill_size - ToolInfo.finish_size;
    if (ToolInfo.shape == "slot") // Slot length compensation
    {
        if (UpParam.isSlotUpLevel) //Whether to round the slot length to step interval
        {
            Drillfinish_size = ToolInfo.slot_len + (ToolInfo.max_tol - ToolInfo.min_tol) * 0.5;  //Average the upper and lower tolerance
            DrillLevelCount = (int)(Math.Floor((Drillfinish_size + UpParamHole.UpVal + UpParam.SlotLengthUp) / DrillSlotLevel)); // Drill step count
            DrillsizeInt = DrillLevelCount * DrillSlotLevel; //Round down to the nearest drill step (50μm)
            DrillsizeFloat = (Drillfinish_size + UpParamHole.UpVal + UpParam.SlotLengthUp) % DrillSlotLevel;//Remainder of slot length after step division
            DrillsizeLevel = (DrillsizeFloat > UpParamHole.UpLevel) ? DrillSlotLevel : 0;//Determine whether to round up the remainder
            ToolInfo.slot_len = DrillsizeInt + DrillsizeLevel;
        }
        else
        {
            DrillsizeInt = Math.Floor((ToolInfo.slot_len + DiffDrillSizeUp) / 10) * 10; // Round down to the nearest 10μm
            ToolInfo.slot_len = DrillsizeInt;
        }
        ToolInfo.drill_size += UpParam.SlotEndNumber;  // Add suffix number for slot drill bit segmentation
    }
    ToolInfo.bit = Math.Round((ToolInfo.drill_size * 0.001), 3).ToString();
    return 1;
}

public class gToolUpParam
{
    /// <summary>
    /// Compensation parameters for VIA holes (in μm)
    /// </summary>
    public gToolUpParamHole Via { get; set; } = new gToolUpParamHole();
    /// <summary>
    /// Compensation parameters for PTH (Plated Through Hole) (in μm)
    /// </summary>
    public gToolUpParamHole Pth { get; set; } = new gToolUpParamHole();
    /// <summary>
    /// Compensation parameters for NPTH (Non-Plated Through Hole) (in μm)
    /// </summary>
    public gToolUpParamHole Npth { get; set; } = new gToolUpParamHole();
    /// <summary>
    /// Step interval for round drill holes (in μm)
    /// </summary>
    public double DrillLevel { get; set; } = 50;
    /// <summary>
    /// Step interval for slot drill holes (in μm)
    /// </summary>
    public double SlotLevel { get; set; } = 50;
    /// <summary>
    /// Suffix number for slot drill bit segmentation
    /// </summary>
    public int SlotEndNumber { get; set; } = 0;
    /// <summary>
    /// Additional compensation value for slot length (in μm)
    /// </summary>
    public double SlotLengthUp { get; set; } = 0;
    /// <summary>
    /// Whether to round the slot length to step interval
    /// </summary>
    public bool isSlotUpLevel { get; set; } = false;
}

public class gToolUpParamHole
{
    /// <summary>
    /// Compensation value (in μm)
    /// </summary>
    public double UpVal { get; set; } = 100;
    /// <summary>
    /// Step interval threshold for rounding up (in μm)
    /// </summary>
    public double UpLevel { get; set; } = 25;
    /// <summary>
    /// Upper tolerance (in μm)
    /// </summary>
    public double Max_Tol { get; set; } = 76;
    /// <summary>
    /// Lower tolerance (in μm)
    /// </summary>
    public double Min_Tol { get; set; } = 76;
}

///<summary>
/// Mod_tool: Drill tool attribute model
///</summary>
public class Mod_tool
{
    public int num { get; set; }
    public string type { get; set; } // Hole type: via/plate(nplate)
    public string shape { get; set; } // Hole shape: round/slot
    public double finish_size { get; set; } // Finished hole size (in μm)
    public double drill_size { get; set; } // Drill bit size (in μm)
    public double max_tol { get; set; } // Upper tolerance (in μm)
    public double min_tol { get; set; } // Lower tolerance (in μm)
    public double slot_len { get; set; } // Slot length (in μm)
    public string bit { get; set; } // Drill bit size (in mm, formatted string)
}
				
			

6. Why does board thickness affect drill compensation?

I did not understand this at first either. The main reason is the high thickness-to-diameter ratio (board thickness divided by hole diameter). A high ratio makes the copper at the hole center thinner and the copper at the hole edge thicker. To compute the thickness-to-diameter ratio you need the board thickness value. So board thickness enters the drill compensation rules. For high thickness-to-diameter holes, the compensation is larger.

Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

Selaa alkuun