简介:面向Altium Designer初学者与硬件开发者的33个经典电路制作实例合集,围绕原理图绘制、PCB布局、电路仿真与制造文件输出等核心流程,提供可直接上手练习的工程素材,帮助读者从看懂电路图逐步过渡到独立完成简单设计。压缩包共535个文件,约36.3MB,包含33个dsn原理图工程及配套pwi、opt、uv2等工程与布局文件,另有c、hex、m51等单片机源代码与烧录文件,以及pdf、jpg等说明文档和截图,目录按实例组织,便于逐个对照学习。已有3567人学习下载,适合作为课程实验、自学入门和项目复现的参考。实例覆盖LED流水灯、数码管动态显示、独立按键与矩阵键盘、外部中断计数、模拟交通灯、继电器控制、按键发音等典型场景,读者可结合电路图与源代码理解从原理到实现的完整链路,积累常见电路模块的设计与排错经验。
1. 33 个经典电路制作实例,先看清它能替你省掉哪段重复劳动
带过几个刚上手的同事之后我发现一个规律:能把 Altium Designer 用顺手的,往往不是教程看得最多的那个,而是把一块现成的板子从原理图改到出 Gerber 完整走过一遍的那个。这份 33 个经典电路制作实例的压缩包,价值就在这里——它把电源、运放、数字逻辑、单片机最小系统这些最常见电路,连电路图带源代码一起摆出来,省掉的是从零建符号库、从零猜封装、从零试设计规则的时间。它适合已经会拉线但没完整出过板的人,也适合画了很多板却从没回头核过封装和 DRC 的人。按我实际拆包的顺序往下走:先立骨架,再啃原理图,然后落到 PCB,最后把源码和出图对上。
2. 工程骨架先立住:从压缩包到能编译的 .PrjPcb
很多人拿到这种整包资源,第一反应是双击里面某张.SchDoc看个新鲜。看完关掉,第二天再打开,发现库没了、工程结构散了、编译报一堆找不到封装的错。问题的根源不在实例本身,而在于你打开它的方式。Altium Designer 的工程是有层次的:.PrjPcb记录了这个工程包含哪些文档、编译选项是什么、输出作业挂在哪里;.SchDoc和.PcbDoc只是被它管理的成员。脱离工程单独打开一个文档,库搜索路径、参数、Room 定义全都不完整,后面的坑基本都从这里长出来。
2.1 解压后先做文件分诊,别急着双击
我一般会先把压缩包解到一个纯英文路径下,然后按扩展名过一遍,心里有个数:哪些是设计文件,哪些是库,哪些是编译产物,哪些是固件源码。这套动作花不了两分钟,但能避免后面反复找文件。33 个实例里文件类型不会完全一致,常见的是下面这几类。
| 扩展名 | 是什么 | 处理方式 | 优先级 |
|---|---|---|---|
.PrjPcb | 工程文件,记录文档清单与编译设置 | 双击打开,后续所有操作都从它进 | 最高 |
.SchDoc | 原理图文档 | 由工程面板打开,不要单独双击 | 高 |
.PcbDoc | PCB 文档 | 同上 | 高 |
.SchLib/.PcbLib | 符号库 / 封装库 | 加入工程或装到 Libraries 面板 | 高 |
.IntLib | 编译后的集成库 | 通过 Installed Libraries 安装 | 中 |
.OutJob | 输出作业配置 | 用 OutputJob Editor 打开 | 中 |
.BomDoc | BOM 文档 | 报表,只读 | 低 |
.c/.h/.asm | 固件源码 | 用外部 IDE 打开,与硬件对账 | 视实例 |
分诊的时候有个细节值得留意:如果压缩包里同时存在.SchLib和.IntLib,优先用.SchLib。集成库是编译产物,里面的符号和封装是打包死的,你改了源库它不会自动跟着变,等到 PCB 阶段才发现封装对不上,返工成本就大了。反过来,如果只有.IntLib没有源库,那就得先用库面板把它解开(生成对应的 SchLib/PcbLib),否则你连一个焊盘尺寸都改不了。
提示:解压路径里不要出现中文、空格和括号。Altium Designer 的部分输出作业、脚本和第三方 Gerber 工具对这类路径处理得并不好,出错信息还特别含糊,属于典型的玄学问题源头。
2.2 版本兼容与打开顺序:先开工程,再开文档
.PrjPcb双击之后,工程面板里应该能看到完整的文档树。如果打开时报错说文件版本比当前软件新,说明这份资源是在更高大版本的 Altium Designer 里保存的。文件格式是向上兼容、向下不兼容的:高版本能读低版本,低版本读不了高版本。
遇到这种情况,常见做法有三条路,按代价从低到高排:
- 换用与资源同代或更高版本的软件打开,这是最省事的。
- 在
File » Save As里看看有没有可选的旧格式条目。不同大版本提供的另存格式选项不一样,有就另存一份,没有就别在这上面耗时间。 - 高版本照常打开,然后新建一个空白
.PrjPcb,把SchDoc、PcbDoc、库文件用Add Existing to Project一个个加进去。工程文件本身只是个索引,重建一次不损失设计内容,代价是编译设置和输出作业要重新配一遍。
重建工程这条路我走过不止一次,经验是:重建完立刻做一次Project » Compile PCB Project,把 Messages 面板里的错误清干净再往下走。带着一堆未连接的引脚去导 PCB,后面排查起来就是黑匣子。
打开顺序上还有个容易忽略的点:先开工程,等工程面板把文档树加载完,再双击具体的原理图。这样库的搜索路径、工程级参数、变体设置都会跟着生效。反过来先双击.SchDoc,软件会把它当成一个游离文档打开,此时按Tools » Footprint Manager看到的封装信息可能是不全的。
2.3 目录规范:为什么我把中文路径全部改掉
实例包解压出来往往是一个大平层,几十个文件夹堆在一起,命名风格还不统一。我习惯先按「一个实例一个工程」重排一遍,结构大致是这样:
AD_Examples/ ├── 01_Power_5V/ │ ├── Project/ # .PrjPcb .SchDoc .PcbDoc │ ├── Library/ # .SchLib .PcbLib .IntLib │ ├── Output/ # Gerber、钻孔、BOM、坐标文件 │ └── Doc/ # 截图、说明、原始源码 ├── 02_OpAmp_Front/ └── ...这么排的理由很实际。第一,输出目录独立出来,出图的时候整个文件夹打包发给板厂,不会把工程文件混进去。第二,库目录独立,方便你在多个实例之间复用同一个符号库——33 个实例里电阻电容三极管这些基础件是重复的,没必要每个工程存一份。第三,源码单独放,改固件的时候不会误删硬件文件。
路径命名我强制用英文加下划线,不用中文,也不用空格。前几年吃过一次亏:一个工程的输出目录带了中文,Gerber 打包时某个层文件的名字被截断,板厂那边少了一层,来回沟通了两天。从那以后所有工程的路径都走这套规范,一次没再翻过车。
2.4 一段 DelphiScript,先把封装缺失的元件揪出来
在正式看原理图之前,我会先跑一遍脚本,把「没有指定封装」的元件列出来。这一步看着多余,实际上是整条链路里性价比最高的检查:原理图上少一个封装,导 PCB 的时候就会多一个 Unknown Pin 报错,而那个报错信息往往只给位号不给原因,新手很容易卡在这里。
Altium Designer 自带脚本引擎,支持 DelphiScript、VBScript、JavaScript。下面这段是 DelphiScript,逻辑是遍历当前打开的原理图,统计元件总数并列出封装字段为空的位号。
{ 用途:扫描当前原理图,列出未指定封装的元件 } Procedure ListMissingFootprint; Var Sch : ISch_Document; Iterator : ISch_Iterator; Comp : ISch_Component; Total, Bad : Integer; Report : TStringList; Begin Sch := SchServer.GetCurrentSchDocument; If Sch = Nil Then Begin ShowMessage('先打开一张原理图再运行'); Exit; End; Total := 0; Bad := 0; Report := TStringList.Create; Iterator := Sch.SchIterator_Create; Iterator.AddFilter_ObjectSet(MkSet(eComponent)); // 只遍历元件对象 Try Comp := Iterator.FirstSchObject; While Comp <> Nil Do Begin Inc(Total); // CurrentPartIDLibraryLink 为空 = 该元件没有绑定任何库封装 If Trim(Comp.CurrentPartIDLibraryLink) = '' Then Begin Inc(Bad); Report.Add(Comp.Designator.Text + ' | ' + Comp.Comment.Text); End; Comp := Iterator.NextSchObject; End; Finally Sch.SchIterator_Destroy(Iterator); End; Report.Insert(0, '共 ' + IntToStr(Total) + ' 个元件,其中 ' + IntToStr(Bad) + ' 个未指定封装'); Report.SaveToFile('C:\AD_Check\missing_footprint.txt'); ShowMessage(Report.Text); Report.Free; End;逻辑不复杂,几个关键点说明一下。SchServer.GetCurrentSchDocument拿的是当前激活的原理图文档,所以运行前必须先把目标图纸切到前台,否则直接弹提示退出。AddFilter_ObjectSet(MkSet(eComponent))是对象过滤器,不加这一句迭代器会把导线、网络标签、文本全部当对象吐出来,遍历次数翻好几倍还容易出类型错误。CurrentPartIDLibraryLink返回的是当前 part 绑定的库链接字符串,形如MiscellaneousDevices:0603,空字符串就代表这个元件在原理图里是个「裸符号」,没挂封装。最后的SaveToFile建议改成一个固定存在的目录,第一次跑之前先把文件夹建好,脚本不会帮你创建。
运行方式是File » Run Script,选中脚本文件里的这个过程名直接执行。脚本 API 在不同大版本之间会有小幅变动,如果某一行编译不过,用脚本调试器打断点看一眼对象属性,通常换个属性名就能过。
跑完这一步,你手里就有了一份「待补封装清单」。带着它去看原理图,比漫无目的地翻页效率高得多。
3. 原理图这一关:符号、网络标签和一次可信的编译
原理图在很多人眼里只是「画给 PCB 看的一张图」,实际上它承担了三件事:定义电气连接关系、绑定封装信息、给下游输出提供参数。33 个实例之所以值得拆,是因为它们覆盖了从分立器件到数字接口的常见画法,你可以在里面看到别人怎么处理电源符号、怎么划分层次、怎么给测试点留位置。但直接照抄会出问题,得先弄明白它为什么这么画。
3.1 从实例反推符号库:Generate Schematic Library 之后要改什么
打开一个实例的原理图,第一件该做的事不是看电路,而是看元件用的是哪家的库。在原理图编辑器里执行Tools » Generate Schematic Library,软件会把当前图纸里用到的所有符号抽出来,生成一个独立的.SchLib。菜单位置在不同大版本里略有挪动,找不到就在 Tools 菜单下翻一遍。
生成的库不是拿来就能用的,有三处必须人工过一遍:
第一,引脚编号和名称。实例里的符号经常只显示编号不显示名称,或者把名称藏在很长的字符串里。双击符号进库编辑器,把每个 Pin 的Designator(编号)和Name(名称)对一遍,尤其是多引脚器件。编号错了,PCB 那边一定连不上;名称错了,读图的人会看晕。
第二,隐藏引脚。这是最容易埋雷的地方。有些符号把电源脚设成Hidden,Altium Designer 的规则是隐藏引脚会自动连到同名网络。看着图上没接线,实际上已经连上了。如果实例的隐藏引脚名和你的网络名对不上,编译时就会冒出一堆莫名其妙的连接。处理办法是在库编辑器里双击该引脚,把Hide勾掉,改成显式连线。
第三,参数与封装链接。符号里通常带着Comment、Value、Footprint这几个参数。导出的库会保留它们,但指向的封装库路径可能还是原作者机器上的绝对路径。把Footprint参数重指向你自己工程Library目录下的封装库,是避免「打开就报找不到封装」的关键一步。
库改完之后,通过工程面板右键Add Existing to Project把它加进工程。下次画新图直接从工程内的库调用,比装到全局库更可控——工程级的库跟着工程走,拷给别人不会丢。
3.2 网络标签的三种作用域,别把 Port 当 Net Label 用
实例里跨图纸的连接很常见,电源板加控制板、主控加外设,都是层次原理图。这时候网络标签的作用域就变成了必须搞清楚的东西,搞错了现象很典型:原理图看着连得好好的,一编译就报某个网络只有一个引脚。
Altium Designer 里管连接的东西主要有三种,作用范围完全不同。
Net Label(网络标签):只在当前这一张图纸内有效。同名标签在两张不同的图纸上,默认不连通。Port(端口):配合层次图的Sheet Symbol和Sheet Entry使用,用于父子图之间的信号传递。端口名必须和 Sheet Entry 名严格一致,大小写敏感。Power Port(电源端口):全局有效,VCC、GND、+3V3这类,跨图纸自动连通,这也是为什么电源符号到处放都不会出问题。
乱用的后果很直接。把Port当Net Label用,单页图里能连通,一旦拆成层次图就断;把Net Label当全局用,编译时Messages面板会告诉你这个网络只有一个引脚,但你不一定能反应过来是作用域的问题。我一般的做法是:单页图内一律Net Label,跨页一律Port,电源一律Power Port,三者不混用。33 个实例里如果有画得不规范的,正好拿来当反面教材看。
编译是验证这些设置的手段。Project » Compile PCB Project,然后盯Messages面板。真正需要清掉的是这几类:
| 消息类型 | 含义 | 处理 |
|---|---|---|
Net xxx has only one pin | 网络只连了一个引脚,多半是作用域或标签拼写问题 | 检查标签作用域、大小写 |
Unknown Pin | 封装里找不到对应的焊盘编号 | 回 3.1 核引脚编号 |
Component xxx has no footprint | 元件未绑定封装 | 用第 2 章的脚本清单逐个补 |
Duplicate Designator | 位号重复 | Tools » Annotate Schematics重新编号 |
编译干净了再去导 PCB,这一步偷懒,后面就得在 PCB 编辑器里一条条对着报错猜。
3.3 把实例改成自己的最小系统:改值、重编号、导 BOM
真正让实例变成「自己的东西」,是从改一个最小系统开始的。33 个实例里最适合当起点的,通常是单片机最小系统或者线性电源这一类,外围简单、失败成本低。改造流程我一般按这个顺序走:
- 复制整个工程文件夹,重命名为自己的项目名,原包保持不动,当只读参考。
- 修改核心器件型号,同步改封装。型号变了封装大概率也要变,别只改
Comment不改Footprint。 - 改电源部分。输入电压范围变了,稳压器周边器件要重算,尤其是反馈电阻和输入输出电容。
- 重新编号。
Tools » Annotate Schematics,选「Reset All Designators」再「Update Changes List」,让位号按从左到右、从上到下的顺序排一遍。 - 编译、清 Messages、再导 PCB。
重编号这一步很多人跳过,觉得位号乱点无所谓。等 PCB 布局的时候你就知道难受了:位号跳来跳去,找一个电容要在板上扫半天。实例里原作者的编号顺序是按他自己的布局习惯来的,你照搬没意义。
改完之后导 BOM:Reports » Bill of Materials,在面板里把需要的列勾上,一般是Comment、Designator、Footprint、Quantity、LibRef,然后Export成 CSV。导出的原始 BOM 是按位号一行一行排的,同一个 100nF 电容可能出现二十行,直接发给采购或者贴片厂,对方还得自己合并一遍。
3.4 导出的 BOM 先洗一遍再发出去
原始 BOM 直接外发的后果,轻则对方回问一句「这二十行是同一个料吗」,重则贴片厂按行备料,同一盘料买了二十次。我习惯用一段 Python 把它合并成「一个料号一行」的格式。
import csv from collections import OrderedDict src = "bom_raw.csv" # Altium 导出的原始 BOM dst = "bom_smt.csv" # 给贴片厂/采购的合并版 groups = OrderedDict() with open(src, newline="", encoding="utf-8-sig") as f: for row in csv.DictReader(f): comment = (row.get("Comment") or "").strip() footprint = (row.get("Footprint") or "").strip() refs = (row.get("Designator") or "").strip() if not refs: # 跳过没有位号的行(如机械件说明行) continue key = (comment, footprint) # 同值不同封装不能合并 groups.setdefault(key, []).append(refs) with open(dst, "w", newline="", encoding="utf-8-sig") as f: w = csv.writer(f) w.writerow(["序号", "元件值", "封装", "位号", "数量"]) for i, ((comment, footprint), refs) in enumerate(groups.items(), 1): w.writerow([i, comment, footprint, ",".join(refs), len(refs)])几个参数值得说明。encoding="utf-8-sig"是为了让 Excel 打开不出现乱码,去掉-sig在 Excel 里中文会变问号。合并键用(comment, footprint)而不是只用comment,因为同样标着100nF的电容,0603 和 0805 是两个料,合并了就出事。DictReader的列名要和 Altium 导出的表头完全一致,如果你在导出面板里改了列名,这里也要跟着改。最后那个数量列是位号个数,不是库存数,采购拿去乘倍数就行。
洗完之后,BOM 从几十行变成十几行,自己看一眼也知道这块板大概用了多少种料。
4. 落到 PCB:封装匹配、规则表和一次能过的 DRC
从原理图Design » Update PCB Document开始,工作重心就转移到物理约束上了。这一步最容易翻车的地方不是布线技术,而是「图和板对不上」——封装缺失、焊盘编号错位、封装尺寸和实物差一圈。33 个实例里的 PCB 文件是有参考价值的,但价值在于布局思路和规则设置,不在于照抄走线。
4.1 封装匹配:Footprint Manager 里按三列排序
导 PCB 之前必须先过Tools » Footprint Manager。这个面板把工程里所有元件的符号、封装、引脚映射列在一张表里,比在原理图里一个个双击快得多。
我的检查顺序是固定的:
先按Footprint列排序,空值会集中在最上面。空的就是没绑封装,对应第 2 章脚本列出来的那批,逐个补。补的时候注意,封装名要和封装库里的名字完全一致,包括大小写和前缀。
再按Current Footprint看有没有明显的「张冠李戴」。比如一个标着SOT-23的三极管配了个TO-92的封装,这种在实例里偶尔会出现,多半是原作者改型号没改封装。判断依据是引脚数:SOT-23 是 3 脚,但如果封装里是 3 个焊盘且间距 0.95mm,那基本对得上;间距 2.54mm 的那是直插。
最后看引脚映射。双击某一行进Pin Mapping,符号的 Pin 编号必须和封装的 Pad 编号一一对应。二极管的A/K对1/2、三极管的B/C/E对1/2/3,这类映射错了,板子做出来元件会反。有个简单办法验证:在原理图里选中元件,打开Tools » Cross Select Mode,切到 PCB 看对应封装高亮的是不是同一个器件,两侧来回点几次,错位很明显。
常用封装的尺寸心里要有数,看到明显不符的立刻停下来核:
| 封装名 | 实际尺寸(长×宽) | 典型用途 |
|---|---|---|
| 0402 | 1.0 × 0.5 mm | 高密度数字板 |
| 0603 | 1.6 × 0.8 mm | 通用阻容 |
| 0805 | 2.0 × 1.25 mm | 电源、滤波 |
| SOT-23 | 2.9 × 1.3 mm | 小信号管、LDO |
| SOP-8 | 4.9 × 3.9 mm,间距 1.27 mm | 运放、存储 |
| QFP-48 | 7 × 7 mm,间距 0.5 mm | 主控 |
3D 模型也顺手看一眼。Place » 3D Body可以给封装挂模型,实例里不一定都有,但关键器件(连接器、电解电容、大电感)最好有,因为高度冲突只有在 3D 视图里才看得出来。结构壳体的内腔高度是硬约束,一个 10mm 高的电解电容放在 6mm 的腔体里,画图阶段完全看不出来,装的时候才发现。
4.2 板框、叠层与设计规则:把参数写成表
板框我一般画在Mechanical 1层,用直线或者圆弧闭合,然后选中这些线,Design » Board Shape » Define from selected objects生成板形。不要用 Keep-Out 层直接画板框,Keep-Out 的语义是「禁止布线区」,和板子外形的含义不是一回事,混用会在后面加安装孔、开槽的时候出问题。
叠层在Design » Layer Stack Manager里配。两层板是最常见的入门配置,总厚 1.6mm,铜厚 1oz(约 35μm)。四层板我一般按Top - GND - PWR - Bottom排,地和电源放在中间两层,信号走外层,阻抗好控制,回流路径也短。33 个实例里两层板居多,四层板的那几个正好可以看看别人怎么分配电源层。
设计规则是决定 DRC 能不能过的核心。Design » Rules里规则条目很多,实际用得上的是下面这几条,参数按常规板厂的加工能力给:
| 规则 | 参数 | 说明 |
|---|---|---|
| Electrical / Clearance | 6 mil(0.15 mm) | 通用间距,高压段单独加规则 |
| Routing / Width | 信号 10 mil,电源 20–30 mil | 电源线按电流放大 |
| Routing / Via Size | 孔径 0.3 mm,外径 0.6 mm | 常规工艺,再小要加钱 |
| Solder Mask / Expansion | 4 mil | 阻焊开窗余量 |
| Silkscreen / To Solder Mask | 8 mil | 丝印不许压焊盘 |
| Plane / Power Plane Connect | Thermal Relief | 直连散热快但难焊 |
规则设完不要急着布线,先跑一次空 DRC,看有没有规则冲突。有些实例自带的工程里残留了原作者定义的 Room 规则,作用域指向一块不存在的区域,DRC 会报一堆你找不到对象的 Clearance 错误。遇到这种情况,在规则面板里按优先级从上往下看,把没用的 Room 定义删掉,问题立刻消失。
4.3 布局与布线:从实例里抄策略,别抄走线
布局这件事没有标准答案,但有几条硬原则。电源入口的滤波和防护放在接口附近,别让浪涌电流绕板一圈;晶振贴着主控放,下面铺地不铺信号;去耦电容贴着电源引脚,越近越好;连接器位置先定,因为它决定了板子在壳体内怎么装。33 个实例里那些电源类的板子,布局思路基本都遵循这个逻辑,可以对照着看。
布线用P » T交互布线,电源线先走、关键信号次之,剩下的最后补。差分对用P » I,等长用T » R做蛇形补偿。这些操作实例里不一定每个都用得上,但电源板和数字板各看一个,基本套路就清楚了。
铺铜放在布线之后。P » G放置多边形铺铜,网络选 GND,勾上Remove Dead Copper(删除死铜)和Pour Over All Same Net Objects,避让间距直接用规则里的 Clearance。铺完之后必须Tools » Polygon Pours » Repour All,快捷键T » G » A。这一步经常被忘掉,改了线不重新铺铜,DRC 就按旧铜皮判断,报出来的错误跟眼前看到的图对不上,属于典型的「看着没问题但就是过不了」。
铺铜还有一点:两层板正反两面都铺地,但要用足够的过孔把两面地连起来,不然地平面被走线切碎,回流路径绕远,信号质量会打折。实例里的板子如果过孔打得密,多半就是这个原因,不是随手点的。
4.4 DRC 报告怎么读:先看短路,再看间距
Tools » Design Rule Check跑完之后会生成一份报告,条目可能上百条。新手看到这份报告容易懵,我一般按这个顺序读:
先看Short-Circuit,这是硬错误,两个不同网络连一起了,必须清零。其次是Un-Routed Net,有网络没布完,也清零。再往下是Clearance,这类错误数量最多,但很多是误报或者可以接受的,比如铺铜和焊盘的间距紧张,实际板厂能做。最后是丝印类告警,不影响电气性能,但会影响可读性,出图前顺手清掉。
报告里的每条错误都带坐标和对象名,双击能跳到 PCB 上的对应位置。有个技巧:先在Design » Rules里把Clearance的Online DRC打开,布线的时候实时就标红,比事后一次性跑报告效率高得多。实例工程里这个开关有时是关的,打开它。
DRC 过完之后不要马上出图,先做一次目视复核。缩放到全局,看板子边缘有没有走线贴边、安装孔周围有没有铜皮、丝印有没有压住焊盘。机器检查不出来的问题,人眼一遍就能发现。
5. 避坑与排查:实例跑不通时先查这五处
这套资源用下来,出问题的位置高度集中。下面五条是按我实际遇到的频率排的,每条都按「现象 → 原因 → 解决」写,遇到对应症状直接对号入座。
5.1 打开与编译阶段的三个坑
现象一:打开工程弹窗提示文件版本比当前软件新,文档打不开或者打开是空白。
原因很明确,资源是在更高大版本的 Altium Designer 里保存的,文件格式向下不兼容。低版本软件读到高版本的文件头,只能拒绝加载。
解决办法按代价排:优先换同代或更高版本的软件;如果手头版本动不了,新建一个空白.PrjPcb,把SchDoc、PcbDoc和库文件用Add Existing to Project加进去,工程文件本身只是索引,重建不损失设计内容,代价是编译设置和输出作业要重配。重建完立刻编译一次,把 Messages 清干净。
现象二:编译提示大量Unknown Pin,或者导 PCB 之后元件变成一堆绿色方块、一个焊盘都没连上。
原因通常是三种之一:元件根本没绑封装;绑的封装在当前工程和已安装库里都找不到;封装找到了但焊盘编号和符号引脚编号对不上。
解决从Tools » Footprint Manager入手,按Footprint列排序看空值,再对每一行看Pin Mapping。如果封装名对但报 Unknown Pin,双击封装进库编辑器,对着符号的 Pin Designator 逐个核焊盘的 Designator,改完保存、重新导 PCB。注意改库之后要把库重新编译一次(Project » Compile Integrated Library),不然 PCB 端读到的还是旧版本。
现象三:编译报Net xxx has only one pin,但图上肉眼看着是连着的。
原因基本锁定在网络标签的作用域上。同名Net Label放在两张不同的图纸里,默认不连通;Port和Sheet Entry名字差一个字母或者大小写不同,也连不上。还有一种情况是标签和导线没真正搭上——标签的电气热点必须落在导线上,差一点点看着像连了,实际是悬空的。
解决方法是把View » Electrical Grid打开,看标签的连接点有没有吸附到线上;然后按「单页用 Net Label、跨页用 Port、电源用 Power Port」的原则把混用的地方全部改过来,重新编译。
5.2 制板与输出阶段的两个坑
现象四:板厂反馈 Gerber 缺层,或者钻孔文件和线路对不上。
原因在输出配置。用File » Fabrication Outputs » Gerber Files手动一层层导,很容易漏掉机械层或者阻焊层;钻孔文件如果没单独用NC Drill Files导出,Gerber 包里就是没有钻孔数据的。
稳妥做法是用.OutJob统一管理输出。新建一个 Output Job 文件,把 Gerber、NC Drill、BOM、坐标文件全部挂上去,生成的时候一次性跑完,避免漏项。参数上单位统一用毫米,格式按板厂要求给,常规是 4:4;如果板厂指定 2:4,就在 Gerber 设置里改,别自己猜。打包前用 Gerber 查看器把各层叠起来看一遍,重点看钻孔位置和焊盘是否重合。
现象五:丝印字符被裁掉、压到焊盘上,或者板子上印出来一堆缺笔画的字。
原因是丝印到阻焊的间距规则没设,或者位号自动摆放时超出了板框。丝印压在焊盘上,焊接的时候会被锡吃掉,字符残缺不说,还可能造成连锡。
解决是在规则里加上Silkscreen to Solder Mask Clearance,给 8 mil,然后跑 DRC 里的丝印检查项。位号位置用Tools » Component Placement » Reposition Selected Components批量挪一遍,挪完再目视扫一圈板边。有些板子空间紧张,实在放不下就把位号缩小字号或者移到板外做丝印图,别硬塞。
6. 源码与硬件的对账:让实例真正变成你自己的板子
33 个实例里带源码的那几个,是最容易被浪费的部分——很多人看完硬件就把源码扔在一边了。实际上源码和原理图的对应关系,恰恰是验证「这块板我是不是真看懂了」的最好方式。
对账的入口是引脚定义。打开源码里的引脚宏定义文件,把每一条宏和原理图上的网络名一一对上:
/* board_pin.h —— 引脚宏与原理图网络名必须一一对应 */ #define LED1_PORT GPIOC #define LED1_PIN GPIO_PIN_13 /* 原理图网络:LED1_CTRL */ #define KEY1_PORT GPIOA #define KEY1_PIN GPIO_PIN_0 /* 原理图网络:KEY1_IN,注意上拉电阻位置 */ #define UART1_TX GPIOA, GPIO_PIN_9 /* 原理图网络:UART1_TX -> 排针 J2-3 */对不上的地方往往就是坑。比如源码里按键配上拉、原理图上却把上拉电阻放在了另一端,硬件能工作但电平逻辑是反的;再比如串口 TX/RX 在原理图上交叉连接,源码里却按同名宏配置,接上线通不了。这些差异不改,板子焊出来就是一块砖。
我一般会把所有宏和网络名做成一张对照表,逐行核对,核完再烧程序。核对的时候重点看三处:电源域的引脚配置(有些引脚默认是模拟功能,不配置就用不了)、复用功能是否和原理图的外设一致、中断引脚有没有被别的外设占用。
最后说个我自己的习惯。每拆完一个实例,我会把它整理成一个「模板工程」:原理图里的库路径改成相对路径、BOM 列固定、OutJob 配好、DRC 规则存成一套,下次开新项目直接复制这个模板改,比从空白工程一步步配快得多,也不会漏掉规则。从那以后我每次拿到新的资源包,都强制先走一遍「分诊 → 立骨架 → 编译 → 封装核对 → DRC → 出图」这条线,哪怕只是看看,也不跳过其中任何一步。希望帮到你。
本文还有配套的精品资源,点击获取