KiCad 使用指南-团队协作
🚀 Kicad从上手到协作
- 之所以有这篇文章,是因为本人在使用Kicad与团队队员协同设计PCB时遇到不少问题,但网络上鲜有这方面的教程,故自己写一个,用于给团队成员进行Kicad使用培训,指导团队协同工作。
- 笔者使用Kicad的时间也不长,对许多功能也不是很清楚,文章中难免会有错漏,如有发现,欢迎批评指正。
- 本文使用Kicad-V9.0.0正式版
1. KiCad 介绍
1.1 KiCad 是什么?
KiCad 是一个开源的电子设计自动化 (EDA) 软件套件,用于创建电子原理图和印刷电路板 (PCB) 布局。它由 CERN(欧洲核子研究中心)主导开发,并且得到了广泛的社区支持。KiCad 提供了从原理图绘制、PCB 布局设计到生成生产文件的完整流程。
1.2 KiCad 与其他 EDA 软件的对比
1.2.1 Altium Designer
- 优点:功能强大,商业支持,广泛使用于专业设计。
- 缺点:价格昂贵,有版权风险。
- 适用场景:大规模复杂电路设计,企业级项目。
1.2.2 EasyEDA
- 优点:基于云的设计工具,易于协作,免费版本功能丰富。
- 缺点:功能相对简单,依赖网络连接,绘制复制PCB会卡顿。
- 适用场景:简单电路设计,在线协作,快速原型。
1.2.3 KiCad
- 优点:开源免费,功能全面,社区支持活跃。
- 缺点:功能复杂,初学者需要一定的学习时间。
- 适用场景:中大型项目,开源硬件设计,个人和团队协作。
1.3 KiCad 的特点和适用场景
1.3.1 KiCad 的特点
- 开源免费:KiCad 是完全开源的,不需要支付任何费用即可使用所有功能。
- 多平台支持:KiCad 支持 Windows、macOS 和 Linux 操作系统。
- 功能全面:包括原理图设计、PCB 布局、3D 视图、BOM 生成等功能,满足从设计到生产的完整需求。
- 社区支持:拥有一个活跃的社区,可以获取丰富的资源、教程和技术支持。
- 定制性强:用户可以根据需要定制符号库、封装库和插件,满足特定项目需求。
1.3.2 适用场景
- 中大型项目:KiCad 的功能足够强大,能够处理复杂的电路设计和多层 PCB 布局。
- 开源硬件设计:由于其开源特性,KiCad 非常适合开源硬件设计项目,设计文件可以自由共享和修改。
- 个人和团队协作:KiCad 支持 Git 版本控制,方便团队协作和版本管理。
2. KiCad 安装与环境配置
下载安装包: https://www.kicad.org/download
点击安装:
选择所有,然后一直下一步即可:
安装完成后界面如下图所示:
3. KiCad 基础工作流程
图片来源:
使用 KiCad 进行电路设计的基本流程包括三个主要阶段:原理图设计、PCB 设计 和 制造文件导出。上图展示了这一流程的主要步骤。
本文不会从零开始教你如何绘制 PCB,也不会详细介绍每个步骤,因此在继续阅读前,你需要具备以下基础知识:
- 了解 PCB 设计的基本流程:
- 理解元件符号、元件封装、元件 3D 模型,以及符号库、封装库、3D 模型库等概念
- 能使用 KiCad 绘制一块简单的 PCB
- 会使用Git进行版本管理和协作
如果你对上述内容不熟悉,建议先参考以下教程打好基础,否则后续内容可能会让你感到困惑。
基础教程推荐:
4. 库文件管理
4.1 KiCad 自带库与第三方库
KiCad 自带库: KiCad 安装包自带了大量的符号库和封装库,涵盖了常见的电子元件。这些库文件默认会安装在 KiCad 的安装目录中,可以直接在项目中使用。
第三方库: 除了 KiCad 自带的库,用户还可以使用各种第三方库。这些库通常由社区或第三方公司提供,可以在网上下载并导入 KiCad 中使用。比如乐鑫公司为Kicad提供的ESP32系列芯片拓展库kicad-libraries。
4.2 自定义符号库与封装库
由于电子器件种类繁多,总会有软件库里找不到的器件,,并且官方库是只读的,如过有添加或者修该的需求,免不了需要自己绘制符号和封装库。至于如何创建自定义库我这里不再详细描述,我只要指出,我们需要注意的地方:
创建自定义符号库的步骤如下:
- 打开原理图编辑器 (Eeschema)。
- 点击顶部菜单栏的“工具” -> “符号编辑器”。
- 在符号编辑器中,点击“文件” -> “新建库”,为库命名并选择保存路径。
- 在新建的库中,点击“文件” -> “新建符号”,根据需要绘制符号并保存。
创建自定义封装库的步骤如下:
- 打开 PCB 编辑器 (PCBNew)。
- 点击顶部菜单栏的“工具” -> “封装编辑器”。
- 在封装编辑器中,点击“文件” -> “新建库”,为库命名并选择保存路径。
- 在新建的库中,点击“文件” -> “新建封装”,根据需要绘制封装并保存。
在使用自定义的符号库和封装库的过程中,最好花一点时间规划个人库的命名。由于最初的规划不当,将来重新组织和创建库是一件很麻烦的事情。随着我们不断使用,我们自定义的符号封装库也会逐渐壮大起来,也会使整个工作流程更加丝滑顺畅,不会因为画一点都找不到对应元件而烦恼,所以积累个人符号库,封装库,和符号库是非常重要的。
4.3 分发共享自定义库的注意事项
环境变量:我们可以在Kicad中指定环境变量,来代替库文件路径下的可变部分,这个功能在分发共享自己的自定义库时非常有效。
举个例子:
我们新建一个自定义符号库叫test
,存储位置位于我的桌面的test
文件夹,我在这里在里面放入一个按键符号:
再新建一个自定义封装库叫test
,同样放到桌面的test
文件夹下,在这里在里面放入按键符号对应的封装:
封装还需要有对的3D文件,我同样把它放入桌面的test
文件夹:
并在封装属性界面为封装绑定3D模型,可以看到3D模型的位置是以绝对路径来表示的:
最后再为符号绑定封装:
这基本上就是我们平时使用过程中,添加新符号的流程。接下来我们创建一个工程,名字叫project
,也放在桌面:
在原理图里放置我们自定义的符号:
转到PCB,也是正常显示封装的:
转到3D查看器,也是正常显示3D文件的:
上述过程模拟了我们设计PCB的基本流程,接下来我们可能会把工程发送给团队里的其他人,当团队里的其他人打开工程会发现一些问题:
这里我在另一台电脑(电脑2)上打开这个工程,可以看到原理图和PCB文件似乎还是OK的:
但是3D视图下的模型已经没有了:
并且如果我们重新生成PCB文件,也会发现找不到封装:
上面的问题是另一台电脑上(电脑2)并没test
这个库,这里我们一般会尝试把自己的自定义库也分享出去,这样别人就可以自行导入了,下面我们试试: 把原来存在电脑1上的自定义库文件夹test
发送给另一台电脑(电脑2),并在电脑2导入: 导入符号:
导入封装:
这个时候另一台电脑上(电脑2)上就已经有名为test
的符号库和封装库了,重新更新PCB文件,封装也可以正常显示了,但是3D图的文件还是遗失的,如下图:
点击封装属性,我们可以看到,虽然3D文件是存在的,但是由于我们使用了绝对路径,在另一台电脑上(电脑2)上并没有这个路径,自然就加载不出来对应的3D文件:
这个时候我们也可以在另一台电脑上(电脑2)上重新绑定3D文件来解决这个问题,但是这样,如果文件还要传给别人,又会出现新的路径不匹配的问题。
所以这里我们就应该使用环境变量的功能,我们可以在设置-> 配置路径一栏找到这个功能,如下:
我们在原来的电脑新建一个环境变量叫做TEST
, 路径是我存放符号,封装,3D模型的文件夹,如下:
然后重新导入一次我们做好的自定义符号库和封装库:
可以看到库文件路径的前半部分都变成了,我们设定的环境变量。需要注意的是,我们封装文件绑定的3D模型也需要重新绑定:
绑定完也就变成了一个相对于环境变量的路径,这个时候再把我们的工程和库文件分享给别人,别人只需要设置对应的环境变量就可以正常使用了。 比如说在另一条电脑上(电脑2),我存放这个封装库的文件路径是:D:\桌面\test
那么我只需要在Kicad里设置相同的环境变量TEST
,但是值应该设置为实际文件位置:D:\桌面\test
,如下:
然后导入对应的符号和封装库即可,这样对应的文件都能通过环境变量定位自己的位置,不会因为绝对路径的问题导致库文件缺失。效果如下,另一台电脑也可以正常显示封装和3D文件:
值得注意的是,需要先设置环境变量,之后在对应路径添加库文件才会在路径中进行环境变量的替换,所以我们自定义库时,从一开始就要确定好路径,预设环境变量,便于后续库的迁移和分享。
此外:在协作时通过导出库至工程文件夹也是可以便于我们分享协作的,但是如果团队是长期合作的话,还是建议使用一个公共的共享库,并且使用git管理起来,大家在项目过程中添加的新封装和组件也可以共享起来,避免重复劳动。
5. 进阶:团队库共享指南
本部分介绍团队如何维护一个共享库,以我自己团队的共享库为例:
5.1 共享库结构:
可以看到,我们的共享库使用的环境变量名称为:EXT_Kicad_Library
共享库文件夹里内容如下:
目录的功能如下:
Kicad_Library/
│── Symbols/ # 符号库
│── Footprints/ # 封装库
│── 3DModels/ # 3D 模型
│── Templates/ # 项目模板
│── Docs/ # 其他文档
│── README.md # 说明文档
对应的库文件命名如下:
/Kicad_Library/
├── Symbols/ # 电子元件符号库
│ ├── EXT_Passive.kicad_sym # 被动元件:电阻、电容、电感、二极管等
│ ├── EXT_ICs.kicad_sym # IC类:MCU、逻辑IC、运放、存储器、电源管理等
│ ├── EXT_IC_Power.kicad_sym # IC类:电源
│ ├── EXT_IC_Other.kicad_sym # 其他
│ ├── EXT_Connectors.kicad_sym # 连接器
│ ├── EXT_Switch.kicad_sym # 开关、继电器、按钮
│ ├── EXT_Modules.kicad_sym # 模块:屏幕、无线、传感器、继电器等
│ ├── EXT_Other.kicad_sym # 其他元件:晶振、LED、保险丝、散热器等
│
├── Footprints/ # 封装库
│ ├── EXT_Passive_THT.pretty # 插件式被动元件
│ ├── EXT_Passive_SMD.pretty # 贴片式被动元件
│ ├── EXT_IC_THT.pretty # 插件式IC
│ ├── EXT_IC_SMD.pretty # 贴片式IC(QFP/QFN/SOIC等)
│ ├── EXT_Connectors_THT.pretty # 插件式连接器(PinHeader、RJ45、USB等)
│ ├── EXT_Connectors_SMD.pretty # 贴片式连接器
│ ├── EXT_Switch_THT.pretty # 插件式开关、继电器、按钮
│ ├── EXT_Switch_SMD.pretty # 贴片式开关、继电器、按钮
│ ├── EXT_Modules.pretty # 模块封装(屏幕、无线模块、传感器)
│ ├── EXT_Other.pretty # 其他封装,如晶振、散热片、继电器等
│
├── 3DModels/ # 3D模型库
│ ├── EXT_Passive_THT.3dshapes # 插件式被动元件3D模型
│ ├── EXT_Passive_SMD.3dshapes # 贴片式被动元件3D模型
│ ├── EXT_IC_THT.3dshapes # 插件式IC 3D模型
│ ├── EXT_IC_SMD.3dshapes # 贴片式IC 3D模型(QFP/QFN/SOIC等)
│ ├── EXT_Connectors_THT.3dshapes # 插件式连接器3D模型(PinHeader、RJ45、USB等)
│ ├── EXT_Connectors_SMD.3dshapes # 贴片式连接器3D模型
│ ├── EXT_Switch_THT.3dshapes # 插件式开关、继电器、按钮3D模型
│ ├── EXT_Switch_SMD.3dshapes # 贴片式开关、继电器、按钮3D模型
│ ├── EXT_Modules.3dshapes # 模块3D模型(屏幕、无线模块、传感器等)
│ ├── EXT_Other.3dshapes # 其他3D模型(晶振、散热片、继电器等)
│
├── Blocks/ # 电路复用模块库
│ ├── PowerModules.kicad_blocks # 电源模块
│ ├── MCUCoreModules.kicad_blocks # MCU 核心模块
│ ├── CommunicationModules.kicad_blocks # 通信模块
│ ├── SensorModules.kicad_blocks # 传感器模块
│ ├── DisplayModules.kicad_blocks # 显示模块
│ ├── ActuatorModules.kicad_blocks # 执行器模块
│ ├── InterfaceModules.kicad_blocks # 接口转换模块
│ ├── ProtectionModules.kicad_blocks # 保护电路模块
│ ├── AudioModules.kicad_blocks # 音频模块
│ ├── OtherModules.kicad_blocks # 其他模块
一定要事先约定好这些内容,然后我们平时使用到一些自定义的器件,就分门别类的将其存储到这个库中,并且使用Git将库文件添加到仓库中,并推送到远程仓库(比如Github),如下:
5.2 获取共享库:
团队成员可以克隆仓库并在本地同步库文件,以使用共享库(这里我把共享库克隆到D:\SoftwareData\KiCad
目录):
然后安装库约定,添加环境变量:
接着导入符号库:
导入封装库:
导入完成之后我们可以试着打开自定义库里提供的示例工程,里面摆放的都是这个自定义库里添加的器件:
示例工程PCB:
示例工程:3D视图
可以看到都是OK的,我们的共享分发没有问题。
5.3 共享库管理
至于库的管理,遵循Git工作流即可实现多人共建,多人共享。这里关于git的操作就不详细描述了。
6. 进阶:Git 版本控制与协作
这部分主要还是git的使用,所以就不展开写了,学会git自然会懂。Kicad中也可以直接操作git仓库,但目前版本体验一般:
6.1 为什么要使用 Git 进行版本控制
在团队协作中,使用 Git 进行版本控制有以下几个重要的原因:
- 版本管理:Git 可以记录所有的项目变更,并且可以方便地回滚到之前的版本。
- 分支管理:团队成员可以在不同的分支上工作,互不干扰,最终合并到主分支。
- 冲突解决:当多个成员修改了同一文件时,Git 提供了强大的冲突解决机制。
- 协作效率:通过 Git 的 Pull Request 和 Code Review,团队成员可以方便地审查代码,提高协作效率。
6.2 Git 基础操作
以下是一些常用的 Git 基础操作:
- 克隆仓库 (clone):bash
git clone <repository_url>
- 提交更改 (commit):bash
git add <file> git commit -m "描述信息"
- 推送更改 (push):bash
git push origin <branch_name>
- 拉取更新 (pull):bash
git pull origin <branch_name>
- 创建分支 (branch):bash
git branch <new_branch_name> git checkout <new_branch_name>
6.3 Git 工作流
6.3.1 原理图与 PCB 的分工合作
在团队中,可以将原理图和 PCB 设计的任务进行分工。一个成员负责原理图设计,另一个成员负责 PCB 布局。通过 Git,团队成员可以在不同的分支上工作,互不干扰。
6.3.2 多人编辑时如何避免冲突
多人同时编辑同一个项目时,难免会遇到冲突。以下是一些避免冲突的建议:
- 频繁提交和拉取:团队成员应频繁地提交和拉取代码,以减少冲突的可能性。
- 明确分工:团队成员应明确分工,尽量避免同时修改同一个文件。
- 使用分支:每个功能或修复应在单独的分支上进行,完成后再合并到主分支。
6.4 .gitignore 文件配置
为了避免将不必要的文件提交到 Git 仓库中,可以使用 .gitignore
文件。以下是一个常见的 .gitignore
配置示例:
# KiCad project files to ignore
# Backup and autosave files
*.bak
*.kicad_prl
*.kicad_sch-bak
*.kicad_pcb-bak
*.tmp
*.tmp-bak
# User-specific files
*.kicad_prl
fp-info-cache
__pycache__/
*.swp
# KiCad 6+ schematic and PCB backup files
*.bak*
*-backups/
# Cache and lock files
*.cache
*.lock
# Simulation files
*.raw
*.log
*.net
*.cir
# Gerber and fabrication outputs
*.gbr
*.gtl
*.gbl
*.gts
*.gbs
*.gto
*.gbo
*.drl
*.zip
7.其他:Kicad项目规范
7.1 使用全英文的命名习惯
请尽量在设计过程中使用全英语命名,这是防止PCB文件在其他环境下无法打开,乱码,网络错误的最优解决办法,从源头消除隐患,具体的措施建议如下:
- **工程文件命名:确保工程文件使用全英文命名,包括文件夹和文件名(推荐下划线命名)。**避免使用包含非英文字符的文件名,例如特殊符号、中文字符或其他非ASCII字符。这样做可以确保在不同操作系统和软件环境中都能正确打开和保存文件。
- 元件命名:在设计过程中,尽量使用全英文命名元件。这涉及到元件的符号、引脚名称和描述等。选择简洁明了的英文单词或常用缩写来命名元件,以提高可读性和易于理解。避免使用特殊字符和非ASCII字符作为元件命名的一部分,因为这可能会导致在某些软件环境下无法正确显示。
通过遵循这些措施,可以从源头上消除PCB文件无法打开、乱码和网络错误的隐患,确保设计的可移植性和可维护性。同时,使用全英文的命名习惯也有助于提高国际合作项目中的交流效率。
7.2 不以大小写做为区分
不以大小写做为区分,指的是将SW与sw看作等同。特别是在网络标签的设置过程中,不同网络不能仅使用大小写进行区分:
如上图所示,在ULN3803A的输入输出端口我们使用大小写进行网络区分(输入输出对应不同的网络这是显而易见的),这在主流PCB设计软件里也是被许可的(不会报错),但是当我们使用这样的电路板文件到某些进口测试仪器上进行测试时(例如PILOT-V8-NEXT),这些测试设备的系统有的并不区分大小写,这将会导致非常严重的错误!!!——测试仪器会认为这些以大小写进行区分的网络是相同的,这就导致电路结构的根本性变化,导致测试无法进行!
所以在进行网络标签设置时,一定不能仅使用大小写作为区分手段!因此,我们建议使用以下两种方法来避免这个问题:
- 在网标中使用下划线、连字符和数字等来表示不同的元素;
- 尽量使用完整的英文单词来表示网络标签。
7.3 栅格大小
建议在原理图编辑器,符号编辑器里使用相同的栅格大小来避免因为栅格大小不同原理图无法连接的问题,这里我们建议设置原理图,符号编辑器的栅格大小为:1.17mm 也就是0.05in ,PCB编辑器,封装编辑器为0.1mm。
7.4 组织结构
在组织PCB设计过程中,使用模块化的设计方法是非常有用的。这样做可以让你的设计更易于管理,理解和维护。你可以将电路板分成不同的功能模块,然后独立设计每个模块。这使得在修改电路板时更容易找到所需的片段,从而减少错误的发生。
这里十分推荐KICAD层次的PCB设计理念,将复用电路模块做到一个很优秀的境界:
可以参考该资料进一步了解:层次原理图和原理图的层次