我做了一些晶体管动画
文章摘要
这是一个 Show HN 项目,页面本身几乎没有文字——它是一组用作者自己写的半导体仿真器生成的晶体管内部载流子动画,正文只有几行说明,剩下的全是动图。
作者 Brandon Li(HN 上的 stunningllama)在页面上给出的解释是:动画中蓝点代表电子、红点代表空穴,白色闪光代表复合事件。整组动画分成三批,一层比一层更”物理真实”:
第一批(NPN 双极型晶体管、n 沟道 MOSFET、n 沟道 JFET)里,载流子的速度等于扩散电流与漂移电流之和除以总电荷,也就是说这里显示的是净的平均运动,扩散本身没有被单独画出来——好处是干净、直观。第二批是同样三种器件的”带扩散”版本,载流子同时经历扩散和漂移。作者自己在页面上就写明了这批的取舍:这是描绘载流子运动最准确的方式,但视觉上也更让人眼花缭乱。第三批则是”带探针”的版本,在三种器件的每个端子上显示电流和电压读数,把内部微观图像和外部电路量对应起来。整页动画以 CC BY 4.0 授权。
在 HN 的自述里,作者补充了页面上没有的背景:这些动画来自他的半导体仿真软件,他刻意在”尽可能真实”和”足够清晰”之间找平衡;如果想看得比载流子更深入,比如电场,可以直接在仿真软件里操作;桌面版还包含 IGBT、可控硅(SCR)等更少见的器件,也有类似的动画。他还提到上一次在 HN 上发这个软件大约是一年前(讨论串 43942279)。
评论区里作者的几段技术回复其实是这个项目最有价值的说明文档。关于仿真本身的原理,他解释道:仿真只在场(field)层面做计算,即在空间每一点上跟踪电子和空穴的平均密度,并不逐个模拟粒子。之所以还能画出粒子动画,是因为场的行为和单个粒子的运动之间存在一一对应关系——扩散方程正是随机游走粒子的概率密度所满足的方程。所以,给定一个满足漂移-扩散方程的电子密度,就可以让一群点做带漂移的随机游走,其统计分布恰好符合该密度函数;第二批”带扩散”的动画正是这么来的。至于点与点之间是否互斥:动画里的电子不直接相互排斥,它们被电场吸引或排斥,而电场又由平均电荷密度决定,所以电子是通过场彼此影响的。
作者在讨论中还透露了两个后续动向:一是有人问能不能做 3D 版本,他回答”不太难,敬请期待 3D 版”;二是在有人询问授权后,他当场把页面上的动画改成了 CC-BY 许可。关于软件形态,他明确说明网页版功能少于桌面版(例如”查看载流子”只有桌面版有),并直言”网页版其实挺凑合的,但我留着它,因为它足够易得、足够简单”,且不打算再更新网页版。
HN 评论精华
这条帖子拿到 212 分、32 条评论。讨论氛围罕见地和睦,主线是”要是当年上学时有这个就好了”,加上一批直接与作者往返的技术问答和功能请求。
-
最集中的情绪来自受过电类教育的人。lefra 说自己是电子工程科班出身,但从来没真正搞懂 BJT 里的电荷在干什么——公式会用、器件会用,就是没”grok”,这组动画让它清晰起来。lloydatkinson 称这是他见过最酷的动画图解之一,”真希望我上大学时就有,这可比白板上乱七八糟的箭头强多了”。01jonny01 说当年读电子电气工程学位时这东西会是无价之宝,”我以前是自己画载流子”。IshKebab 和 abhishek_aieng 也是同样的反应。由此 amelius 提出一个很有意思的观点:大学里缺一门课,就是给你学过的所有东西写仿真器——比如为电类专业写麦克斯韦方程组和半导体物理的仿真。
-
一批评论直接构成了对项目的技术追问。danilor 问这些动画和”真正的仿真”差多少,是把电子当作点粒子,还是全在场上算?作者的回答(见上文摘要)解释了场计算与粒子动画之间的对应关系;amelius 追问电子之间是否互斥,作者说它们只通过电场间接影响彼此。himata4113 从直觉出发提出质疑:动画里流动的载流子看起来”太少了”显得不真实,不过他自己也想到这对微米级晶体管大概是合理的,并提出一个很好的对比需求——能处理几安培、高电压的大尺寸器件行为应该很不一样,做个对照会很有意思。
-
adrian_b 贡献了全场最长也最硬核的一条,由 eimrine 的请求引出。eimrine 希望作者也做电子管(三极管/四极管/五极管)的版本,好对比”BJT 那样的电流控制”和”场效应管与电子管那样的电压控制”,他目前看到的唯一区别是场效应管里电流是连续的、而 BJT 里载流子要”跳过”基区;他还半开玩笑地说”不懂电子管理论算不上真正的电气工程师”。adrian_b 的回应纠正了这个前提:BJT 其实也更准确地被建模为由输入电压(基射电压)决定集电极电流的器件,和电子管、场效应管一样。之所以流行文献偏爱”电流控制”的说法,有三个原因:一是 BJT 的输出电流对输入电压的依赖比电子管和 FET 更强的非线性(指数而非多项式),只有在几毫伏的极小范围内才能线性近似;二是确实存在一个不大的电流区间,集电极电流与基极电流近似线性,便于心算,但这个近似不适合精确设计,因为 β 在大电流和小电流两端都会迅速下降;三是 BJT 的输入有很大的漏电流(即基极电流),而电子管和 FET 的输入漏电流小到可以忽略。他的结论是:你可以选择用”电流控制”的图像,但必须清楚它的严重局限;即便做心算,更有用的做法也是把 BJT 当作跨导放大器,用 β 去估算输入漏电流并计算输入电阻网络上的压降(跨导增益对所有 BJT 都相同,而 β 因管而异)。他也肯定了动画本身很好,但补充说要定量比较各类 BJT、FET 和电子管的差异,唯一简便的方法还是画输出特性曲线族。
-
功能请求和作者回应构成了一条完整的产品对话。gus_massa 提了三条:在每个示例旁加上”在仿真器里打开这个示例”的链接(他一开始压根没注意到页面顶部有在线仿真器);在线仿真器里看不到运动的电子和空穴;二极管示例里怎么反转电池。作者逐条回答:前两条是桌面/Steam 版独有功能(勾选 “View charge carriers”),电压源设成负值即可反向。gus_massa 用久之后又反馈了一轮细节:建议给两个版本加上假的版本号(如”在线版 1.0”vs”桌面版 2.0”或 lite/pro)以免误会;点击电池才出现滑块这一点很难发现;显示电流时所有箭头长度一样,他得反复调”矢量场亮度”滑块才看得出差别,在桥式整流器示例里也才勉强分辨出哪两个二极管在导通;他还基于自己做灰度图的经验建议加一个 gamma 滑块。作者接受了”箭头长度可变”和”gamma 滑块”两条,并解释了为什么不能给示例加在线链接:动画里的示例是用桌面版在文件格式变更之后做的,网页版加载不了。
-
也有几条纯粹的外行感想。customguy 说自己完全不懂电学电子学,但知道晶体管很基础,所以”眯着眼看的话,可以说这就是我们编程、甚至只是用电脑时所启动的东西——至少是其中一部分”;他坦承自己知识不够、什么也没学到,”但一秒也不后悔”。smnplk 回复推荐了 “From NAND to Tetris” 和 Harris 的《Digital Design and Computer Architecture》。jsmcgd 提了一个中肯的建议:给没有电类背景的人,每个动画配一小段外行能懂的说明。amingilani 则是最实用的一条:他运营一个加拿大业余无线电培训站点,想把这些动画放进课程(当然会署名),并在追加编辑里说”天啊,你整个站点都是漂亮的插图,我侄女说不定终于能考到执照了”——作者随即把动画改成了 CC-BY 授权。