
红外接收头在仿真里是个特别容易被想当然处理的元件。很多人画原理图时随手扔一个通用接收器符号进去仿真跑通了就以为万事大吉结果板子打回来发现解码时序对不上、载波抑制不干净、输出极性反了。这类问题的根子往往不在电路本身而在于仿真模型和真实器件之间的差距没有被认真对待。TSOP系列红外接收头内部集成了光电二极管、前置放大、带通滤波、解调、施密特触发和输出级是一个完整的小系统用一两个理想元件去等效它仿真结果的可信度自然要打折扣。这篇内容就是围绕怎么在Proteus里给TSOP封装建一个够用的模型展开的从器件内部结构拆到模型分层从载波参数算到输出级等效再到实际项目里怎么验证模型是否靠谱。适合正在做红外遥控相关课程设计、毕业项目或者产品原型的读者也适合那些被仿真和实物差异坑过、想搞清楚模型边界在哪的人。下面这些内容基于常见工程实践整理具体参数请以你手上器件的数据手册为准。1. 先搞清楚TSOP内部到底在干什么1.1 从光电二极管到解调输出的一条链路要建模先得知道被建模的对象长什么样。TSOP这类一体化红外接收头封装里塞进去的东西比大多数人想象的多。最前端是一个PIN光电二极管它把38kHz左右的调制红外光转换成微弱电流信号紧接着是前置放大器把纳安级电流转成电压并做初步增益然后是自动增益控制环节这一级很关键它决定了器件对强光干扰的容忍度再往后是带通滤波器中心频率对准载波频率把环境光里的低频成分和荧光灯的高频成分滤掉滤波之后进入解调器把有载波和无载波翻译成逻辑电平最后经过施密特触发整形和输出级给出干净的TTL或CMOS兼容波形。这条链路里每一级都有自己的非理想特性。前置放大有输入失调和噪声AGC有响应时间带通滤波器有Q值和群延迟解调有阈值迟滞输出级有上升下降时间和驱动能力。建模时不可能全部还原但至少要抓住对时序和逻辑影响最大的几项。我的经验是对绝大多数遥控解码类项目真正影响仿真可信度的是三件事载波频率响应、输出极性、以及 burst 长度与输出延迟的关系。把这三项建准模型就够用了。1.2 为什么不能用通用红外接收器符号直接替代Proteus元件库里确实有通用的红外接收器件但那些符号大多只提供一个逻辑输出引脚内部行为要么是理想解调要么干脆就是个受控源。用它们做纯逻辑验证没问题可一旦你的项目涉及载波频率偏差、连续 burst 的间隔判断、或者强光干扰下的误触发分析理想模型就给不出有意义的结论了。举个具体的场景某同学做红外遥控解码仿真里一切正常实物上偶尔丢帧。排查半天发现是遥控器 burst 之间的间隔时间在仿真里被理想化了模型没有体现接收头在 burst 结束后的恢复时间导致解码状态机的超时判断在实物上偏紧。这类问题只有模型里带了恢复时间这个参数才可能暴露。所以自建封装模型的意义不在于炫技而在于把那些会被理想模型抹掉的时序细节保留下来。1.3 建模目标的边界够用就好这里要说清楚一个态度问题。给TSOP建Proteus模型目标不是做一个能和厂商SPICE模型媲美的精确等效那不现实也没必要。Proteus的混合信号仿真能力有限太复杂的模型反而拖慢仿真速度、增加收敛问题。合理的定位是建一个行为级模型把数据手册里对系统设计有影响的参数体现出来忽略那些对逻辑功能无影响的二阶效应。具体来说我建议模型至少覆盖载波中心频率、带宽、输出极性、burst 最小有效长度、输出延迟、恢复时间、以及输出级的驱动特性。至于噪声系数、温度漂移、光谱响应曲线这些除非你的项目专门研究这些否则不必进模型。这个边界划清楚了后面的工作才有方向。2. 模型分层把一个大问题拆成四个小块2.1 光输入到电流的转换层第一层是光电转换。在Proteus里没有真正的光器件仿真所以这一层通常用受控电流源或者受控电压源来等效。输入端接收的是红外光强度这个抽象量输出是电流。实际做法是定义一个电压信号代表光强通过一个压控电流源转换成电流转换系数参考数据手册里的辐照度响应。这一层要注意的是调制信号的表示方式。红外遥控的载波是38kHz方波调制的所以在模型输入端你需要一个能产生载波 burst的信号源。可以用Proteus的信号发生器配合门控也可以直接用分段线性源拼出 burst 波形。后者更可控适合做参数扫描。我一般用分段线性源因为burst的起始沿、持续长度、间隔都能精确设定方便后面验证解码逻辑。2.2 带通滤波与增益层第二层是模拟前端。前置放大加AGC加带通滤波这三者在行为上可以合并成一个带通滤波器加一个限幅放大器。带通滤波器的中心频率设成载波频率Q值参考数据手册的带宽指标反推。比如某型号标称带宽±5kHz中心38kHz那Q值大约就是38/10≈3.8用这个值去配置滤波器参数。限幅放大器的作用是模拟AGC效果弱信号时线性放大强信号时输出被钳位。在Proteus里可以用一个增益可变的放大器或者简单的限幅函数实现。这一层建得粗一点没关系因为对数字解码来说只要滤波器能把带外干扰压下去、限幅能把幅度归一化后面的解调就能正常工作。2.3 解调与整形层第三层是核心的解调逻辑。这一层要把有没有载波翻译成逻辑电平。行为上可以这样实现对滤波后的信号做包络检测然后和一个阈值比较超过阈值判为有载波输出有效电平低于阈值判为无载波输出相反电平。这里有个关键细节是阈值迟滞真实器件有几十毫伏的迟滞防止噪声导致输出抖动。模型里加一个小的迟滞窗口能显著改善仿真稳定性。输出极性必须按你用的具体型号来定。TSOP系列里有的型号无载波时输出高电平常高有的输出低电平常低这个搞反了后面全错。建模时把极性做成一个参数方便切换比硬编码强。2.4 输出级与负载等效层第四层是输出驱动。真实TSOP输出级是集电极开路或者推挽结构带一定的上升下降时间和驱动电流限制。模型里用一个带输出阻抗的逻辑缓冲加一个RC网络来等效。上升下降时间参考数据手册通常在百纳秒量级。如果你的后级是单片机GPIO还要考虑GPIO内部上拉或下拉对波形的影响这一层建好了仿真出来的波形才和示波器上看到的接近。这四层拆完整个模型的结构就清楚了。下面用一张表把每层的实现方式和关键参数列出来方便对照。模型层级Proteus实现方式关键参数参数来源光电转换层压控电流源转换系数、输入阻抗数据手册辐照度响应模拟前端层带通滤波器限幅放大器中心频率、Q值、增益带宽指标反推解调整形层包络检测迟滞比较器阈值、迟滞宽度、输出极性数据手册输出特性输出驱动层逻辑缓冲RC网络上升下降时间、输出阻抗数据手册开关特性3. 关键参数怎么算、怎么填3.1 载波频率与带宽的换算载波中心频率是最基础的参数TSOP系列常见的有36kHz、38kHz、40kHz、56kHz几个档位对应不同厂商的遥控协议。建模时这个值直接填数据手册标称值。带宽的处理要绕个弯数据手册一般给的是最大可接受载波频率偏差或者带宽如果是前者比如标称38kHz、允许偏差±5kHz那带通滤波器的通带就要覆盖33到43kHzQ值按中心频率除以带宽算38/103.8。这里有个容易踩的坑有人直接把Q值设得很高觉得滤波越陡越好。实际上Q值太高会导致群延迟变大burst 的边沿被严重拖慢解码出来的脉宽和真实值对不上。我一般会把Q值设在3到5之间兼顾选择性和边沿响应。如果你的项目对脉宽精度要求高可以适当降低Q值用牺牲一点抗干扰性换时序准确度。3.2 burst 最小长度与恢复时间的取值这两个参数直接决定解码逻辑的容错边界。burst 最小长度指的是接收头能识别的最短载波持续时间数据手册里通常以最小burst长度或最小脉冲宽度给出典型值在几百微秒量级。恢复时间指的是一个burst结束后器件需要多长时间才能响应下一个burst典型值也在几百微秒到毫秒量级。在模型里burst 最小长度体现为解调器的积分时间常数太短的burst不足以让包络检测超过阈值输出不翻转。恢复时间体现为解调器输出后的一个强制复位窗口窗口内忽略新的burst。这两个参数填准了仿真里那些偶尔丢帧连续码识别不了的问题就能复现出来你才有机会在仿真阶段就把解码状态机的超时参数调对。3.3 输出极性与驱动能力的确认输出极性前面提过这里强调确认方法看数据手册的输出波形图注意无载波时输出是高还是低。常高型在无载波时输出高电平收到burst时拉低常低型相反。Proteus模型里把这个做成一个布尔参数切换时同步改比较器的输出逻辑。驱动能力方面数据手册会给输出高电平电流和低电平电流以及对应的电压降。模型里用输出阻抗来近似比如低电平输出电流5mA时压降0.4V那等效输出阻抗大约80欧。这个值对驱动LED或者长线传输的场景有影响对直接接单片机GPIO的场景影响不大可以简化。4. 在Proteus里把模型搭起来4.1 用子电路封装模型的好处Proteus支持子电路subcircuit把前面四层电路打包成一个符号原理图里只显示输入输出引脚。这么做有两个实际好处一是原理图干净一个接收头符号加几个引脚比摊开一堆受控源和滤波器清爽得多二是复用方便同一个模型可以在多个项目里调用改参数只改子电路内部。建子电路的操作路径是先把四层电路画在一个独立页面上用输入输出端口标好引脚然后全选、右键、创建子电路起个名字保存。之后在元件库里就能搜到这个自定义器件。引脚定义建议至少包含光输入模拟、电源、地、输出。如果要做使能控制再加一个使能引脚。4.2 信号源的配置细节仿真用的红外信号源我习惯用分段线性源拼burst。具体做法是定义一个时间-幅度的点序列burst开始时幅度跳到载波峰值持续若干个38kHz周期然后回到零间隔一段时间再来下一个burst。这里要注意时间步长的设置38kHz的周期是26.3微秒分段线性源的点间隔至少要小于这个周期的四分之一否则载波波形会失真。Proteus的仿真步长也要相应调小建议设成1微秒或者更小否则解调出来的包络会丢细节。如果嫌手动拼点麻烦可以用Proteus的激励源配合一个门控逻辑让正弦或方波源在burst窗口内导通。这种方式参数化程度高改burst长度和间隔只改门控信号的时间参数适合做批量测试。4.3 仿真设置与收敛问题处理混合信号仿真最容易遇到的是收敛失败或者仿真速度慢。几个实用设置把模拟部分的相对误差容限放宽到1e-3绝对电流容限设成1e-9数字部分用事件驱动不要强制同步仿真总时长按你的burst序列长度加一定余量设定别一上来就跑几十毫秒。如果遇到时间步长太小的报错多半是某个节点有高频振荡。检查带通滤波器是不是Q值设太高导致自激或者限幅放大器的增益跳变太陡。把增益做成平滑过渡、给滤波器加一点阻尼通常能解决。这些设置上的经验文档里不会写都是仿真跑崩几次之后摸索出来的。5. 模型验证怎么判断建得对不对5.1 单burst响应测试模型搭好之后第一件事是喂一个标准burst看输出波形。预期行为是burst到来后经过一个固定延迟输出翻转burst结束后再经过一个恢复时间输出回到静态电平。把仿真波形和示波器上抓的真实器件波形对比重点看三个量延迟时间、输出脉宽、恢复时间。这三个量对上了模型的基本时序就靠谱了。对比时要注意真实器件的延迟会随burst强度和载波频率偏差变化模型里如果没建这些依赖关系对比时要把测试条件控制在标称值附近。别拿一个偏离载波频率的burst去对比那样差异会被放大误以为模型有问题。5.2 连续burst与间隔边界测试第二个测试是连续burst重点验证间隔边界。做法是固定burst长度逐步缩短间隔找到输出开始异常的那个临界点和理论恢复时间对比。这个测试能暴露模型里恢复时间参数是否填对。如果临界点和数据手册对不上回去检查解调器的复位窗口设置。再进一步可以做burst长度扫描从很短到很长看输出在哪个长度开始正常翻转这个临界点就是模型的最小burst长度。和手册值对比偏差在20%以内就算合格毕竟行为级模型不追求精确复现。5.3 干扰条件下的行为检查第三个测试是加干扰。在光输入上叠加一个低频正弦模拟荧光灯干扰或者一个直流偏置模拟环境光看输出是否误触发。真实器件靠带通滤波和AGC抵抗这些干扰模型里如果滤波器Q值合适、限幅器工作正常输出应该保持稳定。如果一加干扰就乱翻说明滤波或限幅环节建得不对回去调参数。这个测试的价值在于它能帮你判断模型在非理想条件下的可信度。很多项目在实验室理想环境下没问题一到现场就出故障仿真阶段如果能提前暴露这类脆弱性省下的是打板改板的时间和成本。6. 几个实际项目里踩出来的经验6.1 别把模型参数当成器件保证值数据手册给的是典型值加最大最小值范围建模时填典型值没问题但做设计裕量分析时要按最坏情况算。比如恢复时间典型500微秒、最大800微秒你的解码状态机超时阈值就不能卡在500微秒得留到1毫秒以上。模型里可以做一个参数扫描把恢复时间从典型值扫到最大值看解码逻辑是否还稳。这个习惯能帮你避开很多实验室好用、量产出问题的坑。6.2 输出级负载对波形的影响常被忽略很多人仿真时输出直接接一个理想逻辑输入波形方方正正实物上接单片机GPIO加上拉电阻后波形就变圆了。原因是GPIO内部上拉和走线电容构成了RC。模型里把输出阻抗和负载电容建进去仿真波形才真实。如果你的项目对边沿敏感比如用边沿触发中断这个细节直接影响中断是否误触发。6.3 仿真速度与精度的平衡要提前规划行为级模型跑起来比晶体管级快得多但如果burst序列很长、仿真步长又设得很小整体耗时依然可观。我的做法是分两阶段功能验证阶段用较粗的步长和简化模型快速跑通逻辑时序精调阶段再切到细步长和完整模型只跑关键片段。这样既不浪费时间又能保证关键结论的精度。6.4 模型文档化别让自己三个月后看不懂自建模型最大的隐患是过段时间自己都忘了某个参数为什么这么填。建议在子电路里加注释把每个关键参数的来源哪份手册、哪一页、什么条件写清楚再附一个参数表。这个习惯看起来麻烦但当你需要改型或者复用到新项目时省下的排查时间远超当初写注释的投入。7. 模型之外什么时候该回到实物验证仿真模型再细也只是对真实器件的一种近似。有几类问题注定要在实物上才能确认光谱响应相关的比如不同波长红外管的匹配、温度相关的高温下灵敏度下降、以及长期可靠性相关的。模型能帮你把逻辑和时序层面的问题挡在打板之前但涉及材料、工艺、环境的因素还是得靠实物测试。我的建议是把仿真定位成设计验证的第一道筛子而不是实物测试的替代品。模型建得越贴近数据手册的关键参数这道筛子的孔径就越细漏过去的问题就越少。但筛子终究是筛子该做的实物测试一项都不能省。把这两者的分工想清楚仿真工具才能真正发挥它该有的价值而不是变成一个自我安慰的摆设。