☰
光电报警电路:光敏二极管接法、NE555调制与LM386放大
2026/11/4 5:42:41 网站建设 项目流程

简介:这份面向测控技术与仪器、电子信息等专业学生的传感器课程设计文档,围绕光电式传感器防盗报警电路展开,可作为课程设计选题、报告撰写与电路调试的参考范例。文档共1个doc文件,压缩包约150KB,完整收录设计任务书、方案论证、元件清单、硬件电路与软件模拟等章节,其中硬件部分细分为NE555多谐振荡调制、发光与光敏二极管收发、LM386放大及三极管驱动蜂鸣器报警电路。读者可据此理解光敏二极管替代开关的工作逻辑:正常受光时三极管截止,遮光后导通触发声光报警,并参考文中的调试记录、问题分析与改进方案完成自己的设计报告。目前已有1212人学习,适合需要快速搭建光电报警电路框架、补齐原理图与仿真说明的初学者。

1. 光电报警电路:为什么“遮光就响”只是及格线

光电报警电路看起来是课程设计里最没有悬念的题目:一个发光管、一个光敏二极管、一个三极管、一个蜂鸣器,连起来,遮住光就响。可真正焊在洞洞板上通上电,第一次遇到的情况往往相反——不遮光它响,遮了反而不响;或者白天不响、晚上乱叫;或者装上去头一周正常,第三个月开始半夜自己报警。光电式传感器这门课里最容易被跳过的部分,恰恰就在这里:光怎么变成电,电怎么变成判决,判决又怎么在噪声、温漂和老化里保持不变。这束光走完一趟,每一步都有会翻车的地方。把这条链路拆开看,比抄一张能响的图有用得多。

2. 光敏二极管:光子怎么变成能翻转三极管的电平

2.1 从光子到载流子:内光电效应和那条 1100 nm 的红线

光敏二极管用的不是外光电效应(那是光电管、光电倍增管的路子,靠光电子逸出真空管),而是半导体内部的内光电效应:光子进入材料,把价带电子激发到导带,产生电子—空穴对,载流子浓度上升,宏观上表现为反向电流增大。这个过程的门槛很硬——光子能量必须大于材料的禁带宽度,否则光子穿过去什么也不会发生。

用 hν ≥ Eg 换一下,就得到截止波长 λc = 1.24 / Eg(µm)。硅的禁带宽度约 1.12 eV,代入得 λc ≈ 1.1 µm。这条红线决定了三件事:第一,硅光敏二极管对 1100 nm 以上的红外光基本无感;第二,它的响应峰值落在 850~950 nm 附近,而不是人眼最敏感的黄绿光;第三,如果发射端用一颗红光 LED(峰值约 660 nm)去配一颗硅光敏管,量子效率只有峰值处的几分之一,同样的驱动电流下,接收端拿到的光电流会小一大截。这是很多人第一版电路“距离只有两厘米”的真正原因,跟电路图一点关系都没有。常见的做法是发射端选近红外管,接收端配同波段的硅光敏二极管,再把两端套进黑色热缩管里对准,光路效率立刻不一样。

真正产生光电流的位置也有讲究。PN 结加反向偏置后耗尽区变宽,区内电场很强,光生载流子一产生就被电场扫出去,形成漂移电流,速度在纳秒量级;而在耗尽区之外产生的载流子只能靠扩散慢慢挪到结区,速度慢、还容易被复合掉。所以光敏管的响应速度,本质上取决于“光子有多少比例落在耗尽区里被吸收”。反偏电压越高,耗尽区越宽,落进去的比例越大,响应越快,但暗电流也跟着涨。

2.2 光伏模式和光导模式:为什么开关电路必须反着接

光敏二极管有两种用法,差别不在管子,在偏置。

光伏模式是零偏置,管子像一个微型太阳能电池,输出的是光生电动势,硅管开路电压最多 0.5~0.6 V 就饱和了,跟光强是对数关系。优点是暗电流为零、噪声极低、线性度好;缺点是零偏时结电容最大,RC 时间常数大,响应慢,而且输出摆幅小得可怜,后级稍微一加载就塌了。

光导模式是反向偏置,阴极接正、阳极接负。这时管子表现为一个受光照控制的反向电流源,光电流在很大范围内和照度近似成正比,结电容因为反偏而变小,响应快。代价是有一个随温度指数上升的暗电流——硅管的暗电流大约每升温 10 ℃ 翻一倍,25 ℃ 时可能只有纳安级,60 ℃ 就能到微安级。如果负载电阻取到 1 MΩ,这点暗电流就能在输出端堆出伏级的漂移,阈值直接失守。

