ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

红外遥控器有线输出:拆壳定位信号点,逻辑分析仪抓波形,MCU串口解析

红外遥控器有线输出:拆壳定位信号点,逻辑分析仪抓波形,MCU串口解析

前几天一个做嵌入式的朋友问我:他想把一个普通红外遥控器接到系统里,让上位机能直接读到“刚才按了哪个键”,但不想走无线接收头这条路。原因很实在——测试环境里红外干扰多,接收头拿到的是解调后的包络信号,跟遥控器发射端真正发出去的数据在电平逻辑上还有差异。所以我就给他梳理了一套“有线输出”的方案:直接把遥控器内部的数据信号用线引出来,送到逻辑分析仪抓波形,或者接到MCU上解析后走串口上报。

这个思路在嵌入式调试、遥控器兼容设备开发、量产自动化测试这些场景里非常实用。如果你手里正好有一个要处理的遥控器,又不想买现成红外解码模块,或者想精确还原遥控器发出的每一帧编码,那么这篇应该能帮你少走不少弯路。我会从为什么这么做讲起,再按实操顺序把拆壳、找信号点、接线、抓波形、解析数据、走串口输出整条链路都过一遍,最后把最常见的几个坑单独列出来。

1. 为什么非要有线方案

先说清楚一个关键点:这篇文章里说的“有线输出”,不是指把红外接收头的输出引脚通过杜邦线接到单片机或者串口上,而是直接从遥控器内部把“编码芯片/主控产生的那串调制信号”引出来。两者的差别很大,直接决定了你能拿到什么层级的数据。

1.1 无线采集的固有痛点

我们最常见的采集方式,是拿一个一体化红外接收头对着遥控器,接收头解调后输出TTL电平的脉冲信号给MCU。这个方式简单,但也有几件让人头疼的事:

第一个是环境光干扰。一体化接收头虽然内置了滤波,对可见光不敏感,但强光、荧光灯频闪、其他红外遥控设备同时工作的时候,输出端会出现杂波。你原本想抓的是按键A的数据,结果旁边一台设备发了个信号,你的解析代码就收到了乱码。

第二个是距离和角度限制。接收头有方向性,遥控器要对准它才能稳定接收。放到自动化测试设备里,每次要精确定位遥控器的摆放位置,这有点烦。而且随着时间的推移,红外发射管老化、接收头灵敏度下降,测试的误码率会慢慢变大,排查起来很隐蔽。

第三个是数据完整性问题。一体化接收头输出的是经过解调后的包络波形,和发射端原始信号在逻辑上是反相的——载波存在的时候,接收头输出低电平;没有载波的时候输出高电平。这会导致你在解析的时候必须额外做一次反相处理,还容易把“载波的有无”和“高低电平”的概念搞混。

第四个是时序精度损失。接收头内部有自动增益控制、带通滤波,信号经过它之后,边沿的上升和下降会有几微秒到几十微秒的延迟。平时解析遥控码不敏感,但如果要做设备兼容性测试,或者要精确测量发射端的脉宽参数,这个误差就不能忽略了。

1.2 有线方案的独特价值

直接从遥控器内部引出信号,最大的好处是“所见即所得”。你抓到的就是编码芯片原始输出的数据波形,没有经过任何无线收发链路,也没有环境光参与,信号质量干净、可重复性极好。

还有一个很实际的用途:可以做自动化测试。我在之前的项目里遇到过遥控器产线抽检的需求,要在几十秒内完成一个遥控器所有按键的功能验证。如果用红外接收头,需要人工对准,很慢;把遥控器的信号测试点用测试探针或者排线引出来,接上一台采集设备,按键按下瞬间就能拿到编码,效率和准确性完全不一样。

另外,有线方案不受遥控器型号限制。不同遥控器的编码协议可能不同,但只要找到信号测试点,用逻辑分析仪看一眼波形,就能确定协议类型和具体参数。这比一个个去买对应型号的红外解码模块要通用得多,尤其适合做“万能学习型遥控器”的逆向开发场景。

1.3 什么场景用得上

我接触到的实际需求大概分成三类。

第一类是研发调试。产品里要集成红外遥控功能,就需要搞清楚遥控器每一帧数据的编码格式、引导码长度、连发逻辑。这时候把遥控器信号线接到逻辑分析仪上,按键按下去,波形和位流一目了然,比自己拿红外头慢慢猜要快很多。

第二类是自动化测试。产线或者实验室里要对遥控器做功能验证,不可能让人工一个个按键去试,更不可能靠肉眼判断指示灯亮没亮。有线引出信号之后,测试系统可以在毫秒级时间内判断按键数据是否符合预期,而且稳定不受到外界干扰。

