ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Proteus中TSOP红外接收头建模:从内部结构到仿真验证的工程实践

Proteus中TSOP红外接收头建模:从内部结构到仿真验证的工程实践

红外接收头在仿真里是个特别容易被"想当然"处理的元件。很多人画原理图时随手扔一个通用接收器符号进去,仿真跑通了就以为万事大吉,结果板子打回来发现解码时序对不上、载波抑制不干净、输出极性反了。这类问题的根子往往不在电路本身,而在于仿真模型和真实器件之间的差距没有被认真对待。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到43kHz,Q值按中心频率除以带宽算,38/10=3.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. 模型之外:什么时候该回到实物验证

仿真模型再细,也只是对真实器件的一种近似。有几类问题注定要在实物上才能确认:光谱响应相关的(比如不同波长红外管的匹配)、温度相关的(高温下灵敏度下降)、以及长期可靠性相关的。模型能帮你把逻辑和时序层面的问题挡在打板之前,但涉及材料、工艺、环境的因素,还是得靠实物测试。

我的建议是把仿真定位成"设计验证的第一道筛子",而不是"实物测试的替代品"。模型建得越贴近数据手册的关键参数,这道筛子的孔径就越细,漏过去的问题就越少。但筛子终究是筛子,该做的实物测试一项都不能省。把这两者的分工想清楚,仿真工具才能真正发挥它该有的价值,而不是变成一个自我安慰的摆设。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进