openpnp,cadence SPB17.4,placement - 从allegro中导出坐标文件的选项会影响贴片精度
文章目录
- openpnp,cadence SPB17.4,placement - 从allegro中导出坐标文件的选项会影响贴片精度
- 概述
- 笔记
- place_symbol_origin.txt VS place_pin1.txt
- 相同的地方
- 不同的地方
- place_symbol_origin.txt VS place_body_center.txt
- 分析 - body中心和符号中心的区别
- 忽略0.01mil的区别,看看其他不同值的距离是多少?
- 继续看坐标文件中超差的元件
- 继续看坐标文件中超差的元件
- 继续看坐标文件中超差的元件
- 继续看坐标文件中超差的元件
- 继续看坐标文件中超差的元件
- 继续看坐标文件中超差的元件
- 解决贴片坐标不对的方法
- 备注
- 思想火花
- 备注
- END
openpnp,cadence SPB17.4,placement - 从allegro中导出坐标文件的选项会影响贴片精度
概述
因为贴片机精度的问题,以最高标准维护了贴片机。现在能确认,贴片机硬件和openpnp合在一起,精度为5个丝.
但是将坐标文件导入后,对着板子上的元件浏览,大部分还可以,但是有3个IC,明显会在X轴方向偏了0.2mm. 这还了得…
这个现象和我的烂贴片机维护之前的表现是一样的。
既然我能确定贴片机硬件和openpnp合在一起是没问题的,那么只能怀疑我的坐标文件不对。
这个坐标文件是我用工具处理过的(cadence SPB17.4 - export placement file to openpnp).
难道是我的处理代码有问题?
不能够啊 😛 如果转换错了,那么所有的元件坐标都应该有问题才对啊?
且我检查过工具代码,没发现啥问题。
难道是从allegro导出的原始坐标文件就不对?这个可能性也不大。
因为allegro这么NB的软件,只可能是使用姿势不对,不可能离谱到这个程度。
allegro导出坐标文件时,有选项,是否我选错了?
验证一下allegro导出坐标文件时,采用不同的选项,看看坐标文件有啥区别?
笔记
导出时,不勾选旧格式。
然后分别勾选符号中心,body中心, pin1, 分别导出3个选项的坐标文件为place_symbol_origin.txt,place_body_center.txt,place_pin1.txt
用BC5分别两两比较3个文件,比较2次,就知道这3个文件有啥区别。
可以看到坐标文件的单位都是mil
UUNITS = MILS
place_symbol_origin.txt VS place_pin1.txt
相同的地方
UUNITS = MILS
...
DWP1 177.16 3027.12 0 DW_HOLE_D2R0MM_D3R0MM
DWP2 2992.14 256.23 0 DW_HOLE_D2R0MM_D3R0MM
DWP3 177.16 256.23 0 DW_HOLE_D2R0MM_D3R0MM
DWP4 2992.14 3027.12 0 DW_HOLE_D2R0MM_D3R0MM
// ...
MK1 2924.80 107.27 0 MY_MARK_POINT_SMT_D1MM
MK2 253.00 103.41 0 MY_MARK_POINT_SMT_D1MM
MK3 91.40 2712.27 0 MY_MARK_POINT_SMT_D1MM
// ...
TT1 1137.53 2315.00 0 TEST_PT_TH
TT10 287.39 746.36 0 TEST_PT_TH
TT11 1853.79 2495.60 0 TEST_PT_TH
TT12 2667.56 486.16 0 TEST_PT_TH
TT13 1168.71 486.16 0 TEST_PT_TH
TT14 1601.78 486.16 0 TEST_PT_TH
TT15 735.64 486.16 0 TEST_PT_TH
TT16 2034.85 486.16 0 TEST_PT_TH
TT17 1450.01 2526.59 0 TEST_PT_TH
TT18 2630.33 1364.59 0 TEST_PT_TH
TT19 2725.74 1513.06 0 TEST_PT_TH
TT2 1737.19 2319.00 0 TEST_PT_TH
TT20 2573.65 835.59 0 TEST_PT_TH
TT21 2355.65 667.59 0 TEST_PT_TH
TT22 2573.65 765.59 0 TEST_PT_TH
TT23 2576.65 667.59 0 TEST_PT_TH
TT24 614.49 1471.45 0 TEST_PT_TH
TT25 577.59 2104.00 0 TEST_PT_TH
TT26 467.53 2106.00 0 TEST_PT_TH
TT27 367.81 2105.00 0 TEST_PT_TH
TT28 269.83 1471.00 0 TEST_PT_TH
TT3 958.30 1197.00 0 TEST_PT_TH
TT4 958.65 1293.00 0 TEST_PT_TH
TT5 543.06 2233.71 270 TEST_PT_TH
TT6 338.15 2593.84 0 TEST_PT_TH
TT7 804.97 2778.60 0 TEST_PT_TH
TT8 723.21 2899.54 0 TEST_PT_TH
TT9 722.36 2633.69 0 TEST_PT_TH
可以看到相同的地方有共同点,这些相同坐标的元件都是1个pin的元件。所以1脚和符号中心重合。
不同的地方
找个1206的电容来看
C2 446.55 2372.89 90 C1206
C2 446.55 2310.19 90 C1206
差别是Y坐标。2372.89 - 2310.19 = 62.7mil = 62.7mil×0.0254mm/mil=1.59258mm
这就说明,pin1的坐标文件根本不能用于贴片机。差的太多了。
只要不是1pin的元件,坐标的差距就是巨大的距离(1角和元件中心)
1206电容的尺寸 = 3.2mm(长) × 1.6mm(宽)
可以看出1.59mm相当于3.2mm的一半。
对照外形尺寸,也能看出为啥C2的X坐标相同,因为pin1的中心在符号中心的对称面上。
所以,首先排除的坐标文件为Pin1的选项
那现在可能的选项就在’符号中心’和’body中心’之中。
既然我用的坐标文件转换后用于贴片,精度太差(坐标错了)。那就看看这2个导出选项中,是否能有正确的那个坐标文件。
place_symbol_origin.txt VS place_body_center.txt
这个比较结果就有些微妙了。
分析一下。
同一个2pin封装(C1206), 差0.01mil => 0.01mil 等于 0.000254毫米(mm), 这个差别不影响贴片,可以忽略,但是问题要搞清楚。
分析 - body中心和符号中心的区别
body中心,指的是Place_Bound外形(元件占地面积)的中心, 这个中心一般是和引脚有对称关系(除非元件引脚排列和外形是不对称的),一般说来是元件的几何中心。
符号中心,是画封装时的封装原点(零点)坐标。这个坐标一般不在中心。为了画封装方便,一般都将封装原点放在pin1上。这样方便计算其他pin和外形丝印边的坐标。
除非是用了工具来封装,才有可能封装原点在元件的几何中心。
如果导出的坐标文件要转换后给贴片机用,那么必须选择"body中心"选项来导出坐标文件。
忽略0.01mil的区别,看看其他不同值的距离是多少?
dX = 2570.21 - 2570.51 = 0.3mil = 0.00762mm
dY = 486.27 - 486.16 = 0.1mil = 0.00254mm
1mil = 0.0254mm = 2个丝
一般在5个丝以下的误差(且我的设备的装配精度大约就在5个丝附近),可以忽略。
5丝 = 5 × 0.3937 ≈ 1.9685mil
现在忽略2mil以下的误差。
继续找大于2mil的坐标误差。
这个封装是个插件,不需要贴片。但是要找一下这个封装为啥坐标差别如此之大?
在PCB中找到这个元件。
HDR-TH_3P-P2_54-V-M 不记得是否是我自己封装的。这是标准封装,应该是从JLC扒下来的。
选中该元件,从菜单上选择Display/Element
D:/my_dev/my_local_git_prj/my_SPB_lib/pcb_lib/
hdr-th_3p-p2_54-v-m.psm
我的封装和编译完的符号都在一起,封装应该是hdr-th_3p-p2_54-v-m.dra
找到了 D:\my_dev\all_mine\my_SPB_lib\pcb_lib\hdr-th_3p-p2_54-v-m.dra, 打开,查看2个中心都在哪里?
在clolor192中,将place_bound_X 都改为醒目的绿色
可以看到,在左下角有默认的REFDES的文字,附近有个十字圈,圆圈中心就是符号中心。
右上角由标记出的绿色place_bound_x的外形的中心,就是body中心。
再结合坐标文件,就可以知道为啥符号中心和body中心的导出的坐标文件,为啥数值差距的如此之大。
打开这个封装,我就可以确认,这个封装确实是从JLC扒出来的。然后转成AD的低版本,然后倒入allegro,再导出的allegro封装文件。
我自己手工画封装或者用工具画封装,都不会将符号中心和body中心整这么远。离大谱…
这也说明一个道理,如果是从第三方扒出来的封装,一定要确认2点:
- body中心确实在所有pin的几何中心上。
- body中心和符号中心(原点)要重合(如果不用符号原点选项导出,可以不重合)。
不过如果自己画封装时,开始肯定是将符号中心放在pin1上。等封装画完了,才去设置符号中心到body的中心。
继续看坐标文件中超差的元件
这个封装我自己画的,去查一下。
D:\my_dev\all_mine\my_SPB_lib\pcb_lib\LCD_YR91050A_V1.dra
将元件层的place_bound_x改为红色,可以看到,就是元件的外形。
随便画一条线,从0,0开始画,0,0的坐标就是符号中心,可以看到,符号中心在一个pin上。
当然这个pin就和body(place_bound_x)中心差的太远了。
从这能看出,为了出坐标文件和画封装方便,在allegro中导出坐标文件时,只能选择body中心来导出坐标文件。
继续看坐标文件中超差的元件
D:\my_dev\all_mine\my_SPB_lib\pcb_lib\sot-23_l2_9-w1_3-p1_90-ls2_4-br.dra
这个封装是用Footprint Expert 24画的,可以看出该软件将place_bound_x画大了。
反而是符号中心是和body中心是重合的。不过对于SOT23封装来说,这个误差不大,能接受。
不过,还是要改封装(place_bound_x)才好。
看来啥免费的东西都不是白拿的,免费的东西最后还是贵的。
对于小白来说,有好多东西都注意不到,等吃了亏才发现上当。
继续看坐标文件中超差的元件
D:\my_dev\all_mine\my_SPB_lib\pcb_lib\r0805.dra
这个封装是从JLC扒下来,用allegro转的。
明显能看到符号原点不在元件引脚对称的中心。
且这个封装没有place_bound_x层…
从这能看出一个道理,如果扒第三方的封装,自己要检查。
不过如果是小白阶段的话,估计也检查不到body中心和符号原点这里…
继续看坐标文件中超差的元件
SOT-89-3_L4_5-W2_5-P1_50-LS4_2-BR
这个封装不是我自己弄的。
看起来,这个封装只要用body中心,就差不多是好的坐标。
继续看坐标文件中超差的元件
这个封装不是我弄的。
在openpnp上预览这个IC时,顶部相机十字总是在X轴方向上,向左偏一个pin,相机十字几乎搭在左边pin的边缘。
看了封装,此时才明白,原来是这个封装的place_bound_x画多了,坑货。
画这个封装的软件或者人,应该将place_bound_x均匀的包住4周的管脚才好啊。
不过很奇怪,假设我就是导出选项错误,选的是符号原点,看起来坐标应该是对的啊。
因为从这个封装看,符号原点和真正的body中心基本重合。
反正现在能确定了,就是封装的中心坐标不对引起的。只要核对完封装,坐标就是对的。
继续看坐标文件中超差的元件
sop-8_l5_0-w4_0-p1_27-ls6_0-bl.dra
看起来是place_bound_x画大了。
如果因为pin1指示的原点才扩大的place_bound_x, 那么将对称的一边也扩大,不就能解决元件body中心对称的问题了么?
要不只留在IC丝印内部的pin1指示,也能解决这个问题啊。
谁做的这种封装, 真疯狂。
解决贴片坐标不对的方法
- 在allegro中,只能用body中心来导出坐标文件(因为符号原点是用来方便画封装用的,一般都是放在pin1上。除非是用专门做封装的工具,才会将符号原点放在body中心附近(仅仅是附近而已))。
- 如果板子已经做回来了,可以用body中心导出一份坐标文件,然后转成openpnnp的坐标格式,看看坐标是否正确,如果ok了,那是运气好。
- 如果板子已经做回来了,但是body中心导出的坐标文件也不对,可以再拷贝一份工程,元件位置不改,去核对所有用到的封装(或者核对库中的所有封装的body中心,都改过来),然后临时更新板子副本的封装,再出临时的坐标文件,用于贴片。
- 如果板子还没有送去做,那么重新更新要归档的allegro工程,然后归档,做板子,出坐标文件,贴片。
备注
我开始贴LQFP封装的IC时,发现X坐标总是差0.1mm, 0.15mm, 0.2mm。
那时贴片机刚到手,就怀疑是定制的贴片机有问题(确实有问题,已经分析验证过了,不是冤枉人)。
然后就开始维护贴片机。现在贴片机精度确定没问题,还是贴歪了。
这时才继续分析贴片精度的问题。这时能怀疑的就是坐标文件有问题。
因为allegro坐标文件,我是用自己写的工具转成openpnp能用的格式。
所以,我先去检查了我的手搓工具是否有问题,没发现问题。
那么才怀疑到是否从allegro导出的坐标文件就不对呢? 这才来做的本实验。
才发现坐标文件出的可能有问题,但是用到的封装(大部分都是从第三方扒下来,用allegro转换的格式)中的body中心有问题。
有点背。新手,有好多东西考虑不到。
经验本身不值钱(就是上手一次就懂的事情),但是没经验却万万不能啊。太耽误时间了。
思想火花
以后封装(白嫖行动)会不断的增加,好多封装都是扒第三方的。然后用allegro去转换。
然后还得手工去验证修改封装中body中心? 这好费劲的。再说了,人不是机器,长时间重复一项工作,那是折磨啊。
难道以后不能享受轻松白嫖的快乐了? 那不能够啊… 失去了白嫖的快乐,这谁忍的了?
突然冒出来一个主意(有刚需时,主意来的就是快 😛),可以不用以后不断的改封装,可以继续轻松白嫖的快乐。
一般从第三方(e.g. JLC)上白嫖的封装,用allegro转换后,自动另存的封装名字都是很讲究的。
名称里面就有管脚的间距这些信息(e.g. sop-8_l5_0-w4_0-p1_27-ls6_0-bl.dra)。
只要给自己的工具备一个数据库(e.g. sqlite3, ini都行, 实在要是偷懒,硬编码在结构数组中都行啊),登记上不同封装的管脚间距信息。
有的封装是自己做的(e.g. LCD_YR91050A_V1.dra),有的是通用的(e.g. C0805, R0603), 可以特例处理(只要无法从封装名称上搞定引脚间距的封装,全部特化处理)。也登记在数据库中。
每次自己的封装库中有了新封装,可以先不登记进入自己的工具的数据库。
在自己工具中转换坐标时,如果无法判断出元件的1脚坐标和pin间距布局时(可能此元件没有登记), 就报错(断言)退出。
那转换不成功,就查工具代码,将这种报错封装需要的判断信息补全到数据库就ok.
等工具做好,以后就导出按照pin1坐标导出的板子坐标文件(pin1导出的坐标精准无比,随便第三方怎么设置符号原点和body中心,爱谁谁,我都可以找到理论上正确的根据pins围成的几何图形的中心,这才是真正的body中心)。
这样就很方便了(又回到了自己的舒适区)。
这个思想火花,我非常喜欢,不说有多优雅,至少将精确贴片和白嫖封装解耦了。
备注
既然allegro有按照pin1导出坐标文件的功能,那么应该有用场啊。
真想知道按照pin1导出坐标文件是干啥用的,是不是有配套的软件可以从pin1坐标结合封装信息生成贴片用的坐标文件啊。