EDA软件的使用

6 阅读17分钟

大家好,我是良许。

在嵌入式开发领域,我们经常需要设计电路板,而 EDA(Electronic Design Automation,电子设计自动化)软件就是我们必不可少的工具。

从最初的原理图设计,到 PCB 布局布线,再到最终的生产文件输出,EDA 软件贯穿了整个硬件设计流程。

今天我就结合自己多年的嵌入式开发经验,跟大家聊聊 EDA 软件的使用。

1. EDA 软件概述

1.1 什么是 EDA 软件

EDA 软件是用于电子产品设计的计算机辅助设计工具,它可以帮助工程师完成电路原理图设计、PCB 布局布线、电路仿真、信号完整性分析等工作。

在我刚入行做单片机开发的时候,公司用的是 Altium Designer,后来到了外企,接触到了 Cadence 和 Mentor Graphics 这些更专业的工具。

目前市面上主流的 EDA 软件主要有以下几种:

  • Altium Designer:功能强大,界面友好,适合中小型项目,在国内使用非常广泛
  • Cadence Allegro:业界标准,适合高速 PCB 设计,大型企业常用
  • Mentor Graphics PADS:性价比高,学习曲线相对平缓
  • KiCad:开源免费,功能日益完善,适合个人开发者和小团队
  • Eagle:小巧灵活,被 Autodesk 收购后功能更加完善

1.2 为什么要学习 EDA 软件

作为嵌入式工程师,即使你主要做软件开发,了解硬件设计也是非常必要的。

我在做 STM32 项目的时候,经常需要查看原理图来理解硬件连接,有时候还需要自己设计一些简单的扩展板。

掌握 EDA 软件可以让你更好地理解硬件工作原理,在调试程序时能够快速定位是软件问题还是硬件问题。

2. EDA 软件的基本使用流程

2.1 创建项目和原理图设计

第一步是创建一个新项目。以 Altium Designer 为例,打开软件后选择"File → New → Project",选择 PCB 项目类型,给项目起一个有意义的名字。

我习惯用项目功能加日期来命名,比如"STM32_MotorControl_20250302"。

接下来创建原理图文件,在项目中右键选择"Add New to Project → Schematic"。

原理图设计是整个硬件设计的基础,需要根据功能需求选择合适的元器件,并正确连接它们。

在原理图设计阶段,我通常会这样做:

第一步,绘制电源部分。电源是整个电路的基础,必须首先设计好。

比如设计一个 STM32 最小系统,需要 3.3V 电源,我会选择一个 LDO 稳压芯片,比如 AMS1117-3.3,加上必要的输入输出电容。

原理图上要清楚标注电源网络名称,比如"+5V"、"+3.3V"、"GND"等。

第二步,绘制核心芯片部分。对于 STM32 项目,这部分包括 MCU 本身、晶振电路、复位电路、BOOT 配置等。

在放置 STM32 芯片时,要注意引脚的功能分配,哪些引脚用作 GPIO,哪些用作串口、SPI、I2C 等。

我的经验是,在原理图设计阶段就要考虑好 PCB 布局,把相关功能的引脚尽量分配在一起。

第三步,绘制外围电路。根据项目需求添加各种外围电路,比如 LED 指示灯、按键、传感器接口、通信接口等。

每个功能模块最好用虚线框框起来,并添加注释说明,这样后期维护时一目了然。

在绘制原理图时,有几个实用技巧:

  1. 使用总线(Bus)来简化复杂的连线,特别是数据总线和地址总线
  2. 善用网络标签(Net Label),避免画太多交叉的连线
  3. 给每个元器件添加合适的封装信息,这样在转 PCB 时就不会出错
  4. 定期进行电气规则检查(ERC),及时发现连接错误

2.2 元器件库的管理

元器件库是 EDA 软件的重要组成部分,包含了元器件的原理图符号和 PCB 封装。

刚开始使用 EDA 软件时,我经常遇到找不到合适元器件的情况。

后来我养成了自己建库的习惯,把常用的元器件都整理到自己的库中。

建立元器件库的步骤:

  1. 创建原理图库文件(.SchLib)和 PCB 库文件(.PcbLib)
  2. 在原理图库中绘制元器件的符号,定义引脚编号和名称
  3. 在 PCB 库中绘制元器件的封装,包括焊盘位置、丝印层、阻焊层等
  4. 将原理图符号和 PCB 封装关联起来

