简介这份PDF文档面向家电控制、嵌入式系统与电磁兼容设计工程师系统解析空调内外机电流环通讯的技术原理与工程实现。资料共1个PDF文件大小约379KB已吸引302人学习适合需要掌握电流环通信底层机制的开发与调试人员。文档从电流信号表示二进制的技术基础出发说明半双工分时复用实现双向交互的工作机制并列举温度设定、模式切换、压缩机频率、故障代码等关键传递信息同时提供两套典型硬件电路原理图详细分析发送端、接收端光耦导通与关闭引起的电平变化以及AC220V整流滤波后DC142V供电的抗干扰设计。软件实现部分对比了双IO模拟与UART串口两种方案还给出厂商通信协议格式有助于读者直接参考进行软硬件联调与电磁兼容优化。1. 电流环通讯为什么空调内外机偏爱一根线上的双向对话一台家用变频空调内机屏显正常外机却整机没电。维修人员拿万用表量通讯线直流电压十几伏正常。可外机就是不动。问题出在通讯线传的根本不是“电压信号”而是“电流信号”——电压正常只能说明主机侧在供电环路通没通、数据有没有传都得看电流的变化。这就是空调内外机电流环通讯把直流供电和双向数据复用在一根线上通过环路电流的跳变交换命令与状态广泛存在于家用变频空调、一拖多和多联机系统里。这篇笔记从原理、电路结构、软件协议、现场调试到实例验证逐步拆开讲适合正在接触空调通讯、或者遇到过“量电压正常就是不通”这类问题的开发者。2. 从噪音现场到两根线电流环抗干扰原理与信号叠加方式2.1 电流为何比电压抗干扰低阻抗回路与共模免疫空调外机旁边是整台设备里电磁环境最恶劣的位置变频模块的IGBT高频开关、压缩机的启动大电流、继电器与接触器的吸合断开全都在同一块电气空间里。如果用电压型通讯接收端必须依赖双方的地电位一致可地线在这种强功率设备里本身就是一根天线地电位差会直接叠加进逻辑电平判断线长一点还会出现分压和反射干扰来了就容易误码。电流环绕开了这个核心矛盾电流是串联量环路里任意一点的电流都相同。接收端在环路里串一个小电阻检测电阻两端的电压变化本质上是看“电流档位变了没有”而不是看“对地电压是多少”。地电位差在电流环里表现为共模电压对串联电流的采样几乎没有贡献。这正是工业上4-20mA电流环在长距离、强干扰场合长期存活的原因空调电流环通讯只是把这个思路搬到了低成本的两根线上。现场怎么快速判断一套系统是不是电流环把万用表打到电流档串进通讯线如果能量到一个持续的直流电流并且通讯时有明显跳变那就是电流环。电压档只能看到供电看不到数据通路。2.2 直流偏置与电流跳变一根通讯线同时完成供电、下行与上行常见电流环是二线制一根信号线一根地线。空闲状态时主机侧给出一个直流偏置电流一般在10mA附近。这个直流同时干三件事给从机控制板提供弱电电源、作为空闲电平基准、维持环路处于“通”的状态。要发送数据时发送端用开关器件把环路电流往下拉或往上抬比如“电流高于阈值逻辑0低于阈值逻辑1”接收端通过光耦或比较器把这个电流差还原成TTL电平。在同一根线上完成上行和下行靠的是半双工分时主机发送下行命令时电流跳变由主机侧的开关管产生从机要应答时切换到从机侧的开关器件去改变环路电流主机再从采样电阻上读回来。同一时刻只能有一个方向在发所以帧与帧之间必须留出安静时间否则两边的开关同时动作电流就会叠加成无法解析的波形。需要注意不同厂家的电流极性定义并不统一有的把“大电流1”有的正好相反。调试前先确认自家硬件对应的逻辑极性否则后面全是对反的。2.3 速率、线长与RC时间常数电流环的边界在哪里电流环很少跑高速这不是芯片算力不行而是物理链路决定的。光耦的响应速度、线缆的分布电容、接收端的RC滤波都会把方波边沿磨圆。速率越高位时间越短边沿变形占的比例越大UART采样点就越容易错位。变频空调常见的电流环速率是2400bps和4800bps9600在复杂布线下比较勉强。参数常见区间说明通讯速率2400/4800 bps9600需缩短线缆并减小RC时间常数静态直流偏置约10mA同时承担从机供电与空闲电平数据态电流跳变5mA以上跳变小省电但抗噪声边界差帧间安静时间20~50ms半双工切换与电容充电都要时间这些参数互相牵制把RC时间常数调小边沿变陡但抗毛刺能力下降调大则滤波变强但高速率下直接收不到。如果现场必须用长线最稳妥的做法是先降波特率而不是先调RC。3. 电路结构拆解内机侧/外机侧的关键器件与必调参数3.1 发送端三极管/开关管如何把UART电平变成电流跳变最常见的发送端电路是NPN三极管集电极开路接法。MCU的TXD引脚经基极限流电阻进三极管基极集电极串在环路上发射极接环路地。TXD输出高电平时三极管导通把环路电流拉低输出低电平时三极管截止电流回到静态偏置值。这样就把UART电平直接变成了环路电流的跳变不需要额外协议转换芯片。基极限流电阻的取值是个基本功想要饱和导通基极电流至少要达到集电极电流的1/10以上β的饱和裕量。假设环路跳变电流是10mA三极管β按100算基极电流给1mA就够MCU高电平3.3V减去0.7V压降限流电阻取2.2kΩ左右。实际设计时我会再留一倍裕量取1kΩ到1.5kΩ确保低温或器件老化后仍然饱和充分。还有一处容易被忽略发送端的开关只管“拉低”或“释放”真正决定电流跳变幅度的是环路里的限流电阻或恒流源。如果把限流电阻放得太大跳变幅度不够接收端比较器就没有足够的信号裕量放得太小静态功耗又会升高。一般设计目标是让跳变幅度在5mA以上配合100Ω采样电阻就有0.5V以上的摆幅可供判断。3.2 接收端采样电阻、比较器、光耦的分工与参数匹配接收端有两种常见做法。一种是光耦直接串在环路上靠LED的导通与否还原电平优点是电路简单缺点是LED的正向压降吃掉了一部分电压裕量且CTR会随时间和温度衰退用得久了阈值会飘。另一种是采样电阻加比较器加光耦隔离信号先被电阻转成电压、比较器判断出逻辑电平、光耦再负责隔离传输调试点更多但性能稳定我一般推荐后者。采样电阻阻值不宜过大100Ω附近是常见选择。静态电流10mA时100Ω上有1V压降数据跳变5mA时再叠0.5V摆幅比较器阈值取在1.25V左右就能稳定区分。比较器必须加迟滞否则输入落在阈值附近时噪声会让输出反复翻转。迟滞幅度取满摆幅的5%比较合理也就是0.05V左右太小等于没加太大又会吞掉有效脉冲宽度。接收端的RC滤波时间常数要和位时间匹配。2400bps的位时间约416μs我一般把滤波时间常数控制在40~80μs之间也就是位时间的十分之一到五分之一。这样既能滤掉高频毛刺又不会把边沿磨到UART无法采样的程度。调这个参数时要和波特率联动只改RC不降速或者只降速不改RC都会顾此失彼。3.3 电源与地线拓扑内外机不共地为什么还能工作电流环通讯一个很巧妙的地方在于供电与信号共用通路。常见二线制实现里外机控制板的弱电电源就取自这根通讯线上的静态直流数据跳变期间由板上的储能电容维持供电。所以通讯线断了外机控制板会彻底断电这也是现场“内机正常、外机全黑”的常见原因。内外机之间通常不共地电流环路是两板之间唯一的电气连接再配合光耦做隔离就切断了大功率地环路电流对通讯回路的干扰路径。地电位差即使有几伏甚至几十伏只要没超过光耦的隔离耐压就不会影响逻辑判断。这也是电流环在空调这种“强弱电混装”场景里能站稳的原因。如果系统里还存在额外的辅助电源线地线拓扑会发生变化静态电流的流向也不再单一调试时得先看图纸再判断。同一套电流环电路在不同供电拓扑下表现会差很多。4. 软件落地从UART时序到帧解析、超时与重发的状态机4.1 物理层到数据链路层电流环是透明管道电流环物理层做的事情只有一个把UART电平变成电流跳变再把电流跳变还原成UART电平。对MCU来说电流环就是一个透明管道UART外设的TX和RX直接接在驱动级和接收级上不需要在物理层做额外编码。这样协议栈完全复用成熟的UART逻辑成本低、稳定可靠。唯一容易翻车的是极性匹配。UART空闲电平是高电平接收端的空闲态必须对应该电平否则线上没数据时UART会认为是持续的“0”一进来就触发错误中断。如果硬件已经把极性做反了可以在初始化时配置UART的极性反转位或者加一级反相器。不要试图在软件里逐位取反来补救那会让错误处理复杂度失控。4.2 帧结构设计帧头、地址、命令、长度与校验的取舍物理层只管搬运字节帧层要解决误码、粘包、超时三个问题。空调电流环的帧结构通常不长常见设计是双字节帧头加长度加命令加地址加数据加校验。字段长度说明帧头11B固定0xAA帧头21B固定0x55长度1B从命令到数据的总字节数命令1B高位区分请求/应答地址1B从机地址0xFF为广播数据N B温度、风速、故障码等负载校验1B长度、命令、地址、数据逐字节异或双字节帧头比单字节帧头更可靠基础是为了降低噪声伪帧的概率。长度字段放在前面是让接收端一开始就知道要收多少字节收不齐就超时复位。校验用异或足够覆盖一帧十来个字节的数据CRC8更稳但代码量略大视具体平台存储决定。我一般不建议在帧结构里做转义空调电流环帧很短用长度字段约束数据范围比转义机制简单可靠得多。4.3 一个最小帧解析状态机C语言实现与边界处理帧解析用状态机实现接收中断只负责把字节喂进来解析在主循环里完成。这段代码是核心骨架可以直接移植到项目里/* 帧解析状态机配合UART接收中断使用每收到1字节调用一次 */ enum { ST_WAIT_H1 0, /* 等待第1帧头 */ ST_WAIT_H2, /* 等待第2帧头 */ ST_RX_DATA, /* 收长度、命令、数据 */ ST_CHECK /* 收校验字节 */ }; #define F_HEAD1 0xAA #define F_HEAD2 0x55 #define F_DATA_MAX 14 /* 数据区上限防止长度字段被干扰搞大 */ static uint8_t rx_buf[F_DATA_MAX 2]; static uint8_t rx_idx; static uint8_t data_len; static uint8_t calc_cs; static uint8_t f_state ST_WAIT_H1; /* 返回1表示收到一帧完整且校验正确的数据帧 */ uint8_t frame_parse(uint8_t byte) { switch (f_state) { case ST_WAIT_H1: if (byte F_HEAD1) { f_state ST_WAIT_H2; } return 0; case ST_WAIT_H2: if (byte F_HEAD2) { f_state ST_RX_DATA; rx_idx 0; calc_cs 0; data_len 0; } else if (byte ! F_HEAD1) { /* 不是第2帧头也不是新的第1帧头重新找头 */ f_state ST_WAIT_H1; } return 0; case ST_RX_DATA: rx_buf[rx_idx] byte; calc_cs ^ byte; if (rx_idx 1) { data_len rx_buf[0]; /* 第1个数据字节是长度 */ if (data_len 0 || data_len F_DATA_MAX) { f_state ST_WAIT_H1; /* 长度非法立刻复位 */ return 0; } } /* 长度字段表示命令数据的总字节数收满后进入校验态 */ if (rx_idx data_len 1) { f_state ST_CHECK; } return 0; case ST_CHECK: if (calc_cs byte) { f_state ST_WAIT_H1; return 1; /* 合法帧缓冲区内有完整数据 */ } f_state ST_WAIT_H1; return 0; default: f_state ST_WAIT_H1; return 0; } }这个状态机的关键是“早失败”长度字段在第一个字节就做合法性检查非法立刻复位不让错误数据一路灌进缓冲区。校验失败后的处理是静默丢弃由主机超时重发来兜底而不是从机直接回错误帧因为总线本来就受干扰主动回帧只会加剧冲突。校验覆盖的是长度、命令、地址和数据字段两个帧头不参与异或。代码里calc_cs从收到长度字节开始异或到最后一个数据字节结束ST_CHECK收到的下一字节就是校验值两者相等才认为整帧合法。4.4 半双工调度与重发避免两车相撞和静默丢帧电流环是半双工主机和从机必须严格按主从调度来。常见机制是主机发完一帧后立刻打开接收窗口等待从机应答从机只有收到合法帧才回复收到坏帧不回让主机在超时后自行重发。超时时间要覆盖“发送时间从机处理时间一个帧长”。2400bps下一帧十来个字节大约需要40到60ms从机处理按10ms算主机等待窗口设在100ms是底线200ms更稳妥。重试次数一般取3次超过就上报通讯故障。重发时建议帧间隔加一点随机量避免多台设备同时重发在总线上撞车。发送结束到切换接收之间的安静时间也很重要至少要留一个字节的时长让线上电流完全回到静态值。两个方向切换太急接收端会看到自己发送的电流残影误判成数据。4.5 软件抗干扰连续失败计数、从容退避与掉线恢复在强干扰环境里通讯不可能完全不丢帧关键是让软件对丢帧有容忍度。我一般会在主控里维护一个接收错误计数器连续N帧失败就把轮询周期拉长让总线安静下来而不是用加速重发去和干扰硬碰硬连续成功一帧就清零计数恢复正常轮询节奏。掉线恢复还需要一个更上层的判断从机失联超过一定时间后主机广播一帧复位命令从机收到后软复位重新进入待命状态。这样即使某台从机的状态机被干扰打进了死分支也能靠广播拉回来。主机上电后不要立刻开始轮询先等几百毫秒。电流环同时承担供电从机控制板上的储能电容需要时间充到工作电压太早发帧只会全部超时还会把错误计数拉满触发误报。5. 现场调试与五个常见坑从量电压到看电流波形电流环通讯的排查第一步就是把万用表的电压档放一边。电压正常只能证明主机侧在拉偏置证明不了数据通路。遇到“量电压正常就是不通”的故障按下面这五条对照多数能直接定位。5.1 坑1内机有电、外机不响应——先量静态电流再量电压现象内机面板正常外机完全没反应量通讯线对地电压十几伏看起来一切正常。原因环路里没有电流。断线、接插件氧化、光耦开路都会导致电压还在但电流为0。而电流环同时承担供电环路不通外机控制板就没有电自然整机不响应。解决把万用表打到电流档串进通讯线先量静态电流。有电流说明环路通再往后查数据没电流就直接找断点。这个检查流程我几乎每次都用比拿电压档到处点快得多。5.2 坑2加长通讯线后时好时坏——分布电容磨平了脉冲边沿现象原装线正常换成加长线或穿管走线后偶发丢通讯重新插拔一下又好一阵找不出稳定规律。原因线缆分布电容和接收端RC构成低通滤波器位边沿被磨圆比较器翻转点后移UART在采样点读到的电平越来越接近临界值一旦有轻微干扰就错位。解决先把波特率降到2400bps再看RC时间常数是否还在40~80μs区间长了就往小了调。线束换成双绞屏蔽线屏蔽层单端接地。别指望软件重发能根治边沿问题物理层不修重发只是把故障从“偶发”拖成“多发”。5.3 坑3继电器吸合瞬间通讯丢失——干扰窗口与软件空窗现象外机的压缩机接触器或风机继电器动作的一瞬间通讯必定丢失过几秒又自己恢复。原因继电器线圈是感性负载断开瞬间会产生很高的反电动势通过分布电容耦合进电流环吸合瞬间母线电压跌落也会让主机侧的电流源产生波动这两个干扰都集中在一个极短的时间窗里。解决硬件上给线圈并联RC吸收或压敏电阻把反冲压住软件上在继电器动作前后的几十毫秒窗口内丢弃接收数据不把它计入错误计数。制热除霜时四通阀换向会出现同样的故障特征别只盯着通讯板查先看换向阀线圈。5.4 坑4多台内机并联后静态电流漂移——阈值标定跟不上负载现象一拖多系统单独带一台内机正常多台并联后外机频繁报总线忙或误码。原因每台内机的接收前端都会贡献少量静态电流多台叠加后主机看到的总电流比单机标定值高出一截固定阈值判断就开始偏移。阈值离工作点越近噪声越容易让判断翻转。解决重新标定主机接收阈值按满配台数的总静态电流预留裕量。设计层面更彻底的办法是让从机接收端的静态功耗尽量低且一致或者改成“主机发同步帧、从机按地址错峰应答”减少总线上同时存在的静态负载波动。5.5 坑5换主板后通讯对不上——极性定义接反了现象换了一块外机主板后一直通讯超时换回旧板就正常两块板看着是同型号。原因新旧主板的电流极性定义不一致。旧板可能是“低电流逻辑1”新板是“高电流逻辑1”UART收到的是反码帧同步和校验基本全挂。解决用示波器观察发送端波形对比UART引脚的预期极性如果不一致在软件初始化里配置UART极性反转或加一级反相器。改之前先确认硬件版本差异不要上来就改协议。把上面这些经验整理成固定排查顺序先量静态电流再量波形边沿再查干扰窗口最后核对极性和软件错误计数。不要一上来就怀疑从机芯片电流环的问题八成因在物理层。主控日志里加上接收错误计数排查速度会快很多也方便售后在远程定位。6. 应用实例与进阶验证一拖一流程、一拖多轮询与示波器信号体检6.1 一拖一实例一次完整轮询的字节流与时间关系模拟项目X是一台一拖一家用变频空调外机为主机内机为从机波特率2400bps。主机上电后等待500ms再以500ms周期轮询内机的室内温度、设定温度和风速。一次完整轮询的字节流如下字段顺序与4.2的帧结构一致方向字节流主→从AA 55 04 01 01 02 00 06从→主AA 55 04 81 01 14 28 B8主机发完帧后打开接收窗口从机收到合法帧后回ACK加数据。若200ms内没有合法应答主机重发连续3次失败上报通讯故障。6.2 一拖多扩展寻址、轮询周期与新增内机的枚举策略一拖多只是把一拖一的调度放大主机逐台轮询地址1、地址2、地址3最后再广播。轮询周期大约等于从机数量乘以单台时隙时隙要留足重发时间比如单台时隙200ms、8台从机周期就接近2秒。新增内机用“枚举广播加从机随机延时上报”的方式避免多台从机同时应答在总线上撞车。物理层完全不用动纯软件调度问题。6.3 示波器信号体检判断边沿、位宽和噪声的三个指标示波器探头夹在采样电阻两端下降沿触发看三个指标。位宽是否接近1/波特率2400bps对应约416μs边沿有没有明显变缓主回路边沿时间超过位宽的20%就要回查RC和线缆底噪是否接近比较器阈值底噪超过阈值摆幅的三分之一时误码只是时间问题。没有示波器就用逻辑分析仪连续采样解码如果每帧都丢同一个位置的字节指向极性或波特率偏差而不是噪声。“有一次在某测试场通讯在低温环境下经常静默。查到最后是采样电阻的焊盘虚焊温度一低接触电阻漂移比较器阈值跟着跑波形幅度刚好卡在临界区。从那以后我养成了习惯量产前把采样电阻两端的波形做三组压测常温、低温、继电器动作各跑一遍看脉冲余量够不够。这个习惯帮我拦下了不少批次性问题。希望帮到你。”本文还有配套的精品资源点击获取