<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title>小夏的猪窝 - PCB</title>
<link>https://blog.x-tools.top/tag/PCB/</link>
<atom:link href="https://blog.x-tools.top/feed/tag/PCB/" rel="self" type="application/rss+xml" />
<language>zh-CN</language>
<description></description>
<lastBuildDate>Sun, 11 May 2025 14:26:00 +0000</lastBuildDate>
<pubDate>Sun, 11 May 2025 14:26:00 +0000</pubDate>
<item>
<title>AutoSi9000S 更强大的批处理阻抗计算器！！</title>
<link>https://blog.x-tools.top/archives/104/</link>
<guid>https://blog.x-tools.top/archives/104/</guid>
<pubDate>Sun, 11 May 2025 14:26:00 +0000</pubDate>
<dc:creator>小夏</dc:creator>
<description><![CDATA[前言上回说到，一个GitHub项目“Auto_Si9000_WPF”，这是基于WPF编写的桌面应用程序，支持不同模型的批量阻抗计算，但是这个软件的有很大缺陷：1、不支持阻抗等数据的保存；2、反算...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h2>前言</h2><p>上回说到，一个GitHub项目“Auto_Si9000_WPF”，这是基于WPF编写的桌面应用程序，支持不同模型的批量阻抗计算，但是这个软件的有很大缺陷：<br>1、不支持阻抗等数据的保存；<br>2、反算会将原始线宽线距等参数一起变更；</p><p>现完全对本项目进行重构，依然是WPF的桌面应用程序，项目名字为：“<strong>AutoSi9000S</strong>”；</p><h2>AutoSi9000S 亮点</h2><ol><li><strong>总表的设计观念（类似Excel表），支持多个模型数据一起观察，根据选择模型实现智能参数禁用；</strong></li><li><strong>更强大的对等反算系统，调整后与原始的线宽线距完全分离，互不影响；</strong></li><li><strong>不使用系统的MessageBox，自定义的通知方式，永远不要点"确定"，更加人性化的提示功能；</strong></li><li><strong>引入常规叠构、阻抗所在层、参考层的概念，反向引用叠构数据到选中数据中，使阻抗计算更加简单快捷；</strong></li><li><strong>存档功能，使用Sqlite本地数据库保存所有阻抗数据，支持多存档管理，数据不丢失！</strong></li><li><strong>显示参数过多？试试自定义列设置，隐藏掉不常用的列！</strong></li><li><strong>Si9000原生计算界面的生成功能，一键导出预览，这图很有用！</strong></li></ol><p><img src="https://image.180402.xyz/2025/05/11/6820ac2de7659.png" alt="主界面" title="主界面"></p><h2>软件部分 Gif动图展示</h2><h3>AutoSi9000S计算演示</h3><ul><li>速度非常快！</li></ul><p><img src="https://image.180402.xyz/2025/05/11/6820b017a4d4d.gif" alt="AutoSi9000S计算演示" title="AutoSi9000S计算演示"></p><h3>AutoSi9000S反算演示</h3><ul><li>对等的反算线宽线距调整功能，仅需调整线宽即可做到阻抗调整，可简化CAM优化流程！</li></ul><p><img src="https://image.180402.xyz/2025/05/11/6820b1cc31763.gif" alt="AutoSi9000S反算演示" title="AutoSi9000S反算演示"></p><h3>AutoSi9000S复制演示</h3><ul><li>批量复制功能，批量计算演示：</li></ul><p><img src="https://image.180402.xyz/2025/05/11/6820b21c09d86.gif" alt="AutoSi9000S复制演示" title="AutoSi9000S复制演示"></p><h2>感兴趣的可以和我联系，一起学习，感谢您的点击！</h2>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://blog.x-tools.top/archives/104/#comments</comments>
<wfw:commentRss>https://blog.x-tools.top/feed/tag/PCB/</wfw:commentRss>
</item>
<item>
<title>关于SI9000计算阻抗接口的研究</title>
<link>https://blog.x-tools.top/archives/98/</link>
<guid>https://blog.x-tools.top/archives/98/</guid>
<pubDate>Tue, 26 Nov 2024 01:50:24 +0000</pubDate>
<dc:creator>小夏</dc:creator>
<description><![CDATA[开篇在PCB设计中，阻抗控制主要是指控制信号线的特性阻抗，使其与传输线或连接设备的阻抗匹配，以确保信号在传输过程中不产生过多的反射和损耗，常用于传输线的设计中。上述的重点就是阻抗匹配，客户端若在...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h2>开篇</h2><p><font style="color:rgb(36, 41, 47);">在PCB设计中，阻抗控制主要是指控制信号线的特性阻抗，使其与传输线或连接设备的阻抗匹配，以确保信号在传输过程中不产生过多的反射和损耗，常用于传输线的设计中。上述的重点就是</font><strong><font style="color:rgb(36, 41, 47);">阻抗匹配</font></strong><font style="color:rgb(36, 41, 47);">，客户端若在PCB中存在阻抗管控的要求，需要某一段线路的阻抗在XΩ±Y%（例：50Ω±10%）的范围内，PCB厂商在生产的过程中需要尽量保证阻抗线完整、平滑。</font></p><p><font style="color:rgb(36, 41, 47);">除了在生产过程中保证应该有的质量保证，还需要在工程设计阶段对资料中阻抗线的理论阻抗值进行模拟，如果模拟的阻抗值超出客户要求的阻抗管控范围，或偏差较大时，PCB厂商通常会对阻抗线进行建议调整，以确保阻抗值在客户要求的范围内。此外PCB生产完毕后，还需要指定的阻抗条测试模块，对PCB的阻抗进行测试，此时测量出来的就是板内实际的阻抗值了。</font></p><p><font style="color:rgb(36, 41, 47);">那么，如何对阻抗进行模拟计算呢？</font></p><h2><font style="color:rgb(36, 41, 47);">Polar SI9000</font></h2><p>我们需要使用到各种阻抗模拟的软件，本文使用的软件为：<strong>Polar SI9000</strong>，SI9000是Polar公司开发的<font style="color:rgb(36, 41, 47);">一款用于PCB设计的阻抗模拟软件，可以帮助设计师精确计算和优化传输线的特性阻抗。该软件中有各种阻抗线的模拟层叠结构，常用的有单线、单线共面、双线、双线共面，以及提供了内层、外层、盖油、不盖油的几类模拟阻抗模拟计算结构；</font></p><p><font style="color:rgb(36, 41, 47);">若需要模拟阻抗，只需要选择一个符合客户资料设计的阻抗线模型，填入需要的参数后，点击Calculate(计算)即可实现对理论阻抗的模拟。接下来我们使用Coated Microstrip1B(外层单线盖油)模型来实现对阻抗的模拟计算：</font></p><p>首先，填入软件需要的参数：介质层厚度(H1)、介质层介电常数(Er1)、线路下线宽(W1)、线路上线宽(W2)、线路厚度(T1)、基材上油墨厚度(C1)、线路上基材厚度(C2)、油墨介电常数(CEr)；</p><p>这些参数根据PCB厂商总结的常规参数填入即可，其中W1与W2，阻抗线的上下线宽通常是相差1Mil（受蚀刻药水的影响），1Mil是PCB厂商的常规蚀刻要求侵蚀的量，W1-W2=1Mil；关于板材以及油墨的介电常数需要让板材、油墨供应商来提供；填完参数点计算即可出现相应的阻抗Zo值了。</p><p>以上是一个阻抗仿真的步骤，实际上操作会比文本描述更加繁琐，更何况一个PCB中常规情况下不仅仅只有1个阻抗需要管控。并且SI9000的保存做的不是很好，如果PCB的层压叠构改变，所有阻抗都需要重新计算！非常难受... 这就让我产生了对SI9000阻抗程序的研究，找到软件的接口，制作一个基于SI9000计算接口的阻抗计算项目；</p><p><img src="https://image.180402.xyz/S3/1732583638018.png" alt="" title=""></p><h2>CalcEngineBEMDll.dll</h2><p>旧版本的SI9000安装目录中，没有<strong>CalcEngineBEMDll.dll</strong>，应该是集成在软件中了，本文使用的SI9000版本是V7.1.0，其中CalcEngineBEMDll.dll版本为V3.30，PolarGraphDll.dll的版本为V1.30。</p><p>该阻抗计算软件的接口均在<strong>CalcEngineBEMDll.dll</strong>中，SI9000.exe本体就是调用dll中的开放的接口来实现阻抗值的计算。为什么？因为SI8000是SI9000的老版本，8000的安装目录中提供了两个Excel文件，分别为Si8000.xls、Si8000Expert.xls，这些Excel中的VBA代码均被加密，使用网上的破解方法进入查看工程代码后，发现表中实现阻抗值计算的方法均是来自CalcEngineBEMDll.dll，该dll使用depends.exe加载后显示存在139个方法，其中阻抗计算的方法就有95个，在depends.exe加载的dll并不能展示方法所需的参数个数、参数类型等信息，但是在SI8000的Excel中VBA工程中所有方法的参数、参数类型都在其中！</p><p>以上，我们可以知道，阻抗计算方法在DLL中，方法可以被调用，方法的传参可以参考VBA工程；但前提是，用户电脑上必须安装好SI9000软件才可以；</p><p>接下来，本文中我将使用Python对DLL中计算方法进行调用，其它的语言请读者自行尝试。</p><p><img src="https://image.180402.xyz/S3/1732583638076.png" alt="" title=""></p><h2>Python调用</h2><p>Python是一个强大的高级编程语言，简单易用，各种领域都会有它的身影，无论是大小项目，都可以使用现有的pip包轻松实现。</p><p>示例项目使用的包为Python自带的<strong>ctypes</strong>，这个项目结构如下：</p><p>|--Auto_SI9000</p><p>|----main.py &gt; 调用calcFun中的类实现阻抗值计算</p><p>|----models.py &gt; 定义一些需要使用的结构体</p><p>|----si9000.py &gt; 加载DLL，定义DLL中方法的传参及返回值</p><p>|----calcFun.py &gt; Calc类(单计算)，Calc_Plus类(多计算，继承Calc)</p><p>|---lib文件夹 &gt; 存放需加载的DLL相关文件</p><p>接下来展示一下调用DLL的简单代码流程：</p><p>1、首先调用DLL中的ClaimFlexLicence方法，认证一下产品Key（仅需要认证一次）；</p><p>2、使用IsCalculationModelAllowed方法，指定需要使用的模型并允许DLL可以准备开始计算；</p><p>3、调用计算方法CoatedMicrostrip1B方法，并传入需要前面讲到的单线模型需要的一些参数（H1、Er1等），调用完成后会立刻返回，它的返回值是int(long)类型，1或0；该方法会将传入的参数进行检查，检查后会立刻返回检查的结果，返回1，则代表计算已经开始，返回0，代表计算参数存在错误，需要重新检查参数正确性！</p><p>4、调用QueryCalculationFinished等待方法，等待计算结束；</p><p>5、使用QueryCalculationResult方法获取阻抗计算结果，该方法如果直接传入结构体，会出现写入权限限制的问题，需要将变量的地址作为参数解决该问题；</p><p>最后，结构体中的<strong>dImpedance</strong>就是结果阻抗值了！</p><p>以上的调用流程均是来自VBA工程中的，其中部分方法可以跳过，或更改流程，读者可自行尝试。</p><p><img src="https://image.180402.xyz/S3/1732583638156.png" alt="" title=""></p><h2>最后</h2><p>本文到此为止就结束了，更多的DLL方法请自行在VBA工程中解读；</p><p>该项目目前还未完成，现只提供了一个单线模型的计算方法示例；</p><p>我会在文本末尾添加上本次示例项目的下载链接（Python代码，SI9000安装包），请自行下载，感谢各位！</p><p>项目下载链接：<a href="https://image.180402.xyz/S3/Auto_SI9000%20V2.exe">https://image.180402.xyz/S3/Auto_SI9000%20V2.exe</a></p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://blog.x-tools.top/archives/98/#comments</comments>
<wfw:commentRss>https://blog.x-tools.top/feed/tag/PCB/</wfw:commentRss>
</item>
</channel>
</rss>