我的建议是,对于常用的芯片,比如 STM32 系列、电源芯片、运放等,可以从官方或者可靠的第三方网站下载现成的库文件。

但对于一些特殊的元器件,还是需要自己动手制作。

制作封装时一定要仔细核对数据手册,特别是引脚间距和焊盘尺寸,差一点都会导致 PCB 无法焊接。

2.3 PCB 布局设计

原理图设计完成并通过 ERC 检查后,就可以转到 PCB 设计了。

在 Altium Designer 中,选择"Design → Update PCB Document",软件会自动将原理图中的元器件和网络导入到 PCB 文件中。

PCB 布局是一门艺术,也是一门科学。好的布局可以提高电路性能,降低 EMI 干扰,方便后期调试和维护。

我在做汽车电子项目时,对 PCB 布局的要求非常严格,因为汽车环境复杂,电磁干扰强,必须确保电路稳定可靠。

布局的基本原则:

2.3.1 功能分区

将 PCB 按功能划分为不同的区域,比如电源区、数字电路区、模拟电路区、通信接口区等。

各个区域之间要有明确的界限,避免相互干扰。

在我设计的一个电机控制板中,我把 MCU 和数字电路放在板子的一侧,把功率驱动电路放在另一侧,中间用地平面隔开,效果很好。

2.3.2 电源优先

电源走线要粗,要短,要直接。

电源芯片周围的去耦电容要尽量靠近芯片的电源引脚,我一般控制在 5mm 以内。

对于大电流的电源线,要计算好走线宽度,确保不会过热。

有一次我设计的板子在测试时发现电源线发烫,后来发现是走线太细,只有 0.3mm,改成 1.0mm 后问题就解决了。

2.3.3 信号完整性

对于高速信号,比如 STM32 的 SPI、USB、以太网等,要特别注意走线长度和阻抗匹配。

差分信号要等长,要平行走线,间距要合适。

我在做 USB 接口时,会严格控制 D+ 和 D-的走线长度差在 5mil 以内,并且保持 90 欧姆的差分阻抗。

2.3.4 热管理

功率器件会产生大量热量,需要考虑散热问题。

在布局时要给这些器件留出足够的空间,必要时添加散热片或者铜皮散热。

我设计的电机驱动板上,MOSFET 下面铺了大面积的铜皮,并且打了很多过孔连接到底层地平面,形成散热通道。

2.4 PCB 布线设计

布局完成后就可以开始布线了。布线是 PCB 设计中最耗时的工作,也是最考验工程师经验的环节。

2.4.1 布线的基本规则

  1. 电源线和地线要粗,一般电源线宽度至少 0.5mm,大电流线路要更粗
  2. 信号线宽度一般 0.2-0.3mm,根据电流大小和阻抗要求调整
  3. 走线尽量走直线或 45 度折线,避免 90 度直角转弯
  4. 高速信号线要短,要粗,要远离干扰源
  5. 模拟信号和数字信号要分开走线,避免串扰

2.4.2 地平面的处理

在多层板设计中,通常会有一层或多层作为地平面。

地平面可以提供稳定的参考电位,降低信号回流阻抗,提高抗干扰能力。

我在设计四层板时,一般采用"信号-地-电源-信号"的叠层结构,这样可以保证每一层信号都有完整的地平面作为回流路径。

对于双层板,虽然不能做完整的地平面,但也要尽量在底层铺铜,并且多打地过孔,降低地阻抗。

有一次我设计的一个双层板,因为地过孔打得太少,导致信号质量不好,后来补打了很多过孔才解决问题。

2.4.3 自动布线和手动布线

EDA 软件都提供了自动布线功能,但我很少完全依赖自动布线。

自动布线对于简单的电路还可以,但对于复杂的、有特殊要求的电路,还是需要手动布线。

我的习惯是,先手动布关键信号,比如时钟线、复位线、高速信号等,然后用自动布线完成剩余的信号,最后再手动优化。

3. 实际案例:STM32 最小系统设计

下面我以一个 STM32F103C8T6 最小系统为例,演示完整的 EDA 设计流程。

3.1 原理图设计

