news 2026/10/6 9:34:38

Circuitjs占空比调节全攻略:从555定时器到PWM信号源实操

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Circuitjs占空比调节全攻略:从555定时器到PWM信号源实操

先交代一个背景。我平时会带硬件爱好者做实操入门,这类问题被问得最多:“老师,我在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的优势非常明显。我用实际场景做了个对比:

对比项CircuitjsMultisimProteus
安装部署无需安装,浏览器打开即用安装包大,授权麻烦安装包更大,破解版满天飞
学习成本几分钟上手界面复杂,菜单层级多元件查找繁琐
仿真交互运行时可拖电位器、改参数参数修改后需重新仿真较难实时交互
元件库规模教学常用足够工业级齐全MCU外设仿真强
典型用途原理验证、教学演示、快速原型电子竞赛、复杂图纸仿真单片机固件级调试

这并不意味着Circuitjs能取代专业工具。它更适合做“原理级”验证,不适合做PCB级的信号完整性分析。但如果你要理解“为什么这个电路能产生方波”“占空比到底由什么决定”,它的交互体验比重型EDA好太多了。我的习惯是:先用Circuitjs把电路逻辑跑通,再去专业工具里做精细化设计。

2. 打开 Circuitjs 后的第一件事:把界面和基础操作弄明白

2.1 画布与菜单:别急着画,先认清入口

第一次打开Circuitjs,默认会加载一个示例电路。很多人上来就被这个示例搞得有点懵,我建议直接在菜单栏选“文件”->“新建”(或者中文版里的“重置/新建”),先清空画布。顶部菜单主要有“文件”“编辑”“绘制”“显示”“选项”“帮助”,在绘制菜单里可以添加元件。

一个非常容易被忽视的地方是“示例电路库”。我强烈建议新手先花半小时把示例电路过一遍,尤其是“555定时器”“音频”“逻辑门”这几个分类。里面每个电路都是完整的,直接运行就能看波形。你可以把示例当作“活教材”,先看别人怎么接线、怎么接示波器,再自己动手搭。

2.2 放元件、连线、旋转与删除

在画布上添加元件有几个途径:从“绘制”菜单选;在画布上右键弹出快捷菜单;或者用工具栏。中文版一般在画布顶部有“添加元件”分类按钮。

画电路的基础操作我总结成几条:

  1. 添加元件:在菜单里选择元件类型,鼠标变成十字形,在画布上点一下放置。比如添加一个电阻,路径通常是“绘制”->“添加元件”->“无源元件”->“电阻”。
  2. 连线:鼠标左键点住元件的引脚,拖到另一个引脚或节点上松开。注意Circuitjs的连线是画“导线段”,如果中途需要拐弯,松开后继续从拐点拖就行。
  3. 旋转元件:选中元件后按键盘的R键,可以每次顺时针转90度。
  4. 修改参数:双击元件,会弹出参数对话框。电阻默认单位是欧姆,输入1k、10k这种带单位的写法可以直接识别。
  5. 删除:选中元件或导线,按Delete键,或者右键选择“删除”。
  6. 移动:直接鼠标拖动。移动导线时,鼠标放在导线中间拖动。

这些操作里最容易被忽略的是“双击改参数”,尤其是信号源。很多人放了一个信号发生器,默认输出的永远是正弦波,以为不能改,其实就是双击后没有往下翻设置项。

2.3 运行/停止与仿真速度滑块

画布上方或工具栏里有运行/停止按钮,旁边通常有一个“仿真速度”滑块。这个滑块值得特别讲一下:它控制的不是动画帧率,而是仿真时间步长。滑块调高,仿真推进快,但可能会漏掉高频细节;滑块调低,仿真慢,但波形细节更准确。

遇到振荡器不起振、波形怪异的情况,我第一个尝试就是把仿真速度滑块往慢的方向拉一档。很多新手以为把滑块拉满就是“性能好”,实际在555这种带反馈的电路里,时间步长太粗会直接看不到正确的充放电过程。

3. 从零搭一个 555 方波发生器:把波形“逼”出来的完整过程

3.1 为什么要用555作为第一个自主电路