注意:课程设计文档里常见的表述是“光敏二极管接收光线导通、输出高电平,遮光不导通、输出低电平”,这句话在物理上是不严谨的——光敏二极管在反偏下从来都是“导通”的,只是电流大小随光强变化。真正决定高低电平的是它后面那颗负载电阻,以及管子是接在电源侧还是地侧。

2.3 分压网络才是真正的“开关”:两种接法和一张电平表

把光敏二极管和一个电阻串起来,取中间节点的电压,这才是电路里真正执行“开关”动作的部分。同一个管子,接法不同,输出极性完全相反。

接法连接方式有光照时节点电压遮光时节点电压直接适配的驱动管
A阴极接 VCC,阳极接节点 X,X 经 R 到 GNDV_X ≈ I_ph·R,偏高V_X ≈ I_dark·R,接近 0PNP(低电平导通)
B阳极接 GND,阴极接节点 X,X 经 R 到 VCCV_X ≈ VCC − I_ph·R,偏低V_X ≈ VCC − I_dark·R,接近 VCCNPN(高电平导通)

设计要求写得很清楚:正常有光时三极管不导通,遮光时三极管导通报警。用最常见的 9014(NPN)来实现,就必须选接法 B——遮光时节点被 R 拉高,NPN 基极拿到高电平才导通。如果照着“有光输出高电平”的说法选接法 A,再直接挂 NPN,逻辑正好反了:有光就报警,遮光反而安静。这是这类设计里最常见的一次翻车,而且它在仿真里不一定暴露,因为很多人仿真时只关心“有没有波形”,不关心极性。

负载电阻 R 的取值是一次典型的权衡。灵敏度 dV/dI_ph 就等于 R,R 越大,同样光电流换来的电压摆幅越大,作用距离越远;但节点上的时间常数 τ = R·C_j 也跟着变大,C_j 是光敏管结电容(典型几十 pF),R 取 1 MΩ 时 τ 到了几十微秒,带宽只剩十几 kHz,再高就顶不住了。同时 R 太大,强光下节点会被拉到贴近电源轨或地轨,进入饱和区,光强再怎么变电压也不动了,动态范围被压死。这就是为什么纯直流阈值方案在真实环境里活不长:它把判决押在一个会漂的绝对电平上。

3. 调制电路:NE555 为什么非要让这束光闪起来

3.1 常亮光路的三个致命弱点:环境光、暗电流、老化

如果发射端就是一颗常亮的 LED,接收端就是一个固定阈值比较,这套方案在暗室里演示完美,出了实验室就现原形。原因有三个,而且是叠加的。

第一个是环境光。太阳光的频谱覆盖整个可见光和近红外,日光灯有 100 Hz 的工频纹波,节能灯和 LED 照明的驱动电源工作在几十 kHz,白炽灯的热惯性又带来缓慢的亮度起伏。这些光全部会打进光敏管,和信号光混在一起,没有任何办法在直流层面区分“这是我的光”还是“那是太阳的光”。第二个是暗电流温漂,前面算过,温度一变阈值就偏,冬天调好的灵敏度夏天就误报。第三个是老化与污染,LED 会光衰,光敏管窗口会积灰,机械结构会松动,正常状态下的光电流是缓慢下降的,固定阈值迟早有一天会跨过去,然后系统就开始“无缘无故”报警。

调制就是针对这三条的统一解。把发射光变成某个特定频率的方波,接收端只放大这个频率附近的成分,环境光的直流分量被耦合电容直接挡掉,100 Hz 工频和几十 kHz 的开关电源纹波落在通带之外被抑制,慢漂移更是完全看不见。本质上这是把“幅度判决”换成了“频率判决”,基准从会漂的绝对电平变成了稳定的晶振/RC 频率。

3.2 NE555 多谐振荡器:一次充放电,两个阈值

NE555 内部有三个关键部件:两个比较器(阈值分别是 2/3 VCC 和 1/3 VCC)、一个 RS 触发器、一个接在 7 脚的放电三极管。接成多谐振荡器时,2 脚(TRIG)和 6 脚(THR)短接在一起并接定时电容 C,R1 从 VCC 接到 7 脚,R2 从 7 脚接到 6/2 脚,5 脚(CONT)对地挂一颗 0.01 µF 旁路电容稳定内部基准。

