简介:面向 Altium Designer 初学者的经典电路与单片机实例合集,以33个51单片机常见实验为主线,每个实例都配有电路图和可编译的 C/汇编源代码,适合从零学习原理图绘制、电路仿真与程序调试。实例内容由浅入深,覆盖流水灯多种实现方式(查表、移位、移位函数)、数码管静态与动态显示、独立按键控制开关与 LED、外部中断计数、模拟交通灯、继电器控制、蜂鸣器发声等,可作为单片机课程设计或课外自学的练习蓝本。压缩包共535个文件,大小约36.3 MB,主要包含 dsn 原理图文件、Keil 工程配置与编译中间文件、C 语言源码、hex 烧录文件与 obj 目标文件,另有 PDF 和 JPG 辅助说明图片,目录按实验名称分类存放,便于按需检索。目前已有3552人学习下载。跟随这些实例边看图、边读码、边仿真验证,可较快打通 Altium Designer 电路设计与单片机编程联调的基本功。
1. 上手就要项目的AD学习包:33例电路图与源代码能帮你省掉多少弯路
学 ad Altium designer 的多数人是卡在「有软件、没工程」这一步。软件装好了,界面认全了,但真要自己从原理图画到 PCB,手上没几个完整的、能跟着改的工程,画两笔就心虚。这份「33个经典电路制作实例」资源包,带电路图和源代码,恰好补上了这一环:它不是软件教程,不是纯理论书,而是一套可以直接打开、直接编译、直接改参数的工程合集。适合三类人:正在赶课设/毕设的学生,想从画图员往设计方向走的硬件工程师,以及想快速攒一批模块化电路素材的仿真爱好者。别被「33个」吓到,下面讲清楚怎么拆它。
2. 工程结构与版本:解压后先弄清 .PrjPcb / .SchDoc / .PcbDoc 的协作关系
2.1 AD 工程文件的四大件:为什么打开单个文件没有用
Altium Designer 的工程体系是「工程文件牵头、设计文件挂靠」的松散耦合结构。拿到解压目录后,你首先会看到一堆后缀各异的文件,常见的包括 .PrjPcb、.SchDoc、.PcbDoc、.SchLib、.PcbLib 和 .IntLib。很多人第一步就翻车:双击 .SchDoc 能打开原理图,但里面的元件链接、网络标号、封装对应关系全是断的,因为真正的「总调度」是 .PrjPcb 工程文件。
| 文件后缀 | 类型 | 职责 |
|---|---|---|
| .PrjPcb | PCB 工程文件 | 组织所有的原理图、PCB、库文件;编译和同步都从这里发起 |
| .SchDoc | 原理图文件 | 存放电路连接关系、元件标号、仿真模型引用 |
| .PcbDoc | PCB 文件 | 存放板框、元件封装、布线、敷铜 |
| .SchLib | 原理图库 | 元件符号 + 引脚定义 + 可附加 Footprint 链接 |
| .PcbLib | 封装库 | 焊盘尺寸、丝印、3D 模型绑定 |
| .IntLib | 集成库 | 把符号、封装、3D、参数打包成单一文件 |
我的习惯是解压后先用文件管理器按类型排序,先看根目录有没有 .PrjPcb。如果工程文件齐全,直接双击它,AD 会一次性把关联文件挂进 Projects 面板。如果只有孤立的 .SchDoc 和 .PcbDoc,那就要用 File → Open 逐个打开,再靠菜单 Design → Update PCB Document 手动建立连接。这个资源包里大部分实例是完整工程结构,少数早期实例可能只是单板文件,两种打开方式都要会。
2.2 版本兼容边界:低版本打开高版本工程是最大的坑
AD 的版本兼容是个「只能向下、不能向上」的单行道。用 AD 17 存盘的文件,AD 14 是打不开的,而且报错信息非常不友好,常见的是弹一个「Project cannot be loaded or file is locked」的对话框,工程树里所有文件都是灰色不可展开状态。我第一次拿到别人工程时,试了半天以为是文件损坏,最后才发现是版本不匹配。
如果你手里的 AD 版本低于资源包里文件的保存版本,常见做法是:找一台装了高版本 AD 的机器,用 File → Save Project As,把工程另存为旧格式。AD 的另存对话框中通常会列出几个历史版本选项,比如 Altium Designer 14 / 15 格式,保存后再拿到低版本机器上打开。这里有个细节:Save Project As 时要把工程里每个原理图、PCB 文件一并另存,否则只有工程文件版本降了,内部文件还是高版本,照样报错。
提示:打开任何外部工程前,先在 Projects 面板左下角看文件后缀的「版本标记」。AD 高版本保存的文件会有 internal version 信息,菜单 File → Save Project As 是标准的降版本通道。
2.3 拿到陌生工程的标准打开三步走
按照下面的顺序操作,基本能避开 90% 的打开期问题。先解压到纯英文路径,路径里带中文或空格容易让 AD 的搜索路径失效,具体现象是库文件加载失败、元件显示问号。然后确认 .PrjPcb 存在,双击打开工程。最后打开 Libraries 面板,点右上角的 Libraries 按钮,在 Available Libraries 列表里检查工程用的库是否被正确加载;如果库文件在压缩包里有,但 AD 没有自动识别,手动 Install 一次。
第三步里最容易漏掉的是「搜索路径」。选中工程文件右键,进入 Project Options → Search Paths 页签,这里配置的是 AD 找库的额外路径。资源包里的部分实例把库文件放在 Libraries 子目录,工程文件只记录相对路径,解压后如果移动到别的目录层级,相对路径失效,编译时就会报「Component not found」。我一般会在这个页签里把解压根目录整个加进搜索路径,一劳永逸。
3. 从电路图到 PCB:拆解33个实例中五类电路的模块化思路
3.1 资源包里的电路分类:先按功能分桶,再按复用性排序
33 个经典电路覆盖的范围比较典型,从最基础的 LED 流水灯、数码管动态扫描,到带反馈环路的线性稳压电源、H 桥电机驱动,再到带协议解析的红外遥控接收、传感器信号调理,基本把大学生电子设计竞赛和课设的高频电路都包进去了。我先按「能不能直接搬进项目」的标准分五个桶:
| 实例类型 | 原理图学习重点 | 源代码关注点 | PCB 复用的难点 |
|---|---|---|---|
| LED 流水灯 / 跑马灯 | IO 驱动能力、限流电阻计算 | 延时函数、移位寄存器逻辑 | 数码管/贴片 LED 封装排布 |
| 数码管动态扫描 | 共阴共阳接法、位选段选 | 扫描周期、消隐处理 | 驱动三极管摆放与走线 |
| 线性稳压电源 | 基准电压、反馈电阻分压 | 无代码或 ADC 采样逻辑 | 散热焊盘、大电流走线加宽 |
| 直流电机 H 桥驱动 | 续流二极管、逻辑与功率地分离 | PWM 占空比控制、方向逻辑 | 地平面分割、去耦电容就近 |
| 红外遥控接收 | 载波解调、上拉电阻选型 | 脉冲宽度解码、定时器捕获 | 接收头位置、晶振远离辐射源 |
这个分桶表看着简单,但实际用的时候很有用:赶时间就直接翻对应桶,不需要 33 个全看。比如要做小车,直接看电机驱动和电源两个桶,五分钟定位到实例编号,打开工程后复制原理图局部,再改参数,比从零画快得多。
3.2 LED 流水灯实例拆解:从原理图参数算到源代码对应
拿 LED 流水灯实例来说,原理图核心就两块:单片机最小系统和 8 个 LED 驱动电路。先看 LED 限流电阻的计算。实例原理图上标注 5V 供电、红色 LED 压降按 1.8V 估算、设计电流控制在 20mA,于是限流电阻 R = (5V - 1.8V) / 20mA ≈ 160Ω,取标称值 160Ω 或 180Ω 都行。原理图里每个 LED 支路都串了一个电阻,PCB 布局时这些电阻必须紧挨对应 LED,否则走线过长会产生压降不均,实际亮度差异肉眼可见。
源代码部分对应的是 IO 控制逻辑。以其中一个流水灯源码为例,核心函数是这样的逻辑:
/* led_demo.c - 对应原理图D1-D8与R1-R8支路 */ void LED_Flow(void) { uint8_t i; for (i = 0; i < 8; i++) { P1 = (0x01 << i); // 逐位拉高P1.0-P1.7,点亮对应LED delay_ms(200); // 延时200ms,视觉上形成流动效果 } }这段代码的逻辑说明:P1 口 8 个引脚直接驱动 LED,循环体内用移位运算符控制点亮的灯位;delay_ms(200) 决定流动速度,如果觉得太快,把参数改成 500 即可。参数上有两个注意点:第一,假如原理图是共阳接法,点亮逻辑要反过来,P1 = ~(0x01 << i);第二,单片机 IO 的驱动能力如果只有 20mA 左右,8 个 LED 同时点亮时总电流可能超出规格,实例里用的是两个 74HC245 驱动芯片来缓冲,复制原理图时别漏掉这级缓冲环节。
3.3 可调稳压电源实例:反馈网络参数怎么改到自己想要的电压
第二类值得拆的是线性稳压电源实例。从原理图上找到分压反馈网络,核心拓扑是一个可调稳压器配合两个电阻组成的分压器。输出公式为 Vout = Vref × (1 + R2 / R1),实际计算中还要把调整端电流算进去,但工程应用上按分压公式估算再留一个电位器调偏就够了。实例给出的默认参数输出 3.3V,如果你要改成 5V,把 R2 的阻值按比例放大即可。
这里有一个常见误区:只改阻值不懂电流路径。反馈电阻的电流要远小于负载电流,一般让分压支路电流在 1mA 到 5mA 之间,所以 R1 用 1kΩ 级别而不是 100Ω 级别;另外输出电容 ESR 会影响环路稳定性,原理图里容值可以改,但 ESR 参数尽量保持同系列。PCB 部分这个实例的参考价值更大:输入输出走线宽度、散热焊盘的开窗大小、Cout 与稳压器引脚的间距,都是可以直接复制的布局模板。
4. 编译检查与仿真调试:让33个实例真正跑起来需要过的三关
4.1 工程编译与 Messages 面板:错误分级决定了你先看什么
打开任意一个实例工程后,第一步不是看原理图细节,而是先编译。右键工程文件,选择 Compile PCB Project。AD 会跑一遍电气规则检查(ERC),结果输出到底部 Messages 面板。这里要分清三种级别的信息:
| 严重程度 | 代表含义 | 通常原因 | 是否阻塞 |
|---|---|---|---|
| Error | 有实际的电气断连或冲突 | 网络标号悬空、引脚未连接 | 阻塞,先修 |
| Warning | 可能存在隐患但能生成 PCB | 输入型引脚未接上拉、未使用的门电路 | 解除不阻塞 |
| Info | 信息提示 | 网络有多个名字 | 可忽略 |
实际复现经验是:33 个实例里早期几个工程编译时会冒出十条以上 Warning,别被吓到。重点看 Error,如果一个 Error 都没有,直接进下一步。如果 Error 太多,先过滤出报错网络名,再到原理图里用 Shift+F 高亮搜索对应网络。常见错误比如「Net has no driving source」,多半是电源符号放错库导致没有实际连接。
4.2 仿真前配置:让电路同学在原理图阶段就验证行为
AD 的工程级仿真入口是菜单 Design → Simulate → Mixed Sim。在 33 个实例里,适合仿真的是电源类和信号调理类电路,数字逻辑类实例仿真价值低,直接看时序逻辑就够了。仿真模拟的关键步骤:先确认原理图中每个元件都绑定了仿真模型,查看元件属性里有没有 Simulation 字段;然后在电源处放置合适仿真激励源,比如 VSIN 或 VSRC。
接下来配置 Simulation Profile。在 Transient 页签里,把 Max Step Size 设到激励信号周期的 1/100 或更小,比如 1kHz 的激励信号,步长最大给 1us 才能看到平滑波形。如果跑出来的波形是锯齿状,就是步长太大,而不是电路算错。仿真出现「No convergence」时,第一反应不是改电路,而是把迭代次数上限调高,同时把误差容限从 0.01 放宽到 0.001 级别再跑一次,很多不收敛问题其实是求解器参数太苛刻。
4.3 同步到 PCB 的 ECO 链路:Update PCB Document 的正确姿势
原理图改完、编译通过,下一步是 Design → Update PCB Document,弹出工程变更订单对话框。这一步的重点是把变更列表拉到最底部,观察有没有「Footprint not found」或「Failed to add component」这样的红色条目。如果出现,意味着原理图元件没有挂对应的封装。处理方式:回去打开原理图库,选中报错元件的 Footprint 属性,点击 Add 浏览到 .PcbLib 里对应封装,保存后重新 Update PCB——经常需要做这个过程。
ECO 表格里绿色对勾的项目才能被导入,红色叉的只能手动修复后再来一次。一次流程下来,如果全部绿色,点击 Validate Changes → Execute Changes,再 Close。这一步执行完后 .PcbDoc 才真正收到全部元件,PCB 里看不到元件多半是同步步骤没走完,这是大家最容易忽略的中间节点。
5. 实例复现避坑记录:五条血泪经验与排查路径
5.1 现象:解压完整但工程打开后元件全是「问号」
原因:工程引用的原理图库没有自动加载。资源包里的早期实例用绝对路径引用库文件,路径写死在原作者的电脑目录下,比如 C:\Users\xxx...,你的解压目录不同,AD 自然找不到。解决:打开 Libraries 面板,手动 Install 解压目录下 Libraries 文件夹里的 .SchLib 和 .PcbLib;同时在 Project Options → Search Paths 把解压根目录加进搜索范围,一次添加工程内全部库文件。
5.2 现象:编译报「Component not found」,但原理图里明明能看到元件
原因:AD 编译时对每个元件追查库来源,如果元件是从集成库(.IntLib)里调用的,而该集成库没有正确安装,就不会在编译时恢复定义。解决:先在 Libraries 面板里确认这块 .IntLib 是否出现在 Available Libraries 列表中;如果没有,点 Install 选择对应集成库。之后重新编译,这类报错通常一次清空。注意删除旧库文件时要小心,工程里所有同类元件都会跟着失效。
5.3 现象:Update PCB 时报「Footprint not found」
原因:原理图元件属性里的 Footprint 名称与 .PcbLib 里实际封装名不一致,常见于复制粘贴其他工程的元件,但没连带拷贝封装库。解决:打开报错元件的属性面板,看 Footprint Name 字段,再打开对应 .PcbLib 确认封装确切名称,两个名字必须完全一致,包括大小写。改完原理图库后,要重新编译一次工程再走 Update PCB 流程,否则 ECO 里依旧显示红叉。
5.4 现象:仿真一运行就报 Singular Matrix 错误
原因:电路里有浮空的节点或没有直流通路。比如给电容串联激励源但没加直流偏置电阻,仿真器做直流工作点扫描时矩阵奇异。解决:在网络与地之间加一个高阻电阻(100kΩ 级别),让节点获得参考电位。这条经验在电源仿真实例里特别常用。加了电阻后再跑 Transient,通常能顺利出波。
5.5 现象:PCB 敷铜后出现「死铜」,部分铜箔没接到 GND 网络
原因:敷铜设置中勾选了 Remove Dead Copper 选项但实际没执行,或者铺铜间距规则导致孤岛被隔断。解决:用菜单 Tools → Remove Dead Copper 手动清理;再把 Split Plane 的间距检查一遍,如果间距规则设得比走线间距更宽松,死铜更容易产生。清理后检查铜箔与焊盘的连接方式,设置成 Direct 连接比 Thermal 连接在大电流下更可靠。
6. 把33个实例沉淀成自己的模块库:一份可复用的设计资产
实例包用得再顺也是别人的,真正值钱的是把里面可复用的电路单元抽出来,变成自己的库。我的做法是:新建一个空白原理图库(File → New → Library → Schematic Library),把 33 个实例里出现频率最高的电源电路、单片机最小系统、LED 驱动、H 桥、红外接收电路,逐个复制进去。复制不是截个图,是把元件符号连同引脚定义、Footprint 绑定关系全部搬进新库,然后每个元件补上必要参数,包括电压、电流、封装名、厂商料号,方便后续在 BOM 阶段直接导出。
这个步骤需要耐心:一个单片机最小系统元件可能有几十个引脚,逐个检查引脚编号与封装焊盘编号是否对应。全部搬完后重新编译成集成库 .IntLib,以后新建工程只要加载这一个库文件,就能调用整套沉淀好的电路模块。我见过不少 A 同学卡在这一步,觉得「直接用原库不就行了」,但原库绑定的是别人的工程结构,一旦工程删除库也跟着失效,自建库才能长期沉淀。
最后一件事是建立命名规则。我用的是「类型-参数-封装」三段式,比如 R-1608-10K 表示 1608 封装 10kΩ 电阻,C-0603-104 表示 0603 封装 100nF 电容,U-STM32F103C8-LQFP48 表示主控芯片。33 个实例里新出现的元件,统一按这个规则登记进库,并同步更新到一个 Excel 物料表里。从那以后,我每次拿到别人的工程,都强制先把库文件单独复制一份,改成「工程名+日期」再开始画原理图,再也没出现过库缺失导致的连环问题。这套流程虽然多花半小时,但省掉的是整个项目后期改封装、补丝印的返工时间。希望帮到你。
本文还有配套的精品资源,点击获取