简介:这是一份聚焦空调系统内外机电流环通讯的PDF技术文档,面向嵌入式开发、家电控制及电磁兼容设计相关工程师。资源系统梳理了利用电流信号实现室内外机数据交互的基本原理,涵盖运行指令下发、状态反馈回传,以及室内外温度、压力传感器等实时数据,并配有电信号转换流程解析图;同时对比分析了两种软件实现方案——一种基于双IO口配合外部中断与定时器,另一种符合UART协议可直接调用串口,帮助读者根据硬件资源灵活选型。对于抗干扰设计,文档结合具体电路说明了如何通过整流滤波获得稳定直流电压以保证长距离传输可靠性;整体篇幅精练,包含完整的工作原理分析与回路说明。文件为单个PDF,大小379KB,已有302人学习下载,适合作为空调通讯协议开发的参考资料。
1. 空调内外机电流环通讯:两根线里既走电又走数据的传输方式
搞过空调售后的人都知道,报“内外机通讯故障”的维修单,是现场最难复现的玄学之一:机器拉回维修间一切正常,装回用户家里就犯病。这类问题背后,多半是内外机之间的电流环通讯在捣乱。电流环通讯的原理不复杂——室内机和室外机之间的信号线,不靠电压高低传数据,而是靠一个恒定电流的通断或大小变化,把数据从一端送到另一端。相比RS485、CAN这类总线,它用线少、成本低、抗干扰强,能扛住压缩机启停的剧烈干扰,至今仍是不少变频空调和多联机内外机通讯的主力方案。这篇笔记按原理、结构、波形调试、故障排查的顺序展开,适合空调售后工程师、控制器开发人员和维修爱好者,照着步骤可以从看懂波形一路走到把通讯调稳。
2. 电流环通讯的物理层原理:为什么选电流而不是电压
2.1 从4-20mA到空调电流环:同一套“电流优先”的传输逻辑
工业现场把4-20mA电流信号当作标准传输方式,用了很多年。传感器把物理量变成电流大小,接收端串联一个电阻取样,线阻变化不影响测量精度,因为传输的是电流而不是电压。空调内外机电流环通讯沿用了同一套思路,只是传输的不是模拟量,而是数字脉冲序列:发送端用开关管把环路电流“切开”或者“合上”,接收端用取样电阻看电流的变化,从而还原出0和1。
“电流环”三个字里,“环”是核心。信号线必须把室内机和室外机两个端点都接上,形成闭合回路,电流才能在环里流动。环路里任何一个断点,接收端都收不到任何数据,现象就是整机报通讯故障。这也是为什么现场排查的第一步永远是量通讯线通断、测两端电压,而不是急着换板。
电流环还有一个容易被忽略的优点:它天然支持长距离。通讯线从室内机到室外机要穿过墙洞、跟着强电线槽走,线长十几米很常见。电流信号在线路上传输时,线阻造成的压降不影响环路电流的数值,只要电源电压足够覆盖总压降,接收端看到的信号幅度就不会衰减。这一点在2.2里会用数字算出来。
2.2 电流环的等效电路与关键参数
把一套典型的空调电流环通讯电路抽象成等效模型,室内机侧是一个“电流源 + 开关管”,室外机侧是一个“取样电阻 + 整形电路”。室内机MCU的发送引脚经过光耦驱动三极管,三极管串在环路里;发送“1”时三极管导通,环路流过恒定电流,发送“0”时关断,环流为零(或反向,取决于具体方案)。室外机侧的取样电阻串在回路里,电流经过它产生一个电压降,这个电压经过滤波和比较器整形,再通过光耦隔离后送到室外机MCU的接收引脚。
典型参数范围如下:环路电流10-20mA,取样电阻几十到几百欧,采样电压1-5V,通讯波特率1200bps到4800bps。用欧姆定律估算一下:假如取样电阻取100Ω,20mA电流产生2V压降;取150Ω则得到3V。这个幅值足够驱动带滞回的比较器,也让光耦的发光二极管工作在线性区。
| 参数 | 常见取值 | 设计考虑 |
|---|---|---|
| 环路电流 | 10-20mA | 太小抗干扰差,太大增加驱动功耗 |
| 取样电阻 | 50-200Ω | 和环路电流配合,采样电压落在1-5V |
| 通讯速率 | 1200-4800bps | 故意做低,换取强电环境下的抗干扰能力 |
| 隔离方式 | 光耦 | 隔离高压,成本最低 |
为什么说电流信号不怕线阻?假设通讯线很长,环路总阻抗比正常时多了50Ω,20mA电流在上面产生1V压降。对恒流源一侧来说,它内部会自动把输出电压抬高,把电流顶上去,接收端感知不到线阻的变化。但如果换成电压信号传输,同样的50Ω线阻串联在回路里,接收端分到的电压会明显缩水。空调内外机之间没有专用通讯线缆,走的是普通护套线,线阻和分布电容都不可控,电流环这种“电流优先”的思路就成了低成本下最稳的选择。
2.3 为什么不用RS485和CAN:电流环的三个不可替代性
做控制器的人看到电流环,第一反应往往是:这都什么年代了,为什么不用RS485或者CAN?实际上空调内外机通讯有自己的约束条件:没有独立通讯线缆,常见只有一根信号线加零线;通讯板放在强电环境下,压缩机启停时母线电压剧烈波动;成本压力极大,每增加一颗专用芯片都是负担。RS485是差分电压信号,需要双绞线和485收发器,线数和成本都上去了。CAN更复杂,控制器、收发器、终端电阻一个都不能少。
电流环在这三个维度上都有优势。线数上,一根信号线就能工作,配合零线构成回路;隔离上,发送侧和接收侧都用光耦,天然隔离了内外机的强电地和弱电地,不需要额外的隔离电源;成本上,接收硬件只有一个取样电阻加一个比较器,比任何总线收发器都便宜。通讯对象是固定的室内机与室外机,一问一答,不需要总线那种复杂的多节点仲裁机制,RS485和CAN的能力在这里属于浪费。
| 项目 | 电流环 | RS485 | CAN |
|---|---|---|---|
| 信号线数 | 1根 | 2根双绞线 | 2根双绞线 |
| 典型速率 | 1.2-4.8kbps | 9.6kbps-10Mbps | 10kbps-1Mbps |
| 隔离成本 | 光耦即可 | 需隔离收发器或隔离电源 | 需隔离收发器 |
| 单机硬件成本 | 最低 | 中 | 高 |
| 抗强电干扰 | 好 | 好 | 好 |
RS485和CAN不是不好,而是对一个“两点之间传几十个字节”的应用来说,它们的复杂度超出了需求。电流环的局限也很明显——速率低、只能半双工、不适合多节点,但用在空调内外机这个场景里,刚好够用。
3. 电流环通讯的结构拆解:发送电路、接收电路与数据帧
3.1 室内机侧的电流驱动电路:三极管开关与限流电阻
室内机侧的发送电路是整套系统的源头。常见结构是:MCU的TX引脚接光耦的输入侧,光耦输出侧串联一个三极管(或MOS管),三极管再串上限流电阻接到通讯端子。MCU发送高电平时光耦导通,三极管基极被拉高进入饱和状态,环路电流流过;发送低电平时光耦关断,三极管截止,环流中断。
环路电流的大小由限流电阻决定,估算公式是 I ≈ (Vcc - V_ce_sat - 光耦压降) / R_limit。举个例子,控制侧供电5V,三极管饱和压降0.2V,光耦压降1.2V,目标电流20mA,限流电阻取 (5-0.2-1.2)/0.02 ≈ 180Ω。注意这里的压降是“整条环路的压降”,实际设计时需要把室外机取样电阻的压降也算进去,所以限流电阻的取值要留出余量。
限流电阻还有一个容易翻车的点:功率。20mA电流流过180Ω电阻,功耗是 I²R = 0.072W,这个热量看似不大,但很多紧凑型主板用的是0805封装(额定功率0.125W),长时间运行在高温环境里会慢慢漂移。如果环路电流取到30mA,功耗跳到0.16W,电阻就过载了。选型时额定功率至少留一倍余量,这是后面第5章踩坑记录里会再提到的问题。
驱动管输出端还需要处理尖峰。通讯线顺着强电线槽走十几米,存在分布电感,三极管关断瞬间电感会试图维持电流,在管子上产生反向尖峰。常见做法是在输出端并联一个小电容和一颗续流二极管,给尖峰一个泄放通路。这个电容的值不能太大,否则会拉缓波形边沿,和RC滤波器的效果叠加后,边沿会圆得没法判读。
3.2 室外机侧的采样与整形:取样电阻、比较器与光耦
室外机侧的接收电路,从取样电阻开始。取样电阻串在通讯回路中,电流流过产生电压。这个电压首先经过一个RC低通滤波器,把高频干扰滤掉,然后送到比较器。比较器的负输入端接一个基准电压(常见取电源电压的一半),正输入端接采样信号,两者一比较,波形就被整形成标准的方波。
比较器最好带滞回功能。不带滞回的比较器在信号缓慢越过阈值时,输出会在临界点反复抖动,形成一串毛刺;滞回比较器有两个阈值,信号一旦越过上阈值,比较器输出翻转后阈值自动抬高,想要再翻回来必须越过更低的下阈值,这样脉宽就不会因为噪声而抖动。设计上通过正反馈电阻把输出端耦合回正输入端即可,反馈电阻与输入电阻的比值决定滞回窗口宽度。
光耦放在比较器输出和MCU引脚之间,承担两个任务:一是把室外机强电地与MCU弱电地隔离,避免共地干扰;二是电平移位,把比较器的电平转换成MCU能接受的3.3V或5V逻辑电平。光耦的电流传输比CTR会随批次和老化变化,选型时留足余量,否则用几年后发光管衰减,输出脉冲幅度不够,MCU内部的上拉都拉不回来,通讯就开始间歇性失败。
RC滤波的时间常数是这里最需要算的参数。以1200bps为例,一个比特时间约833μs,RC时间常数最好控制在1/10位宽以内,也就是不超过80μs。如果滤波电容取1μF、电阻100Ω,时间常数100μs,边沿会被明显拉缓,采样点的电平判断就会出错。滤波参数和波特率是一对矛盾,调参时必须一起看。
3.3 通讯帧结构与握手流程:同步头、地址、数据、校验
物理层搞定之后,协议层决定数据怎么组织。空调电流环通讯的帧结构各家有差异,但底子是一致的:同步头 + 地址 + 功能码 + 数据 + 校验。同步头是一段宽度明显大于普通数据位的电平,让接收端知道一帧开始了;地址字段区分是发给哪台室内机或来自哪台室内机;功能码表示这条指令是开机、调频、回传温度还是故障上报;数据区放参数;校验位常见是累加和或异或,收到后算一遍,对不上就丢弃这帧。
比特编码常见用脉宽方式:窄脉冲表示逻辑0,宽脉冲表示逻辑1,同步头用更宽的脉冲。接收端只需要一个定时器输入捕获,量一下脉宽就能解出数据,不需要复杂的时钟恢复电路。这种低成本的编码方式,和电流环的低速率天然匹配。
一帧传输方向是半双工。室内机发完一帧后主动释放环路进入接收状态,室外机在固定时间窗口内应答;室内机在这个窗口内没收到应答,就重发,连续重发若干次仍然无应答,才报通讯故障。这个“先问后答、答不上就重试”的机制,就是现场看到“通讯故障偶尔报、复位后能用”的直接原因——故障帧不一定每次都丢,但一旦某个重试窗口内连续丢帧,故障就锁存了。
下面是一段脉宽解码的示意代码,用输入捕获量脉宽判断逻辑值和同步头:
/* 电流环脉宽解码示例:输入捕获模式下测量脉冲宽度 */ #define T_BIT_US 833u /* 1200bps时1个位的时间,约833微秒 */ #define SYNC_MIN_US 1500u /* 同步头最小脉宽,大于一个位宽 */ uint16_t pulse_width_us; /* 由输入捕获中断更新 */ void loop_decode_task(void) { if (pulse_width_us > SYNC_MIN_US) { /* 宽度超过1.5个位时间的脉冲:判定为同步头 */ frame_reset(); } else if (pulse_width_us > T_BIT_US * 2 / 3) { /* 宽脉冲判为逻辑1 */ bit_write(1); } else if (pulse_width_us > T_BIT_US / 3) { /* 窄脉冲判为逻辑0 */ bit_write(0); } else { /* 小于1/3位宽的跳变按毛刺丢弃 */ } }代码里的关键参数是 T_BIT_US 和 SYNC_MIN_US。T_BIT_US 由波特率直接换算,1200bps对应833μs;宽窄脉冲的判定阈值取位宽的2/3和1/3,目的是留出容差窗口,允许发送端脉宽有±30%左右的偏差而不误判。如果实际协议里逻辑0和逻辑1的脉宽比例不同,这两个阈值跟着调整即可。同步头阈值设成1.5个位宽,能避免把普通数据位的宽脉冲误认成帧头。
4. 用示波器抓电流环波形:测量布点与波形判读
4.1 测量布点与探头设置:取样电阻两端是唯一安全观测点
调电流环通讯,示波器是绕不开的工具。测量布点有讲究,最安全、信息量最大的测点是室外机板上取样电阻的两端。把示波器探头点在一端,地线夹在另一端靠近电源地的那一侧,看到的就是纯净的电流采样信号,幅度1-5V,不会直接碰到几十伏的直流母线。
不要直接在通讯端子上测。通讯端子上叠加着室内机送过来的直流电压,普通示波器的地线夹是接大地或接电源地的,一旦夹到带电的通讯线上,等于把强电端直接短路到地,轻则跳闸,重则烧示波器输入通道。处理这类信号,优先用差分探头或者隔离通道;没有差分探头时,宁可麻烦一点,把探头移到取样电阻两端去测。
探头档位建议用X10。X1档输入电容大,对边沿有牵引作用,而且直流输入范围小,直接测带直流偏置的信号容易让示波器输入过载。X10档衰减后波形幅度看起来会小一些,把垂直灵敏度调到合适档位即可,这不影响对脉宽和逻辑关系的判断。
4.2 正常波形长什么样:波形特征与异常对照表
把示波器接好、让空调上电运行,正常通讯时可以看到一串规律脉冲。空闲状态电平稳定,没有毛刺;同步头到来时出现一个明显宽于其他脉冲的电平段;后面的数据位脉冲宽度均匀,边沿陡峭,上升和下降时间不超过位宽的十分之一;整个波形幅度稳定,比如取样电阻两端的设计值是2V,那高低电平的差值就在2V附近波动,不会有明显起伏。
异常波形的判读是排查的关键。常见的异常有这么几类:幅度只有正常的一半、边沿圆滑、电平抖动带毛刺、同步头出现后没有应答段。每类异常对应的故障方向不同,整理成对照表方便现场比对:
| 波形特征 | 可能原因 | 排查方向 |
|---|---|---|
| 幅度只有正常的一半 | 恒流源电流不足、限流电阻漂移、取样电阻变值 | 测环路电流,核对取样电阻阻值 |
| 边沿圆滑呈弧形 | RC滤波时间常数过大、光耦老化CTR下降 | 核验滤波电容,更换光耦 |
| 电平抖动、毛刺多 | 压缩机强电干扰、地线环路 | 检查屏蔽接地,调整滤波参数 |
| 同步头正常但无应答 | 发送方未释放环路、接收方向电路故障 | 抓完整帧,确认应答窗口时序 |
有一点要提醒:波形“看起来正常”不一定代表通讯正常。如果采样点刚好落在脉冲边沿上,MCU就可能误判,而示波器上看到的是一个完整的脉冲序列。这种问题靠看波形发现不了,需要把时基拉开,用“边沿触发+单次”模式多抓几帧,确认每一帧的同步头和校验都正确,再下结论。
4.3 现场抓波形的三个安全习惯
抓电流环波形有操作顺序。先拿万用表确认通讯线两端电压稳定在安全范围,再考虑接示波器;断电后等母线电容放完电再动手拆端子;接探头时先接地线夹、后点探针,避免探针先碰到高压端。还有一条现场经验:抓波形时顺便把室内机和室外机的通讯电压记录下来,和正常值做对比,这能在后续复现故障时省大量时间。
用“边沿触发+单次”模式抓帧,是调试电流环的通用做法。同步头是整帧里最宽的脉冲,把触发电平设在高电平的中间值,触发方式选上升沿,单次触发后只要同步头出现,就会把一整帧波形捕获下来。偶发毛刺导致的误码,靠连续触发模式抓几秒钟波形,能明显提高发现概率。
5. 应用实例与避坑:模拟项目X的电流环通讯故障排查
5.1 一拖二机组不定时报通讯故障:从电压测量开始的排查顺序
在模拟项目X的调试记录里,有一套一拖二机组反复报“室内外机通讯故障”,复位后正常,运行半小时又犯。现场排查的第一步是电压法:上电后用万用表直流档测室外机端子的S-N电压。正常时电压表指针会缓慢摆动,表示通讯数据正在线路上传输;而故障机组上电后电压恒定不动,说明当前没有通讯活动。
量完电压量通断。把室内机端的通讯线拆下来,用万用表蜂鸣档测整根信号线的通断,确认线缆本身没有断点。线缆没问题,故障范围就锁定到室内机主板或室外机主板。接上示波器抓室外机取样电阻两端的波形,看到同步头正常出现,但同步头之后的数据段和应答段缺失,说明室内机发送方向有数据出来,室外机应答不完整。
再往下分,断开室外机一侧的通讯线,从室内机端注入一个模拟测试帧。这一步需要一块能产生电流环信号的调试工装,常见做法是一个简单的单片机和三极管驱动电路,把要发的帧按同样的脉宽编码打出去。注入后发现室外机能正常应答,说明室外机的接收和发送链路都好的,问题集中到了室内机板本身。
拆开室内机板,最终定位到驱动管旁边的一颗电解电容鼓包。这颗电容是恒流源电路的滤波电容,鼓包后容量下降,环路电流在高频脉冲下不稳定,导致发送的脉宽忽宽忽窄,室外机偶尔能解出数据、偶尔解不出来。换掉电容后波形恢复正常,通讯故障再没复现。
5.2 从波形反推故障点:幅度不足、边沿圆滑、间歇性消失
波形幅度只有正常一半,优先怀疑取样电阻和环路电流的匹配问题。实测取样电阻阻值,如果电阻没变值,就测限流电阻两端的压降反推环路电流。曾经遇到一个案例,限流电阻标称180Ω,实际已经漂移到240Ω,环路电流从20mA掉到15mA,取样电压从2V掉到1.4V,比较器阈值刚好卡在临界点附近,时好时坏。电阻在高温环境下用久了阻值漂移,是这类问题的常见根源。
波形边沿明显圆滑,看起来不像方波,重点怀疑光耦老化和RC电容漏电。光耦的发光二极管用几年后发光效率下降,CTR从100%跌到50%以下,输出级波形边沿就被拉缓。此时即使取样电阻两端的波形很陡,过了光耦之后也变圆了。顺着信号路径逐级测波形,能快速定位是哪一级引入了失真。
波形间歇性消失,故障点往往在机械连接上:通讯线插头氧化、插针虚焊、端子松动。这类问题用示波器持续抓几秒波形,同时用手轻轻拨动线束,如果拨动时波形闪断,基本可以确认是接触不良。处理方式是重新压接端子,并在端子上涂抗氧化剂。
5.3 踩坑记录表:现象、原因、解决
把调试过程中遇到的典型坑整理成表,每条按现象、原因、解决三栏记录:
| 现象 | 原因 | 解决 |
|---|---|---|
| 示波器地线夹夹到通讯线,现场跳闸 | 通讯线带几十伏直流,地线夹接大地形成短路 | 测量点移到取样电阻两端,地线夹只夹冷端 |
| 波形正常但机器仍报通讯故障 | 波形测的是光耦次级,不是原始采样信号,反应不了真实脉宽 | 测量点改为取样电阻两端,直接看电流采样信号 |
| 通讯偶尔中断,复位后恢复 | 限流电阻功率余量不足,高温下阻值漂移 | 换额定功率两倍以上的电阻,核算极限电流功耗 |
| 现场线长超过标准后误码率升高 | 通讯线分布电容过大,脉宽被展宽 | 降低波特率,减小接收端RC滤波时间常数 |
| 更换室外机板后通讯失败 | 新板取样电阻阻值和比较器阈值与旧板不一致 | 核验板级BOM参数,按设计规格调整比较器基准 |
第一条坑是安全意识问题,处理带电的通讯线时务必确认测点。第二条坑是测点选取问题,调试时永远优先看物理层原始信号,别隔着一层光耦看“被美化过的”波形。第三条坑是选型问题,电阻功率余量在高温工况下必须放大。第四条坑是长线环境问题,空调现场走线往往超过制造商的测试环境,降速率是最快的解决手段。第五条坑提醒我们,换板后要核对版本差异,不要默认新旧板参数一致。
6. 把电流环通讯调得更稳:三个参数技巧与一组基线数据
6.1 三个让电流环“稳下来”的调参技巧
第一个技巧是给比较器加滞回窗口。取样电阻两端的正常信号高电平2V、低电平0.4V,把比较器阈值设计在1.2V附近,正反馈让上阈值抬到1.4V、下阈值降到1.0V。这样信号在临界点附近因干扰产生的小毛刺不会引起输出翻转,脉宽抖动明显减少。滞回窗口不能开太大,否则会吞掉真实的窄脉冲,一般取信号幅度的10%-20%。
第二个技巧是在软件里做一次脉宽滤波,把小于位宽1/3的窄毛刺直接丢弃。下面是输入捕获中断里的处理逻辑:
/* 输入捕获中断里做窄脉冲过滤 */ #define GLITCH_FILTER_US 60u /* 小于60微秒的脉宽视为毛刺 */ void timer_capture_isr(void) { uint32_t now_us = get_timer_us(); uint32_t diff = now_us - last_edge_us; if (diff < GLITCH_FILTER_US) { return; /* 窄毛刺,不更新状态 */ } last_edge_us = now_us; loop_level = sample_pin(); /* 更新当前电平状态 */ }这套滤波对1200bps的电流环通讯特别合适:一个位宽833μs,60μs的毛刺窗口只占位宽的7%,足够滤掉压缩机启停产生的尖峰,又不会吞掉正常脉冲。如果波特率提高,GLITCH_FILTER_US需要同步缩小,保持毛刺窗口和位宽的比例不变。
第三个技巧是区分“断线”和“真故障”。当通讯线断开时,环路上没有电流,取样电阻上长时间保持无电流电平。在软件里加一个判断:如果连续超过一个帧周期没有检测到任何边沿翻转,就上报“通讯开路”,而不是笼统报“通讯故障”。这两个状态对应的维修方向完全不同,前者查线缆,后者查板件。
6.2 给现场留一组基线数据
调稳一套电流环通讯之后,建立基线数据是后续维护最好的储备。每次检修时记录三个数值:通讯线两端电压、取样电阻两端高电平和低电平的差值、同步头脉宽。用一块普通的万用表和示波器,五分钟就能记完。下次检修时拿新数据对比,如果采样电压从2.1V掉到1.3V,即使示波器上波形肉眼看不出问题,基线数据也能提前暴露光耦或恒流源的老化趋势。
我之前吃过的亏就是没有留基线:一套机组通讯时好时坏,上门三次没查出来,第四次把历史记录调出来对比才发现,取样电压已经连续三个月缓慢下降,是光耦老化但还没完全失效。从那以后,每调完一套电流环通讯,我都习惯把这组数据贴在机组检修记录表里。技术活做到后面,比拼的不是临场发挥,而是平时积累下来的参照系。希望帮到你。
本文还有配套的精品资源,点击获取