====== PCB布局布线 ====== 一旦完成了原理图的设计,通过ERC检查无误(没有Error、最好也没有Warning)、生成Netlist,就可以进入到下一步 - PCB Layout了,这个过程应该细分为元器件的Placement(布局)和信号线的Route(布线)两个环节,在实际的设计中Placement(布局)更重要,需要花费更多的时间,基于一系列的需求和规则对每个元器件在电路板上的位置进行认真的摆放,尤其是在大型的项目中,一定要待元器件的布局被相关的人确定以后,再开始信号线的连接,也就是布线的过程。布局和布线的过程基于信号完整性、电源完整性等方面的考虑不在本教程的探讨范围,在这里我们只看看KiCad这个工具如何实现布局和布线整个流程的。 我们将PCB Layout的过程也总结为按照顺序执行的10步: - 按照项目的需求确定PCB板的物理大小、关键器件的位置、板子的层数并定义各层的功能 - 加载原理图生成的Netlist(网表),根据一系列的规则进行元器件的布局,可以通过3D视图查看板子的布局结构是否合理 - 根据PCB加工厂商的制造规范设定PCB的布线规则 - 线宽、线间距、过孔大小、丝印字体及大小等等 - 关键信号线走线 - 电源 、时钟、差分信号、敏感的模拟信号…. - 其它信号线走线 - 铺地/电源 - DRC检查 - 对照原理图上的连线逐线高亮检查 - 调整丝印 - 生成给PCB加工厂需要的Gerber文件 接下来我们来看看KiCad中的Pcbnew是如何执行这些过程的。 ===== 1. Pcbnew的使用 ===== 1. **执行程序** - 从KiCad项目管理处,单击//Pcb layout editor//(PCB布局编辑器)图标{{:pcbnew.png|}}启动Pcbnew窗口。 2. **设置页面信息** - 先输入一些原理图信息。 单击顶部工具栏上的//Page setting//(页面设置)图标{{:sheetset.png|}}。设置//Page size//(纸张大小)为(A4, 8.5x11等)和title(标题)为//Tutorial1//。 3. **设置布局布线规则** - 根据PCB制造商提供的要求,来设间距、最小线宽等,一般来讲可以将间距和最小线宽度都设置为0.25mm。 单击**Setup**(设置)→ **Design Rules**(设计规则)菜单来设置各个参数,这里的单位是mm。 {{ :design_rules.png |}} 4. **导入网表文件** - 单击顶部工具栏上的//Read netlist//(读入网表)图标 {{:netlist.png|}}。 如果是从//Eeschema//创建的,则可以在//Netlist//文件字段中选择网表文件//tutorial1.net//进行读取。 5. **查看并移动基于网表导入的器件** - 在页面中应该能够看到原理图中定义了封装的所有器件,这些器件都通过称为ratsnest的一组细线连接 - 你可以通过//Show/hide board ratsnest//(显示/隐藏电路板网络)按钮{{:general_ratsnest.png|}}来查看所有器件之间的连接关系,如果你发现这些细线的连接跟电路原理图中原本设计的有出入,就要回去查看一下是哪一个地方出了问题。 6. **调整器件的位置** - 可以用鼠标选中这些器件并进行移动,也可以将鼠标悬停在你要移动的器件上并按[m]来移动它们,然后单击要放置它们的位置将其放好,也可以通过单击选择器件然后拖动它。按[r]可以旋转器件。 {{ :gsik_tutorial1_080.png |}} 7. **定义PCB板的外沿** - 从顶部工具栏的下拉菜单中选择//Edge.Cuts//图层。单击右侧工具栏上的//Add graphic lines//(添加图形线)图标{{:add_dashed_line.png|}}。然后用走线圈定PCB的边缘,要记住在绿色边缘和PCB边缘之间留一个小间隙。 {{ :select_edge_cuts.png |}} 8. **布线** - 一般来讲我们都会在电路板上通过大面积铺设地平面的方式将所有GND进行连接,因此在布线的时候可以先不用考虑GND这个网络上的连线。电路板的外表面有两层 - F.Cu(顶层,我们也称为Top Layer)和B.Cu(底层,我们也称为Bottom Layer),两层板一般选择在B.Cu层铺设大面积的地平面,因为F.Cu层主要用于放置元器件。如果设计中需要用到4层板,可以转到//设置→图层设置//将铜图层改为4. 你可以在图层表中设置需要的图层并对它们的用途做设定。 布线的时候我们先从F.Cu开始,在顶部工具栏的下拉菜单中选择F.Cu(PgUp),如图: {{ :select_top_copper.png |}} 单击右侧工具栏上的//Route tracks//(布线)图标{{:add_tracks.png|}}。 单击J1的第1个引脚连线到R2的焊盘,双击鼠标结束连线。 此走线的宽度将默认为0.250mm,你也可以从顶部工具栏的下拉菜单中更改走线的宽度。 默认只有一个走线宽度。 {{ :pcbnew_select_track_width.png |}} 如果要添加更多走线宽度,可以通过//设置→设计规则→全局设计规则选项//卡,在此窗口的右下角添加任何其它你需要的宽度,这样在后面布线的时候你可以根据需要随时从下拉菜单中选择走线的宽度。 请参见下面的示例(单位为英寸)。 {{ :custom_tracks_width.png |}} 你也可以通过添加一个Net Class来设定一组选项。 转到**设置→设计规则→网络类别编辑器**,添加一个名为power的新类别。 将走线的宽度从8mil(表示为0.0080)改为24mil(表示为0.0240)。 接下来将除GND之外的所有网络都添加到Power类别(在左侧选择默认值,在右侧选择电源并使用箭头)。 重复此过程,直到连接除J1的引脚3之外的所有连线。 电路板应如下所示。 {{ :gsik_tutorial1_090.png |}} 9. **通过过孔进行跨层走线** - 走线一般都用到2层以上,跨层走线就需要用到**过孔**进行连接,比如在顶层(Top Layer)的铜平面上走线时,右键单击并选择//Place Via//(放置过孔)或只需按[v],走线就改到了底层铜平面。 {{ :place_a_via.png |}} 10. **高亮网络进行检查** - 如果要检查特定连接,可以单击右侧工具栏上的高亮网络图标{{:net_highlight.png|}}。 点击J1的第3针,连线本身和连接到它的所有焊盘都会被高亮显示出来。 11. **铺设地平面** - 在前面的连线中对所有与GND网络相连的连接都不做处理,最后通过铺设一个覆盖整个PCB板的地平面,再将所有器件上的GND管脚进行连接。具体的做法就是单击右侧工具栏上的//Add filled zone//(添加填充区域)图标{{:add_zone.png|}},在电路板上走线画一个矩形框,将会在板子上铺设大面积的铜用作地线的连接,板子铺设之后的效果: {{ :gsik_tutorial1_100.png |}} 12. **设计规则检查** - 单击顶部工具栏上的//Perform design rules check//(执行设计规则检查)图标{{:drc.png|}}启动设计规则检查,这个过程非常重要,能够确保你最后的布局、布线符合原理图的设计以及设定的布局布线规则。 26. **3D查看** - 3D查看是非常重要的一个功能,能够帮助你对自己设计的板子有个空间的概念,有些问题只有通过3D查看才能发现,比如装配方面的冲突等,具体的操作很简单 - 单击View →3D Viewer。 {{ :pcbnew_3d_viewer.png |}} ===== 2. 生成和查看Gerber文件 ===== 一旦PCB设计完成,就可以为每一层生成Gerber文件,并将它们发给你要打板的PCB制板厂。 从KiCad中打开Pcbnew电路板编辑器,点击File(文件) → Plot(光绘). 光绘的格式选择Gerber,并选定你要输出的所有Gerber文件的文件夹,点击Plot(光绘)按钮。 要生成drill file(钻孔文件), 从Pcbnew里再执行一次File(文件) → Plot(光绘)选项. 按照首选的设置即可. 对于2层板,你需要选定如下的一些层的: ^层 ^KiCad层的名字 ^首选的Gerber扩展名 ^打开"用Protel文件扩展名"^ |Bottom Layer |B.Cu |.GBR |.GBL| |Top Layer |F.Cu |.GBR |.GTL | |Top Overlay |F.SilkS |.GBR |.GTO | |Bottom Solder Resist |B.Mask |.GBR |.GBS | |Top Solder Resist |F.Mask |.GBR |.GTS | |Edges |Edge.Cuts |.GBR |.GM1| 要查看所有Gerber文件,可以使用KiCad工程管理器中的//GerbView//功能。 在下拉菜单或图层管理器中,选择图层1. 单击**File**(文件)→ **Open Gerber Files**(打开Gerber文件)或单击图标{{:gerber_file.png|}}。 选择并打开所有生成的Gerber文件。 注意它们如何一个在另一个上面显示。 使用**File→Open Excellon Drill File**打开钻孔文件。 使用右侧的图层管理器选择/取消选择要显示的图层。 在发送到制板厂之前,要仔细检查每一层是否正确。 ===== 3. 使用FreeRouting自动布线 ===== 手工布线既快速又有趣,但对于具有大量器件的电路板,您可能希望使用自动布线器。请记住,您应首先手动对关键的信号布线,然后剩余的非关键但比较无聊的信号线可以让机器自动布线。它只会对还没有布线的信号进行自动连接。在这里可以使用的自动布线器是FreeRouting。 {{ :freerouting.png |}} 注:FreeRouting是一个开源的Java应用程序。目前FreeRouting有多种不同的版本,你可以在网上搜索“freerouting”,就会找到源代码或已经编译好的Java包,根据你自己的情况选择合适的格式使用。 - 从Pcbnew单击 //File//(文件)→ //Export//(导出)→ //Specctra DSN//, 保存文件到本地目录。启动FreeRouter并单击Open Your Own Design(打开你自己的设计)按钮,浏览dsn文件并加载它。 - FreeRouter具有KiCad目前不具备的一些功能,包括手动布线和自动布线。 FreeRouter主要有两个步骤:首先,对电路板进行布线,然后对其进行优化。完全优化可能需要很长时间,你可以随时停止它。 - 您可以通过单击顶部栏上的//Autorouter//(自动布线器)按钮来启动自动布线。底栏显示正在进行的布线过程。如果下面的“通过计数”已经超过30,意味使用自动布线很难步通你的板子,你可以调整板子上的器件位置,给出更多的布线空间再试一下。 - 左键单击鼠标可以停止自动布线并自动启动优化过程,再一次左键单击将停止优化过程。除非你真的需要停下来,最好让FreeRouter完成整个的自动布线过程。 - 单击//File(文件)→导出 Specctra Session File//菜单,并使用.ses扩展名保存电路板文件。FreeRouter规则文件没有必要保存。 - 回到Pcbnew。单击File(文件)→Import(导入)→ Specctra Session,选择.ses文件进行导入。 如果你对自动布线生成的任何连线不满意,可以删除掉再对其布线。 ===== 4. KiCad中的前向标注 - 对已经完成的设计进行修改 ===== 完成电路原理图设计、封装分配、电路板布局、布线并生成了Gerber文件,就可以将所需的文件发送给PCB制造商将设计变成实际的电路板了。 通常这种工作流程并非一直是单向的。有时在你已经完成所有设计流程以后,出于种种原因,你不得不再修改或扩展你的设计 - 比如调整器件的位置、替换某些器件、更改占用空间等等。这个修改过程你当然不想全部重新来过,例如你想在完成了原理图和PCB布局布线的工程设计中用CON2替换连接器CON1。比较合理的方法如下: - **更新原理图** - 从KiCad开始,启动//Eeschema//对原理图进行修改 - 删除CON1并添加CON2。点击{{:save.png|}}图标以保存原理图工程。 - **生成新的网表** - 单击顶部工具栏上的Netlist生成图标{{:netlist.png|}},生成新的netlist(网表)并进行保存,还用原来的文件名,覆盖掉原来的文件。 - **为CON2分配封装** - 单击顶部工具栏上的Run Cvpcb icon {{:cvpcb.png|}},给新器件CON2分配正确的封装。其它的器件保持原来的封装不变,关闭Cvpcb。 - **保存工程** - 返回原理图编辑器,单击//File//(文件) → //Save Whole Schematic Project//(保存整个原理图工程)保存项目,关闭原理图编辑器。 - **加载新网表** - 从KiCad工程管理处单击Pcbnew图标,打开Pcbnew窗口。自动打开的应该是旧的、已经布线好的电路板。导入新的网表文件 - 单击顶部工具栏上的Read Netlist icon {{:netlist.png|}},单击//Browse Netlist Files(//浏览网表文件)按钮,在文件选择对话框中选择你要加载的网表文件,然后单击//Read Current Netlist//(读取当前的网表)。然后单击“关闭”按钮。 - **调整新器件的布局** - 此时,你应该看到先前布线好的器件以及左上角还未布线的器件,在我们的例子中也就是是CON2。用鼠标选择CON2,将该器件移动到电路板中间。 - **更新布线并保存** - 摆放好CON2并对其布线。完成布线后保存文件并生成新的Gerber文件。 这个“前向标注”的过程可以根据需要重复去做。还有另一种称为后向标注的方法允许工程师从Pcbnew修改已经布线好的PCB,进而在原理图和网表文件中更新这些修改。但Backward Annotation(后向标注)的方法不是太常用,在这里也就不再介绍了。