上电瞬间 C 上电压为零,2 脚低于 1/3 VCC,下比较器翻转,触发器置位,3 脚输出高电平,7 脚内部放电管截止。此时 VCC 经 R1、R2 给 C 充电,电压按指数上升,直到碰到 2/3 VCC,上比较器翻转,触发器复位,3 脚变低,7 脚放电管导通,C 改经 R2 和 7 脚对地放电。放到 1/3 VCC 时又回到起点,循环往复。

充电走 R1+R2,放电只走 R2,两条路径不对称,这是占空比偏离 50% 的根源。用代码把清单里的参数代进去看:

import math def ne555_astable(r1, r2, c): """NE555 多谐振荡器:R1 接 VCC-7,R2 接 7-6/2,C 接 6/2-GND""" t_high = math.log(2) * (r1 + r2) * c # 充电路径 VCC -> R1 -> R2 -> C t_low = math.log(2) * r2 * c # 放电路径 C -> R2 -> 7 脚内部放电管 f = 1.0 / (t_high + t_low) # 振荡频率 duty = t_high / (t_high + t_low) # 高电平占空比,即发光管"亮"的比例 return f, duty # 课程设计元件清单里的取值:R1=1kΩ,R2=20Ω,C=100nF f, d = ne555_astable(1_000, 20, 100e-9) print(f"f = {f/1000:.2f} kHz, duty = {d*100:.1f}%") # 把 R2 抬到和 R1 同量级,占空比才会回到 50% 附近 for r2 in (20, 100, 470, 1000, 2000): f, d = ne555_astable(1_000, r2, 100e-9) print(f"R2={r2:>5}Ω -> f={f/1000:7.2f} kHz, duty={d*100:5.1f}%")

跑出来第一行是 13.8 kHz、占空比 98.0%。这个结果本身没问题——频率落在合理区间,人眼看不到闪烁,后级也放大得动。但 98% 的占空比意味着光几乎一直亮着,只在极短的间隙“熄”一下,交流耦合之后的有用分量只有满幅的 2%,接收端拿到的信号幅度被自己削掉了五十倍。这类参数在纸上算不出来,只有在算完占空比之后才会意识到。

改进方向很直接:让 R2 和 R1 同量级,占空比自然往 50% 靠;或者干脆在 7 脚串两只方向相反的二极管,充电走一条、放电走另一条,占空比可以独立调节,代价是多两个元件。工程上常用的折中是 R1 取 1 kΩ、R2 取 1 kΩ 左右,频率落到 7 kHz 上下,占空比接近 67%,信号分量足够。

提示:调这颗定时电容 C 会同时改变频率和占空比,调 R2 只改占空比和频率,调 R1 主要改频率。想先把频率定死再调占空比,就先用 R1 把周期拉到目标值,再动 R2。

3.3 调制频率怎么定:上下两个边界夹出来的窗口

调制频率不是随便挑的,它被两头夹着。

下限来自干扰。工频基波是 50 Hz,日光灯因为正负半周都发光,主要纹波在 100 Hz,它的低次谐波会一直延伸到几百赫兹。调制频率如果落在 1 kHz 以下,交流耦合后的通带和这些干扰贴得太近,滤波做不干净。所以下限一般压到 1 kHz 以上。

上限来自器件。光敏管的结电容和负载电阻构成一个低通,LM386 本身的增益带宽积也有限(片上大约 1 MHz 量级,闭环增益 200 时可用带宽只剩几 kHz),耦合电容又构成一个高通。频率抬得太高,先被光敏管的时间常数削一次,再被 LM386 的带宽削一次,到了检波级几乎什么都不剩,表现就是“明明调制了,反而比不调制还不灵敏”。

这两个边界之间,1~10 kHz 是比较舒服的窗口。落在这个区间里,耦合电容不需要取得很大(100 µF 配几 kΩ 输入阻抗,高通截止点只有零点几赫兹,远低于调制频率),LM386 也不需要开到极限增益,检波级的 RC 可以取到几十毫秒,报警响应既快又不抖。频率具体落在哪一点,反而没那么关键。

顺带说一个验证小技巧:调制频率在十几 kHz 时人眼完全看不出来,但用手机慢动作录像对着发光管拍,画面里会看到明显的明暗条纹。这比拿示波器探头发射端更省事,尤其是在光路已经装进遮光筒、探针塞不进去的时候。

