
简介这份资源是面向电子工程学习者与电路设计初学者的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_BC1 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%因为充电走 R1R2放电只走 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设置 Start50kStop150kStep50k。勾选 Transient AnalysisStop 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 走线宽度至少 20milGND 可以用铺铜。如果板子上还有别的数字电路多谐振荡器远离时钟线和高频信号避免耦合。去耦电容在 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_B1100kR_B2101k。或者给一个电容设初始电压在元件属性里找 Initial Condition填 1V。检查三极管模型BF 至少 50 以上。确认 VSRC 的 DC 值非零且负端接 GND。5.2 波形频率和手算差十倍现象手算 f1kHz仿真跑出来 f100Hz 或者 10kHz。原因单位搞错。AD20 里m是毫u是微n是纳p是皮。如果你把 10μF 写成10m那就是 10 毫法频率直接降一千倍。反过来把 100kΩ 写成100m那就是 0.1Ω频率升到天上。第二个原因是公式用错集电极-基极耦合和 555 的公式不一样别混用。解决统一用小写后缀10u就是 10μF100k就是 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, threshold2.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_B50k.csv、R_B100k.csv、R_B150k.csv三个文件import matplotlib.pyplot as plt # 参数值列表单位 kΩ r_values [50, 100, 150] freqs [] for r in r_values: csv_file fR_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-, linewidth2, markersize8) plt.xlabel(基极电阻 R_B (kΩ)) plt.ylabel(振荡频率 (Hz)) plt.title(多谐振荡器频率 vs 基极电阻) plt.grid(True, alpha0.3) plt.show()跑出来应该是一条下降曲线R_B 越大频率越低和公式 f ≈ 0.72/(R_B×C) 吻合。如果某个点频率为零说明那个 R_B 下电路没起振需要检查偏置。6.3 一个我常用的验证习惯每次改完 RC 参数我不会直接跑长仿真而是先跑一个短时间的瞬态分析Stop Time 设成预估周期的 5 倍Maximum Step 设成预估周期的 1/1000。这样几秒钟就能看到波形有没有、频率对不对。确认起振且频率在预期范围内再跑长仿真导出数据。这个习惯帮我省了很多等待时间尤其是 RC 很大的时候长仿真可能跑几分钟。从那以后我每次拿到新的多谐振荡器工程都强制走一遍「编译原理图 → 检查三极管模型 → 设初始条件 → 短仿真验证 → 长仿真导出」这个流程基本没再遇到过跑半天不出波形的情况。希望帮到你。本文还有配套的精品资源点击获取