第三类是嵌入式集成。有些设备本身没有红外接收能力,但你想用遥控器给它发指令,直接用一个MCU的GPIO读遥控器的信号脚,解析成串口或者总线数据发给主控,这样既省掉了接收头,又能拿到原始数据。这个方案在DIY和产品原型阶段尤其方便。

2. 动手前的准备:看懂电路与选对工具

在拿起烙铁之前,建议先花几分钟搞清楚遥控器内部是怎么工作的,不然很容易在错误的位置焊了一根线,或者把某根不该短接的引脚弄短路。

2.1 遥控器内部信号长什么样

一个典型的红外遥控器,电路结构并不复杂:电池供电,主控芯片(通常是一个小封装的无引脚IC或者裸片COB封装)会周期性地扫描按键矩阵,当检测到某个按键按下时,它就会从某个IO口输出一串“被调制的脉冲信号”。这串信号一般不是直接驱动红外LED的,而是先经过一个三极管做电流放大,再点亮LED。所以你在电路板上能找到的测试点主要有三类:

第一类是编码IC/主控的“数据输出脚”。不同遥控器对这个引脚的叫法不同,但它通常直接或通过一个小电阻连接三极管的基极。这个点的信号逻辑电平稳定,波形幅度规整,是最推荐的测试点。

第二类是驱动三极管的基极或者集电极。如果你找不到芯片引脚定义,可以从三极管下手。基极信号和IC输出基本一致,集电极信号是载波反相后的电平,测出来的波形方向可能不一样,但一样能用。

第三类是红外发射管的两端。红外LED正极一般通过限流电阻接电池正极,负极接三极管集电极或者直接接IC输出。测量这段的电压差,能看到最接近实际发射光信号的调制波形。这个点的缺点是幅度受LED压降影响,而且有的遥控器红外管两端直接跨着大电容,处理不好会拉低信号幅度。

从经验来看,我最推荐的还是“三极管基极”或者“编码IC输出脚”,因为这两点信号是标准的数字电平,逻辑分析仪读取最友好。如果你的遥控器是COB封装的裸片,看不出芯片引脚,那就从三极管基极下手,成功率很高。

2.2 工具清单

做这个改造不需要什么昂贵设备,大部分工具做嵌入式的人都已经有:

  • 逻辑分析仪。建议至少8通道、采样率能到16M以上。遥控器的载波是38kHz,一个载波周期大约26微秒,逻辑分析仪用1M采样率就能看懂包络,用16M以上能看到载波细节。几十块钱的USB逻辑分析仪就能胜任。
  • 示波器。如果你手上只有示波器也完全可以,双通道就够用。示波器的优势是能直接看到真实电压幅度,判断是否过冲、是否有毛刺,对排查电平兼容问题很有帮助。
  • USB转TTL串口模块。用于把MCU解析后的数据发到电脑上看。不用特别高级,常见的CH340/CP2102模块都行。
  • 杜邦线、探针、测试夹。推荐买那种一头是夹子的测试线,夹在引脚上很方便,不需要长时间用手扶着。
  • MCU开发板。如果要做串口输出方案,需要一块带GPIO外部中断能力的板子,最常见的入门级开发板都能满足。

工具准备的要点是:先确认你抓的是“数字电平信号”,测量点输出范围一般就是电池电压(3V或3.3V)和GND之间,逻辑分析仪和示波器都能直接量。如果你打算把信号接到MCU上,就一定要先确认MCU的IO电平是否兼容,这个在后面的章节详细说。

3. 实操全流程:从拆壳到输出数据

好了,理论聊完了,下面直接进入操作环节。我会按照实际操作的顺序,一步步往下走。

3.1 拆壳与定位信号测试点

第一步是拆遥控器外壳。大多数遥控器是卡扣结构,从侧面或者底部用撬棒就能慢慢打开。注意有些遥控器螺丝藏在电池仓标签下面,先撕开标签看一下。拆壳的时候不要用蛮力,避免把卡扣掰断,后面还要装回去的。

打开之后,你会看到一块PCB板,上面有几样东西:按键触点/导电橡胶、电池弹片、主控板上可能是一个黑色环氧树脂封装的COB裸片(上面绑定了晶片和引线),以及一个圆形的红外发射管。还有可能看到晶振、电容电阻之类的小元件。

现在开始找测试点。最快的办法是:给遥控器装好电池,把示波器表笔或者逻辑分析仪的探针夹到三极管基极上。怎么找到三极管?红外发射管附近通常有一个黑色半圆柱形或者贴片封装的器件,那就是驱动管。基极通常是三个脚中间的那个,和编码IC之间有一个几K的电阻。如果分不清引脚,直接用万用表的二极管档,或者用示波器逐个试,按键时出现波形变化的那个就是基极。