4. 接收与放大链路:微安级光电流怎么撑起一次可靠的翻转

4.1 接收端偏置:先把电平表填满,再谈放大

接收端的第一个决定不是选什么运放,而是光敏管怎么接、取哪个节点的电压、静态工作点落在哪。按 2.3 的结论,要实现“遮光报警 + NPN 驱动”,就得走接法 B:阳极接地,阴极接节点 X,X 经负载电阻 R 上拉到 VCC。有光时 I_ph 大,R 上压降大,V_X 被拉到低位;遮光时 I_ph 只剩暗电流,V_X 被 R 拉回接近 VCC 的高位。

这个节点的静态电压必须实测,不能靠算。做法是:先只焊光敏管和负载电阻,不接后级,用万用表直流档量 X 对地电压,分别在“正常对准”“手完全遮挡”“强光直照”三种情况下各记一次,画成一张电平表。这张表决定了后面所有事情——耦合电容取多大、放大倍数要多少、三极管基极电阻怎么配。如果三次测量里有一次已经贴到 VCC 或贴到 0 V,说明 R 选错了,光电流把节点推到饱和区,后面再怎么放大都是在放大一个常数。

节点之后接耦合电容。这里的作用有两个:隔掉 X 点的直流分量(环境光、暗电流、温漂全在这个直流里),只把 kHz 的调制包络送到后级;同时把后级的输入偏置和前端解耦,让 LM386 的输入引脚维持在自己的静态电位上。电容取值和后面 LM386 的输入阻抗构成高通,截止频率要远低于调制频率,100 µF 配几 kΩ 时截止点在 1 Hz 以下,远远够用。

光学层面的抑制往往比电路层面更划算。给光敏管套一段黑色热缩管或者一小截不透光的圆筒,只留一个正对发射管的小孔,等于一个机械视场光阑,把侧向来的环境光直接挡在窗口外面。再讲究一点,加一片只透近红外的滤光片,白炽灯和日光的可见成分被滤掉大半,而发射端的红外光几乎无损耗通过。这一层做下来,电路端的压力能小一个数量级。

还有一个容易被忽略但很重要的性质:这套接法天然是失效安全的。光敏管坏了、线断了、发射管烧了、电源掉了一半,结果统统是“接收端收不到光”,也就是报警。安防设备最基本的要求就是故障导向安全,坏的时候必须叫,而不是安静地失效。很多用单片机做阈值的方案,一旦传感器掉线读到 0,程序里没做异常判断,就变成了“永远不报警”,这是方向性错误。

4.2 LM386 的三级放大结构与增益设定

LM386 是音频集成功放,内部结构比它的外形复杂得多,值得拆开看,因为它的每一级设计都直接影响了这里能不能用。

第一级是差分输入级,T1、T2 组成双端输入、单端输出的差分对,信号从基极进、从 T2 集电极出。T5、T6 接成镜像电流源做差分对的有源负载——这一步是关键,用电流源代替电阻负载,能把双端输出的增益几乎完整地搬到单端输出上,同时直流压降很小,后级偏置好安排。第二级是共射放大,T7 单独一级,同样用恒流源做负载,把倍数再拉高一次。第三级是准互补输出,T8、T9 复合成 PNP 型管,与 NPN 的 T10 搭成推挽,D1、D2 两颗二极管给输出管提供静态偏置,把交越失真压掉。整个电路单电源供电,属于 OTL 结构,输出端(5 脚)中点静态在 VCC/2,所以必须外接一颗输出耦合电容再接负载,否则直流直接灌进蜂鸣器。

增益不是定死的。芯片内部从输出端有一条反馈通路经过 R7 回到 T2 发射极,和片内的 R5、R6 构成反馈网络,引入的是深度电压串联负反馈,闭环增益由外接元件说了算。1、8 脚之间默认接着片内那颗 1.35 kΩ 电阻,此时增益约 20;把 1、8 脚短接,内部电阻被短路,增益跳到 200;中间值靠外接电阻和内部电阻并联得到。

# LM386 闭环增益近似式:Av = 30000 / (150 + R_18) # R_18 为 1、8 脚之间的等效电阻(片内 1.35kΩ 与外接电阻并联) def lm386_gain(r18): return 30000.0 / (150.0 + r18) print("1、8 脚开路 :", round(lm386_gain(1350), 1)) # 片内 1.35k,Av≈20 print("1、8 脚短接 :", round(lm386_gain(0), 1)) # 片内电阻被短路,Av≈200 r_ext = 1200 # 外接 1.2kΩ print(f"1、8 脚串1.2k:", round(lm386_gain(r_ext*1350/(r_ext+1350)), 1))

