大家好,我是良许。
在嵌入式开发领域,我们经常需要设计电路板,而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指示灯、按键、传感器接口、通信接口等。
每个功能模块最好用虚线框框起来,并添加注释说明,这样后期维护时一目了然。
在绘制原理图时,有几个实用技巧:
- 使用总线(Bus)来简化复杂的连线,特别是数据总线和地址总线
- 善用网络标签(Net Label),避免画太多交叉的连线
- 给每个元器件添加合适的封装信息,这样在转PCB时就不会出错
- 定期进行电气规则检查(ERC),及时发现连接错误
2.2 元器件库的管理
元器件库是EDA软件的重要组成部分,包含了元器件的原理图符号和PCB封装。
刚开始使用EDA软件时,我经常遇到找不到合适元器件的情况。
后来我养成了自己建库的习惯,把常用的元器件都整理到自己的库中。
建立元器件库的步骤:
- 创建原理图库文件(.SchLib)和PCB库文件(.PcbLib)
- 在原理图库中绘制元器件的符号,定义引脚编号和名称
- 在PCB库中绘制元器件的封装,包括焊盘位置、丝印层、阻焊层等
- 将原理图符号和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 布线的基本规则
- 电源线和地线要粗,一般电源线宽度至少0.5mm,大电流线路要更粗
- 信号线宽度一般0.2-0.3mm,根据电流大小和阻抗要求调整
- 走线尽量走直线或45度折线,避免90度直角转弯
- 高速信号线要短,要粗,要远离干扰源
- 模拟信号和数字信号要分开走线,避免串扰
2.4.2 地平面的处理
在多层板设计中,通常会有一层或多层作为地平面。
地平面可以提供稳定的参考电位,降低信号回流阻抗,提高抗干扰能力。
我在设计四层板时,一般采用"信号-地-电源-信号"的叠层结构,这样可以保证每一层信号都有完整的地平面作为回流路径。
对于双层板,虽然不能做完整的地平面,但也要尽量在底层铺铜,并且多打地过孔,降低地阻抗。
有一次我设计的一个双层板,因为地过孔打得太少,导致信号质量不好,后来补打了很多过孔才解决问题。
2.4.3 自动布线和手动布线
EDA软件都提供了自动布线功能,但我很少完全依赖自动布线。
自动布线对于简单的电路还可以,但对于复杂的、有特殊要求的电路,还是需要手动布线。
我的习惯是,先手动布关键信号,比如时钟线、复位线、高速信号等,然后用自动布线完成剩余的信号,最后再手动优化。
3. 实际案例:STM32最小系统设计
下面我以一个STM32F103C8T6最小系统为例,演示完整的EDA设计流程。
3.1 原理图设计
这个最小系统包括以下几个部分:
- 电源电路:使用AMS1117-3.3将5V转换为3.3V,输入端加10uF电容,输出端加10uF和100nF电容
- MCU核心:STM32F103C8T6芯片,VDDA和VDD分别加100nF去耦电容
- 时钟电路:8MHz无源晶振,两端各加20pF电容,还有一个32.768KHz的RTC晶振
- 复位电路:NRST引脚通过10K电阻上拉到3.3V,并联一个100nF电容和一个复位按键
- BOOT配置:BOOT0通过10K电阻下拉到地,BOOT1也下拉
- 调试接口:引出SWD接口,包括SWDIO、SWCLK、GND、3.3V四个引脚
- LED指示灯:PC13引脚接一个LED和限流电阻
在Altium Designer中绘制好原理图后,要进行编译检查。
点击"Project → Compile PCB Project",如果有错误或警告,要逐一解决。
常见的问题包括:引脚未连接、网络名称冲突、元器件缺少封装等。
3.2 PCB设计
将原理图导入PCB后,首先设置板子的尺寸和层数。
这个最小系统我选择双层板,尺寸设置为50mm × 40mm。
布局阶段:
- 先放置STM32芯片,位置大概在板子中央偏上的位置
- 电源芯片AMS1117放在板子左侧,靠近电源输入端
- 晶振放在MCU的旁边,尽量靠近OSC_IN和OSC_OUT引脚
- 去耦电容紧贴MCU的电源引脚
- SWD接口放在板子边缘,方便调试器连接
- LED放在板子的角落,不占用太多空间
布线阶段:
- 先走电源线,从AMS1117的输出端到MCU的VDD引脚,走线宽度设置为0.8mm
- 走地线,在底层铺铜作为地平面
- 走晶振信号,这是高频信号,要短、要粗、要远离其他信号
- 走SWD调试信号,SWDIO和SWCLK要等长
- 最后走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软件的朋友,我的建议是:
-
从简单项目开始。不要一上来就设计复杂的多层板,先从简单的双层板开始,比如LED闪烁电路、简单的单片机最小系统等。
-
多看官方教程。每个EDA软件都有详细的官方教程和文档,这是最权威的学习资料。
Altium Designer的官方YouTube频道有很多视频教程,讲得非常详细。
-
参考优秀的开源项目。GitHub上有很多开源硬件项目,可以下载它们的原理图和PCB文件学习。
看看别人是怎么设计的,学习他们的布局布线技巧。
-
实践出真知。光看教程是不够的,一定要自己动手设计。
-
可以先设计一些简单的板子,打样回来焊接测试,在实践中积累经验。
我刚开始学PCB设计时,设计了一个STM32最小系统板,虽然很简单,但从设计到焊接调试的整个过程让我学到了很多。
-
加入社区交流。可以加入一些EDA软件的QQ群、微信群,或者论坛,遇到问题可以请教别人。
我在立创EDA的论坛上学到了不少东西,那里有很多热心的工程师分享经验。
-
关注PCB制造工艺。了解PCB的制造工艺,知道什么样的设计容易制造,什么样的设计会增加成本。
比如,走线间距太小会增加制造难度,过孔太多会增加成本等。
7. 总结
EDA软件是嵌入式工程师的必备技能之一。
虽然学习曲线有点陡峭,但只要多练习,多思考,就能掌握。
从我自己的经验来看,从完全不会到能够独立设计复杂的四层板,大概需要半年到一年的时间。
在使用EDA软件的过程中,要养成良好的习惯:规范命名、及时备份、详细注释、严格检查。
这些习惯会让你的设计更加可靠,也会让后期维护更加轻松。
最后,我想说的是,硬件设计是一个需要不断学习的领域。
新的元器件、新的技术、新的设计方法层出不穷,我们要保持学习的热情,不断提升自己的技能。
在我的公众号里,我会持续分享嵌入式开发和硬件设计的经验,欢迎大家关注交流。
希望这篇文章能够帮助大家更好地理解和使用EDA软件。
如果你有任何问题或者想法,欢迎在评论区留言讨论。让我们一起进步,一起成长!
更多编程学习资源
随时随地看视频