
1. 项目概述从“红外”热词到MCP2120的工业级桥梁最近在逛一些电子论坛和项目分享社区发现“红外”相关的讨论热度一直不减。从“红外遥控器”这种消费电子的经典应用到“工业红外相机”、“红外倒车雷达”、“红外90640监测”这些听起来就很高端的工业与安防场景再到“无人机红外数据集”、“深度相机红外镜头标定”这类前沿的机器视觉课题红外技术的身影无处不在。这让我想起手头一个老项目里用到的关键芯片——Microchip的MCP2120。当时为了在单片机和一台带IrDA接口的老式PDA之间传点数据可没少折腾。现在回头看MCP2120这款经典的IrDA编码解码器恰恰是连接我们熟悉的微控制器数字世界和那个看不见的红外物理层的一座非常可靠的桥梁。它解决的就是把UART发出的串行数字信号转换成符合IrDA物理层规范的红外光脉冲或者反过来把接收到的红外脉冲还原成UART能识别的数字信号。今天我就结合自己的踩坑经验把这颗芯片里里外外、从原理到配置掰开揉碎了讲清楚希望能给正在或即将与红外通信打交道的朋友一些实实在在的参考。2. MCP2120核心原理与IrDA标准深度拆解2.1 IrDA物理层不止是“闪一下光”那么简单很多人一提到红外通信第一反应可能就是电视遥控器按一下按键LED闪一下电视就有反应了。但工业级的IrDAInfrared Data Association标准可比这个复杂和严谨得多。它不是一个随意的闪光而是一套完整的物理层和链路层协议。MCP2120主要实现的是最底层的物理层编码即IrDA 1.0标准中定义的SIRSerial Infrared模式最高速率到115.2 kbps。它的核心原理叫做“3/16编码”也称为脉冲位置调制。这是什么意思呢我们普通的UART信号一个比特位比如‘0’是用一段时间的低电平来表示的。但在IrDA SIR模式下一个比特位的‘0’并不是持续的低电平而是被编码成一个宽度为3/16个位周期的窄脉冲。举个例子在115200bps的波特率下一个位周期大约是8.68微秒。那么一个代表‘0’的脉冲其实际发光时间就只有8.68 * (3/16) ≈ 1.63微秒。而比特位‘1’则对应无脉冲即LED不发光。注意这里非常关键IrDA通信时红外LED是“平时不发光发‘0’时才短暂闪一下”。这和我们直觉可能相反但这样做有两个巨大好处一是极大降低了平均功耗特别适合电池供电设备二是“无光”状态代表‘1’使得通信链路在没有数据传输时处于“空闲高”状态这与UART的空闲状态通常为高电平逻辑一致便于对接。MCP2120内部的核心就是一个精密的定时器/计数器它严格按照3/16的比率将来自TX引脚发送的UART标准NRZ不归零码转换成上述的脉冲序列去驱动红外发射管。反之从RX引脚接收进来的微弱电流信号由红外接收头产生它则负责检测其中宽度约为1.63微秒的窄脉冲并将其还原为一个完整的低电平位‘0’无脉冲则恢复为高电平‘1’输出给单片机的RX引脚。2.2 MCP2120的引脚功能与内部架构解析MCP2120通常有PDIP、SOIC等封装以8引脚为例其核心引脚并不多但每个都至关重要VDD / VSS电源和地。工作电压范围通常是2.0V到5.5V兼容3.3V和5V系统。TXIR / RXIR这是连接红外收发器的引脚。TXIR输出编码后的脉冲信号直接驱动红外发射LED的阴极通常串联一个限流电阻。RXIR则连接红外接收模块的输出端。TX / RX这是连接单片机UART的引脚。TX接单片机的RXRX接单片机的TX。这里容易搞反记住数据从单片机“发送”出来进入MCP2120的RX引脚经MCP2120编码后从TXIR发出。所以信号流向是MCU.TX - MCP2120.RX - (内部编码) - MCP2120.TXIR - 红外LED。SD关断引脚Shutdown。拉低时器件进入低功耗模式此时电流消耗可降至1微安以下。正常工作时拉高。RESET复位引脚低电平有效。通常可以直接上拉到VDD。其内部可以看作是两个独立的方向通道一个编码器Encode和一个解码器Decode。编码器通道监控RX引脚的电平一旦检测到下降沿起始位开始就启动内部定时器在每一个位周期的3/16时刻进行采样如果此时RX为低即比特‘0’则在TXIR产生一个负脉冲。解码器通道则持续监测RXIR的输入使用一个窗口比较器来识别符合3/16宽度的有效脉冲并将其展宽为一个完整的位周期低电平输出到TX引脚。3. 硬件电路设计从原理图到PCB的避坑指南3.1 红外收发器选型与接口电路MCP2120本身不发光也不收光它需要外接红外组件。这部分是硬件成败的关键。发射端通常选用标准的940nm红外发射二极管IRED。电路非常简单MCP2120的TXIR引脚通过一个限流电阻连接到二极管的阴极二极管阳极接VCC。电阻值需要计算R (VCC - Vf - Vol) / If。其中Vf是二极管正向压降约1.2VVol是MCP2120 TXIR引脚在输出低电平时的压降查数据手册典型值0.4VIf是你期望的驱动电流。对于小功率、短距离通信10-20mA足够若需更远距离如数米可提高到50-100mA。例如VCC5V目标If20mA则 R (5 - 1.2 - 0.4) / 0.02 170Ω可取150Ω或180Ω标准值。接收端强烈建议使用集成的红外接收模块而不是单独的光敏二极管加放大电路。这些模块如VS1838B、HS0038等内部已经集成了光电二极管、前置放大器、带通滤波器和解调器。它们输出的是解调后的数字信号可以直接送给MCP2120的RXIR引脚。这省去了大量模拟电路设计和抗干扰调试的麻烦。实操心得接收模块有三个引脚VCC GND OUT。OUT脚接MCP2120的RXIR。这里有一个大坑多数集成接收模块的输出逻辑是“有红外脉冲时输出低电平无脉冲时输出高电平”。而MCP2120的RXIR要求是有效的3/16脉冲为低电平。这听起来刚好匹配对吗但问题在于接收模块本身有一个载波频率通常是38kHz。IrDA SIR的脉冲是基带的没有38kHz载波普通遥控接收模块会滤除非38kHz的信号导致根本收不到IrDA信号。必须选用专门支持IrDA的接收器如Vishay的TFDU4101收发一体或独立的接收器如TSOP34838注意型号后缀需支持IrDA速率。如果误用普通38kHz遥控接收头通信必然失败。3.2 电源、去耦与布局布线要点电源去耦在MCP2120的VDD和VSS引脚之间必须就近放置一个0.1μF的陶瓷电容。这是芯片稳定工作的基石用于滤除高频噪声。如果电源线较长或系统中有其他数字噪声源可以再并联一个10μF的钽电容或电解电容。信号上拉MCP2120的TX、RX引脚是CMOS输入/输出。如果与之连接的单片机引脚在复位期间为高阻态为了避免悬空引入噪声可以在TX、RX线上各加一个4.7kΩ - 10kΩ的上拉电阻到VDD。这不是必须的但能提高系统鲁棒性。PCB布局最短路径去耦电容务必紧贴芯片电源引脚。MCP2120与红外收发器之间的连线TXIR到LED RXIR到接收头应尽可能短以减少辐射干扰和信号衰减。地平面保证一个完整、低阻抗的地平面对于高速数字信号和敏感的模拟接收信号都极其重要。隔离如果发射功率较大可将发射部分电路稍远离敏感的接收电路和单片机避免强发射信号通过空间耦合干扰接收端或电源。4. 软件配置与通信调试实战4.1 单片机端UART配置MCP2120对单片机来说是透明的它不改变数据内容只改变物理表示形式。因此单片机端的软件开发和与普通U通信完全一样无需任何特殊驱动或协议。你只需要正确初始化UART外设。关键参数必须匹配波特率这是最重要的参数。MCP2120支持从2400bps到115200bps的标准波特率。单片机UART的波特率必须与MCP2120工作的波特率严格一致。通常我们使用最高的115200bps以获得最快速度。数据格式必须设置为8位数据位、无校验位、1位停止位8N1。这是IrDA SIR的标准格式MCP2120固定为此格式无法更改。信号极性单片机端的UART应配置为标准的TTL/CMOS电平空闲高起始位为低。这与MCP2120转换前后的逻辑一致。以下是一个STM32 HAL库的初始化示例115200bps 8N1UART_HandleTypeDef huart1; void MX_USART1_UART_Init(void) { huart1.Instance USART1; huart1.Init.BaudRate 115200; huart1.Init.WordLength UART_WORDLENGTH_8B; huart1.Init.StopBits UART_STOPBITS_1; huart1.Init.Parity UART_PARITY_NONE; huart1.Init.Mode UART_MODE_TX_RX; huart1.Init.HwFlowCtl UART_HWCONTROL_NONE; huart1.Init.OverSampling UART_OVERSAMPLING_16; if (HAL_UART_Init(huart1) ! HAL_OK) { Error_Handler(); } }初始化后你就可以直接使用HAL_UART_Transmit()和HAL_UART_Receive()函数进行收发就像连接了另一片单片机一样。4.2 上电时序与复位处理虽然软件简单但硬件上电时序有个小细节需要注意。确保在单片机UART开始工作之前MCP2120已经完成上电并脱离复位状态。一个稳妥的做法是系统上电。单片机初始化GPIO将RESET、SD引脚设为输出高电平确保MCP2120处于工作模式。延时几十毫秒确保电源稳定。再初始化UART并开始通信。4.3 调试方法没有红外也能测在焊接好电路后如何验证MCP2120本身是否工作正常这里分享两个非常实用的调试技巧技巧一环路自测Loopback Test这是验证MCP2120编码/解码功能最直接的方法。用杜邦线将MCP2120的TXIR引脚和RXIR引脚短接。这样从单片机发出的数据经过MCP2120编码成红外脉冲又从TXIR发出直接被RXIR接收再解码回UART信号给单片机。单片机发送一个字符串然后自己接收如果能够正确回环收到说明MCP2120的编码解码电路工作完全正常。这排除了红外收发器件和光路的问题。技巧二用逻辑分析仪抓取波形这是终极调试利器。将逻辑分析仪的探头同时连接到单片机TX引脚MCP2120的RX这是原始的UART信号。MCP2120的TXIR引脚这是编码后的3/16脉冲信号。MCP2120的RXIR引脚这是接收端输入的信号在环路测试时就是TXIR的信号。单片机RX引脚MCP2120的TX这是解码恢复后的UART信号。通过对比这四个信号你可以清晰地看到原始UART的‘0’低电平如何被压缩成一个窄脉冲。窄脉冲的宽度是否精确为3/16位周期。解码后的信号是否完美还原了原始波形。 任何时序不对、脉冲畸变、信号毛刺都无处遁形。5. 典型应用场景与扩展思考5.1 从消费级到工业级的场景映射理解了MCP2120我们再回头看那些网络热词就能明白它能用在哪儿替代老式串口线这是最经典的应用。两台设备如工控机与触摸屏、单片机与蓝牙/Wi-Fi模块的配置口之间需要短距离、定向、免许可的数据交换又不想插线IrDA是完美选择。MCP2120让任何带UART的设备瞬间拥有IrDA能力。特定工业传感数据采集例如在高压或旋转设备上传感器通过单片机采集数据可以通过IrDA无线传输到固定的接收端解决滑环磨损或高压隔离问题。虽然速度不快但对于温度、振动等慢变信号足够。设备配置与诊断很多工业设备如变频器、伺服驱动器留有专门的IrDA配置口用于现场工程师用手持终端进行参数设置或故障诊断避免打开柜门接触强电部分。用MCP2120可以自制这样的配置工具。与“红外热词”的关联红外遥控MCP2120做的是双向数据通信比单向遥控复杂。但你可以用它来学习或模拟更复杂的遥控协议如某些空调的编码前提是解析其编码规则。红外测温/热成像部分高端红外测温枪或热像仪的数据输出接口就是IrDA。用MCP2120加单片机可以搭建一个数据记录器自动读取并存储测量数据。无人机红外数据集也许你的无人机需要与地面站进行轻量、抗射频干扰的通信IrDA是一个有趣的备选方案。5.2 性能边界与替代方案MCP2120很好但也有其局限速率上限115.2kbps对于大量数据传输如图片是瓶颈。距离与角度典型距离在1米以内且需要大致对准。不适合全向或远距离通信。环境光干扰强光特别是含红外成分的可能干扰接收。如果需要更高速度可以寻找支持FIR4Mbps或VFIR16Mbps标准的芯片但电路更复杂。对于更长距离、全向的通信则应考虑蓝牙、Zigbee或LoRa等射频方案。MCP2120的核心价值在于其简单、可靠、低成本以及在特定隔离、定向、抗射频干扰场景下的不可替代性。最后一个小提醒在设计产品时如果考虑使用IrDA务必在机壳上为红外收发器开设透明的窗口通常使用暗红色或黑色的透红外塑料并保持窗口清洁。同时发射和接收电路的光路轴心要尽量对准偏移角度最好在±15度以内以确保通信质量。