先交代一个背景。我平时会带硬件爱好者做实操入门,这类问题被问得最多:“老师,我在Circuitjs里搭好了波形发生器,占空比怎么调都调不动,到底该加什么、改哪里?”其实这个需求本身并不复杂,难的是不少人在界面上没找到正确的入口,或者不知道占空比由哪几个元件共同决定。今天这篇就把Circuitjs这个在线电路模拟器从界面操作到占空比调节,包括我踩过的坑,一次说清楚。
Circuitjs是一款完全跑在浏览器里的电路仿真工具,不需要装软件、不需要注册,打开网页就能画电路、跑仿真,还能用示波器看波形。无论你是在校学生做课程设计,还是业余DIY爱好者验证一个电路想法,它都非常合适。更难得的是,它的仿真支持实时交互——运行过程中用鼠标拖动电位器,波形会立刻变化,这一点是传统EDA很难做到的。下面我按实际使用顺序来写,从界面认知到动手搭电路,再到你最关心的“占空比怎么调”。
1. 为什么我习惯用 Circuitjs 做电路验证:它真的比重型EDA更合适
1.1 一款被低估的网页级仿真器
先说说这东西的来头。Circuitjs最原始的版本是Paul Falstad写的Java模拟器,后来被重写成了网页版,国内也有第三方维护的中文镜像站,搜索“Circuitjs”基本都能找到。它实现了包括RLC无源元件、二极管、晶体管、运算放大器、逻辑门、555定时器、变压器、传输线在内的几十种元件,内置的示波器可以观察多个节点的电压波形,也支持频谱分析、逻辑分析等功能。
关键一点是:它的仿真不是“按一下跑一遍给结果”的静态仿真,而是实时动态的。你改变电路参数,波形会立即重新绘制。之前我给学员演示RC充放电,用Multisim要等参数刷新,在Circuitjs里直接拖电容值,充电曲线就跟着动,课堂反馈完全不一样。
1.2 和Multisim、Proteus这些“正规军”比怎么样
很多初学者一上来就想装Multisim或者Proteus,我不反对,但如果你想快速验证一个电路原理,Circuitjs的优势非常明显。我用实际场景做了个对比:
| 对比项 | Circuitjs | Multisim | Proteus |
|---|---|---|---|
| 安装部署 | 无需安装,浏览器打开即用 | 安装包大,授权麻烦 | 安装包更大,破解版满天飞 |
| 学习成本 | 几分钟上手 | 界面复杂,菜单层级多 | 元件查找繁琐 |
| 仿真交互 | 运行时可拖电位器、改参数 | 参数修改后需重新仿真 | 较难实时交互 |
| 元件库规模 | 教学常用足够 | 工业级齐全 | MCU外设仿真强 |
| 典型用途 | 原理验证、教学演示、快速原型 | 电子竞赛、复杂图纸仿真 | 单片机固件级调试 |
这并不意味着Circuitjs能取代专业工具。它更适合做“原理级”验证,不适合做PCB级的信号完整性分析。但如果你要理解“为什么这个电路能产生方波”“占空比到底由什么决定”,它的交互体验比重型EDA好太多了。我的习惯是:先用Circuitjs把电路逻辑跑通,再去专业工具里做精细化设计。
2. 打开 Circuitjs 后的第一件事:把界面和基础操作弄明白
2.1 画布与菜单:别急着画,先认清入口
第一次打开Circuitjs,默认会加载一个示例电路。很多人上来就被这个示例搞得有点懵,我建议直接在菜单栏选“文件”->“新建”(或者中文版里的“重置/新建”),先清空画布。顶部菜单主要有“文件”“编辑”“绘制”“显示”“选项”“帮助”,在绘制菜单里可以添加元件。
一个非常容易被忽视的地方是“示例电路库”。我强烈建议新手先花半小时把示例电路过一遍,尤其是“555定时器”“音频”“逻辑门”这几个分类。里面每个电路都是完整的,直接运行就能看波形。你可以把示例当作“活教材”,先看别人怎么接线、怎么接示波器,再自己动手搭。
2.2 放元件、连线、旋转与删除
在画布上添加元件有几个途径:从“绘制”菜单选;在画布上右键弹出快捷菜单;或者用工具栏。中文版一般在画布顶部有“添加元件”分类按钮。
画电路的基础操作我总结成几条:
- 添加元件:在菜单里选择元件类型,鼠标变成十字形,在画布上点一下放置。比如添加一个电阻,路径通常是“绘制”->“添加元件”->“无源元件”->“电阻”。
- 连线:鼠标左键点住元件的引脚,拖到另一个引脚或节点上松开。注意Circuitjs的连线是画“导线段”,如果中途需要拐弯,松开后继续从拐点拖就行。
- 旋转元件:选中元件后按键盘的R键,可以每次顺时针转90度。
- 修改参数:双击元件,会弹出参数对话框。电阻默认单位是欧姆,输入1k、10k这种带单位的写法可以直接识别。
- 删除:选中元件或导线,按Delete键,或者右键选择“删除”。
- 移动:直接鼠标拖动。移动导线时,鼠标放在导线中间拖动。
这些操作里最容易被忽略的是“双击改参数”,尤其是信号源。很多人放了一个信号发生器,默认输出的永远是正弦波,以为不能改,其实就是双击后没有往下翻设置项。
2.3 运行/停止与仿真速度滑块
画布上方或工具栏里有运行/停止按钮,旁边通常有一个“仿真速度”滑块。这个滑块值得特别讲一下:它控制的不是动画帧率,而是仿真时间步长。滑块调高,仿真推进快,但可能会漏掉高频细节;滑块调低,仿真慢,但波形细节更准确。
遇到振荡器不起振、波形怪异的情况,我第一个尝试就是把仿真速度滑块往慢的方向拉一档。很多新手以为把滑块拉满就是“性能好”,实际在555这种带反馈的电路里,时间步长太粗会直接看不到正确的充放电过程。
3. 从零搭一个 555 方波发生器:把波形“逼”出来的完整过程
3.1 为什么要用555作为第一个自主电路
如果说Circuitjs里只能推荐一个入门电路,我一定选555定时器构成的无稳态多谐振荡器。原因有三个:第一,它包含电源、电阻、电容、芯片、示波器五种基本元素,做完能熟悉全套操作;第二,它的输出是方波,观察占空比非常直观;第三,后面要解决的“调节占空比”问题,就是在这个电路上演化出来的。
记住一个原则:不要从网上下载现成的电路图,然后照着抄。先用几分钟把下面这个电路亲手搭出来,你对555内部充放电过程的理解会完全不同。
3.2 动手搭:元件清单与接线顺序
我先给出完整的元件清单和参数,你可以照抄:
| 元件 | 参数/型号 | 用途 |
|---|---|---|
| 直流电压源 VCC | 5V | 供电 |
| 地 | — | 参考点 |
| 电阻 R1 | 1kΩ | 充电回路上半部分 |
| 电阻 R2 | 10kΩ | 充电/放电共用 |
| 电容 C1 | 0.1μF(100nF) | 定时电容 |
| 555定时器 | 默认 | 核心振荡 |
| 示波器 | — | 观察波形 |
具体接线顺序如下:
- 先把直流电压源放到画布,双击设置电压为5V。再接一个地线到电源负极。
- 从元件库里添加一个555定时器。Circuitjs里的555符号会标出引脚编号,照着下面接就不会错。
- 把555的8脚(VCC)接到5V电源正极,1脚(GND)接地。
- 4脚是复位脚,接法是直接连到8脚(也就是接VCC),否则芯片一直处于复位状态,输出恒为低。
- 把7脚(放电)串接R1到VCC,再把7脚接到R2的一端。
- R2的另一端接到2脚(触发)和6脚(阈值)的公共节点上。也就是说,2脚和6脚要先短接在一起,R2下端接这个节点。
- 从这个公共节点接C1到地。
- 3脚是输出,把示波器探头接到3脚上。
这里最容易错的点是2脚和6脚必须连在一起,然后通过R2接到7脚。如果接错,波形会完全不对。
接完后理论计算一下:充电时间约0.693 × (R1 + R2) × C,放电时间约0.693 × R2 × C。代入R1=1k、R2=10k、C=0.1μF,充电时间约0.76ms,放电时间约0.69ms,周期约1.45ms,频率约688Hz。占空比理论上约52.4%,也就是说高电平时间略长于低电平。这个“略长”的原因,就是因为充电回路里多了R1。
3.3 示波器的正确打开方式
示波器在Circuitjs里的使用有一些学习成本。默认画布上不会显示示波器,你需要在“绘制”菜单里找到“示波器”(或者从“工具”里调出),然后在画布上放置一个示波器图标。
真正要看波形时,不能直接右键选节点,而是:先点示波器图标,示波器面板会弹出;然后鼠标点击面板上的“+”号(对应探头),拖出一条线,放到你要观察的节点上。可以接多个探头到不同节点,每个通道用不同颜色区分,三条线分别接555的3脚输出、电容电压节点、以及电源也行。
示波器面板上有个小标签,双击后可以调整时间轴缩放、每格电压。新人经常遇到的场景是:示波器上一条直线,多半是探头没接好,或者接的是没有变化的节点。还有一次学员说“看到一条斜线”,其实是电容充电曲线没有触发到更新,把仿真速度调慢一档就正常了。调试电路时,我习惯同时观察3脚输出和电容电压两个通道,这样能直观看到“电容充电到2/3VCC翻转”的整个过程。
4. 热搜问题:Circuitjs 里调节占空比,到底应该改什么
4.1 方法一:PWM信号源,直接把占空比写进参数框
如果你不需要研究555原理,只是想在电路里获得一个占空比可调、频率稳定的PWM波,最省事的方法是使用Circuitjs自带的PWM信号源。很多人不知道信号发生器可以切换波形类型,默认界面显示的是正弦波,就容易绕弯路。
操作路径:添加一个“信号源”(一般在“电源/信号源”分类下),双击它,在对话框里找到“波形”相关的下拉菜单,从默认的正弦波改成“PWM”或“脉冲”。改成PWM后,对话框里会额外出现“占空比”(Duty Cycle)输入框,直接填0.3就表示30%,填0.8表示80%。同时设置频率,比如1kHz,把输出接到示波器,运行仿真就能看到标准方波。
这个方法最直接,非常适合验证驱动电路,比如MOSFET栅极驱动、LED调光、蜂鸣器控制等。你只需要关注输入信号对后级电路的影响,不必关心PWM是怎么产生的。
4.2 方法二:555定时器改R和C——理解占空比本质的必经路
如果一定要在自搭的555电路里调占空比,那就要理解前面给的公式。无稳态模式下,充电路径是VCC→R1→R2→C,放电路径是C→R2→内部放电管。R2同时参与充电和放电,所以标准接法里占空比天然大于50%,而且单纯调R2并不能很宽地改变占空比比例(上下限都受限制)。
想要宽范围调节占空比,最常用的改法是把R2替换成一个电位器,然后运行仿真时用鼠标拖动电位器的中间抽头。Circuitjs的交互优势在这里体现得非常明显:波形会随着你拖动实时改变宽度。
对于占空比能低于50%的需求,就需要让充放电回路独立。做法是在R2两端分别串二极管:
- 从R1下端(7脚附近)串一个二极管D1到节点A(2脚和6脚连接处),充电电流走D1;
- 从节点A串另一个二极管D2到R2,再回到7脚,放电电流走D2;
- 0.1μF电容从节点A接地。
这样一来,充电时间由R1决定,放电时间由R2决定,占空比可以做到R1/(R1+R2),理论范围就能覆盖0到接近100%。Circuitjs里二极管在半导体元件分类下,直接选默认的1N4148或1N4007都能用。不过要注意二极管有约0.7V压降,占空比实际值和理论值会差一点,这是正常的。
4.3 方法三:用逻辑门RC振荡器调占空比
还有一类高频场景会用逻辑门振荡器,比如用两个非门或施密特触发器反相器搭环形振荡器。在Circuitjs里,你可以从“数字”分类下拖出逻辑门,配合电阻电容搭一个占空比可调的振荡电路。具体结构和555类似:一个RS触发器或者施密特触发器输入端的RC时间常数决定频率,占空比则可以通过分压电阻比例独立设定。
这个方法在理论教材里不常见,但在开关电源控制芯片(比如常见的SG3525、UC3842这一类)里,占空比调节方式本质上就是改变RT和CT的组合。如果你以后想深入电源控制环路,建议在Circuitjs里搭一次逻辑门振荡器,把RT、CT与占空比的关系亲手验证一遍。
4.4 几个“调占空比”的典型误区
先说结论,再做解释:
- 误区1:调电源电压能调占空比。很多人反馈“我把电压从5V改到12V,占空比没变”,这太正常了,555的分压比较点由内部三个5k电阻决定,比例固定,电压只影响幅值,不影响时间比例。
- 误区2:把R1改成0就能得到50%占空比。实际完全不行。R1=0时充电电流直接从电源到内部放电管,工作异常,甚至仿真会报步长过小。
- 误区3:直接用示波器读出来的占空比等于理论值。实际上内部饱和压降、二极管压降、寄生参数都会让结果有偏差,相差几个到十几个百分点都正常。
- 误区4:在PWM信号源里把占空比设为0.5,以为单位是百分比。某些版本里这里填0到1之间的小数,某些版本填0到100之间的整数。填错了波形要么一直低电平要么一直高电平,很多新人在这里卡半天。
5. 把仿真做稳的几个硬经验:一些踩坑记录
5.1 波形乱跳、看不清楚,该按什么顺序排查
遇到示波器波形像乱码一样抖个不停,我的排查顺序是固定的:先看地线,再看电源连接,然后看示波器探头节点,最后把仿真速度滑块往慢调。
很多新手搭完电路不接地线,导致示波器没有参考点,波形会飘。还有的情况是电源电压和555的复位脚没有正确接高电平,导致芯片反复复位,看起来像高频抖动。这些基础问题排除之后,再调整示波器的时间轴。双击示波器面板,把“每格时间”调大,就能看到完整周期;如果只看到几条细线,可能是时间轴走得太快,屏幕上只能显示半个周期甚至几个上升沿。
5.2 仿真速度滑块不是“倍速播放”
这个要再强调一次。Circuitjs的仿真速度滑块本质是调整内部数值计算的时间步长。RT、CT值非常大(比如1M电阻配1000μF电容)时,一个周期要好几秒,如果滑块拉满,示波器可能几秒钟都刷不出完整波形,看起来“卡死了”。实际不是死机,而是电路本身就慢。遇到这种情况,把滑块稍微往下拨,真实时间流逝变慢,但你能看到电容电压一点一点抬升,教学演示时反而更有说服力。
还有一个经验:如果你的电路含有变压器或电感,初始上电瞬间仿真容易震荡,最好先把仿真速度调慢,等波形稳定后再把速度调回来。
5.3 保存电路、导出图片和写实验报告
Circuitjs提供了几种保存方式,这也决定了它特别适合写实验报告。你可以用“文件”→“保存”,它会生成一个包含电路信息的URL链接。下次打开这个链接,电路原封不动重建。把链接发给同学或同事,对方也一样能打开。
电路搭完以后,要导出图片的话从“文件”菜单里选择导出图像,生成PNG格式,插到实验报告里完全够清晰。如果你想分享的是可编辑的电路,而不是图片,就用“导出电路文本”,把那一堆文本复制粘贴给别人,对方在“导入电路文本”里粘贴就能复原。
写报告时我一般会导出三种东西:电路截屏、示波器波形截屏、以及带参数标注的元件清单。有了这三样,实验报告的技术含量直接上一个台阶。比如你在报告里写“理论占空比52.4%,实测51%”,配一张示波器图,老师一眼就能看出你真的跑过仿真。
说了这么多,最后聊聊我的真实体会。占空比调节这类问题,表面上问的是“该添加什么元件”,实际上问的是“占空比由什么物理过程决定”。如果你用的是PWM信号源,改一个数字就完成;如果你用的是555定时器或逻辑门振荡器,那就要回到电阻电容的充放电回路去理解。我在实操中越来越倾向于先用PWM信号源验证后级电路逻辑,再回过去搭一个由R和C构成的真实振荡器,把两种思路对照着看。每次带学生做电机调速或者LED调光实验时,只要他们能自己把555电路的占空比调出明显变化,后面再理解开关电源的控制逻辑就顺畅很多。希望这篇也能帮你少走几步弯路。