如果你的遥控器没有三极管(现代节省成本的方案里,主控IO直接通过一个电阻驱动红外LED),那测试点就是红外LED与限流电阻连接的那个焊盘。按键时能测到一串调制脉冲波形,一样能用。

这里有一个非常重要的操作习惯:先断电再焊线。遥控器用的是电池,虽然电压低,但如果你在焊线的时候不小心把相邻引脚短接了,有可能会把编码IC打坏。我的做法是先把电池取下来,焊好线、固定好,再装回电池做电测。实际上多数情况下也不一定需要焊接——用带钩的测试夹直接夹住引脚就能稳定接触,改造成本更低。

3.2 接线与抓波形

找到测试点之后,接下来的事情就是把线和逻辑分析仪连起来。我这里以一个常见的红黑线方案为例:

把测试夹的黑色线接到遥控器电池负极,也就是GND。把测试夹的信号线接到刚才定位好的三极管基极或者IC输出脚。两条线先接好,再把USB逻辑分析仪插到电脑上打开软件。

逻辑分析仪通道建议用CH0或者CH1,设置采样率1M起步。如果你只想看包络,1M足够;如果想看载波细节,把采样率调到16M以上,通道选“数字输入”。触发方式设置成“上升沿触发”或者“下降沿触发”都可以,但是要保证触发通道是你接信号的那个通道。

设置好之后,按住遥控器上一个按键不放,软件里应该能捕捉到一段脉冲波形。如果什么都没抓到,先看看是不是触发设置错了,或者信号线没夹稳、没有共地。共地问题非常常见,好多人抓不到信号,折腾半天发现是探头的地线没接好。

抓到的波形长什么样?如果采样率是1M,你会看到一串“密集方波包络”——载波时间段表现为一簇连续的高/低翻转,无载波时间段表现为一段持续的高电平或低电平。如果你用16M以上采样率,就能看到里面每一个载波周期是26微秒左右的方波。这串信号就是遥控器发出的原始数据帧。

3.3 看懂波形与协议规则

拿到了波形,接下来就是要把它翻译成按键码。遥控器数据帧的常见结构是:引导码 + 地址/客户码 + 数据/命令码 + 结束或重复码。不同厂家方案的具体脉宽和位定义不一样,但大体规则是相通的,无非是用不同长度的高电平/低电平组合来区分逻辑0和逻辑1。

举个例子。假设你抓到一个波形,发现一帧数据开头是一个特别长的低电平脉冲(比如9ms),紧接着是一个稍短的高电平(4.5ms),这就是引导码。之后连续出现32个bit,每个bit由一段短脉冲(0.56ms)和一个不同长度的间隔(0.56ms或者1.68ms)组成。短+短表示0,短+长表示1。你可以自己在软件里用光标量一下两个边沿之间的时间,一把密钥就出来了。

如果你用的是逻辑分析仪,它的软件里一般自带红外解码功能,选择对应的协议后能直接显示解析出的十六进制码值。我常用的做法是:先用通用分析功能看包络,再用手动光标量几个关键脉宽,验证一下协议解析的准确性,避免被软件的自动识别误导。

还有一个细节:遥控器在按住按键时,每隔一段时间会重发一帧数据,有些方案重发帧没有引导码,直接发重复码。这个行为在做自动测试的时候要注意,判断“按键释放”不能只看有没有数据,要看数据帧之间的时间间隔是否超过某个阈值。

3.4 用MCU把数据变成串口流

逻辑分析仪适合开发阶段,如果想把有线输出做成一个实时可用的数据流,更好用的是MCU方案。思路很清晰:用MCU的GPIO外部中断检测信号边沿,用定时器测量高低电平的持续时间,再把脉宽归类成0/1,最后通过串口把所有按键数据发出去。

我给出一个简洁的参考伪代码,这段代码核心是“边沿中断 + 时间戳记录”:

// 伪代码:通过GPIO外部中断采集遥控器有线信号 volatile uint32_t last_tick = 0; volatile uint16_t last_high_width = 0; volatile uint16_t last_low_width = 0; void ir_signal_isr(void) { uint32_t now = get_tick_us(); uint32_t dt = now - last_tick; last_tick = now; if (gpio_read_level()) { // 高电平刚刚结束 last_high_width = dt; classify_and_decode(last_high_width); } else { // 低电平刚刚结束 last_low_width = dt; classify_and_decode(last_low_width); } }

实际的代码需要处理GPIO输入配置、中断优先级,以及把连续的高低脉宽序列累积成一个数据帧。我的建议是:先采集完整的高低电平宽度序列,存到数组里,等一帧数据结束后再统一解码。解码时设定两个阈值:短脉宽和长脉宽。比如短脉宽在0.4ms到0.9ms之间,长脉宽在1.4ms到2.0ms之间,超过阈值就认为是引导码或者异常数据。不同遥控器的参数不同,先拿逻辑分析仪量一遍再定阈值,比凭空猜测稳妥得多。

