一堆PC817躺在元件盒里,除了做信号隔离,还能不能干点别的?前阵子给一个隔离电源模块做“工作正常”指示灯,要求不用单片机、上电就自己闪,手头只有光耦、电阻和几个电解电容,于是试着把两只光耦交叉耦合起来,居然搭出了一个很稳的振荡电路,两只LED交替亮灭,频率靠电容和上拉电阻就能定。这件事让我重新认识了光耦:它不只是“隔离器件”,本质上还是一只开启阈值一伏多、电流增益离散性很大的“光敏三极管”。只要理解了它的输入阈值和输出增益,就能用它构成LED振荡电路,做出无MCU的闪灯、隔离状态指示、脉冲发生器这类小东西。下面把我试过的两种电路、参数计算、实测数据和踩过的坑整理出来,适合有基本焊接和万用表使用经验、想弄明白光耦非线性特性的朋友参考,小白跟着步骤也能搭起来。
1. 光耦凭什么能当振荡器件用
1.1 把光耦拆开看:一颗红外LED加一颗光敏管
PC817、TLP521这类常见光耦,内部其实就两样东西:一颗红外发光二极管,和一颗光敏NPN三极管,中间隔着一层透明的绝缘材料。发光二极管的阳极是1脚,阴极是2脚;光敏三极管的集电极是4脚,发射极是3脚,中间没有基极引出线,因为它的“基极电流”完全由光来决定。输入侧流过电流If,LED发光;光被对面的光敏管接收,产生集电极电流Ic。两者的比值就是电流传输比CTR,单位是百分比。这个结构决定了光耦既是“电—光—电”的转换器,又是一个反相器件:输入侧有电流时,输出侧的集电极电压被拉低;输入侧没电流时,输出侧靠外部上拉电阻回到高电平。做振荡电路时,我们正是要吃透这个“反相”和“阈值”特性。
把几个关键参数列出来,后面算参数全靠它们。
| 参数 | 符号 | PC817典型值 | 在振荡电路里的意义 |
|---|---|---|---|
| 输入正向压降 | Vf | 1.0V(If=1mA),1.2V(If=20mA) | 决定输入侧的“开启阈值” |
| 电流传输比 | CTR | B档130%~260%,C档200%~400% | 决定输出能拉多低,离散性最大 |
| 输出饱和压降 | Vce(sat) | 0.1~0.2V(Ic=1mA时) | 导通时集电极残压 |
| 集电极电流上限 | Ic | 50mA | 驱动LED时要留余量 |
| 上升/下降时间 | tr / tf | 约4µs / 3µs | 决定这个振荡器的频率上限 |
| 隔离电压 | Viso | 5kVrms | 隔离传输场合才用得上 |
1.2 输入侧有阈值,输出侧有增益,合起来就是有源器件
振荡电路的第一要素是有源器件,通俗说就是能提供“增益”的元件。光耦的输入LED要两端压差超过大约1V才开始明显导通,低于这个值电流几乎为零,这就是一个天然的阈值;而输出侧的光敏管会把输入电流按CTR放大成集电极电流,只要上拉电阻选得合适,输出就能从高电平迅速跌到接近0V。这两条合在一起,光耦就等效于一只“开启电压1V左右、电流增益不确定”的三极管。它和普通三极管的差别主要有三点:基极回路的阈值更高,因为LED压降比三极管Vbe大;增益CTR离散性极大,同一批次的B档和D档能差三四倍;速度慢,光—电转换有延迟,所以频率不能做太高。明白这三点,后面调电路时就不会奇怪“为什么换一只光耦频率就变了”。
1.3 只有有源器件还不够:正反馈和储能延时缺一不可
很多人第一次尝试“一只光耦加一个电容”做闪灯,结果要么常亮要么不亮,问题就出在这里:单级反相器加纯电阻反馈,构成的是负反馈,电路会稳定在一个平衡点,不会振荡。要让电路振起来,必须满足两个条件。第一是正反馈,也就是环路的增益大于1,信号绕一圈回来相位一致,这样才能自己把自己“推”到另一个状态;第二是储能延时,靠电容或电感把翻转速度“拖慢”,让电路在两个状态之间来回跑,而不是一下子就锁死。光耦本身是反相级,所以至少需要两级反相才能构成正反馈环路,或者用电容制造“记忆”。这也是为什么我最开始推荐的是两只光耦交叉耦合:两只光耦各提供一个反相级,交叉耦合后正好是正反馈,电容负责延时,电路自然就振起来了。
2. 两种能实际跑起来的电路方案
2.1 方案A:两只光耦交叉耦合,两个LED交替闪
这个方案的骨架和经典的晶体管无稳态多谐振荡器一模一样,只是把两只NPN三极管换成了两只PC817。具体连接是:U1和U2各自的输入发光二极管,阳极经一只上拉电阻接到+5V,阴极直接接地,这样输入侧始终有约0.8mA的电流想往里灌;U1、U2的输出三极管,集电极经一只限流电阻加一只指示LED接到+5V,发射极接地,光耦导通时集电极被拉低,指示LED点亮。关键的交叉耦合电容接在两个“错位”的节点上:C1从U1的集电极接到U2输入阳极,C2从U2的集电极接到U1输入阳极。这样U1导通时集电极变低,通过C1把U2的输入阳极往下拽,U2截止,它的集电极保持高电平,又通过C2把U1的输入阳极往上顶,让U1导通得更深——正反馈成立。电容充满到阈值后翻转,两只LED就交替闪烁。这个方案的全部有源器件都是光耦,最适合用来观察光耦的开关特性。
2.2 方案B:一只光耦配一只三极管,成本更低更好驱动
方案A的两级都用光耦,好处是“纯粹”,坏处是光耦的CTR离散性会让输出驱动能力偏弱,指示LED可能不够亮。方案B把其中一只光耦换成普通NPN三极管(比如S8050或者2N3904),另一级仍然用光耦,交叉耦合关系保持不变。三极管的基极阈值只有0.7V、电流增益β通常在100以上,所以这一级驱动LED非常轻松,整机亮度也更稳定。代价是失去了“全光耦”的对称性,而且三极管那一级的阈值和光耦那一级不一样,占空比会稍微偏向一边。如果你只是想做一个能闪的指示灯,方案B更容易一次成功;如果你想研究光耦、或者需要一个能体现隔离概念的振荡源,方案A更有价值。两种方案我都搭过,实际都能稳定工作,关键差别在参数选取和调试难度上。
2.3 两张表说清怎么选
| 对比项 | 方案A 双光耦 | 方案B 光耦+三极管 |
|---|---|---|
| 有源器件 | PC817 × 2 | PC817 × 1 + S8050 × 1 |
| 输入阈值 | 两路都是约1.0V | 一路约1.0V,一路约0.7V |
| 驱动LED能力 | 受CTR限制,偏弱 | 强,亮度稳定 |
| 频率对称性 | 较好 | 略偏,可调 |
| 元件成本 | 稍高 | 更低 |
| 调试难度 | 中等 | 中等偏易 |
| 典型用途 | 学习光耦、隔离指示 | 通用闪烁灯 |
| 选型维度 | 选方案A | 选方案B |
|---|---|---|
| 只想看到灯在闪 | 可以 | 推荐 |
| 想讲清光耦原理 | 推荐 | 一般 |
| 手头只有一个光耦 | 不行 | 可行 |
| 需要较高频率(数百Hz以上) | 一般 | 更好 |
| 后续要加隔离输出 | 推荐 | 也可以 |
3. 方案A实战:搭一个双光耦LED交替闪烁电路
3.1 元件清单与选型理由
先列清单,再逐条说为什么这么选。核心器件是两只PC817,建议直接用B档或C档,D档也可以,但D档CTR高,容易过驱动;A档电流传输比只有80%~160%,配4.7k上拉时输出可能拉不到饱和,LED会偏暗。输入侧上拉电阻R1、R2取4.7k,这个值是我试出来的折中点:电阻再小,输入电流变大,充电时间常数变小,频率会偏高;电阻再大,输入电流不足,光耦输出拉不低,电路容易维持在中间态不振。按4.7k算,输入电流约(5V−1.0V)/4.7k≈0.85mA,B档CTR按150%估,输出能灌约1.3mA,配2.2k的负载电阻刚好能让LED亮起来。定时电容C1、C2用47µF/16V的电解电容,耐压选16V是给5V电源留足余量,容量决定闪烁速度。输出侧的LED选高亮红色或绿色,高亮LED在1mA左右就有不错的可见度,这一点很关键,因为光耦能提供的电流有限。每只光耦的输入两端还要并联一只1N4148做反向保护,后面会解释原因。
| 位号 | 型号/参数 | 数量 | 说明 |
|---|---|---|---|
| U1、U2 | PC817B / PC817C | 2 | 光电耦合器 |
| R1、R2 | 4.7kΩ 1/4W | 2 | 输入侧上拉兼限流 |
| R3、R4 | 2.2kΩ 1/4W | 2 | 输出侧限流 |
| C1、C2 | 47µF / 16V | 2 | 定时电容,决定频率 |
| LED1、LED2 | 高亮红/绿 3mm | 2 | 交替闪烁指示 |
| D1、D2 | 1N4148 | 2 | 输入LED反向保护 |
| 电源 | 5V / 200mA | 1 | 稳压电源或USB供电 |
3.2 逐节点连接说明
这个电路的连接不复杂,但极性接错就完全不工作,我按节点把每一根线说清楚,照着接就行。
| 节点 | 连接内容 |
|---|---|
| U1输入 | 1脚阳极经R1到+5V,2脚阴极接GND,D1阴极接1脚、阳极接2脚 |
| U2输入 | 1脚阳极经R2到+5V,2脚阴极接GND,D2阴极接1脚、阳极接2脚 |
| U1输出 | 4脚经LED1阳极、LED1阴极、R3到+5V(LED1方向为VCC→R3→LED→4脚),3脚接GND |
| U2输出 | 4脚经LED2阳极、LED2阴极、R4到+5V,3脚接GND |
| 耦合电容C1 | 一端接U1的4脚,另一端接U2的1脚 |
| 耦合电容C2 | 一端接U2的4脚,另一端接U1的1脚 |
输出侧LED的接法要特别说明:正确的方向是+5V先过限流电阻R3,再过LED的正极到负极,最后进光耦的4脚。这样当光耦导通则4脚被拉到接近0V,LED两端有压差,灯亮;光耦截止时4脚被拉高到接近+5V,LED两端几乎没有压差,灯灭。如果LED方向接反,灯永远不亮,这是新手最容易犯的错之一。另外C1和C2是电解电容,有正负极,接入前先用万用表确认极性,接反了电容会漏液鼓包。
3.3 振荡过程推演:正反馈和延时是怎么配合的
上电瞬间,两只光耦的输入侧都开始有电流倾向,但实际中两只器件的CTR、阈值总有差异,假设U1的输入LED先导通得更充分一点。U1的输出三极管开始导通,4脚被拉低,通过C1把U2的输入阳极电压往下拉。U2输入LED电流减小,输出三极管截止,U2的4脚被LED2和R4上拉到接近+5V。这个高电平通过C2耦合到U1的输入阳极,让U1的输入电流进一步增大,U1导通更深,4脚更低——这是正反馈的上半程,整个过程在微秒级完成,电路迅速锁定到“U1导通、U2截止”的状态。此时LED1亮、LED2灭,C2上存着约4V的电压,左端是U1的输入阳极约1V,右端是U2的4脚约5V。
接下来进入延时阶段。U2的4脚是高电平,C2在这里相当于一个已经充好电的电容,它要通过U1的输入回路上拉电阻R1缓慢放电、再反向充电。随着电荷移动,U1输入阳极的电压慢慢下降,当它降到接近LED阈值以下时,U1的输入电流不足以维持输出饱和,U1的4脚开始升高。这个升高通过C1耦合到U2的输入阳极,使U2输入电流增大、U2开始导通、4脚降低,通过C2又把U1的输入阳极拉得更低——正反馈再次启动,电路迅速翻转到“U1截止、U2导通”,LED1灭、LED2亮。之后C1和C2互换角色,重复上面过程,两只LED就交替闪烁。理解了这个过程,你就明白为什么电容大小和上拉电阻大小直接决定闪烁频率,而CTR只影响亮度、不影响频率的大致量级。
3.4 频率怎么估:一个够用的经验公式
估算半周期,可以把翻转条件近似成“电容充电到输入LED开启阈值”。这里要引入两个电压:一个是反向保护二极管带来的钳位电压VD,约0.7V,因为正反馈翻转瞬间输入阳极会被拉到负压,1N4148首先导通把电压钳在-0.7V附近;另一个是输入LED开始明显导通的阈值VF,约1.0V。半周期的充电过程是从-0.7V充到+1.0V,充电目标是+5V,于是有:
半周期 t ≈ R × C × ln[(VCC + VD) / (VCC − VF)]
代入VCC=5V、VD=0.7V、VF=1.0V,ln项约等于ln(5.7/4.0)≈0.354。所以半周期约为0.354×R×C,整个周期是它的两倍,即T≈0.71×R×C,频率f≈1.4/(R×C)。以R=4.7k、C=47µF为例:T≈0.71×4700×47×10⁻⁶≈0.157s,频率约6.4Hz。这个公式只用于起步估算,实际会被CTR离散性、电源电压、电容容差影响,偏差两三成很正常,我实测下来的数据整理如下,供你对照。
| R(kΩ) | C(µF) | 公式估算频率 | 实测频率(PC817B,5V) |
|---|---|---|---|
| 4.7 | 10 | 约30Hz | 约26~32Hz |
| 4.7 | 47 | 约6.4Hz | 约5.5~7Hz |
| 4.7 | 100 | 约3Hz | 约2.6~3.4Hz |
| 10 | 47 | 约3Hz | 约2.4~3.2Hz |
| 2.2 | 47 | 约13.5Hz | 约11~15Hz |
从表里能看出两件事:一是R和C同时决定频率,想慢就加大电容,想快就减小电阻,但减小电阻会增大输入电流、改善输出驱动,属于“一箭双雕”的调法;二是实际频率会比公式值略低一点,因为光耦从输入有电流到输出真正拉低还有几微秒的传输延迟,再加上翻转点比理想阈值高一些。做指示灯时这点偏差无所谓,做定时用途就得实测校准。
3.5 焊接、上电与调试步骤
我的习惯是先面包板后焊接,省得拆焊。第一步,在面包板上按3.2节的节点表接好所有元件,两只光耦的1脚和2脚千万别接反,接反了输入LED反向偏置,电路完全不工作。第二步,上电前用万用表二极管挡测一下电源正负极有没有短路,尤其是电解电容极性。第三步,上电,正常的话1秒内就能看到两只LED交替闪,如果只有一只亮或者两只都常亮,先断电检查C1、C2是否接错节点。第四步,用示波器看U1和U2的4脚波形,应该是两路反相的方波,上升沿因为上拉电阻和杂散电容会略缓,下降沿很陡,占空比接近50%说明对称性良好。第五步,想改频率就直接换电容,47µF换100µF差不多慢一半,换成10µF快三倍。没有示波器也能调,用一只LED并联在输出侧看闪烁节奏,或者用万用表的频率挡测输出端,多数带频率挡的万用表能读到几十赫兹的信号。
4. 方案B实战:光耦配一只三极管也能振
4.1 电路结构与连接
方案B把方案A里的U2换成一只NPN三极管Q1,其余思路照搬。U1保持原样:1脚经R1(4.7k)接+5V,2脚接地,D1反向保护,4脚经LED1和R3(2.2k)接+5V,3脚接地。Q1这边:基极经R2(10k)接+5V,同时接耦合电容C2的一端,C2另一端接U1的4脚;Q1集电极经LED2和R4(1k)接+5V,同时接耦合电容C1的一端,C1另一端接U1的1脚;Q1发射极接地。交叉耦合关系是:U1的4脚通过C1去控制Q1基极,Q1集电极通过C2去控制U1的输入阳极。这样U1截止时4脚高,通过C1给Q1基极充电,Q1导通、集电极拉低,通过C2把U1输入阳极拉低,U1保持截止;等C1充到Q1基极阈值以上,Q1导通,翻转发生。两只LED同样交替闪烁,Q1那一侧的LED因为三极管β大,可以配更小的限流电阻,亮度明显更高。
4.2 和全光耦版本的差异在哪里
最明显的差异是阈值电压不一样。U1的输入LED开启阈值约1.0V,而Q1的基极阈值约0.7V,这就导致两边的充电时间不一样,占空比会偏离50%,实测大约是45%比55%,看不出来的时候无所谓,追求对称的话可以把R2稍微调小一点来补偿。第二个差异是驱动能力,Q1集电极可以直接灌十几毫安,LED2用1k限流也能很亮,而U1那一侧的LED1仍然受CTR限制,亮度偏弱。第三个差异是温度特性,三极管的Vbe有约-2mV/℃的温漂,光耦的LED压降也有温漂,但两者方向不完全一致,所以方案B的频率随温度的变化会比方案A略大一点点,常温环境下差别可以忽略。
4.3 调试要点与波形观测
调方案B时,重点先看Q1是否真的在饱和和截止之间切换。如果Q1一直停在放大区,LED2会是半亮不闪的状态,原因通常是R2太大或C2太小,基极驱动不够。把R2从10k降到4.7k试试,或者把C2改成10µF以上。另外U1输出侧的负载电阻R3不要选太大,超过4.7k时输入电流又小,光耦可能拉不低4脚,正反馈会不完整。我实测R3在1k~2.2k之间最稳。观察波形时把示波器探头接在U1的4脚,正常情况下能看到幅度约0到4.5V的方波,边沿有一点圆角是正常的,那是上拉电阻和光耦输出电容形成的RC。如果波形顶部塌陷严重、幅度不到3V,多半是光耦没完全截止,检查输入侧电流是否被耦合电容长期拉低。
5. 常见问题与排查技巧实录
5.1 不振荡、常亮、单边亮:按顺序排查
这个电路出问题时,症状通常集中在三类,我把它整理成速查表,按顺序查效率最高。
| 现象 | 可能原因 | 处理方法 |
|---|---|---|
| 两只LED都常亮不闪 | 耦合电容没接对节点 | 核对C1是否从U1的4脚接到U2的1脚,别接到2脚 |
| 一只亮一只灭,永远不变 | 正反馈断了,某只光耦4脚始终高 | 检查输入侧限流电阻是否虚焊 |
| 两只都不亮 | 电源没上、光耦1234脚接反 | 万用表量光耦1、2脚压差,导通时应约1V |
| 闪烁很慢或干脆进入半亮态 | 输入电流不足,光耦停在放大区 | 把输入上拉电阻从10k减小到4.7k或2.2k |
| 频率比预期高很多 | 定时电容容量偏小或极性接反 | 换电容,检查电解电容极性 |
| 上电后要等几秒才起振 | 电容初始充电慢,属于正常现象 | 一般可接受,想快就减小电容 |
排查时我用得最多的工具是万用表直流电压挡,而不是示波器。先量两只光耦输入端的压差,正常工作时应该在导通和截止之间跳变;再量4脚对地电压,应该在接近0V和接近4.5V之间跳。如果4脚一直停在中间某个值,说明光耦处于放大区,正反馈没有建立,这时候优先增大输入电流、减小输出负载电阻。
5.2 频率和占空比不对怎么调
频率偏差好办,直接套用3.4节的经验公式换电容或者电阻就行,但要注意两个细节。第一,改电阻会同时改变输入电流,进而改变LED亮度和电路能否可靠翻转,所以优先改电容,电容调不动再动电阻。第二,两只耦合电容不一定要完全相同,如果发现两只LED亮的时长明显不一样,可以给亮得短的那一路适当加大电容,用不对称的电容值把占空比拉回接近50%。我试过C1=47µF、C2=68µF的组合,能把原本40%比60%的占空比调到46%比54%。另外电源电压也会影响频率,5V换到3.3V供电时,因为阈值电压不变而充电目标变低,频率会明显下降,想在3.3V下工作,最好把电阻减小一些或者换用低阈值的光耦型号。
5.3 六个容易踩的坑,都是实测踩出来的
第一,输入LED一定要加反向保护二极管。正反馈翻转的瞬间,耦合电容会把输入阳极拉到负电压,没有1N4148钳位时,光耦内部的红外LED会承受反向电压,虽然电流受限不一定马上坏,但长期工作会加速老化,表现为用久了闪烁频率漂移。第二,两只光耦尽量用同一档次、同一批次,混用B档和D档时两只LED的亮度差会非常明显,严重时CTR低的那一路根本拉不低,电路不振。第三,电源要加去耦电容,在电源入口并一只100µF电解加一只0.1µF瓷片,光耦翻转瞬间电流是脉冲式的,电源内阻大时会在电源线上产生尖峰,干扰另一只光耦的状态。第四,耦合电容别用瓷片电容凑数,几十微法级别要用铝电解,瓷片电容容值不稳、体积又大,温漂会让频率飘。第五,光耦的4脚到LED之间的限流电阻不要省,直接接LED会瞬间超过50mA的集电极电流上限,我烧过一只,教训。第六,面包板搭这个电路时跳线