三行分别对应 20、200 和大约 50。这三种取值背后是一次典型的带宽换增益:LM386 的增益带宽积只有 1 MHz 量级,增益 200 时可用带宽约 5 kHz,正好压在调制频率上沿,稍微高一点就被削;增益 50 时带宽能到 20 kHz,对 13.8 kHz 的调制信号还有余量。工程上更常见的做法是 1、8 脚之间串一颗 10 µF 电容再串 1.2 kΩ 电阻,直流上不改变偏置、交流上把增益提到 50 左右,兼顾带宽和灵敏度。

电源去耦在这一级不能省。6 脚就近并一颗 100 nF 瓷片加一颗 10 µF 电解,否则输出级的推挽电流会在电源线上打出一个 kHz 级的纹波,顺着偏置网络窜回输入端,形成自激——表现是蜂鸣器里混着持续的啸叫,静态电流比正常值大好几倍。输入端也不能悬空,悬空的高阻节点等于一根天线,什么干扰都收。

4.3 检波与驱动:把 kHz 包络还原成一次干脆的翻转

LM386 输出的是被放大的 kHz 调制信号,还骑着 VCC/2 的直流。要驱动后面的三极管,得先把它变回一个缓慢变化的直流电平,这一步靠二极管峰值检波加 RC 滤波完成:输出经耦合电容隔直,串一颗小信号二极管(1N4148 之类)单向导通给电容充电,电容再并一颗电阻放电,充得快、放得慢,输出的就是包络的峰值。

RC 时间常数被两个尺度夹住,一头是调制周期,一头是人的动作时间:

f_mod = 13.8e3 # 调制频率 t_period = 1 / f_mod tau_min = 20 * t_period # 至少滤掉 20 个调制周期,纹波才够小 tau_max = 0.2 # 200 ms 以内,人走过去报警不能拖尾 print(f"调制周期 {t_period*1e6:.1f} µs") print(f"τ 应落在 {tau_min*1e3:.2f} ms ~ {tau_max*1e3:.0f} ms 之间") print("取 R=10kΩ, C=10µF -> τ =", 10e3 * 10e-6, "s")

算出 τ 应该落在 1.4 ms 到 200 ms 之间,取 10 kΩ 配 10 µF 得到 100 ms,正中间。τ 太小,检波输出上还带着 kHz 纹波,三极管会跟着高频抖动,蜂鸣器发出的是“嗒嗒嗒”而不是持续音;τ 太大,人已经走过去了报警还没响,或者人走回来半天还在叫。

检波后的直流电平送到 9014 基极。这里要保证的是管子进饱和,不是进放大区。判据是基极电流要显著大于集电极电流除以最小 β,通常取 3~5 倍的过驱动系数。假设蜂鸣器工作电流 50 mA,9014 的最小 β 按 100 算,理论基极电流 0.5 mA,乘 4 倍过驱动系数得 2 mA,基极电阻就是 (VCC − 0.7) / 2 mA:

vcc, vbe, beta_min, ic = 5.0, 0.7, 100, 0.050 # 蜂鸣器 50mA ib = ic / beta_min * 4 # 过驱动系数取 4,确保饱和 rb = (vcc - vbe) / ib print(f"Ib = {ib*1000:.2f} mA, Rb ≈ {rb:.0f} Ω")

算出来基极电阻约 2.1 kΩ,实取 1.8 kΩ 或 2 kΩ 都行。饱和压降 Vce(sat) 大约 0.1~0.3 V,集电极串的限流电阻按 (VCC − Vce − V_buzzer) / Ic 算。如果基极电阻取大了,管子停在放大区,管压降可能有 2~3 V,剩下的电压全变成管耗,9014 这种小管子几分钟就烫手。

蜂鸣器是感性负载,线圈断电瞬间会产生反向尖峰,必须在它两端反并联一颗续流二极管(阴极接 VCC),否则那个尖峰会直接打在 9014 的集电极上,长期下来管子会莫名其妙失效。发光二极管串限流电阻 R = (VCC − Vf − Vce) / I_led,红光 Vf 约 2 V,取 10 mA 时电阻在 270 Ω 上下。

5. 避坑与排查:

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询