红外通信的 “闪光密码”:NEC 编码有多神?

13 阅读8分钟

一、它是什么?

想象一下,你想用闪光灯隔着房间给队友发一串数字密码。你们事先约定好:

  • “亮一下-短暗”代表数字 0
  • “亮一下-长暗”代表数字 1

NEC编码就是红外世界的这种“闪光密码” 。它是一种低速、单向、基于脉冲间隔调制的红外通信协议,是消费电子遥控领域几十年来最通用、成本最低的解决方案。

它的核心思想异常简洁:用两个不同时长的“脉冲-间隙”组合,来定义逻辑“0”和逻辑“1” 。所有复杂的指令,都由此基础“字母”构成。

二、它是如何工作的?

第一步:定义“字母”(0和1)

  • 逻辑 0:发射560微秒的红外脉冲,然后停止发射560微秒。
  • 逻辑 1:发射560微秒的红外脉冲,然后停止发射1690微秒。

关键记忆点:脉冲宽度固定(560μs),区别在于停止发射的间隙长短。间隙长的是1,短的是0。

第二步:组装“电报”(一帧数据)
一次按键动作,遥控器会发出一串包含地址、命令和校验的完整“电报”,共32位。其结构如下表所示:

组成部分占位通俗解释工程意义
引导码特殊脉冲“注意,听令!” 一个9ms的持续脉冲,紧跟一个4.5ms的寂静。用于唤醒和同步接收器。接收器检测到这个独特的长脉冲,就知道有效信号开始,启动解码流程。
设备地址8位“收件人是谁?” 遥控器的唯一ID,比如电视A的地址是0x10,音响B是0x20确保指令不会被其他设备误接收。注意:有标准NEC(8位地址)扩展NEC(16位地址) 两种变体。
地址反码8位“收件人核对码” 将设备地址的每一位取反(0变1,1变0)。提供即时检错功能。接收端会检查地址和地址反码是否恰好相反,如果不符,说明传输中出错,整包数据丢弃
命令码8位“具体干啥?” 具体的操作指令,比如0x0A代表“开机”,0x47代表“音量加”。这是控制功能的本质。
命令反码8位“命令核对码” 命令码的按位取反。作用同地址反码,用于校验命令数据是否准确。

第三步:处理“长按”(重复码机制)
当你按住按键不放时,遥控器很“聪明”:它先发一次完整的32位“电报”,之后每隔约110ms,只发一个简短的重复码(一个9ms脉冲 + 2.25ms低电平 + 560μs脉冲)。接收端收到重复码就理解为:“用户仍在执行上一个命令”。这大大节省了电量,并实现了流畅的连续操作(如持续调音量)。

第四步:隐身术(载波调制)
红外LED并非简单地亮灭,而是在“亮”的周期内,以38kHz(每秒38000次)的频率疯狂闪烁

  • 作用1:抗干扰。接收头被设计成只对这个特定频率敏感,能有效过滤太阳光、灯光等发出的恒定或低频红外噪声。
  • 作用2:提功率。在“发射”周期内,LED以高频通断工作,可以在不烧毁的情况下获得更高的瞬时发射功率,从而增加传输距离。

三、工程设计的“天花板”

  1. 天生慢速:传输一帧指令需约67.5毫秒,数据速率仅~500比特/秒。只能用于传输几个字节的指令。
  2. “对讲机”困境(单向性) :只能遥控器发,设备收。设备无法回复“收到”或“状态”,是纯粹的“开环控制”。
  3. 毫无秘密可言:信号在空中明文传播,任何红外学习器都能轻松复制,绝对不适合任何安全场景(如门禁、车门)。
  4. 地址空间紧张:标准NEC只有256个地址,不同厂商设备可能冲突,导致“一个遥控,两家开机”的混乱。
  5. 物理环境敏感:距离短(通常<10米)、需大致对准、易被遮挡。强光(特别是节能灯)和同频红外源会造成严重干扰。

四、实践中必须处理的“坑”

