音诺AI翻译机本身是一台以语音识别和实时翻译为核心能力的便携设备,但它身上那颗Vishay TSOP38238红外接收头,其实藏着一个被大多数人忽略的扩展入口。我最初注意到这个细节,是因为手头这台机器在待机时偶尔会对某些遥控器产生反应,拆开外壳后确认了板载的TSOP38238模块。这意味着,除了语音交互,这台设备还能通过红外遥控信号接收指令,从而在不增加额外硬件的前提下,把遥控器变成它的第二套输入通道。对于做嵌入式扩展、智能家居联动或者无障碍控制的开发者来说,这个发现的价值在于:你不需要改动翻译机的主控固件,只需要在外部挂一颗红外发射管或者用现成遥控器,就能触发预设动作。这篇文章会从红外接收的底层时序讲起,一直落到实际接线、解码和联动逻辑的完整实现,适合有基础单片机经验、想给手头设备加一层遥控能力的读者。
1. 为什么TSOP38238会成为音诺AI翻译机的红外入口
1.1 这颗接收头到底做了什么
Vishay TSOP38238属于TSOP38xxx系列红外接收模块,内部集成了光电二极管、前置放大器、自动增益控制(AGC)和带通滤波器。它的中心接收频率是38kHz,这意味着它只对载波频率接近38kHz的红外调制信号产生响应,而对环境中的日光、白炽灯、荧光灯等连续红外源有很强的抑制能力。模块输出端在无信号时保持高电平,一旦检测到符合38kHz载波且经过调制的脉冲串,输出就会拉低,形成一串与发射端调制波形反相的数字脉冲。
音诺AI翻译机选择这颗器件,核心原因有三个:第一,38kHz是消费类遥控器最通用的载波频率,NEC、RC5、RC6等主流协议都工作在这个频段附近;第二,TSOP38238的供电范围宽,2.5V到5.5V都能稳定工作,可以直接挂在翻译机主控的3.3V电源轨上,不需要额外的电平转换;第三,它的输出是数字量,主控只需要一个GPIO或者外部中断引脚就能读取,软件开销极低。换句话说,这颗器件把复杂的红外解调工作全部在硬件层面完成了,留给主控的只是一串已经"干净"的脉冲。
1.2 翻译机为什么需要红外接收能力
从产品定位看,音诺AI翻译机的主要交互方式是语音,但语音交互有两个天然短板:一是嘈杂环境下识别率下降,二是需要用户主动发声,在某些场景下并不方便。红外遥控的引入,恰好补上了这两个缺口。比如在会议室场景中,用户可以用遥控器一键切换翻译语种、调节音量或者触发静音,而不必对着机器喊话;在展厅或导览场景中,讲解员手持遥控器就能控制翻译机播放预设的欢迎语或切换讲解内容。
更深一层看,红外接收能力让翻译机具备了被外部系统集成的可能。一台支持红外遥控的翻译机,可以接入中控系统,由中控统一发送红外指令来调度多台设备。这种集成方式在智能家居和商用显示领域非常常见,而TSOP38238的存在,等于给翻译机预留了一个低成本、低功耗、高可靠性的控制接口。
1.3 38kHz载波与协议兼容性的关系
很多人第一次接触红外遥控时会困惑:为什么接收头标称38kHz,但遥控器发出的信号却能正确解码?这里的关键在于,38kHz指的是载波频率,而不是数据速率。遥控器在发送每一位数据时,会用38kHz的方波去调制红外LED,形成一串载波脉冲;接收头检测到这串载波后,输出端产生对应的低电平脉冲。数据本身的信息,编码在脉冲的宽度和间隔里,而不是载波频率里。
TSOP38238的带通滤波器有一定的带宽,通常在中心频率上下浮动几kHz的范围内都能正常接收。市面上绝大多数遥控器的载波频率在36kHz到40kHz之间,所以TSOP38238可以兼容NEC、RC5、RC6、Sony SIRC等主流协议。音诺AI翻译机选用这颗器件,实际上是在硬件层面为多协议兼容留出了余量。如果你打算自己写解码逻辑,需要先确认手头遥控器的协议类型,再针对性地实现时序解析。
2. 从接收头输出到可用指令:红外信号的解码链路
2.1 接收头输出波形的真实样子
TSOP38238的输出端在空闲时是高电平,当检测到38kHz载波时拉低。以最常见的NEC协议为例,一位逻辑"0"表现为560微秒的载波脉冲加上560微秒的空闲,接收头输出端对应560微秒低电平加560微秒高电平;一位逻辑"1"则是560微秒载波加1690微秒空闲,输出端对应560微秒低电平加1690微秒高电平。一帧完整的NEC码包含一个9毫秒的引导脉冲、4.5毫秒的引导空闲、8位地址、8位地址反码、8位命令和8位命令反码,最后以一个560微秒的结束脉冲收尾。
这里有一个容易踩的坑:接收头输出的是反相信号,而且由于AGC的作用,第一个脉冲的宽度可能会比后续脉冲略宽。如果你用示波器观察,会发现引导脉冲的低电平时间可能达到9毫秒左右,但后续数据位的低电平时间基本稳定在560微秒。写解码代码时,不能假设所有低电平脉冲宽度完全一致,必须留出容差。
2.2 用外部中断加定时器捕获脉宽
在音诺AI翻译机这类设备上做红外解码,最稳妥的方案是使用外部中断配合硬件定时器。具体做法是:把TSOP38238的输出脚接到主控的一个支持双边沿触发的外部中断引脚上,在中断服务函数里记录当前定时器的计数值,通过两次中断之间的差值计算出脉冲宽度。由于红外信号的脉冲宽度在几百微秒到几毫秒之间,定时器的分辨率建议不低于1微秒,这样计算出的脉宽误差可以控制在几个微秒以内。
实际写代码时,我习惯用一个状态机来管理解码过程。状态机的初始状态等待引导脉冲,检测到超过8毫秒的低电平后进入接收数据状态,然后依次读取32位数据。每一位的判定逻辑是:在低电平结束后等待高电平,测量高电平的持续时间,如果接近560微秒则判为0,如果接近1690微秒则判为1。整个过程中需要设置超时机制,如果高电平持续时间超过2毫秒还没有下降沿,就认为帧结束或信号异常,状态机复位。
2.3 校验与去重:让指令真正可用
NEC协议自带地址反码和命令反码,这为校验提供了便利。解码完成后,把地址和地址反码做异或,命令和命令反码做异或,如果结果都是0xFF,说明接收正确。这个校验步骤不能省,因为红外信号容易受到环境光干扰,偶尔会产生误码。我在早期调试时曾经省略了校验,结果发现遥控器按一次偶尔会触发两次动作,加上校验后问题就消失了。
去重是另一个必须处理的环节。遥控器在按住按键不放时会以110毫秒左右的周期重复发送同一帧,如果不去重,主控会连续执行多次相同指令。常见的做法是记录上一次成功解码的命令值和时间戳,如果新命令与上一次相同且间隔小于200毫秒,就丢弃。这个阈值可以根据实际遥控器的重复周期微调,但不要设得太大,否则快速连按两次同一按键会被误判为重复。
3. 硬件接线与电平匹配的实操细节
3.1 找到翻译机主板上的接入点
音诺AI翻译机的PCB上,TSOP38238通常以三脚封装出现:正面看过去,从左到右依次是OUT、GND、VCC。有些批次的丝印会标注"IR"或"Uxx",但并不是所有版本都有明确标识。如果你不确定哪颗是红外接收头,可以用手机摄像头对着遥控器发射管按按键,确认遥控器工作正常后,再用遥控器对着翻译机正面逐个遮挡可疑器件,同时用示波器或逻辑分析仪监测输出脚,能观察到脉冲变化的那个就是目标器件。
需要特别注意的是,翻译机主控的GPIO可能已经被固件占用。如果你打算从接收头输出脚直接引线到自己的开发板,最好先确认该引脚在主控端是否配置为红外输入功能。如果固件没有开放这个功能,你可以选择在接收头输出脚和主控之间断开,把信号引到自己的MCU上,由自己的MCU完成解码后再通过串口或其他接口与翻译机通信。这种"旁路"方案不依赖翻译机固件,通用性更强。
3.2 供电与去耦的注意事项
TSOP38238对电源噪声比较敏感, datasheet中明确建议在VCC和GND之间就近放置一个100nF的陶瓷去耦电容,同时并联一个4.7μF到10μF的电解电容。翻译机主板上的原厂设计通常已经包含了这些元件,但如果你是自己飞线取电,一定要补上这两个电容。我遇到过因为省掉去耦电容导致接收距离从8米骤降到1米的情况,补上电容后立刻恢复正常。
供电电压方面,TSOP38238支持2.5V到5.5V,但输出电平跟随供电电压。如果翻译机主板是3.3V供电,输出高电平就是3.3V,可以直接接入3.3V的MCU;如果主板是5V供电,输出高电平就是5V,接入3.3V MCU时需要加电平转换或者至少串联一个电阻分压。我个人的习惯是统一用3.3V供电,这样和大多数现代MCU的电平天然匹配,省去额外的转换电路。
3.3 接收头朝向与遮挡问题
红外接收对朝向非常敏感。TSOP38238的接收窗口有特定的视角,通常在半角45度左右。翻译机的外壳如果开孔偏小或者位置偏深,会明显缩短有效接收距离。我在改装一台样机时,把接收头从原来的深孔位置移到外壳表面,接收距离从3米提升到了10米以上。如果你打算做外壳改造,建议在接收头正前方保留一个直径不小于5毫米的通孔,并且不要用深色透明材料遮挡,深色材料会吸收大量红外光。
另外,环境中的强红外源也会干扰接收。比如某些LED照明灯具在调光时会产生38kHz附近的调制噪声,靠近这类灯具时遥控距离会明显缩短。遇到这种情况,可以在软件层面增加校验强度,或者在硬件层面给接收头加一个遮光筒,减少侧面入射的干扰光。
4. 把遥控指令映射到翻译机功能的完整方案
4.1 指令映射表的设计思路
解码得到的是遥控器的地址和命令值,这些数值本身没有语义,需要建立一张映射表把它们和翻译机的具体功能关联起来。设计映射表时,我建议遵循三个原则:高频功能放在最容易按到的按键上,危险操作需要双重确认,保留一组通用按键用于扩展。
以音诺AI翻译机为例,可以把遥控器的方向键映射为语种切换,音量加减键映射为音量调节,数字键映射为预设场景(比如1号键对应中英互译,2号键对应中日互译),电源键映射为待机唤醒。对于恢复出厂设置这类危险操作,可以要求用户连续按两次特定组合键才触发,避免误触。
| 遥控器按键 | NEC命令值(示例) | 映射功能 | 触发方式 |
|---|---|---|---|
| 方向键上 | 0x18 | 切换至上一语种 | 单击 |
| 方向键下 | 0x52 | 切换至下一语种 | 单击 |
| 音量加 | 0x15 | 音量加一档 | 单击/长按连续 |
| 音量减 | 0x07 | 音量减一档 | 单击/长按连续 |
| 数字1 | 0x16 | 中英互译模式 | 单击 |
| 数字2 | 0x19 | 中日互译模式 | 单击 |
| 电源 | 0x45 | 待机/唤醒 | 单击 |
| 组合键 | 0x16+0x19 | 恢复出厂设置 | 双击确认 |
4.2 通过串口与翻译机主控通信
如果你的方案是外挂MCU解码,那么解码完成后需要通过某种接口把指令传给翻译机。最通用的方式是串口。音诺AI翻译机的主控通常会有调试串口或者预留的通信串口,你可以通过串口发送自定义协议帧,由翻译机端的接收程序解析并执行。协议帧的格式可以很简单:帧头(比如0xAA 0x55)+ 命令类型 + 命令参数 + 校验和。
这里有一个实操经验:串口通信的波特率要和翻译机端保持一致,常见的是115200或9600。如果你不确定翻译机端的波特率,可以先用逻辑分析仪抓取翻译机启动时串口输出的日志,根据日志中的乱码程度反推波特率。另外,串口线要尽量短,如果必须长距离传输,建议改用RS485或者增加隔离,否则红外解码成功的指令可能在串口传输环节丢失。
4.3 不拆机方案:利用现有红外接收头做信号转发
如果你不想拆开翻译机,还有一个折中方案:用一个外置的红外接收模块接收遥控信号,解码后通过蓝牙或WiFi发送给翻译机。音诺AI翻译机通常支持蓝牙连接,你可以用一块带蓝牙的MCU(比如ESP32)接收红外信号,解码后通过蓝牙HID协议模拟键盘,向翻译机发送快捷键。这种方案完全不改动翻译机硬件,适合还在保修期内的设备。
不过这个方案有一个限制:翻译机必须支持蓝牙键盘输入,并且快捷键要能被翻译机的应用层识别。我在实测中发现,部分翻译机对蓝牙HID键盘的支持不完整,只能识别标准按键,无法识别组合键。这种情况下,可以退而求其次,用蓝牙串口透传,在翻译机端安装一个轻量级的接收程序来解析指令。
5. 调试过程中最容易卡住的几个环节
5.1 接收头有输出但解码全错
这是最常见的问题,表现是示波器能看到接收头输出脉冲,但解码出来的地址和命令值完全不对。根本原因通常是定时器分辨率不够或者中断响应延迟过大。如果你用的是Arduino这类平台,pulseIn()函数在解码红外时经常因为中断被其他任务打断而丢脉冲。解决办法是改用定时器输入捕获功能,或者把红外解码放在最高优先级的中断里,暂时关闭其他中断。
另一个可能的原因是载波频率不匹配。虽然TSOP38238标称38kHz,但如果你手头的遥控器是36kHz或40kHz的,接收头虽然能输出脉冲,但脉冲宽度会失真。用示波器测量引导脉冲的低电平时间,如果明显偏离9毫秒(比如只有7毫秒或超过11毫秒),就说明载波频率偏差较大,需要更换接收头或者换一个遥控器。
5.2 遥控距离短且不稳定
接收距离短通常有三个原因:供电噪声、接收头朝向不佳、发射管驱动不足。先检查接收头的去耦电容是否到位,然后用手机摄像头确认遥控器发射管在按键时确实发光。如果发射管发光正常但距离仍然短,可以尝试在遥控器发射管上并联一个更大的驱动电容,或者直接换一个发射功率更大的遥控器。
环境光干扰也是常见因素。我在一间装有调光LED灯的会议室里测试时,发现遥控距离从8米降到了不到2米。后来把接收头用黑色热缩管包了一圈,只留正前方一个小孔,距离恢复到了6米以上。这个遮光筒的做法成本极低,但效果非常明显。
5.3 指令重复触发与长按处理
前面提到过去重,但长按处理是另一个容易忽略的点。很多应用需要长按音量键连续调节音量,如果简单地去重,长按就失效了。正确的做法是区分"单击"和"长按":收到第一帧后启动一个定时器,如果在200毫秒内没有收到重复帧,就判定为单击;如果持续收到重复帧,就进入长按模式,每隔100毫秒执行一次动作,直到停止接收。
实现时可以用一个状态变量记录当前按键状态,配合两个定时器分别处理单击延迟和长按重复。这个逻辑在单片机里用状态机实现并不复杂,但如果没有处理好,用户体验会非常糟糕——要么按一下没反应,要么按一下触发好几次。
6. 扩展思路:让红外接收能力产生更多可能
6.1 学习型遥控与指令自适应
如果你希望翻译机能适配任意遥控器,可以做一个学习模式:进入学习模式后,翻译机接收并存储遥控器按键的地址和命令值,然后让用户为每个按键指定功能。这个功能的实现难点在于,不同遥控器的协议可能不同,NEC、RC5、RC6的帧格式差异较大。稳妥的做法是先实现NEC解码(覆盖大多数国产遥控器),再逐步扩展RC5和RC6。
学习模式的数据可以存储在翻译机的Flash里,掉电不丢失。存储时建议同时保存协议类型、地址、命令值和用户指定的功能ID,这样即使更换遥控器,只要重新学习一次就能继续使用。
6.2 红外与语音的协同触发
红外遥控和语音识别并不是互斥的,反而可以协同工作。比如你可以设置一个规则:当翻译机检测到特定红外指令时,自动进入语音识别待命状态,并播放提示音;或者当语音识别连续失败两次时,自动切换为红外遥控模式,提示用户使用遥控器操作。这种协同逻辑需要在翻译机的应用层做状态管理,但底层依赖的仍然是TSOP38238提供的红外输入能力。
我在一个导览项目里就用了这种协同方案:讲解员平时用语音控制翻译机播放讲解词,当环境嘈杂导致语音识别失败时,翻译机自动亮起红外接收指示灯,讲解员改用遥控器继续操作。整个切换过程对用户来说几乎无感,但可靠性提升了很多。
6.3 多设备红外组网的控制逻辑
如果你有多台音诺AI翻译机,可以通过红外指令中的地址位来区分设备。NEC协议的地址位有8位,理论上可以区分256个地址。你可以给每台翻译机分配不同的地址,然后用一个遥控器发送不同地址的指令来控制不同设备。这种方案在展厅多语种导览场景中非常实用:一个遥控器可以切换控制多台翻译机,分别播放不同语种的讲解内容。
实现时需要注意的是,接收端要过滤掉不属于自己的地址。如果翻译机的地址是固定的,你需要在解码后比较地址值;如果地址是可配置的,可以在翻译机的设置界面里增加地址配置项。地址配置的存储和读取逻辑要和前面的学习模式数据分开管理,避免混淆。
7. 我在实际改装中积累的几条经验
第一条经验是关于焊接的。TSOP38238的引脚比较细,如果你需要飞线,建议用30AWG的细线,并且先把线头上锡再焊到引脚上,避免长时间加热导致塑料封装变形。我早期用普通杜邦线直接焊,结果焊盘脱落了两颗接收头,后来改用细线加助焊剂,成功率明显提高。
第二条经验是关于测试顺序的。不要一上来就把接收头接到主控上写完整解码程序,先用示波器或者逻辑分析仪确认接收头输出波形正常,再写一个最简单的脉宽测量程序验证定时器精度,最后才实现完整协议解码。这个顺序可以帮你快速定位问题出在硬件还是软件。
第三条经验是关于固件升级的。如果你通过串口向翻译机发送指令,要考虑到翻译机固件升级后串口协议可能变化。稳妥的做法是在翻译机端保留一个协议版本号,外挂MCU在发送指令前先查询版本号,根据版本号选择对应的指令格式。这个设计在长期维护中能省去很多麻烦。
最后一条经验是关于功耗的。TSOP38238在空闲时的电流大约在0.8mA到1.2mA之间,对于电池供电的翻译机来说,这个电流不算小。如果你希望进一步降低功耗,可以在不需要红外接收时通过GPIO给接收头断电,需要时再上电。不过要注意,接收头上电后需要一定的稳定时间(大约1毫秒到2毫秒),在这段时间内收到的信号可能不准确,所以上电后最好延迟一小段时间再开始解码。