如果说Circuitjs里只能推荐一个入门电路,我一定选555定时器构成的无稳态多谐振荡器。原因有三个:第一,它包含电源、电阻、电容、芯片、示波器五种基本元素,做完能熟悉全套操作;第二,它的输出是方波,观察占空比非常直观;第三,后面要解决的“调节占空比”问题,就是在这个电路上演化出来的。

记住一个原则:不要从网上下载现成的电路图,然后照着抄。先用几分钟把下面这个电路亲手搭出来,你对555内部充放电过程的理解会完全不同。

3.2 动手搭:元件清单与接线顺序

我先给出完整的元件清单和参数,你可以照抄:

元件参数/型号用途
直流电压源 VCC5V供电
地—参考点
电阻 R11kΩ充电回路上半部分
电阻 R210kΩ充电/放电共用
电容 C10.1μF(100nF)定时电容
555定时器默认核心振荡
示波器—观察波形

具体接线顺序如下:

  1. 先把直流电压源放到画布,双击设置电压为5V。再接一个地线到电源负极。
  2. 从元件库里添加一个555定时器。Circuitjs里的555符号会标出引脚编号,照着下面接就不会错。
  3. 把555的8脚(VCC)接到5V电源正极,1脚(GND)接地。
  4. 4脚是复位脚,接法是直接连到8脚(也就是接VCC),否则芯片一直处于复位状态,输出恒为低。
  5. 把7脚(放电)串接R1到VCC,再把7脚接到R2的一端。
  6. R2的另一端接到2脚(触发)和6脚(阈值)的公共节点上。也就是说,2脚和6脚要先短接在一起,R2下端接这个节点。
  7. 从这个公共节点接C1到地。
  8. 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电路的占空比调出明显变化,后面再理解开关电源的控制逻辑就顺畅很多。希望这篇也能帮你少走几步弯路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 9:34:15

Java字符串处理实战:从不可变性到性能优化的完整指南

写字符串相关的文章,其实挺容易写成"API字典"的,罗列一堆方法名和参数,看完就忘。但这东西恰恰是日常开发里最绕不开的:拼SQL、拆报文、处理文件名、解析配置、格式化输出,哪一个都离不开字符串操作。偏偏这…

作者头像 李华
网站建设 2026/10/6 9:33:39

从new Thread到线程池:核心参数与运行机制全拆解

很多人学并发编程,都是从 new Thread 起步的。我也一样,早期写多线程代码基本就是一把梭:要并发? new Thread 就行。直到有一天线上服务出了问题,线程数飙到几百,每个线程都在那空转,CPU 被…

作者头像 李华
网站建设 2026/10/6 9:33:34

Agent-Reach:轻量级智能体互联网关的设计与实践

每个做智能体(Agent)的人,大概率都遇到过同一个尴尬:单机跑得好好的 Agent,一旦想让它调用另外一个系统里的 Agent,或者让两个不同团队开发的 Agent 互相协作,立刻变成一场灾难。地址写死、接口…

作者头像 李华
网站建设 2026/10/6 9:31:30

行测高频真题问答式精讲:拆解思维陷阱,提升答题正确率

1. 项目概述1.1 核心需求解析先说结论:这套“行测高频真题精讲(问答版)”不是传统意义上那种“题目答案”的刷题册,而是把备考中最常遇到的30道典型题目,用“一问一答”的方式拆解到骨头里。标题里藏着两个关键词&…

作者头像 李华
网站建设 2026/10/6 9:31:20

superpowers安装配置全攻略:从环境准备到核心功能实操

1. 从“superpowers”这个标题说起:它到底指什么 第一次看到“superpowers”这个词,很多人脑子里蹦出来的可能是漫威电影里的超能力,或者是某些游戏里的技能系统。但如果你是在技术社区、开源项目或者工具链的语境下看到它,那它大…

作者头像 李华
网站建设 2026/10/6 9:31:04

ponytail插件实战:解决前端多行文本截断与阅读全文交互问题

前阵子接手一个内容社区的信息流改版,需求里有一条特别不起眼:每条卡片下的摘要,超过三行要省略成“...阅读全文”。听起来简单,真做起来才发现,纯 CSS 的-webkit-line-clamp在 Safari 全家桶里挺顺,一到 F…

作者头像 李华