连接的时候要注意电平匹配。遥控器电池如果是两节干电池,信号幅度通常约3V;如果是纽扣电池,可能也是3V。MCU常用3.3V供电,在3.3V下读到3V电平是安全的,基本都能识别为高电平。但如果遥控器或者其他设备是5V电平,就不能直接进3.3V的MCU引脚,需要先做分压处理,不然时间长了会损伤引脚。

4. 常见问题与排查技巧

这套流程其实不复杂,但实际动手的时候总会遇到几个经典问题。下面把排查顺序和原因说清楚。

4.1 抓不到波形的排查顺序

抓不到波形,先别急着怀疑遥控器坏了。我的排查顺序是这样的:

先确认信号线共地。逻辑分析仪的地线和遥控器的电池负极之间必须有通路,如果你只接了信号线没接地线,或者夹子松了,是抓不到任何有效波形的。这一步看起来简单,但实际出问题的概率最高。

再确认触发设置。触发通道要选你实际接入的通道,触发电平要对。数字逻辑分析仪通常没有可调触发电平(只有阈值判断),但如果软件里设置了“边沿触发+触发通道不对”,信号过来也不会被记录。

然后用万用表或示波器验证信号。在按键的时候,测量测试点对地电压是否在0和电池电压之间跳变。如果万用表读数几乎不变化,或者变化幅度只有几十毫伏,证明你找的测试点不对,需要换一个位置。我经常用示波器的单次触发模式抓取,设置一个合适的触发电平,按键瞬间就能定格波形。

最后还要留意是否选错了按键。有些遥控器的按键是扫描矩阵,个别按键损坏或者导电橡胶老化,按下时根本不会有信号出来。换一个确定正常的按键再试,往往能定位问题。

4.2 波形毛刺与解析失败

抓到了波形,但发现波形上有很多毛刺、边沿抖动,或者解析出来的是乱码。这种情况通常有几个来源。

第一个是物理接触不良。测试夹没夹紧,或者杜邦线内部断了,会在信号线上产生随机脉冲。排除方法很简单:用手摇一摇线,看波形是否跟着乱跳。如果摇一下就出现毛刺,先把夹子换掉或者重新焊一下。

第二个是电池老化。遥控器电池用了很久,内阻变大,按键时电压瞬间跌落,会导致信号幅度波动、脉宽失真。换一节新电池再测,很多“解析错误”的问题就消失了。

第三个是采样率不够。如果你的逻辑分析仪设置的是几百K的采样率,载波周期只有26微秒,一个周期都采不到几个点,波形边缘自然不清晰。把采样率调到4M以上再看,波形就会规整很多。注意采样率调高,采集时长会变短,但只要抓住几秒钟内的按键事件就够了。

第四个是极性理解错误。接收头输出与发射端信号逻辑相反,如果你之前用接收头做过解码,容易把电平方向搞反。解决的办法是:以逻辑分析仪抓到的实际波形为准,标出哪一段是对应“载波打开”,再定义你的逻辑0和逻辑1,不要凭经验猜。

4.3 常见问题速查表

现象可能原因排查/解决办法
完全抓不到信号地线未接/接触不良先用万用表确认测试点对地电压变化
完全抓不到信号触发通道选择错误确认触发通道与信号实际接入通道一致
完全抓不到信号测试点选择错误改用三极管基极或红外LED焊盘重新定位
波形有毛刺杜邦线接触不良换线、重新夹线,焊接更可靠
波形有毛刺电池电量不足换新电池,观察电压是否稳定
波形边沿模糊采样率太低逻辑分析仪采样率调到4M以上
解析的码值不对高低电平反相识别根据实际波形重新判断逻辑0/1
解析的码值不对脉宽阈值不合适用光标测量标准脉宽,重新设定阈值
连接MCU后损坏5V电平直接进3.3V引脚增加分压电阻或电平转换电路
按住按键时数据中断重复帧机制不同了解该遥控器的重复帧格式,延长采集时间

最后一个忠告:做这种改造最忌讳的是一上来就急着接线、急着抓数据。先花十几分钟把测试点定位准,确认电平范围,再考虑焊接或者夹线,后面能省掉一大半的排查时间。尤其是有线输出这个思路,真正的难点不在接线上,而在你对遥控器信号结构的理解有多深。把常见红外协议的引导码、数据位、重复帧这几个概念吃透,遇到任何遥控器都会顺手很多。

RELATED READING

延伸阅读

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