这个最小系统包括以下几个部分:

  1. 电源电路:使用 AMS1117-3.3 将 5V 转换为 3.3V,输入端加 10uF 电容,输出端加 10uF 和 100nF 电容
  2. MCU 核心:STM32F103C8T6 芯片,VDDA 和 VDD 分别加 100nF 去耦电容
  3. 时钟电路:8MHz 无源晶振,两端各加 20pF 电容,还有一个 32.768KHz 的 RTC 晶振
  4. 复位电路:NRST 引脚通过 10K 电阻上拉到 3.3V,并联一个 100nF 电容和一个复位按键
  5. BOOT 配置:BOOT0 通过 10K 电阻下拉到地,BOOT1 也下拉
  6. 调试接口:引出 SWD 接口,包括 SWDIO、SWCLK、GND、3.3V 四个引脚
  7. LED 指示灯:PC13 引脚接一个 LED 和限流电阻

在 Altium Designer 中绘制好原理图后,要进行编译检查。

点击"Project → Compile PCB Project",如果有错误或警告,要逐一解决。

常见的问题包括:引脚未连接、网络名称冲突、元器件缺少封装等。

3.2 PCB 设计

将原理图导入 PCB 后,首先设置板子的尺寸和层数。

这个最小系统我选择双层板,尺寸设置为 50mm × 40mm。

布局阶段

  1. 先放置 STM32 芯片,位置大概在板子中央偏上的位置
  2. 电源芯片 AMS1117 放在板子左侧,靠近电源输入端
  3. 晶振放在 MCU 的旁边,尽量靠近 OSC_IN 和 OSC_OUT 引脚
  4. 去耦电容紧贴 MCU 的电源引脚
  5. SWD 接口放在板子边缘,方便调试器连接
  6. LED 放在板子的角落,不占用太多空间

布线阶段

  1. 先走电源线,从 AMS1117 的输出端到 MCU 的 VDD 引脚,走线宽度设置为 0.8mm
  2. 走地线,在底层铺铜作为地平面
  3. 走晶振信号,这是高频信号,要短、要粗、要远离其他信号
  4. 走 SWD 调试信号,SWDIO 和 SWCLK 要等长
  5. 最后走 LED 控制信号

完成布线后,要进行 DRC(Design Rule Check)检查。点击"Tools → Design Rule Check",设置好规则后运行检查。常见的 DRC 错误包括:走线间距不够、走线宽度不符合要求、焊盘间距太小等。

3.3 生成 Gerber 文件

PCB 设计完成后,需要生成 Gerber 文件用于 PCB 制造。

在 Altium Designer 中,选择"File → Fabrication Outputs → Gerber Files",按照 PCB 厂家的要求设置好各层的输出选项。

一般需要输出的文件包括:

  • 顶层铜箔(Top Layer)
  • 底层铜箔(Bottom Layer)
  • 顶层阻焊(Top Solder Mask)
  • 底层阻焊(Bottom Solder Mask)
  • 顶层丝印(Top Silkscreen)
  • 底层丝印(Bottom Silkscreen)
  • 钻孔文件(Drill Drawing)
  • 板框文件(Board Outline)

生成 Gerber 文件后,我习惯用 CAM350 或者 Gerbv 打开检查一遍,确保没有问题再发给 PCB 厂家。

4. EDA 软件使用的进阶技巧

4.1 使用脚本自动化

对于重复性的工作,可以使用脚本来自动化。

Altium Designer 支持 Delphi Script 和 VB Script,可以编写脚本来批量修改元器件属性、自动生成 BOM 表、批量调整走线宽度等。

我曾经写过一个脚本,用来批量修改所有电阻的封装,从 0603 改为 0805。手动修改要花半小时,用脚本只需要几秒钟。

4.2 使用仿真功能

很多 EDA 软件都集成了电路仿真功能,可以在 PCB 制作之前验证电路的正确性。

比如在 Altium Designer 中,可以使用 Mixed Sim 进行模拟仿真,验证电源电路的输出电压、纹波等参数。

虽然仿真不能完全替代实际测试,但可以提前发现一些明显的设计错误,节省时间和成本。

我在设计电源电路时,都会先仿真一下,确保输出电压和负载能力满足要求。

4.3 3D 可视化

现代 EDA 软件都支持 3D 可视化功能,可以在设计阶段就看到 PCB 的立体效果。

这对于检查元器件是否干涉、外壳是否匹配非常有用。

在 Altium Designer 中,按"3"键可以切换到 3D 视图。

如果元器件有 3D 模型,就可以看到真实的立体效果。

我在设计一个装在金属外壳里的板子时,就是通过 3D 视图发现某个电容太高,会顶到外壳,及时做了调整。

4.4 团队协作

在公司做项目时,经常需要多人协作。

