简介:这份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和4800bps,9600在复杂布线下比较勉强。
| 参数 | 常见区间 | 说明 |
|---|---|---|
| 通讯速率 | 2400/4800 bps | 9600需缩短线缆并减小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 帧结构设计:帧头、地址、命令、长度与校验的取舍
物理层只管搬运字节,帧层要解决误码、粘包、超时三个问题。空调电流环的帧结构通常不长,常见设计是双字节帧头加长度加命令加地址加数据加校验。
| 字段 | 长度 | 说明 |
|---|---|---|
| 帧头1 | 1B | 固定0xAA |
| 帧头2 | 1B | 固定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和线缆;底噪是否接近比较器阈值,底噪超过阈值摆幅的三分之一时,误码只是时间问题。没有示波器就用逻辑分析仪连续采样解码,如果每帧都丢同一个位置的字节,指向极性或波特率偏差,而不是噪声。
“有一次在某测试场,通讯在低温环境下经常静默。查到最后是采样电阻的焊盘虚焊,温度一低接触电阻漂移,比较器阈值跟着跑,波形幅度刚好卡在临界区。从那以后我养成了习惯:量产前把采样电阻两端的波形做三组压测,常温、低温、继电器动作各跑一遍,看脉冲余量够不够。这个习惯帮我拦下了不少批次性问题。希望帮到你。”
本文还有配套的精品资源,点击获取