简介:这份资源是面向电子工程学习者与电路设计初学者的AD20多谐振荡器完整工程包,围绕无稳态与单稳态多谐振荡器的原理验证与仿真实践展开,帮助读者在Altium Designer 20环境中理解周期性脉冲信号的产生机制与参数调节方法。压缩包共17个文件,约201KB,包含原理图、PCB文档、工程文件、设计规则检查报告与日志等,覆盖从电路绘制、布局布线到规则校验的完整设计链路,另附历史版本与预览文件便于对照修改过程。目前已有505人学习下载,适合作为课程实验、自学练手或项目参考。读者可借助其中的工程文件直接打开仿真,观察电阻电容取值对振荡频率与脉冲宽度的影响,并结合DRC报告排查设计问题,从而熟悉EDA工具操作、巩固模拟与数字电路知识,为后续混合信号系统设计打下基础。
1. 从一份 Multivibrator.zip 说起:AD20 多谐振荡器到底能跑出什么波形
如果你手头正好有一份名为 Multivibrator.zip 的压缩包,里面大概率躺着一套用 Altium Designer 20(下称 AD20)画好的多谐振荡器工程——原理图、PCB、可能还有仿真文件。多谐振荡器这东西,说白了就是不需要外部触发、上电自己就能翻来翻去输出方波的两级放大器正反馈电路。它最经典的两个形态:一个是集电极-基极耦合的无稳态多谐振荡器,两个三极管交替导通截止,输出两路反相方波;另一个是 555 定时器搭的多谐振荡器,靠 RC 充放电翻转阈值。这份资源解决的就是「从原理图到能看波形」这一整条链路,适合正在学模拟电路、准备做课程设计,或者需要在 AD20 里跑通一个自激振荡仿真的从业者。别急着双击打开,先搞清楚它内部到底怎么组织,后面复现才不会翻车。
2. 拆开压缩包:AD20 工程结构与多谐振荡器的核心参数
拿到一个 AD20 工程压缩包,第一件事不是直接双击 .PrjPcb,而是先看目录结构。AD20 的工程文件体系比较特殊,原理图和 PCB 是分开存储、通过工程文件关联的,如果压缩包里缺了某个中间文件,打开就会报「找不到文档」或者「工程结构损坏」。多谐振荡器这类模拟电路工程,通常还会带一个仿真用的 .Sim 或者 .nsx 文件,这个文件决定了你能不能直接在 AD20 里跑出波形。
2.1 工程文件清单与各自职责
一个完整的 AD20 多谐振荡器工程,解压后一般能看到下面这几类文件。我按重要程度排个序,你对照着检查,缺哪个补哪个。
| 文件类型 | 典型扩展名 | 作用 | 缺失后果 |
|---|---|---|---|
| 工程文件 | .PrjPcb | 关联所有文档,定义编译顺序 | 无法整体打开,只能单独开子文件 |
| 原理图 | .SchDoc | 电路连接关系、元件参数 | 没有电路图,PCB 无从谈起 |
| PCB 文件 | .PcbDoc | 布局布线、封装、板层 | 无法出 Gerber,只能看原理 |
| 仿真配置文件 | .Sim / .nsx | 仿真类型、激励、探针设置 | 能画图但不能跑波形 |
| 输出作业文件 | .OutJob | 批量导出 Gerber、BOM | 手动导出,效率低但可替代 |
| 集成库 | .IntLib / .SchLib | 元件符号与封装 | 元件显示为问号,需重新关联 |
提示:如果压缩包里只有 .SchDoc 和 .PcbDoc,没有 .PrjPcb,你可以自己新建一个 PCB 工程,把这两个文件 Add Existing to Project 进去,AD20 会自动重建关联关系,但编译顺序和仿真配置需要手动补。
2.2 多谐振荡器的关键参数怎么读
多谐振荡器的输出频率和占空比,完全由外围 RC 和晶体管参数决定。以最常见的集电极-基极耦合无稳态电路为例,两个三极管的基极电阻和耦合电容决定了翻转周期。工程里如果用的是 555 方案,那核心就是两个电阻 R1、R2 和一个电容 C。
对于集电极-基极耦合电路,翻转周期近似公式是:
T ≈ 0.69 × (R_B1 × C1 + R_B2 × C2) f ≈ 1 / T其中 R_B 是基极偏置电阻,C 是耦合电容。如果两个支路对称,R_B1 = R_B2 = R_B,C1 = C2 = C,则:
T ≈ 1.38 × R_B × C f ≈ 0.72 / (R_B × C)举个例子,R_B = 100kΩ,C = 10μF,算出来 f ≈ 0.72 / (100000 × 0.00001) = 0.72 / 1 = 0.72Hz,大概 1.4 秒一个周期,肉眼能直接看 LED 闪。如果你想要 1kHz 的方波,那就得把 C 降到 10nF 量级,R_B 保持 100kΩ,f ≈ 0.72 / (100000 × 0.00000001) = 720Hz,再微调 R_B 到 72kΩ 左右就接近 1kHz。
对于 555 多谐振荡器,公式是:
T = 0.69 × (R1 + 2 × R2) × C f = 1.44 / ((R1 + 2 × R2) × C) 占空比 = (R1 + R2) / (R1 + 2 × R2)注意 555 的占空比永远大于 50%,因为充电走 R1+R2,放电只走 R2。如果你需要精确 50% 占空比,要么在 R2 两端并联二极管,要么直接用集电极-基极耦合方案。
2.3 在 AD20 里打开工程并检查编译
解压后不要直接双击 .SchDoc,那样只会打开单个文件,工程关联会丢。正确做法是双击 .PrjPcb,让 AD20 加载整个工程。打开后先做一次 Compile PCB Project,快捷键是 C、C。编译后看 Messages 面板,如果有 Warning 或 Error,优先处理这几类:
- Duplicate Component Designator:位号重复,比如两个 R1,必须改掉,否则 PCB 导入会报错。
- Floating Net:悬空网络,多谐振荡器里常见于探针没接或者电源符号没放,检查一下 VCC 和 GND 是否都连上了。
- Missing Footprint:封装缺失,仿真不影响,但你要出 PCB 就必须补。
编译通过后,在 Projects 面板里右键 .SchDoc,选 Compile Document,单独编译原理图,确保没有语法错误。这一步过了,再进仿真。
3. 在 AD20 里跑多谐振荡器仿真:从探针到波形的完整操作
AD20 的混合信号仿真(Mixed-Signal Simulation)用的是 XSPICE 内核,支持瞬态分析、交流分析、直流扫描等。多谐振荡器属于自激振荡电路,必须跑瞬态分析(Transient Analysis),因为它的输出是时域方波,交流分析只能看小信号特性,看不到翻转过程。这一章我把仿真配置、探针放置、波形查看和参数扫描串起来,你照着做就能在 AD20 里看到两路反相方波。
3.1 仿真前的准备工作:元件模型与激励
AD20 自带的仿真模型库分两类:一类是通用模型(Generic Models),比如 RES、CAP、NPN、PNP,这些不需要额外下载;另一类是厂商模型,需要从制造商网站下载 .mdl 或 .lib 文件再关联。多谐振荡器用通用模型就够了,但要注意三极管的模型参数。
在原理图里双击三极管,看 Properties 面板里的 Simulation 区域。如果 Model Type 是 NPN,但 Model Name 是空的,那仿真会报「model not found」。你需要点开 Model 下拉框,选一个通用 NPN 模型,比如QNPN或者BC547(如果库里有)。常见做法是直接用QNPN,它的默认参数是:
IS = 1e-14 BF = 100 VAF = 100这些参数决定了三极管的放大倍数和 Early 电压,对振荡频率影响不大,但对起振时间有影响。如果 BF 太低(比如小于 20),电路可能起振困难,仿真跑很久还是直流状态。
电源激励用 VCC 符号或者 VSRC 元件。多谐振荡器一般用 5V 或 12V。在 AD20 里放一个 VSRC,双击设置 DC 值为 5V,然后连到电路顶端。注意 VSRC 的负端要接 GND,否则仿真会报「no DC path to ground」。
3.2 瞬态分析配置:参数怎么设才不报错
仿真配置入口在菜单 Simulate → Mixed Sim。打开后先选 General Setup,勾选 Transient Analysis,其他分析类型全部取消。瞬态分析的参数有三个关键项:
- Start Time:起始时间,一般填 0。
- Stop Time:终止时间,决定了你跑多久的波形。多谐振荡器频率如果是 1kHz,周期 1ms,你想看 10 个周期就填 10ms。如果频率是 0.72Hz,周期 1.4s,那 Stop Time 至少填 10s,否则波形还没翻几次就结束了。
- Maximum Step Size:最大步长,这个参数最容易被忽略,但直接决定波形是否平滑。经验值是周期除以 100 到 1000。比如周期 1ms,步长填 1μs 到 10μs。如果填太大,方波边沿会变成斜线甚至三角波;填太小,仿真时间会很长,文件也大。
下面是一个典型的瞬态分析配置,对应 1kHz 多谐振荡器:
Transient Analysis: Start Time = 0 Stop Time = 10ms Maximum Step = 1us Use Initial Conditions = 勾选注意:
Use Initial Conditions勾选后,AD20 会尝试用元件的初始状态(比如电容初始电压)来加速收敛。多谐振荡器是对称电路,理论上上电后两边完全对称会永远平衡,但实际上元件容差会让它自动偏向一边。仿真里如果两边参数完全一样,可能不起振。解决办法是给其中一个基极电阻或电容加 1% 的偏差,比如一个 100kΩ,另一个 101kΩ,这样仿真一定会起振。
3.3 放置探针与查看波形
探针(Probe)是 AD20 仿真里最直观的观测手段。在 Simulate → Place Probe 里选 Voltage Probe,放到两个三极管的集电极上。放好后探针会显示一个编号,比如 Probe1、Probe2。你也可以直接点网络标签,AD20 会自动为每个网络生成探针。
跑仿真:Simulate → Run Mixed Signal Simulation。如果配置没问题,AD20 会弹出 Sim Data 编辑器,里面是波形图。默认可能是数字视图,你右键波形区域,选 Chart → Add Waveform,把 Probe1 和 Probe2 加进去。
正常波形应该是两路反相方波,一个高的时候另一个低,交替翻转。如果看到的是两条直线,说明电路没起振。这时候检查:
- 电源是否接上,VSRC 的 DC 值是否非零。
- 三极管模型是否关联,BF 是否太低。
- 电容初始条件是否全为零,可以手动给一个电容设初始电压,比如 1V。
- Maximum Step 是否太大,导致仿真跳过了翻转瞬间。
如果波形有,但频率和手算差很多,先检查电阻电容的实际值。AD20 里元件值支持后缀,比如100k、10u、1n,但如果你写成100K大写 K,有些版本会识别不了,建议统一用小写。另外注意meg是兆欧,m是毫欧,别搞混。
3.4 参数扫描:一次看遍不同 RC 下的频率变化
AD20 支持参数扫描(Parameter Sweep),可以让你在同一个仿真里跑多组 RC 值,直接对比频率。入口在 Simulate → Mixed Sim → Parameter Sweep。设置步骤:
- 在原理图里把要扫描的电阻值改成变量,比如
{R_B}。 - 在 Parameter Sweep 里添加变量
R_B,设置 Start=50k,Stop=150k,Step=50k。 - 勾选 Transient Analysis,Stop Time 设成足够长,确保最低频率也能跑几个周期。
- 跑仿真,Sim Data 里会生成多条波形,每条对应一个 R_B 值。
这样你就能一眼看出 R_B 从 50k 变到 150k 时,周期怎么变。对于集电极-基极耦合电路,R_B 增大,周期变长,频率下降,和公式 f ≈ 0.72/(R_B×C) 一致。如果发现某条波形不起振,那说明那个 R_B 值下三极管偏置不够,需要调整基极电阻或电源电压。
4. 从原理图到 PCB:多谐振荡器布局布线的几个硬规矩
仿真跑通只完成了一半,如果你要打板,还得把原理图导入 PCB 并布局布线。多谐振荡器是低频模拟电路,对布线要求不像高速数字那么苛刻,但有几个坑踩了会直接导致板子不工作或者波形畸变。这一章讲导入 PCB 的流程、布局原则和布线要点。
4.1 原理图导入 PCB 的完整流程
在 AD20 里,原理图到 PCB 的桥梁是「Import Changes」。操作路径:在 Projects 面板里右键 .PcbDoc,选 Import Changes From [工程名].PrjPcb。弹出的 Engineering Change Order 对话框里,先点 Validate Changes,全部打绿勾后再点 Execute Changes。
如果 Validate 阶段报错,常见原因有:
- Footprint Not Found:某个元件没有指定封装。回到原理图,双击元件,在 Footprint 区域添加一个,比如电阻用
AXIAL-0.4,电容用RAD-0.3,三极管用TO-92。 - Unknown Pin:原理图符号的引脚号和 PCB 封装的焊盘号对不上。检查符号引脚编号,比如三极管的 E、B、C 对应封装的 1、2、3。
- Duplicate Designator:位号重复,编译原理图时就应该处理掉。
Execute 完成后,所有元件会堆在 PCB 编辑器的右下角,用 Room 框着。你可以直接删掉 Room,然后手动布局。
4.2 布局:对称性与去耦
多谐振荡器是对称电路,布局时尽量让两个三极管和各自的 RC 网络对称放置。具体做法:
- 两个三极管并排,间距 100mil 左右,方向一致。
- 每个三极管的基极电阻和耦合电容靠近对应三极管,走线短。
- 电源和地尽量粗,VCC 走线宽度至少 20mil,GND 可以用铺铜。
- 如果板子上还有别的数字电路,多谐振荡器远离时钟线和高频信号,避免耦合。
去耦电容:在 VCC 和 GND 之间放一个 100nF 陶瓷电容,靠近三极管。虽然多谐振荡器频率不高,但电源纹波会影响翻转阈值,导致频率抖动。这个电容不是必须,但放了波形更干净。
4.3 布线:线宽、间距与过孔
低频模拟电路的布线规则比高速数字宽松,但也不是随便连。我一般按下面这套参数走:
| 项目 | 推荐值 | 说明 |
|---|---|---|
| 信号线宽 | 10-15mil | 足够载流,加工方便 |
| 电源线宽 | 20-30mil | 降低压降 |
| 地线 | 铺铜或 30mil 以上 | 提供低阻抗回路 |
| 线间距 | ≥10mil | 常规工艺轻松做到 |
| 过孔 | 外径 24mil,内径 12mil | 通用尺寸,不额外加钱 |
布线时注意:耦合电容到三极管基极的走线尽量短,这条线是高阻抗节点,太长容易引入噪声。集电极输出到下一级或者探针的线可以稍长,但也不要绕远路。两个三极管的集电极走线不要平行太长,避免容性耦合导致波形边沿变缓。
提示:如果你只是做课程设计或者验证电路,不打算打板,那 PCB 这一步可以跳过,直接在 AD20 里用仿真看波形就够了。但如果你要交实物,PCB 必须过 DRC。DRC 规则在 Design → Rules 里设,重点检查线宽、间距和过孔尺寸是否满足加工厂的最小工艺。
5. 避坑与排查:多谐振荡器在 AD20 里最容易翻车的五个地方
这一章是我自己踩过的坑,以及帮别人排查时遇到最多的五类问题。每条按「现象 → 原因 → 解决」写,你对着查,基本能覆盖 90% 的异常。
5.1 仿真跑完两条直线,电路不起振
现象:瞬态分析跑完,Probe1 和 Probe2 都是 5V 或者都是 0V,没有翻转。
原因:最常见的是电路完全对称,仿真器收敛到平衡态。真实电路里元件有容差,会自动偏向一边,但仿真里两个 100kΩ 电阻一模一样,两个 10μF 电容也一模一样,数学上平衡点稳定,噪声又为零,所以永远不起振。第二个原因是三极管 BF 太低,增益不够,无法形成正反馈。第三个原因是电源没接或者 VSRC 的 DC 值设成了 0。
解决:给其中一个基极电阻加 1% 偏差,比如 R_B1=100k,R_B2=101k。或者给一个电容设初始电压,在元件属性里找 Initial Condition,填 1V。检查三极管模型,BF 至少 50 以上。确认 VSRC 的 DC 值非零,且负端接 GND。
5.2 波形频率和手算差十倍
现象:手算 f=1kHz,仿真跑出来 f=100Hz 或者 10kHz。
原因:单位搞错。AD20 里m是毫,u是微,n是纳,p是皮。如果你把 10μF 写成10m,那就是 10 毫法,频率直接降一千倍。反过来,把 100kΩ 写成100m,那就是 0.1Ω,频率升到天上。第二个原因是公式用错,集电极-基极耦合和 555 的公式不一样,别混用。
解决:统一用小写后缀,10u就是 10μF,100k就是 100kΩ。跑仿真前先手算一遍,心里有个预期值。如果差太多,先检查元件值,再检查公式。
5.3 方波边沿变成斜线或者三角波
现象:波形不是陡峭的方波,上升沿和下降沿很缓,像三角波。
原因:Maximum Step Size 设太大,仿真器跳过了快速翻转过程。或者耦合电容太大,RC 时间常数太长,充放电慢,边沿自然变缓。
解决:把 Maximum Step 降到周期的 1/1000 以下。比如周期 1ms,步长填 1μs。如果还缓,检查耦合电容值,适当减小。但注意电容太小可能起振困难,需要平衡。
5.4 导入 PCB 后元件全是问号
现象:原理图导入 PCB,元件显示为问号,没有封装。
原因:原理图符号没有关联封装,或者封装库没加载。AD20 的封装存在集成库或者 PCB 库里,如果工程里没包含这些库,导入时就找不到。
解决:在原理图里双击每个元件,在 Footprint 区域手动添加封装。电阻用AXIAL-0.4,电容用RAD-0.3,三极管用TO-92。如果库列表是空的,点 Browse 找到 AD20 安装目录下的Library文件夹,加载MiscellaneousDevices.IntLib和MiscellaneousConnectors.IntLib。
5.5 仿真报错「No DC path to ground」
现象:点 Run Mixed Signal Simulation,弹出错误框,提示某个节点没有直流通路到地。
原因:电路里有悬空节点,或者某个元件的两端都接在信号线上,没有直流通路。多谐振荡器里常见于探针放错位置,或者电源符号没接 GND。
解决:检查所有节点,确保每个节点都有到地的直流通路。探针只观测电压,不提供通路,所以探针所在节点必须有其他元件连接到地。电源 VSRC 的负端必须接 GND 符号。如果某个电容两端都悬空,加一个电阻到地。
6. 进阶技巧:用 AD20 的仿真数据做频率-参数曲线
仿真跑通之后,你可以更进一步,把 AD20 的仿真数据导出,用脚本或者 Excel 画频率随 RC 变化的曲线。这个技巧在写报告或者做设计优化时特别有用,能直接看出哪个参数对频率影响最大。
6.1 导出仿真数据
AD20 的 Sim Data 编辑器支持导出 CSV。在波形图里右键,选 Export → Export Waveform Data,选 CSV 格式,保存到工程目录。CSV 里有两列:时间 和 电压值。如果你跑了参数扫描,每个参数值会生成一个单独的 CSV,或者在一个文件里用不同列区分。
导出后,用 Python 处理一下,提取每个波形的周期和频率。下面是一个简单的脚本,读 CSV 并计算频率:
import csv import numpy as np def calc_frequency(csv_path, threshold=2.5): """ 读取 AD20 导出的瞬态仿真 CSV,计算方波频率。 csv_path: CSV 文件路径,第一列时间,第二列电压。 threshold: 翻转阈值,默认 2.5V(对应 5V 电源)。 """ times = [] voltages = [] with open(csv_path, 'r') as f: reader = csv.reader(f) header = next(reader) # 跳过表头 for row in reader: if len(row) >= 2: times.append(float(row[0])) voltages.append(float(row[1])) times = np.array(times) voltages = np.array(voltages) # 找上升沿:电压从低于阈值跳到高于阈值 rising_edges = [] for i in range(1, len(voltages)): if voltages[i-1] < threshold <= voltages[i]: # 线性插值,提高精度 t_cross = times[i-1] + (threshold - voltages[i-1]) * \ (times[i] - times[i-1]) / (voltages[i] - voltages[i-1]) rising_edges.append(t_cross) if len(rising_edges) < 2: return None # 边沿太少,无法计算周期 periods = np.diff(rising_edges) avg_period = np.mean(periods) freq = 1.0 / avg_period return freq, avg_period # 示例:计算单个 CSV 的频率 freq, period = calc_frequency('multivibrator_probe1.csv') print(f"频率 = {freq:.2f} Hz, 周期 = {period*1000:.3f} ms")这段脚本的逻辑:读 CSV,找电压穿越阈值的时刻,用线性插值算精确的上升沿时间,然后对相邻上升沿时间差求平均,得到周期,取倒数就是频率。阈值默认 2.5V,对应 5V 电源的一半。如果你的电源是 12V,阈值改成 6V。
6.2 画频率-电阻曲线
如果你跑了参数扫描,导出了多组 CSV,可以批量计算频率,然后画曲线。下面这段代码假设你有R_B=50k.csv、R_B=100k.csv、R_B=150k.csv三个文件:
import matplotlib.pyplot as plt # 参数值列表,单位 kΩ r_values = [50, 100, 150] freqs = [] for r in r_values: csv_file = f'R_B={r}k.csv' result = calc_frequency(csv_file) if result: freqs.append(result[0]) else: freqs.append(0) # 没起振 plt.figure(figsize=(8, 5)) plt.plot(r_values, freqs, 'o-', linewidth=2, markersize=8) plt.xlabel('基极电阻 R_B (kΩ)') plt.ylabel('振荡频率 (Hz)') plt.title('多谐振荡器频率 vs 基极电阻') plt.grid(True, alpha=0.3) plt.show()跑出来应该是一条下降曲线,R_B 越大,频率越低,和公式 f ≈ 0.72/(R_B×C) 吻合。如果某个点频率为零,说明那个 R_B 下电路没起振,需要检查偏置。
6.3 一个我常用的验证习惯
每次改完 RC 参数,我不会直接跑长仿真,而是先跑一个短时间的瞬态分析,Stop Time 设成预估周期的 5 倍,Maximum Step 设成预估周期的 1/1000。这样几秒钟就能看到波形有没有、频率对不对。确认起振且频率在预期范围内,再跑长仿真导出数据。这个习惯帮我省了很多等待时间,尤其是 RC 很大的时候,长仿真可能跑几分钟。
从那以后我每次拿到新的多谐振荡器工程,都强制走一遍「编译原理图 → 检查三极管模型 → 设初始条件 → 短仿真验证 → 长仿真导出」这个流程,基本没再遇到过跑半天不出波形的情况。希望帮到你。
本文还有配套的精品资源,点击获取