EDA 软件提供了版本控制和协作功能,可以让多个工程师同时工作在一个项目上。

Altium Designer 支持 SVN 和 Git 版本控制,可以跟踪每次修改,避免冲突。

在我们团队中,原理图和 PCB 文件都放在 Git 仓库中,每次修改都要提交并写清楚修改内容,这样其他人可以清楚地知道项目的变化。

5. 常见问题和解决方法

5.1 元器件封装错误

这是最常见的问题之一。

有时候原理图中选择的封装和实际元器件不匹配,导致 PCB 焊接时发现焊盘对不上。

解决方法:在设计阶段就要仔细核对数据手册,确认封装的尺寸和引脚定义。

如果不确定,可以先用游标卡尺量一下实际元器件的尺寸。

我现在养成了习惯,每次使用新的元器件,都会先打印 1:1 的封装图纸,把实际元器件放上去对比一下。

5.2 走线宽度不够

有时候为了节省空间,把走线画得很细,结果通电后发现走线发热甚至烧断。

解决方法:根据电流大小计算走线宽度。

有一个经验公式:对于 1oz 铜厚,1A 电流需要约 15mil(0.38mm)的走线宽度,温升 10 度。

如果电流更大,要相应增加走线宽度,或者使用更厚的铜箔。

5.3 地回流路径不畅

这会导致信号质量差、EMI 问题严重。

特别是在双层板中,如果地过孔打得太少,地回流阻抗很大。

解决方法:在信号走线附近多打地过孔,特别是在信号换层的地方。

我的经验是,每隔 5-10mm 就打一个地过孔,形成低阻抗的地回流路径。

5.4 高速信号干扰

在设计 USB、以太网等高速接口时,如果走线不当,会导致信号质量差,通信不稳定。

解决方法:高速信号要控制阻抗,要等长,要远离干扰源。

差分信号要平行走线,间距要合适。必要时可以使用阻抗计算工具,确保走线阻抗符合要求。

我在设计 USB 接口时,会使用 Saturn PCB Toolkit 计算走线宽度和间距,确保 90 欧姆的差分阻抗。

6. 学习建议

对于刚接触 EDA 软件的朋友,我的建议是:

  1. 从简单项目开始。不要一上来就设计复杂的多层板,先从简单的双层板开始,比如 LED 闪烁电路、简单的单片机最小系统等。
  2. 多看官方教程。每个 EDA 软件都有详细的官方教程和文档,这是最权威的学习资料。 Altium Designer 的官方 YouTube 频道有很多视频教程,讲得非常详细。
  3. 参考优秀的开源项目。GitHub 上有很多开源硬件项目,可以下载它们的原理图和 PCB 文件学习。 看看别人是怎么设计的,学习他们的布局布线技巧。
  4. 实践出真知。光看教程是不够的,一定要自己动手设计。
  5. 可以先设计一些简单的板子,打样回来焊接测试,在实践中积累经验。 我刚开始学 PCB 设计时,设计了一个 STM32 最小系统板,虽然很简单,但从设计到焊接调试的整个过程让我学到了很多。
  6. 加入社区交流。可以加入一些 EDA 软件的 QQ 群、微信群,或者论坛,遇到问题可以请教别人。 我在立创 EDA 的论坛上学到了不少东西,那里有很多热心的工程师分享经验。
  7. 关注 PCB 制造工艺。了解 PCB 的制造工艺,知道什么样的设计容易制造,什么样的设计会增加成本。 比如,走线间距太小会增加制造难度,过孔太多会增加成本等。

7. 总结

EDA 软件是嵌入式工程师的必备技能之一。

虽然学习曲线有点陡峭,但只要多练习,多思考,就能掌握。

从我自己的经验来看,从完全不会到能够独立设计复杂的四层板,大概需要半年到一年的时间。

在使用 EDA 软件的过程中,要养成良好的习惯:规范命名、及时备份、详细注释、严格检查。

这些习惯会让你的设计更加可靠,也会让后期维护更加轻松。

最后,我想说的是,硬件设计是一个需要不断学习的领域。

新的元器件、新的技术、新的设计方法层出不穷,我们要保持学习的热情,不断提升自己的技能。

在我的公众号里,我会持续分享嵌入式开发和硬件设计的经验,欢迎大家关注交流。

希望这篇文章能够帮助大家更好地理解和使用 EDA 软件。

如果你有任何问题或者想法,欢迎在评论区留言讨论。让我们一起进步,一起成长!

更多编程学习资源