在写代码和调试时,这些是生死线:

  1. 时序容差:协议里的560μs、1690μs不是绝对精确值。你的解码程序必须有合理的误差窗口(通常±20%),否则会因微小晶体振荡差异而失败。
  2. 重复码精确识别:必须严格区分9ms+4.5ms的引导码和9ms+2.25ms的重复码,否则会将“长按”误判为“多次短按”。
  3. 信号消抖与超时复位:红外接收头在无信号时可能输出噪声。解码程序必须在检测到有效的引导码后才启动,并且在任何阶段如果长时间(如>20ms)收不到预期信号,必须自动复位,等待下一个引导码。
  4. 电气噪声:接收头的电源必须干净。一个100μF电解电容并联一个0.1μF陶瓷电容进行滤波,是提升稳定性的廉价而有效的手段。
  5. 最阴险的干扰:同频冲突:如果两个NEC遥控器同时对准一个接收器,它们的信号会在空中叠加,导致接收器看到的全是乱码。协议本身对此无解

五、明确能做什么,不能做什么

✅ 黄金适用场景(它被设计用来做什么):

  • 所有传统家电遥控:电视、空调、风扇、音响、机顶盒。这是它的主场。
  • 低成本单向控制:如智能插座的红外学习控制、玩具、简单的展示设备开关。

⚠️ 可谨慎使用场景(有条件,需精心设计):

  • 两个单片机间短距离通信:仅在极低速、无遮挡、环境光可控的实验室或封闭设备内部可行。你必须自己解决冲突和容错问题。

❌ 绝对禁止场景(用它就是灾难):

  • 任何安全系统:如智能门锁、车库门、保险柜。
  • 工业控制与自动化:环境恶劣(灰尘、振动、电噪声),可靠性要求高,红外链路完全无法胜任。
  • 需要双向通信或高速数据传输的场合:如传感器数据回传、文件传输。

六、总结

NEC协议是一个经典的“够用就好”的工程范例:它用最简单的规则(脉冲间隔编码)、基础的自检机制(反码校验)和通用的物理层(38kHz载波),解决了海量设备的单向控制问题,并将成本压到极致。

当你要实现它时,请对照此清单:

  1. 硬件设计

    • 发射:用三极管驱动红外LED,而非MCU直驱,以提升功率。
    • 接收:给接收头供电引脚添加滤波电容(100μF + 0.1μF)。
    • 光学:考虑为发射管和接收头增加遮光罩或滤光片,减少环境光干扰。
  2. 软件解码(核心)

    • 必须使用“状态机” ,而非脆弱的delay()循环,保证系统稳定。
    • 必须校验反码,校验失败则静默丢弃该帧。
    • 必须正确处理引导码和重复码,实现稳定单按与连按。
    • 必须实现超时复位机制,防止程序卡死。
    • 优选方案:使用MCU的输入捕获功能精确测量脉冲宽度,这是最可靠、高效的方式。
  3. 测试验证

    • 跨环境测试:在日光、节能灯下测试最远距离和稳定性。
    • 工具验证:用手机摄像头(能看到红外光斑)或逻辑分析仪确认信号是否正常发出和解码。

在工程选型时记住:当你在考虑“要不要用NEC”时,通常意味着你的需求很简单,成本很敏感。但凡需求复杂一点点,就该看看蓝牙、Wi-Fi、Zigbee这些“摩托车”和“汽车”了。

掌握NEC的价值在于:它教会你如何从电路、时序、软件、抗干扰的完整链条思考一个通信问题——这是所有嵌入式通信协议的通用思维模型。

最终,理解NEC不仅仅是理解一个通信协议,更是理解如何在有限的资源(成本、功耗、速率)下,通过严谨的工程实现(硬件设计、软件容错、边界处理)来达成一个特定目标的完整思维过程。

以上是个人的一些浅见,如有不当之处,欢迎批评指正。

这波内容真帮到你了?点个关注不迷路!专属工具箱持续更新,需要时直接翻、拿起来就用~