Circuitjs在线电路模拟器:占空比调节与仿真调试实战 先说个真实的感受我第一次用Circuitjs在线电路模拟器的时候心里想的是“这不就是个网页小玩具嘛”。后来带徒弟调电路、自己验证一些单元电路的想法这玩意儿居然成了我打开浏览器最频繁的利器。没有安装包、没有授权弹窗、打开链接就能画电路看波形尤其现在很多人搜“Circuitjs中添加什么调节占空比”说明大家已经不光是在玩而是真的想拿它干点正事。这篇文章我就把这个在线电路模拟器的好用玩法、占空比怎么调、仿真过程的坑和排查经验全写出来新手照着点鼠标就能跑通老手也能挖到几个平时忽略的小技巧。1. Circuitjs是什么一台跑在浏览器里的电子工作台1.1 起底这不是玩具而是一个能算电路的仿真引擎先理解它背后的运行逻辑。Circuitjs的前身是Paul Falstad用Java Applet做的电路模拟器后来迁移到JavaScript现在你在浏览器里打开circuitjs.org就能直接跑。它的核心原理其实是把电路抽象成节点和支路用改进节点分析法列方程组再配合数值积分做瞬态仿真。说人话就是你每画一个电阻、接一根导线它都在后台即时求解一次“这个电路下一秒会变成什么样”。这一点和Multisim那种把大量时间花在“建立仿真环境”上的重型工具有本质区别。Circuitjs默认把时间步长、迭代次数这些参数都做了友好的封装拖拽元件时波形实时刷新改一个电阻值立刻能看到输出变化。对初学者来说这种方式能让人把注意力放在“电路行为”而不是“软件操作”上对工程师来说快速验证一个想法只需要三十秒比打开专业EDA再建工程不知道快到哪里去了。在线版本还有几个容易被忽略的好处跨平台Windows、macOS、Linux甚至平板浏览器都能用分享方便电路可以导出成一段ASCII描述放进URL或文档里同事点开就能复现版本更新不需要用户感知打开就是新版。当然它也有短板比如元件库没有专业工具全、仿真精度有限、没有PCB设计功能这些后面会细说。1.2 为什么我建议你把它当主力验证工具拿它和几款常用工具做对比选型逻辑会更清楚。以下是根据我实际使用体验的直观对比工具定位上手成本适合场景明显短板Circuitjs网页即时仿真极低分钟级上手教学演示、单元电路验证、比赛方案预研元件库有限精度不够做量产级设计Multisim教学/仿真一体化中等需要熟悉元件库和仪器面板课程实验、电路原理验证安装包大仿真有时收敛性差LTspice专业电源/模拟仿真较高命令和模型体系复杂电源、信号链等高性能模拟仿真没有图形化即时反馈数字电路弱Proteus单片机系统仿真中等偏上嵌入式软硬件联调模拟电路精度一般收费我的建议很直白如果你是做课堂作业、准备竞赛、验证一个想法或者教别人认识波形Circuitjs完全够用但如果你要设计一块量产板子仿真结果只能当参考最终还是要回到LTspice这类工具做精算再打板实测。把它定位成“思维加速器”而不是“最终答案”使用体验会舒服很多。2. 上手第一课从画一个能动的振荡电路开始2.1 元件菜单速览别再满界面找电阻了刚打开Circuitjs的人最容易困惑的是界面太素一块灰色画布顶上一排菜单。其实所有元件都藏在“Draw”菜单里。以英文界面为例常用分项对应关系如下Draw - Sources电压源、电流源、方波源、噪声源等信号类元件。Draw - Passive Components电阻、电容、电感、变压器、传输线。Draw - Active Components三极管、MOS管、运算放大器、555定时器。Draw - Outputs电压表、电流表、逻辑探头、示波器挂点。Draw - Digital Logic与门、或门、非门、触发器、时钟源等数字器件。操作上点菜单里的元件后在画布上单击放置选中元件后可以按R键旋转按Delete删除连线时从一个元件的引脚拖到另一个引脚即可导线会自动吸附节点。按住Ctrl键再拖拽元件可以快速复制这个技巧我在搭重复结构时几乎离不开。还有一点要提醒界面风格可以调。在“Options”菜单里能切换深色主题把背景调成黑色之后示波器波形的高对比度会让眼睛舒服很多长时间盯波形不再容易疲劳。我所有截图基本都是深色主题。2.2 实例十分钟搭出一个非稳态多谐振荡器与其零散地讲菜单不如直接搭一个经典电路。我们现在做一个555定时器非稳态振荡器输出方波顺便看一眼占空比是怎么被电阻决定的。第一步用菜单“Circuits”里的示例库打开“555 timer”相关示例或者手动搭建VCC接一个555芯片外部接两个电阻Ra、Rb和一个电容C。标准接法是7脚Discharge接Ra到VCC同时接Rb到2脚和6脚6脚和2脚短接再通过C到地。这个拓扑就是典型的非稳态模式。第二步打开示波器。在“Draw - Outputs”里选“Scope”输出端接上示波器挂点。双击示波器图标可以看到波形窗口。如果没有波形检查仿真是否处于运行状态顶部播放按钮再检查探头有没有接对节点。第三步设置参数。比如Ra1kΩ、Rb1kΩ、C1μFVCC12V。根据555非稳态公式充电时间(t_{high}0.693(RaRb)C)放电时间(t_{low}0.693RbC)所以频率约等于(1.44/((Ra2Rb)C))算出来约480Hz占空比约((RaRb)/(Ra2Rb))也就是约66.7%。你在示波器上应该能明显看到高电平时间比低电平时间长这就是占空比大于50%的样子。如果想调节占空比最直接的办法是改变Ra和Rb的比例。我教学中常用一个偏门技巧在放电脚和Rb之间串联一个二极管让它只参与放电或充电占空比调节范围就能做到很宽甚至得到接近50%以下的波形。这个思路在硬调方波源里也能体现后面专门讲。2.3 示波器用法看懂波形比点会元件更重要Circuitjs的示波器窗口比很多人想象中强大。双击示波器图标打开面板后你可以把多个信号加进同一个波形窗口每个信号自动分配不同颜色波形区支持鼠标拖动缩放也可以点击鼠标中键平移时间轴。暂停仿真后示波器还能保持当前画面方便你仔细量时间差。一个容易被忽略的功能是“在示波器上直接观察节点”。选中电路图上任意一根导线按键盘快捷键或者右键菜单选择“添加为示波器跟踪”不同版本菜单名略有差异就能看到该节点的电压波形。这种操作方式比传统示波器“接线”要自由得多非常适合观察振荡器里电容充放电的指数曲线。还有一个小习惯仿真速度不要太极端。顶上菜单里的仿真速度滑块如果拉得太快波形会变得毛糙拉得太慢你会觉得电路“卡了”。通常把速度放在中间略偏快的位置波形既流畅又不会丢失细节。要是想要更精确的步长控制到“Options - Max Step Size”里调这个参数直接关系到仿真收敛性下一节详细说。3. 占空比调节Circuitjs里加什么、怎么调才有效3.1 占空比是什么先把这个概念焊死在脑子里占空比就是高电平时间占整个周期的百分比英文叫Duty Cycle。比如一个1kHz的方波高电平0.5ms、低电平0.5ms就是50%占空比如果高电平0.9ms、低电平0.1ms就是90%。这个参数在电机调速、LED调光、开关电源、音频D类放大里都是核心概念。大家搜“Circuitjs中添加什么调节占空比”本质是想知道在这个软件里我用哪个元件、改哪个参数能输出一个占空比可调的矩形波。答案不是一个固定元件而是取决于你的电路类型。下面我把常用的四种方式全部列出来你照着场景选就行。3.2 方法一方波电压源直接改参数最省事这是我在教学中最推荐的新手方案。操作步骤“Draw - Sources”里找到“Voltage Source”电压源放到画布上。双击这个电压源图标打开属性编辑对话框。在“Waveform”波形类型里从默认的“DC”或者“Sine”切换成“Square Wave”方波。这时对话框里会出现“Frequency”频率和“Duty Cycle”占空比输入框。频率填1000就是1kHz占空比填0.5就是50%填0.3就是30%。点确定接上示波器你会立刻看到波形的高电平宽度随占空比数字变化。注意一点这个对话框里的占空比是0到1的小数不是百分比。很多人填成了50结果发现波形完全变成直流高电平因为50大于1软件认为你要的占空比异常大高电平一直持续。所以看到波形变成平线先别慌检查是不是把小数当百分数填了。这种方法的优点是干净不涉及外部元件适合纯粹研究“占空比对波形频谱的影响”。缺点是它只是一个理想信号源没法模拟带负载之后真实功率级的响应。如果你要做PWM驱动电机或LED的实验建议用下面的555方案或者比较器方案。3.3 方法二555定时器搭PWM发生器最经典回到555电路。前面那个非稳态电路已经能输出占空比约66.7%的方波但想灵活调节占空比标准做法是改Ra/Rb比例或者加二极管隔离充放电路径。我在Circuitjs里常用的可调占空比结构是这样的VCC通过Ra给电容充电同时通过Rb和二极管阳极接7脚方向视设计而定给电容放电提供独立路径。这样充电时间由Ra和C决定放电时间由Rb和C决定占空比可以做到接近0到90%以上不再受“必须大于50%”的限制。参数计算也很简单。假设Ra10kΩ、Rb10kΩ、C1μFVCC12V那么充电时间约6.93ms放电时间约6.93ms周期约13.86ms频率约72Hz占空比约50%。把Ra改成1kΩ放电时间不变充电时间变成0.693ms占空比立刻掉到约9%周期也变短了。在Circuitjs里调这些电阻值示波器上能直观看到高电平宽度在“压缩”和“拉伸”之间变化。很多初学者会问为什么改变电阻后频率也会变只调占空比不行吗因为555的占空比和频率由同一组RC参数决定本质上无法完全分开。想要频率和占空比独立调节就需要方法四的PWM思路。3.4 方法三逻辑时钟源数字电路里的占空比如果你的电路是纯数字逻辑比如门电路、计数器、触发器用模拟电压源就不太合适了。这时候应该到“Draw - Digital Logic”里找“Clock”时钟源或者“Logic Source”逻辑源。在部分版本中时钟源的属性对话框里可以直接设置高电平持续时间High Time和低电平持续时间Low Time这两个时间的比值就是占空比。比如高电平10μs、低电平90μs占空比就是10%。有些版本默认逻辑源的高低时间是固定的你需要手动改数值来获得期望的波形。如果找不到直接参数还有一个绕法用两个不同频率的信号经过与非门组合也能产生占空比不同的波形但复杂度上去了不如直接选一个支持参数配置的数字振荡源。我在调试数字电路时一般用这个方法生成自定义的PWM触发信号比接555再转逻辑电平省掉很多中间环节。3.5 方法四比较器加三角波真正的PWM调制器最后这种方法是最“工程化”的也最接近真实电机驱动和电源控制器的做法生成一个固定频率的三角波/锯齿波再用一个可调直流电平跟它比较输出就是占空比可调的PWM波形。在Circuitjs里实现起来不复杂。先用一个电压源输出正弦波再通过积分器或者专门的三角波发生器转成三角波然后接一个比较器“Draw - Passive Components”或“Active Components”里找也可以直接用“Digital Logic”里的比较器另一个输入接可调直流电压源。比较器输出接示波器改变直流电压的大小输出波形的占空比会平滑变化。这个方案的优点是三角波频率决定了PWM频率直流电平决定了占空比两者互相独立。你可以保持频率固定只动直流电平观察占空比变化这就是典型的脉宽调制。很多人在实际项目中问“Circuitjs中添加什么调节占空比”如果在做电机控制大概率需要的正是这个结构而不是单纯改一个方波源的参数。4. 仿真进阶从看波形到会分析波形4.1 瞬态仿真的时间步长为什么你的电路总是“红屏”用画布上方的“仿真速度”滑块只能宏观调节运行速度真正影响仿真精度和收敛性的参数藏在“Options - Max Step Size”里。最大步长设得太大数值积分会跳过关键跳变波形看起来像摔碎了一样充满毛刺设得太小仿真速度变慢复杂电路可能卡到无法交互。我一般遵循几个经验如果电路中存在1μF级别电容和kΩ级电阻时间常数在毫秒量级最大步长设为周期的1/20左右比较安全如果观察高频开关波形比如Boost电路里的PWM最大步长要小于开关周期的1/100。调试时先跑一次看到波形异常再把步长缩小一个数量级别一上来就狂调。另外红色警告或数值溢出通常不是步长问题而是电路结构本身的问题。我踩得最多的坑是电容和电压源直接并联或者电感悬空没有续流路径这些情况在仿真里会产生无穷大电流或电压。排查顺序是先看电路拓扑再看元件参数最后才怀疑步长设置。4.2 FFT频谱分析占空比调整背后的频率秘密示波器窗口里除了时域波形还藏着频率分析功能。按下窗口里的FFT按钮或者选择频谱视图Circuitjs会对当前仿真波形做快速傅里叶变换显示基波和谐波分量。这个功能对理解占空比特别有用。以占空比50%方波为例理论上偶次谐波为零频谱图里只会出现基波和奇次谐波把占空比改成10%频谱里的谐波分量分布会明显变化高次谐波能量变多。别小看这个细节实际电路设计里占空比直接影响到开关电源的电磁干扰和电机噪声听上去很玄在FFT图上却是一目了然。用这个方法还能辅助选型。比如我做一个LED调光器先通过FFT看PWM的谐波分布判断是否需要加RC低通滤波以及截止频率放哪里合适。虽然没有专业网络分析仪的功能但对于快速理解谐波成分这已经够用了。4.3 导出与分享把仿真结果带回真实工作流有些情况下你需要把仿真结果分享给同事或写进实验报告。Circuitjs的文件菜单位置不大起眼但功能很实在。在“File - Export”里能看到当前电路的ASCII描述复制这段文本别人打开“File - Import”粘贴一下就能还原整个电路。这个方法比我截图然后让人家照着画要省事百倍。更酷的是直接把电路参数拼进URL分享链接别人点开链接就是一张完整的可运行电路。早期我用这种方式远程指导学弟调电路他打开链接看到波形立刻就知道自己哪根线接错了效率比发十张截图还高。你还可以“File - Print”导出波形图或者用截图工具截取指定区域写报告时直接插入。导出要提醒一点ASCII描述是纯文本包含完整元件参数不要把这份文本发给无关的人造成参数泄露。虽然只是一次仿真但严谨的习惯应该在日常操作中养成。5. 踩坑实录与排查速查表5.1 我遇到过的高频问题尽管Circuitjs足够轻量但用久了还是有不少状况。有些是操作习惯造成的有些是软件本身的限制。我把过去的实际经验整理成一份速查表按出现的频率排序。现象可能原因解决方案波形完全不动仿真处于暂停状态或仿真速度被拉到了0点顶部播放按钮把仿真速度滑块拉回中间调了占空比但波形没变化双击的不是信号源本体或者把占空比填成了百分比重新双击信号源确认波形类型为Square Wave占空比用小数0.1表示10%示波器窗口里空荡荡没有在输出端接示波器挂点或者挂点的节点没有信号接一个Outputs里的示波器图标到输出节点再双击打开窗口波形变成一条平线信号源处于关闭状态或占空比设置为0或1将占空比改为0.1到0.9之间的值检查信号源Enable选项电路中出现红色或无穷值电容与理想电压源直接并联、电感无续流、有节点悬空先检查拓扑添加等效电阻或负载再调小最大步长仿真速度慢到不可用电路规模太大或步长设置过小关掉不重要的孤立电路增加步长关闭示波器多余的跟踪通道找不到中文菜单里某个元件英文原版菜单和汉化版本名词不对应先看英文菜单名再对照中文翻译重点查Draw菜单5.2 几个必须养成的习惯第一就是习惯性保存。在线仿真器虽然本地逻辑运行但刷新页面偶尔会丢失当前状态尤其做了复杂电路时。我每次调完一个阶段就点“File - Export”把ASCII描述存进笔记或者直接复制URL。第二是示波器通道别贪多同一窗口挂四五个信号颜色混在一起根本看不清需要什么信号就只留什么信号。第三是遇到不收敛的电路千万别用“把步长再调十倍”的方式硬扛。先问三个问题电源有没有冲突电容有没有初始条件逻辑门有没有组合环这三个都排除再把步长恢复问题往往自然解决。5.3 关于精度的实话实说最后说一个不太中听但很重要的体会Circuitjs里的元件模型是简化的理想电压源就是理想电压源运放模型也不会带有真实芯片的所有寄生参数。你在里面调出的“完美波形”到真实电路板上可能因为引脚电容、布线阻抗、器件离散性而变得不太一样。这也是为什么我一再强调把它当验证工具可以拿它替代量产出图前的精算会吃大亏。我个人的做法是先用Circuitjs快速确定电路拓扑和大概参数再用LTspice加真实模型做精度验证最后打板实测。两条腿走路效率和安全都保住了。6. 最后的个人体会用了这么多年在线电路模拟器我最大的感受是“能让你尽快犯错又尽快纠正”的工具才是好工具。Circuitjs恰好满足了这一点。它的即时反馈让我在带人学电路时少了很多鸡同鸭讲也让初学阶段最枯燥的“波形认知”变成了一件可以亲手玩出结果的事。最后再分享一个我私藏的小操作在“Circuits”菜单里其实内置了一大批现成的示例电路从整流桥到音频振荡器都有。很多人打开软件就自己从零搭其实先翻一遍示例库等于把前辈们的现成方案拆开看进步速度比闭门造车快得多。占空比调节这个事也是如此——你去示例库看几个PWM电路再回到自己的设计里仿照着改理解立刻就不一样了。希望这篇指南能让你的Circuitjs使用体验再往上跳一个台阶。下次再有人问“在Circuitjs中添加什么调节占空比”你至少可以掏出三四种方案跟他聊了。