做硬件设计这些年,原理图和PCB绘制这两件事,几乎是每天都要碰的东西。很多人觉得原理图就是连线,PCB就是拉线,但真到了项目里,一个引脚下错、一处布线过细、一次布局不合理,轻则改版,重则整块板报废,周期和钱都搭进去。这篇备忘是我这些年实际项目中攒下来的经验,覆盖从方案选型、原理图规范、PCB布局布线,到Altium Designer、Cadence/Allegro、嘉立创EDA、PADS等常用工具的高频操作,再补充单片机最小系统、电源、接口、驱动等典型模块的绘制要点,一次性把容易踩的坑和对应的处理思路说清楚。
1. 原理图设计:先把习惯养好再谈画图
1.1 器件选型与封装规划要先于连线
原理图看着是画连线,其实第一步是器件选型和封装规划。以网上经常搜到的几颗芯片为例——STM32F103C8T6、CH340、SW6206、DHT11、WS2812B、TB6612,这些器件都很成熟,但选型时不能只看功能,要同时确认封装、供货、成本、焊接难度。比如STM32F103C8T6有LQFP48封装,引脚密集,如果用两层板手工焊接,建议引脚间距至少0.5mm,打样时也要注意焊盘开窗;而DHT11常见的是4脚单排直插,和许多传感器模块的PCB封装并不完全一样,画封装前一定要拿卡尺实测。
封装规划的实操做法是:先把所有器件的封装列一张表,位号、型号、封装、数量、备注,画原理图的同时不断更新,画完自然就是BOM底稿。管脚特别多的器件,比如BGA封装或者上百引脚的连接器,我会先在表格里把引脚序号、引脚名称、网络名称一一对应好,再导到原理图工具里,避免在画图界面一个一个对引脚,效率低还容易错。网上有些原厂方案包,比如SW6206的完整资料(包含原理图、PCB、寄存器列表、BOM)会非常方便,但我的建议是拿来参考为主,不要直接照搬。原厂方案的布局通常是为标准应用场景设计的,你的电池容量、输入输出电流、散热条件可能不一样,盲目复制容易在量产时暴露问题。
选型阶段还有一个容易忽略的点:对照datasheet里的推荐电路。电源芯片、晶振、RS232电平转换芯片这类器件,datasheet里通常会给出典型应用电路,包括电容容值、上拉电阻、ESD保护器件,这些是经过验证的,直接采用能省很多事。比如CH340G的V3引脚需要接0.1uF电容,MAX232的电荷泵电容一般用1uF,这些细节写在datasheet里,但很多人到了PCB阶段才发现引脚没接对,回头再改原理图就麻烦了。
1.2 原理图绘制的硬性规范:电源树、网络命名、去耦
原理图首先是给人看的,其次才是给工具用的。一份好的原理图,打开以后三五分钟就能让人看懂电源从哪进、信号往哪走、每个模块是什么功能。我的习惯是:优先画电源树,从上到下按电压层级展开,比如12V进来,经过DCDC到5V,再经过LDO到3.3V,每一级标注电压和预期电流,这样后续布局时能快速决定每个电源区域放哪里。
去耦电容这件事我一直强调,每个芯片的电源引脚要就近放一个100nF或10nF的陶瓷电容,另外在芯片供电入口处放一个10uF到100uF的大电容做蓄能。小电容负责高频去耦,大电容负责中低频稳压。两者配合,电源纹波会明显改善。实际绘制时,这些小电容在原理图上离电源引脚近一些,标注清楚网络,到了PCB阶段就能更快定位到对应引脚。
网络命名也要有规则,别用Net001这种自动生成的名称。我常用的命名习惯是:电源用3V3、5V0、VCC_MCU、VIN_12V;地统一用GND,如果有模拟地和数字地,用AGND和DGND区分;信号用功能缩写,比如USB_D_P、USB_D_N、SWDIO、SWCLK、SDA、SCL。这样一看原理图就知道网络用途,排查问题也方便。
原理图分区域绘制是另一个重要习惯。一个复杂的系统,如果全部画在一张图纸上,连线交错,评审和后期维护都很痛苦。AD里可以用Sheet Symbol和Port做层次化设计,把电源模块、MCU系统、接口电路、驱动电路分成多个子图,顶层用方块图表达连接关系。OrCAD里也有层次图功能。如果项目不大,至少也要用Net Label配合Off-page Connector在几张图纸之间传递信号。图纸大小设置也要注意,AD里在Design->Document Options中修改,OrCAD里在Schematic Page Properties中改。别用小图硬塞大电路,宁可图纸大一点,也不要让器件挤在一起。
1.3 信号完整性和可制造性从原理图就开始考虑
原理图阶段就要为PCB做规划。有些约束等到PCB再设就晚了,比如差分对。USB D+/D-、以太网TX/RX这类信号,在原理图阶段就应该把它们标记成差分对,在AD里是Place->Directives->Differential Pair,到PCB后直接能生成差分走线规则;Allegro里也有类似的XNet和Diff Pair设置。如果等到PCB布线时才想起来,就得回头补,费时间还容易漏。
另外,原理图要标注关键信号的特性和注意点,比如晶振输入输出、复位信号、高精度采样信号,可以加注释,例如"靠近MCU放置""底下不要走数字信号线"。这些注释在PCB布局时非常有帮助,相当于把你的设计意图直接传给布局布线的人。
原理图的可制造性也要提前想。比如有些MCU芯片下面是热焊盘(如QFN封装),原理图中这个引脚要明确接到地,PCB设计时要在热焊盘上打过孔阵列辅助散热。还有极性器件,电解电容、二极管、LED、电池座,原理图符号上要把极性标识清楚,PCB封装上也要加极性丝印。这些如果原理图阶段不规划,PCB阶段很容易出现焊盘方向错误。
2. PCB布局布线:把看不见的问题提前解决
2.1 布局思路:先结构后电气,模块化分区
PCB布局是整块板质量的关键,布局合理,布线就顺;布局混乱,布线迟早返工。我的布局顺序其实固定了:先定结构件,再排接口,最后放芯片。拿到板框后,先放安装孔、螺丝孔、连接器、按键、指示灯、散热器这些结构固定的器件,确保它们和外壳装配关系正确。螺丝孔的绘制看起来简单,但一定要注意安全间距:金属化螺丝孔周围要留出禁布区,非金属化螺丝孔内层不要铺铜,防止螺丝碰到线路短路。在Allegro里做螺丝孔,通常用Padstack Editor建一个机械孔,再在Board Geometry的Keepout层画禁布区;AD里可以直接放一个Pad,在Multi-Layer定义孔径,并在Keep-Out层画禁布圈。
结构件定好后再分区布局。电源模块放靠近输入接口的位置,MCU放中间或靠近主要外设,接口电路放板边,传感器远离大电流和开关节点。模拟电路和数字电路要分区,比如4-20mA信号采集这种模拟链路,要远离DCDC开关节点。高低压隔离的场景更加严格,反激式开关电源这类电路,初级和次级的爬电距离要够,板上一般要开槽(挖空PCB),光耦跨接在初次级之间,开槽宽度至少要保证安全距离。
去耦电容的布局是很多人忽略的。每个芯片电源引脚的100nF电容,必须放在芯片电源引脚旁边,距离不超过2mm,过孔到电容再到引脚的路径要短。如果距离太远,电容的退耦效果就大打折扣。我实际检查时,习惯按芯片逐个看,电源引脚旁边有没有小电容,位置合不合理。
还有一个常见坑:PCB上器件不能选中。很多人以为软件坏了,其实往往是器件被设置了Locked属性,或者在右下角Filter里误选了对象类型,只允许选中某些元素。AD里还有一个优先级问题:如果你把Selection Filter里的器件取消勾选,鼠标怎么点都选不中。这个我放在后面问题排查部分细讲。
2.2 布线规则与线宽电流对照
布线规则这块,很多新手上来就问线宽该设多少,其实核心就两条:满足电流承载,满足信号完整性。电流和线宽的工程经验对照,我整理了一个常用表,按1oz(35um)铜厚来算:
| 走线场景 | 建议线宽 | 对应电流参考 |
|---|---|---|
| 普通信号线 | 6-10mil | 0.2-0.5A |
| I2C、UART等通信线 | 8-10mil | 0.3-0.5A |
| LED数据线(WS2812B) | 10mil以上 | 0.5A以上 |
| 电机驱动(TB6612输出) | 30-50mil | 2-3A |
| 电源主干(5V/12V输入) | 50mil以上或铺铜 | 3-5A以上 |
| 电池回路(充电芯片) | 50mil以上或铺铜,加过孔阵列 | 3-5A以上 |
这个表是1oz外层的参考值,内层因为散热差,同样线宽承载能力要打对折。另外线宽不要只看走线宽度,还要看铜厚。打样时默认1oz,如果电流特别大,可以要求2oz铜厚,但成本会增加。我自己做电源板时,大电流路径不用细线,直接铺铜,铺铜宽度按每毫米1A去估算,然后铺完再检查电压降。
走线角度上,尽量用135度斜线或圆弧,直角走线在信号完整性要求高的场合会产生阻抗突变和EMI,虽然数字电路低速下影响不大,但养成好习惯很重要。晶振走线要短,底下铺地,两侧用地包围,离大电流远一点。复位信号、模拟信号也是同理。
2.3 层叠设计、地平面完整性与散热
双层板是最常见的,我的建议是顶层走信号和电源,底层大面积铺地。关键信号不要跨过底层的分割缝隙,否则回流路径就断了。四层板的话,经典叠层是"信号-地-电源-信号"或者"信号-电源-地-信号",尽量让电源层和地层紧耦合,能形成一个小电容,对电源完整性有帮助。层叠厚度对阻抗控制很重要,4层板常见1.6mm总厚,芯板厚度0.2mm左右,生产之前要把叠层结构发给板厂,让板厂按这个叠层压合。
地平面完整性是整个PCB最重要的事情。高频信号的回流电流会沿着信号线正下方的地平面走,如果地平面被开槽或者分割,回流就要绕路,环路面积变大,EMI和串扰随之而来。我检查时最看重的就是:电源走线的回流路径是否顺畅,模拟地和数字地怎么分。模拟地和数字地通常建议单点连接,用0欧电阻或磁珠跨接,位置选在两者信号交汇处,不要形成大面积地环路。
散热方面,电源芯片和驱动芯片底部如果有热焊盘,一定通过过孔阵列连接到背面大面积铜皮,过孔孔径0.3mm,间距1mm左右,成矩阵排列。我见过太多板子,芯片底部焊盘接了一根细线,没过孔,一跑大电流就过热保护。LED灯板也是,WS2812B单颗灯珠全亮时约60mA,一串几十颗就是几安培,底层铺铜和过孔阵列一点都不能省。
3. 主流EDA工具的高频操作备忘
3.1 Altium Designer:导出、选择、拖动、图纸设置
AD是入门最友好的工具,但操作细节的坑也不少。原理图导出PDF只显示部分区域,这个问题我遇到很多次。原因一般是Smart PDF或打印设置里的打印区域不对。处理方法是:File->Smart PDF,在向导中选择当前全部Sheet,然后在打印属性里把Scale设为Fit to page,打印范围选All,不是Selection。如果还是只出局部,检查原理图的图纸尺寸是否是标准A4/A3,自定页面尺寸有时候会在PDF导出时被截断。
PCB中器件不能选中,十有八九是Selection Filter或Locked属性。解决方法是:按Shift+C清空过滤器,在右下方面板查看当前Filter是否限制了对象种类;如果器件属性里Locked打了勾,取消勾选。还有就是可能图层被隐藏了,按L打开View Configuration,确认对应层是显示状态。
原理图移动元件时连线断开,这也是AD的经典设置问题。AD的Move命令默认只移动器件,不会拖动连接的线,经常拖完后线全断。要勾选Preferences->Schematic->Graphical Editing里的Always Drag选项,之后移动器件时连接线会跟着走,快捷键是M配合拖动。如果你只是临时想拖一下不想影响连线,就按住Ctrl再拖。
AD里显示PCB器件型号和名称,是按L打开View Configuration,在Other层下面把Designator和Comment勾上,然后选中器件在Properties里打开Show Name/Value。丝印层如果太密,可以在PCB Inspector里统一改字体大小。
3.2 Cadence/Allegro:库路径、快捷键、测量与螺丝孔
Allegro的功能强,但上手门槛高。最常见的坑是打开brd文件时没有弹出Allegro PCB Designer Product Choice,可能是许可证或环境变量被改过。处理思路:完全关闭软件,清理局部环境的HOME变量指向的目录里的特定配置文件,或者直接重新运行License Manager工具;如果还是不行,检查Cadence版本和补丁是否一致。
Allegro的快捷键设置不像AD那样在菜单里点点就行,要改安装目录下的env文件,或者用户HOME目录下的localfile.env。常用的alias是:alias F2 done,alias F3 zoom out,alias F4 zoom in。我不建议直接改系统env,容易改坏,最好把自定义脚本放local env里。Allegro里查看距离和长度,用Display->Measure,选两个点就能测;查走线长度可以在Find面板中只勾选Cline Seg,然后用Show Element看属性,或者用Tools->Reports生成走线长度报表。
封装库导入Allegro时要设置路径,Setup->User Preferences,把padpath、psmpath、devpath等指向你的库目录。否则打开brd时会弹"库文件找不到"。网络表导进来之前,先检查每一个器件的封装引脚是否和原理图符号对应,尤其是管脚数非常多的器件,最好先建一个小板验证。
3.3 嘉立创EDA与PADS:实用经验和崩溃处理
嘉立创EDA这两年用的人很多,主要是封装库方便,立创商城的器件大多数有现成原理图符号、PCB封装和3D模型。画DHT11、ESP32、STM32这类常用芯片时,直接搜型号就能拉进来。但这里要提醒一句:立创EDA库里的封装虽然大多数可靠,但每次画板前还是要核对datasheet里的封装尺寸,特别是引脚间距、焊盘长度、丝印方向。DHT11的引脚间距是标准2.54mm,但不同厂家的外形略不同,能实测最好。
嘉立创EDA画PCB的流程很直观:原理图编译通过后,切换到PCB,设置设计规则,布局,布线,铺铜,跑DRC,最后输出Gerber。需要注意的是,它的铺铜有时默认直角,最好在规则里设置45度或圆弧。DRC也要认真看,在线DRC开着虽然慢,但能少很多低级错误。
PADS那个"打开文件就报错自动关闭"的问题,我印象太深了。一般出现在打开旧版本文件或者文件里有特殊字符时。解决办法:升级SP补丁;或者用File->Export把文件导出为ASCII格式(.asc),再用PADS新建空板上File->Import,很多情况下能绕过崩溃点。另外,PADS的自动备份恢复文件如果崩了,重启后容易再次触发,可以先把这个功能临时关掉,处理完再打开。
3.4 设计输出与文件交接:BOM、寄存器、Gerber
原理图和PCB画完了,输出这步千万别省。设计文件交接给不同角色时,内容完全不一样。给板厂的是Gerber文件加钻孔文件,最稳妥的做法是在AD里File->Fabrication Outputs->Gerber Files,格式选RS-274X,精度选2:5,输出所有需要的层;钻孔文件单独生成NC Drill。然后在CAM编辑器里预览一遍Gerber,看看有没有丢失线条或字符乱码。给采购和硬件同事的是BOM,AD的Bill of Materials输出Excel时,我习惯把位号、型号、封装、数量、描述、参考设计都列全,再补一列替代料。给软件同事的是原理图PDF和寄存器列表,很多原厂方案包里会提供,比如SW6206的寄存器列表,实际调试时随时要查。
Gerber转PCB这个需求偶尔会有,AD支持File->Import->Gerber,但我要泼盆冷水:导入后得到的是图形对象,不是可编辑的网络和元件,无法直接拿来改板重投。真正要改文件时,最好拿到原设计文件,或者用AD的PCBFile转换工具,实在不行只能重建,这也是为什么我反复强调版本管理和源文件备份。
4. 典型电路模块的原理图与PCB绘制要点
4.1 STM32最小系统与LED控制
STM32F103C8T6是最常画的MCU之一。最小系统原理图的核心点:电源引脚VDDA和VDD都要接3.3V,分别就近加100nF去耦电容,VDDA引脚建议多加一个1uF到10uF的电容;NRST引脚接10k上拉到3.3V,再接100nF电容到地,这样复位电路就完成了。BOOT0要下拉10k到地,BOOT1可以悬空或也下拉,这样从主Flash启动。8MHz晶振两个引脚各接一个18pF到22pF的负载电容,晶振到MCU的走线要短。SWD下载接口只需要SWDIO和SWCLK两个引脚,加上GND和3.3V,四根线就能下载程序。
用核心板控制LED,原理图更简单,一个GPIO推挽输出,串联一个限流电阻到LED。限流电阻的值取决于LED压降和工作电流,假设红色LED压降1.8V,3.3V供电,限流220欧到470欧,电流大概3到6mA。PCB布局上这颗电阻要离MCU引脚近,LED放在板边方便用户看到。这类简单电路,重点不是原理图本身,而是养成标注清晰的习惯,比如网络命名LED1_CTRL、R12限流1k等。
4.2 电源电路:SW6206、反激开关电源、充电芯片
SW6206是移动电源常用SoC,原厂会给全套资料,包括原理图、PCB、寄存器列表和BOM。我拿到这类资料后的流程是:先看原理图的电源树,搞清电池输入、升压输出、快充协议、电量显示几个部分;再对照datasheet确认引脚定义;最后看PCB布局。这类高电流芯片的关键是功率路径尽量短粗、电感靠近SW引脚、电流采样走开尔文接法、输入电容和输出电容紧贴芯片。如果板上有I2C通信接口,记得加上拉电阻。
反激式开关电源的PCB要求比普通数字板更高。输入端的整流桥、保险丝、压敏电阻、X电容和共模电感要按顺序排,走线尽量短;开关管和变压器组成的高压开关回路,环路面积越小越好,否则EMI会非常难看。初次级之间要留安全间距,光耦反馈要跨在两级之间,次级的TL431和采样电阻靠近光耦副边。层间绝缘也要考虑,多层板时初、次级分别走不同层,中间留足够间距。这块对新手来说难,但按原厂方案布局基本不会出大问题。
充电芯片,比如9017R这类,引脚不多,但有一个共同点:充电电流路径上有个采样电阻,采样电阻的走线要用开尔文接法,也就是从电阻两端单独各拉一条细线到芯片的sense引脚,不要让大电流流过sense走线,否则检测电压不准。底部散热焊盘一定要接到大铜皮上。
4.3 通信与信号接口:CH340、RS232、4-20mA
CH340的原理图很成熟:USB的D+/D-接到芯片引脚,晶振12MHz,V3引脚0.1uF电容,TXD/RXD交叉接到MCU的RXD/TXD。PCB上D+/D-要等长且尽量短,最好走差分线,差分阻抗90欧不强制要求,但线要平行靠近。ESD保护芯片要放在USB口入口处。以前我做过一块板,CH340就是晶振布线过长导致USB枚举不上,后来把晶振贴近芯片、底下铺地就好了。
RS232用MAX232或SP3232,关键点是四个电荷泵电容,一般1uF,要靠近芯片放置,走线短。DB9座放在板边,RS232电平线和TTL线分开走,不要平行太长。信号线注意ESD保护,这在实际环境中很重要。
4-20mA电路,如果是用XTR117这类环路供电变送器,原理图比较简单,关键看外部调整管的散热和采样电阻精度。PCB上输入信号调理部分和环路输出部分要分区,模拟地和电源地单点连接。如果是自己用运放搭的,那还要考虑运放的失调电压和温漂,布局时远离DCDC开关节点。
4.4 驱动与灯控:TB6612、H桥、WS2812B、蜂鸣器
TB6612电机驱动芯片,VM接电池电压或主电源,VCC接逻辑电压3.3V或5V,PWMA、AIN1、AIN2控制一路电机,STBY引脚必须接高电平,否则芯片不工作。PCB上电机电源走线要宽,电机输出引脚的走线也要宽,因为启动瞬间电流可能到1-2A。VM引脚的去耦电容要大,100uF电解电容加100nF陶瓷电容,放在芯片附近。逻辑地和大电流地建议单点连接,我一般用一个小铜桥或0欧电阻衔接。
H桥驱动电路,如果是自己用分立MOS管搭,NMOS和PMOS的栅极驱动电压要注意,Vgs要足够。上下管的死区时间如果不加控制,会直通短路烧管。所以实际项目中我建议用半桥驱动IC,比如IR2104或EG2104之类,死区由IC内部处理,原理图和PCB都简单不少。H桥的大电流路径同样要短粗,续流二极管或体二极管路径要短。
WS2812B灯珠现在特别流行,它的原理图不复杂:VDD接5V,Din数据进,DOUT级联下一颗。但PCB有几个容易忽略的点:每颗灯珠的VDD引脚要就近放一个100nF到1uF的去耦电容,灯珠数量多时,电源和地要按网格铺铜,不然最后一颗灯颜色会偏;数据线建议在Din端串联33欧到330欧的电阻,特别是灯带比较长时,可以抑制振铃;数据线尽量贴着地走,减少被干扰的概率。大电压大电流的长距离供电,建议源端和末端都加电容。
蜂鸣器看着简单,但有源蜂鸣器如果是感性负载,关断时会产生反向电动势,驱动管要加续流二极管,否则容易烧管或产生尖峰干扰。
5. 常见问题速查与生产前检查清单
5.1 软件报错与文件异常排查速查表
| 现象 | 可能原因 | 处理思路 |
|---|---|---|
| PADS打开文件自动关闭 | 文件版本兼容、图形数据显示异常 | 用ASCII格式导出再导入,升级Service Pack,临时关闭自动恢复 |
| AD导出PDF只显示部分区域 | 打印范围、图纸尺寸异常 | Smart PDF里选择全部Sheet,缩放设为Fit to page,检查页面尺寸是否标准 |
| AD中PCB器件选不中 | Selection Filter限制、Locked属性、图层隐藏 | 按Shift+C清除Filter,取消器件锁定,按L检查层显示 |
| Allegro打开brd不弹Product Choice | License或环境变量问题 | 检查许可证,清理偏好配置后重开,确认版本补丁一致 |
| 原理图拖动器件时连线断开 | AD拖动模式设置 | Preferences里勾选Always Drag,或用M+拖动快捷方式 |
| Gerber导入AD后不能编辑网络 | 导入的是图形不是原生PCB | 只能观看或用原设计文件重做,不能直接当PCB编辑 |
5.2 DRC检查和生产工艺核对
投板之前,DRC必须干净。AD里运行Design->Rules Check,看Un-Routed、Width、Clearance、Drill这几类是否清零。Allegro里跑DB Doctor和DRC。嘉立创EDA的DRC跑完也要逐条看。不要放过任何警告,很多问题在板子到手后才暴露,到时候改版就是一周起步。
工艺方面,常规打样建议线宽线隙不小于6mil,再小就要加急收费。过孔最小孔径一般0.2mm到0.3mm,孔径太小加工难度大。金属化螺丝孔的内径和焊盘外径要留够,非金属化螺丝孔外径要和板边有间距,否则板材容易裂。阻抗要求的线,比如USB高优先级信号,要按板厂提供的层叠参数计算线宽和间距,最好在下单备注里写明阻抗要求,板厂会替你调整。
丝印检查也很重要:位号字体大小一致,极性标记清晰,第一脚方向明确。有极性电容、二极管、LED,丝印极性必须醒目。按键和插座的标注最好加在装配层,方便产线接线。
5.3 个人制板的检查清单
我自己每次投板前都有一个小清单,现在分享出来,虽然简单,但每一条都是教训换来的:电源地之间是否用万用表量过短路;每个电源域的去耦电容是否都放齐了;晶振是否靠近MCU;DCDC的电感位置是否合理;每块大电流走线宽度是否够;连接器方向是否和外壳一致;螺丝孔是否做了禁布处理;Gerber用CAM软件预览过没有;BOM里的型号、封装是否和原理图一致。最后这步特别重要,很多时候原理图是对的,结果封装库里的焊盘尺寸和实际买到的不一样,焊接时才后悔。
原理图和PCB绘制这件事,本质上就是不断把问题在投产前暴露并解决。工具用得熟不熟是效率问题,画板前的规划和自检才是质量的根本。我个人的体会是,养成一套固定的检查流程比临时抱佛脚有效得多,宁可多花半小时检查,也好过整个项目等返工。上面这些内容都是我踩过坑之后沉淀下来的,希望能帮你在下一块板子上少走些弯路。