zoukankan      html  css  js  c++  java
  • PCB 内层负片散热PAD Symbols尺寸更改方法

     如下图这是我们熟悉的内层负片散热PAD Symbols,我们CAM制作时,为了满足PCB工厂生产制作能力,,会优化散热PAD尺寸,让热PAD的尺寸符合制作规范要求,通常我们只关注散热PAD的3个指标即可(外环,内环,开口),只要将这3个参数优化到位就可以了。

     常规散热PAD 尺寸规范:(在此规范中:内径与外径,是基于孔的尺寸再预大值)

    一.问题来了,我们如何更改散热PAD的尺寸

         因为在CAM软件中,有N种的散热PAD类型,每一种散热PAD的Symbols对应的是一串文本,如:ths5000x3000x0x4x1000rc_ths5000x3000x0x4x1000x500xr1000, 我们关注的3个参数就藏在这个串文本中,那直接更改是不可能了。

         我们要解决这个问题。我们必须弄清楚,标准散热PAD的Symbols有多少种,每一种散热PAD 3关键参数(外环,内环,开口)所在这串文本位置, 我们可以要建立个散热PAD类,将原始Symbols字符串分解,并提取3个关键参数值, 这样才可以检测这个原始散热PAD尺寸是否符合要求了,符合要求就不更改,不符合要求就更改。

     

    二.一共有多少种散热PAD,每个散热PAD的参数是什么?

        共有7种标准散热PAD Symbols

        1.Symbols名示例:

           1.  ths5000x3000x0x4x1000

          外径 内径 角度 开口个数 开口宽度 thr ths
           2.  s_tho5000x3000x45x4x1000 外径

          内径 角度 开口个数 开口宽度 s_thr s_ths s_tho
           3. s_ths5000x4000x0x4x500xr1000

         外径 内径 角度 开口个数 开口宽度 外圆角半径 s_ths
          4.  sr_ths5000x3000x0x4x1000

          外径 内径 角度 开口个数 开口宽度 sr_ths
          5.  rc_ths5000x3000x45x4x1000x500

          外径宽 外径高 角度 开口个数 开口宽度 环宽 rc_ths rc_tho
          6.  rc_ths5000x3000x0x4x1000x500xr1000

          外径宽 外径高 角度 开口个数 开口宽度 环宽 外圆角半径 rc_ths
          7.  oblong_ths5000x3000x0x4x500x500xs

         外径宽 外径高 角度 开口个数 开口宽度 环宽 尾随标识 oblong_ths(*)xs oblong_ths(*)xr

         2.Symbols参数图示:

          

           

           

          

            

    三.代码实现更改散热PAD symbols尺寸

        1.更改散热PAD symbols类:

     public class symbolsThr
        {
            /// <summary>
            /// 是否外形尺寸(即无外径长宽)
            /// </summary>
            public bool isOuterSize
            {
                get
                {
                    return _isOuterSize;
                }
                set
                {
                    this._isOuterSize = value;
                }
            }
            private bool _isOuterSize = true;
            /// <summary>
            /// 散热PAD 外径
            /// </summary>
            public double OuterSize
            {
                get
                {
                    return _OuterSize;
                }
                set
                {
                    this._OuterSize = value;
                    this._OuterWidthSize = this._OuterSize;
                    this._OuterHeightSize = this._OuterSize;
                    this._isOuterSize = true;
                }
            }
            private double _OuterSize;
            /// <summary>
            /// 散热PAD 外径宽
            /// </summary>
            public double OuterWidthSize
            {
                get
                {
                    return _OuterWidthSize;
                }
                set
                {
                    this._OuterWidthSize = value;
                    this._isOuterSize = false;
                }
            }
            private double _OuterWidthSize;
            /// <summary>
            /// 散热PAD 外径高
            /// </summary>
            public double OuterHeightSize
            {
                get
                {
                    return _OuterHeightSize;
                }
                set
                {
                    this._OuterHeightSize = value;
                    this._isOuterSize = false;
                }
            }
            private double _OuterHeightSize;
    
            /// <summary>
            /// 散热PAD 内径  即(外径-环宽*2)
            /// </summary>
            public double InnerSize
            {
                get
                {
                    return _InnerSize;
                }
                set
                {
                    this._InnerSize = value;
                    this._RingWidth = (this._OuterSize - this._InnerSize) * 0.5;
                }
            }
            private double _InnerSize;
    
            /// <summary>
            /// 散热PAD 环宽  
            /// </summary>
            public double RingWidth
            {
                get
                {
                    return _RingWidth;
                }
                set
                {
                    this._RingWidth = value;
                    this._InnerSize = this._OuterSize - this._RingWidth * 2;
                }
            }
            private double _RingWidth;
    
    
            /// <summary>
            /// 散热PAD  开口宽   
            /// </summary>
            public double GapWidth
            {
                get
                {
                    return _GapWidth;
                }
                set
                {
                    this._GapWidth = value;
                }
            }
            private double _GapWidth;
    
            /// <summary>
            /// 散热PAD  角度 
            /// </summary>
            public double Angle { get; set; }
            /// <summary>
            /// 散热PAD  开口个数 
            /// </summary>
            public double GapCount { get; set; }
            /// <summary>
            /// 散热PAD  外圆角半径 
            /// </summary>
            public double OuterRoundRadius { get; set; }
    
            /// <summary>
            /// 散热PAD  尾随标识
            /// </summary>
            public string SymbolsEndString { get; set; } = "";
    
            private string _SymbolsStart;
            /// <summary>
            /// 初始化
            /// </summary>
            /// <param name="SymbolsName">原散热PAD symbols</param>
            public symbolsThr(string SymbolsName)
            {
                List<string> symbolsStartList = new List<string>() { "thr", "ths", "s_thr", "s_ths", "s_tho", "sr_ths", "rc_ths", "rc_tho", "rc_ths", "oblong_ths" };
                SymbolsName = SymbolsName.Trim().ToLower();
                int symbolsID = symbolsStartList.FindIndex(tt => SymbolsName.StartsWith(tt));
                if (symbolsID >= 0)
                {
                    _SymbolsStart = symbolsStartList[symbolsID];
                    var MathesList = Regex.Matches(SymbolsName, "\d+\.?\d*");
                    if (symbolsID >= 6)
                    {
                        this.OuterWidthSize = double.Parse(MathesList[0].Value);
                        this.OuterHeightSize = double.Parse(MathesList[1].Value);
                        this.Angle = double.Parse(MathesList[2].Value);
                        this.GapCount = double.Parse(MathesList[3].Value);
                        this.GapWidth = double.Parse(MathesList[4].Value);
                        this.RingWidth = double.Parse(MathesList[5].Value);
                        if (MathesList.Count == 7 && _SymbolsStart == "rc_ths")
                            this.OuterRoundRadius = double.Parse(MathesList[6].Value);
                        if (_SymbolsStart == "oblong_ths")
                            this.SymbolsEndString = SymbolsName.Substring(SymbolsName.Length - 1, 1);
                    
                    }
                    else
                    {
                        this.OuterSize = double.Parse(MathesList[0].Value);
                        this.InnerSize = double.Parse(MathesList[1].Value);
                        this.Angle = double.Parse(MathesList[2].Value);
                        this.GapCount = double.Parse(MathesList[3].Value);
                        this.GapWidth = double.Parse(MathesList[4].Value);
                        if (MathesList.Count == 5 && _SymbolsStart == "s_ths")
                            this.OuterRoundRadius = double.Parse(MathesList[6].Value);
                    }
                }
            }
    
            /// <summary>
            /// 获取Symbols
            /// </summary>
            /// <returns></returns>
            public string GetSymbolsThr
            {
                get
                {
                    string symbolsName = "";
                    if (_isOuterSize)
                    {
                        symbolsName = $"{this._SymbolsStart}{this.OuterSize}x{this._InnerSize}x{this.Angle}x{this.GapCount}x{this.GapWidth}";
                        symbolsName += this.OuterRoundRadius < 0.01 ? "" : $"xr{this.OuterRoundRadius}";
                    }
                    else
                    {
                        symbolsName = $"{this._SymbolsStart}{this.OuterWidthSize}x{this.OuterHeightSize}x{this.Angle}x{this.GapCount}x{this.GapWidth}x{this.RingWidth}";
                        symbolsName += this.OuterRoundRadius < 0.01 ? "" : $"xr{this.OuterRoundRadius}";
                        symbolsName += string.IsNullOrEmpty(SymbolsEndString) ? "" : $"x{this.SymbolsEndString}";
                    }
                    return symbolsName;
                }
            }
            /// <summary>
            /// 更改圆形(方形)散热PAD
            /// </summary>
            /// <param name="OuterSize_">外形</param>
            /// <param name="InnerSize_">内径</param>
            /// <param name="GapWidth_">开口宽度</param>
            /// <returns></returns>
            public string SetThrSize(double OuterSize_, double InnerSize_, double GapWidth_)
            {
                this.OuterSize = (this.OuterSize < OuterSize_) ? OuterSize_ : this.OuterSize;
                this.InnerSize = (this.InnerSize < InnerSize_) ? InnerSize_ : this.InnerSize;
                this.GapWidth = (this.GapWidth < GapWidth_) ? GapWidth_ : this.GapWidth;
                return this.GetSymbolsThr;
            }
            /// <summary>
            /// 更改矩形散热PAD
            /// </summary>
            /// <param name="OuterWidthSize_">外径宽</param>
            /// <param name="OuterHeightSize_">外径高</param>
            /// <param name="RingWidth_">环宽</param>
            /// <param name="GapWidth_">开口宽度</param>
            /// <returns></returns>
            public string SetThrSize(double OuterWidthSize_, double OuterHeightSize_, double RingWidth_, double GapWidth_)
            {
                this.OuterWidthSize = (this.OuterWidthSize < OuterWidthSize_) ? OuterWidthSize_ : this.OuterWidthSize;
                this.OuterHeightSize = (this.OuterHeightSize < OuterHeightSize_) ? OuterHeightSize_ : this.OuterHeightSize;
                this.RingWidth = (this.RingWidth < RingWidth_) ? RingWidth_ : this.RingWidth;
                this.GapWidth = (this.GapWidth < GapWidth_) ? GapWidth_ : this.GapWidth;
                return this.GetSymbolsThr;
            }
        }
    View Code

       2.调用例子:

                symbolsThr symThr = new symbolsThr("s_ths5000x4000x0x4x500xr1000");
                string symbols = symThr.SetThrSize(6000, 5000, 1000); //更改:外径  内径  开口   改后symbls为  s_ths6000x5000x0x4x1000xr1000  
  • 相关阅读:
    UNIX网络编程(转载)
    cin、cin.get()、cin.getline()、getline()、gets()等函数的用法(转)
    GSL GNU Scientific Library
    为人处事很有意义
    上海老大杜月笙——教你看穿一个人
    超实用的Linux/Unix快捷键大汇总(开发、管理)(2)(转)
    STL map常用操作简介(转)
    使用ifstream和getline读取文件内容[c++]
    VIM Tips
    超实用的Linux/Unix快捷键大汇总(开发、管理)(1)(转)
  • 原文地址:https://www.cnblogs.com/pcbren/p/9949665.html
Copyright © 2011-2022 走看看