工业现场里跑 SPI 这件事,说简单也简单,四根线一接、时钟一对,数据就通了;说麻烦也麻烦,一旦两端地电位不同、电机一启动、继电器一吸合,原本跑得好好的通信就开始丢包、误码,甚至把主控芯片的 IO 打坏。我这些年做嵌入式工业设备,遇到过太多次"实验室好好的,上现场就抽风"的情况,最后追根溯源,八成都是没做隔离。这篇就围绕 MAX14431BAEE+ 这颗隔离器配 PIC18LF45K22 这颗经典 8 位单片机,把工业 SPI 隔离链路的完整设计思路、选型逻辑、实操细节和踩坑经验讲透,从硬件到软件一条龙,适合正在做工业采集板、电机控制板、多节点通信板的朋友参考。
1. 为什么工业 SPI 一定要隔离,不隔离会死在哪
1.1 先搞清楚 SPI 在工业环境里到底怕什么
SPI 本身是个非常"娇气"的协议。它没有差分传输,没有共模抑制,靠的是单端信号对地参考,时钟频率又常常跑到几 MHz 甚至十几 MHz。这意味着它对地电位差、对噪声、对线缆阻抗都极其敏感。在实验室里,主从设备共地、电源干净、线缆几十厘米,跑 10MHz 都没问题。可到了工业现场,情况完全变了。
最典型的三个杀手:第一是地电位差。工业现场不同设备往往由不同配电回路供电,两个"地"之间可能存在几伏甚至几十伏的电位差,这个差值直接叠加在 SPI 信号上,轻则逻辑电平判错,重则超过 IO 的绝对最大额定值,把芯片打穿。第二是共模噪声。变频器、伺服驱动器、接触器这些设备工作时会产生强烈的电磁干扰,通过空间耦合和传导耦合进入信号线,SPI 的单端结构对这种噪声几乎没有抵抗能力。第三是浪涌和瞬态。雷击感应、感性负载断开产生的反电动势,会沿着长线缆窜进板子,没有隔离的话,主控芯片就是第一道防线,也是最脆弱的一道。
我见过一个真实案例:某客户做了一台多路称重采集设备,传感器板通过 SPI 和主控板通信,线缆大概两米。实验室测试一切正常,装到现场后,只要旁边的传送带电机一启动,采集数据就乱跳。后来用示波器一测,电机启动瞬间,两地之间出现了将近 8V 的电位差跳变,SPI 的时钟线直接被拉到了逻辑阈值附近,从机根本认不出时钟沿。这就是典型的没做隔离导致的现场失效。
1.2 隔离到底隔离的是什么,别把"隔离"和"滤波"搞混
很多人第一次接触隔离,会把它和滤波、TVS 保护混为一谈。这三者解决的是不同层面的问题,不能互相替代。滤波是抑制高频噪声,TVS 是钳位瞬态高压,而隔离是彻底切断两端之间的电气连接,让信号通过光、磁或电容耦合的方式传递,两端各自有自己的参考地,地电位差再大也不会形成电流回路。
隔离带来的好处有三个层面。第一是安全,尤其是涉及市电、高压侧采样时,隔离是保护人身和设备安全的硬性要求。第二是信号完整性,切断地环路之后,共模噪声无法形成回路,信号质量大幅提升。第三是系统可靠性,即使一侧出现故障高压,也不会传导到另一侧,把损坏范围限制在局部。
需要强调的是,隔离不是万能的。如果隔离器两侧的电源本身没有隔离,那隔离就白做了。所以做隔离设计时,隔离电源和隔离信号必须成对出现,这是新手最容易忽略的一点。我后面会专门讲电源这块怎么处理。
1.3 MAX14431BAEE+ 在隔离 SPI 场景里的定位
MAX14431BAEE+ 是 Maxim(现属 ADI)推出的一款四通道数字隔离器,采用电容隔离技术,支持最高 25Mbps 的数据速率,工作电压范围宽,具备较高的共模瞬态抗扰度(CMTI)。它的通道可以灵活配置方向,非常适合 SPI 这种"三去一回"或者"多去少回"的场景。
选它做 SPI 隔离有几个现实理由。SPI 标准四线是 SCLK、MOSI、MISO、CS,其中 SCLK、MOSI、CS 是从主到从,MISO 是从从到主,正好是三个方向去、一个方向回。MAX14431 是四通道,通道方向可以按需分配,一颗芯片就能覆盖整条 SPI 链路,省事。它的速率余量也够,25Mbps 对应 SPI 时钟可以跑到十几 MHz,绝大多数工业采集场景用不到这么高,留足了裕量。另外它的封装和引脚布局对 PCB 布线友好,通道间匹配度好,时序偏斜小,这对 SPI 这种对时钟沿敏感的总线很重要。
2. MAX14431BAEE+ 的关键参数怎么读,选型时盯哪几个数
2.1 数据速率和传播延迟:决定 SPI 能跑多快
隔离器的数据速率和传播延迟直接决定了 SPI 时钟的上限。MAX14431BAEE+ 标称 25Mbps,但要注意,这个速率是单通道 NRZ 数据的速率,换算成 SPI 时钟要考虑往返延迟。SPI 是同步全双工,主机发时钟的同时从机回数据,MISO 上的数据要经过隔离器传回主机,这个传播延迟会吃掉一部分时序裕量。
具体算一下:假设隔离器单通道传播延迟典型值在十几纳秒量级,加上 PCB 走线延迟和从机响应时间,一个完整的 SPI 读周期里,MISO 数据从从机发出到主机采样,中间要经过隔离器。如果 SPI 时钟周期是 100ns(10MHz),半个周期 50ns,而隔离器延迟加上从机输出延迟接近这个量级,采样点就会很紧张。所以实际能跑多快,不能只看隔离器标称速率,要把传播延迟、从机建立时间、主机采样窗口三者一起算。
我的经验是,用 MAX14431 做 SPI 隔离,工业场景下把时钟控制在 5MHz 以内最稳妥,10MHz 需要仔细核算时序并实测眼图,再往上就要考虑用更高速的隔离器或者改用其他方案了。别迷信标称值,标称值是理想条件下的极限,工程上要留裕量。
2.2 共模瞬态抗扰度 CMTI:工业现场的核心指标
CMTI 是隔离器最重要的指标之一,单位是 kV/μs,表示隔离器能承受的两侧地电位变化速率。工业现场电机启停、继电器动作时,地电位跳变非常快,如果 CMTI 不够,隔离器内部会误触发,输出端出现毛刺,SPI 直接误码。
MAX14431BAEE+ 的 CMTI 指标在同类产品里属于中上水平,具体数值要查最新数据手册确认。选型时我的原则是:普通工业环境至少 25kV/μs,强干扰环境(变频器、大功率伺服旁边)建议 50kV/μs 以上。这个指标不能省,省了现场就会用随机误码来教你做人。
2.3 供电电压与逻辑电平匹配
MAX14431BAEE+ 两侧供电可以不同,这正好解决了主控和从机电平不一致的问题。PIC18LF45K22 是 3.3V 供电的低功耗型号,而很多工业从机设备可能是 5V 逻辑。隔离器两侧分别供 3.3V 和 5V,就能完成电平转换,不需要额外的电平转换芯片,这是隔离方案的一个附带好处。
但要注意,两侧供电必须在隔离器的允许范围内,且上电时序要合理。如果一侧先上电、另一侧后上电,隔离器在中间这段时间的状态要确认,避免输出端出现不确定电平导致从机误动作。数据手册里一般会给出上电时序建议,照着做就行。
2.4 通道方向配置与封装
MAX14431BAEE+ 的四个通道方向是可配置的,具体哪些通道固定方向、哪些可调,要看具体型号后缀。做 SPI 隔离时,通常配置成三个通道同向(SCLK、MOSI、CS 从主到从),一个通道反向(MISO 从从到主)。配置方式有的是靠引脚接法,有的是靠型号区分,选型时要看清楚。
封装方面,这类隔离器常见的是窄体 SOIC 或者更小的封装。工业板子建议选引脚间距大一点的封装,方便手工焊接和返修,也利于爬电距离设计。爬电距离和电气间隙是隔离器 PCB 设计的硬指标,后面会专门讲。
| 关键参数 | 典型要求 | 选型建议 |
|---|---|---|
| 数据速率 | 覆盖 SPI 时钟的 2 倍以上 | 工业场景 5MHz SPI 选 25Mbps 足够 |
| 传播延迟 | 越小越好,影响时序裕量 | 优先选延迟一致性好的型号 |
| CMTI | 普通工业 25kV/μs 起 | 强干扰环境 50kV/μs 以上 |
| 供电范围 | 覆盖两侧逻辑电平 | 支持两侧异压更灵活 |
| 通道方向 | 匹配 SPI 三去一回 | 四通道可配置最省事 |
3. PIC18LF45K22 这端怎么配,MSSP 模块的坑比想象中多
3.1 为什么选 PIC18LF45K22 做 SPI 主机
PIC18LF45K22 是 Microchip PIC18 系列里比较经典的一款 8 位单片机,低功耗(LF 后缀是 3.3V 低压版本),外设齐全,自带 MSSP(Master Synchronous Serial Port)模块,可以配置成 SPI 或 I2C 模式。它的 SPI 主机模式支持多种时钟极性和相位组合,能适配绝大多数从机设备。
选它做工业 SPI 主机有几个现实考量。第一是成本低、供货稳,8 位机在工业采集这种对算力要求不高的场景里性价比很高。第二是外设够用,MSSP 加上定时器、ADC、UART,做一个小型采集节点绰绰有余。第三是开发资料多,PIC18 系列用了这么多年,社区里能查到的例程和踩坑记录非常丰富,遇到问题好解决。
3.2 MSSP 配置成 SPI 主机的完整流程
配置 MSSP 为 SPI 主机,核心是几个寄存器:SSPCON1、SSPSTAT、SSPADD(主机模式下用于波特率)、以及方向寄存器 TRIS 和模拟功能选择寄存器 ANSEL。
第一步,关闭模拟功能。PIC18LF45K22 的很多引脚复用模拟输入功能,如果不把对应引脚设成数字模式,SPI 是出不来的。这一步新手最容易漏,现象是时钟和数据线毫无反应,查半天以为是硬件问题,其实是引脚还在模拟模式。相关寄存器是 ANSELx,把用到的 SCLK、MOSI、MISO、CS 对应位清零。
第二步,配置方向。SCLK 和 MOSI 是主机输出,TRIS 对应位清零;MISO 是输入,TRIS 对应位置一;CS 如果用软件控制,也设成输出。
第三步,设置 SSPCON1。SSPEN 置一使能 MSSP,SSPM 位选择 SPI 主机模式(通常是 0b0000 或 0b0001,区别在时钟速率来源)。CKP 位设置空闲时钟电平,SSPOV 是溢出标志。
第四步,设置 SSPSTAT。重点是 SMP 和 CKE 两位,它们和 CKP 一起决定 SPI 的四种模式(Mode 0~3)。SMP 控制采样时刻(数据中间采样还是末尾采样),CKE 控制时钟边沿。这两个位必须和从机设备的 SPI 模式严格匹配,否则数据全错。
第五步,设置波特率。主机模式下 SPI 时钟由 SSPADD 或者系统时钟分频决定,具体看 SSPM 配置。计算公式在数据手册里有,一般是 Fosc 除以某个分频系数。
// PIC18LF45K22 MSSP 配置为 SPI 主机示例(XC8 编译器) // 假设系统时钟 16MHz,目标 SPI 时钟约 1MHz // 1. 关闭模拟功能,配置数字 IO ANSELC = 0x00; // 相关引脚设为数字 ANSELE = 0x00; // 2. 配置方向 TRISCbits.TRISC3 = 0; // SCK 输出 TRISCbits.TRISC5 = 0; // SDO (MOSI) 输出 TRISCbits.TRISC4 = 1; // SDI (MISO) 输入 TRISBbits.TRISB0 = 0; // CS 软件控制,输出 // 3. 配置 SSPCON1 SSP1CON1 = 0x00; // 先清零 SSP1STAT = 0x00; SSP1CON1bits.SSPM = 0b0000; // SPI Master, 时钟 = Fosc/4 SSP1CON1bits.CKP = 1; // 空闲时钟高电平(Mode 2/3 用) SSP1STATbits.CKE = 0; // 时钟边沿选择 SSP1STATbits.SMP = 0; // 中间采样 SSP1CON1bits.SSPEN = 1; // 使能 MSSP // 4. 发送一个字节 unsigned char SPI_Exchange(unsigned char data) { SSP1BUF = data; // 写入发送缓冲 while(!PIR1bits.SSP1IF); // 等待传输完成 PIR1bits.SSP1IF = 0; // 清标志 return SSP1BUF; // 读回接收数据 }3.3 SPI 四种模式匹配:最常见的"数据全错"元凶
SPI 有四种模式,由 CPOL(时钟极性)和 CPHA(时钟相位)组合而成。主机和从机必须用同一种模式,否则数据要么整体偏移一位,要么完全乱码。PIC18 的 CKP、CKE、SMP 三个位组合起来对应这四种模式,具体对应关系要查数据手册的表格,不同型号可能略有差异。
我的经验是,调试 SPI 第一步永远是确认模式匹配。拿示波器同时抓 SCLK 和 MOSI,看数据是在时钟的上升沿还是下降沿变化,空闲时时钟是高还是低,一眼就能判断出从机用的是哪种模式。别对着代码猜,直接看波形最快。
3.4 硬件片选和软件片选的选择
SPI 的 CS 信号有两种控制方式。硬件片选是 MSSP 模块自动控制,软件片选是用普通 IO 手动拉低拉高。PIC18 的 MSSP 在 SPI 主机模式下,CS 通常是软件控制的,也就是用普通 IO 口来操作。
软件片选的好处是灵活,可以接多个从机,用不同 IO 分别控制。坏处是要注意时序:CS 拉低到第一个时钟沿之间要有足够建立时间,最后一个时钟沿到 CS 拉高之间也要有保持时间。这两个时间从机数据手册里会给,一般几十纳秒,软件操作时加几个 NOP 或者用示波器确认一下就行。
提示:多从机场景下,同一时刻只能拉低一个 CS,其他保持高电平。如果两个 CS 同时有效,两个从机可能同时驱动 MISO,造成总线冲突,严重时会损坏 IO。
4. 隔离 SPI 的硬件设计:电源、布线、爬电距离一个都不能少
4.1 隔离电源必须和隔离信号配套
前面提过,隔离信号不配隔离电源等于白做。MAX14431BAEE+ 两侧需要独立供电,从机侧那一路电源必须是隔离电源,否则两侧地还是连在一起的,隔离器形同虚设。
隔离电源的实现方式有几种。小功率场景常用隔离 DC-DC 模块,比如 1W 的定压隔离模块,输入 5V 输出 5V,体积小、外围简单。也可以用推挽变压器加整流自己搭,成本低但设计复杂。还有一种是隔离电源芯片,集成度高,但价格贵一些。
选隔离电源时要注意三点:一是隔离耐压要满足系统要求,工业常见 1500VAC 或 2500VAC;二是输出功率要留裕量,从机侧所有负载加起来再乘 1.5 倍;三是纹波和噪声要小,否则会通过电源耦合进 SPI 信号,影响通信质量。
4.2 PCB 布局:隔离带两侧必须严格分开
隔离器在 PCB 上是一条"分界线",这条线两侧的铜皮、走线、过孔必须严格分开,不能有任何跨接。具体做法是:在隔离器下方禁止铺铜,或者铺铜时在隔离带位置留出足够的禁布区,两侧地平面完全独立。
隔离带宽度要满足爬电距离和电气间隙要求。爬电距离是指沿绝缘表面的最短路径,电气间隙是指空间最短距离。这两个值由工作电压和污染等级决定,工业环境一般要求爬电距离 5mm 以上,电气间隙 3mm 以上,具体查相关安规标准。别为了省空间把隔离带做窄,这是安全底线。
信号线跨隔离带时,只能通过隔离器本身,不能有别的走线跨越。如果实在有非隔离信号需要跨,那说明这个信号本来就不该跨,重新规划布局。
4.3 去耦电容和端接电阻的摆放
隔离器两侧的电源引脚都要就近放去耦电容,典型是 0.1μF 加 1μF 组合,0.1μF 尽量靠近引脚,1μF 稍远一点。去耦电容的地要接到本侧的地平面,不能跨隔离带。
SPI 信号线上要不要加端接电阻,取决于线长和速率。线缆较长(超过 20cm)或者速率较高时,可以在主机侧串一个 22Ω 到 33Ω 的电阻,抑制反射。MISO 线上如果从机驱动能力弱,也可以考虑加上拉电阻,保证空闲时电平确定。
4.4 保护器件怎么加
隔离器本身能扛一定的瞬态,但工业现场的浪涌可能超出它的承受范围。在隔离器的从机侧(也就是靠近现场的那一侧),可以加 TVS 管做二级保护,把浪涌钳位在隔离器能承受的范围内。TVS 要选响应快、结电容小的型号,结电容太大会影响 SPI 信号的高频成分。
另外,长线缆进入板子的地方,可以加共模电感或者磁珠,抑制共模噪声。这些措施和隔离器配合,形成多级防护,现场可靠性会高很多。
| 设计项 | 要求 | 常见错误 |
|---|---|---|
| 隔离电源 | 与信号隔离配套 | 只隔离信号不隔离电源 |
| 隔离带 | 两侧地严格分开 | 铺铜跨接、走线跨越 |
| 爬电距离 | 工业 5mm 以上 | 为省空间做窄 |
| 去耦电容 | 就近接本侧地 | 电容地跨隔离带 |
| 保护器件 | 现场侧加 TVS | 只靠隔离器硬扛 |
5. 软件层面的可靠性设计:光有硬件隔离还不够
5.1 SPI 通信加校验和重传
硬件隔离解决了电气层面的问题,但通信协议层面还要做可靠性设计。工业现场即使隔离做得再好,偶尔也会有误码,所以每一帧数据都要有校验。最简单的是加一个字节的校验和,好一点用 CRC8 或 CRC16。
校验发现错误后,要有重传机制。重传次数一般设 3 次,3 次都失败就上报错误,让上层决定怎么处理。重传时要注意 CS 的时序,每次重传都要完整地拉低 CS、发数据、拉高 CS,不能连续发。
// 带校验和重传的 SPI 读操作示例 #define SPI_RETRY_MAX 3 unsigned char SPI_ReadWithRetry(unsigned char cmd, unsigned char *buf, unsigned char len) { unsigned char retry, i, checksum; for(retry = 0; retry < SPI_RETRY_MAX; retry++) { CS_LOW(); SPI_Exchange(cmd); checksum = cmd; for(i = 0; i < len; i++) { buf[i] = SPI_Exchange(0xFF); checksum += buf[i]; } unsigned char recv_sum = SPI_Exchange(0xFF); CS_HIGH(); if(recv_sum == checksum) { return 0; // 成功 } } return 1; // 失败 }5.2 超时保护:别让 while 死等
前面示例里用了while(!PIR1bits.SSP1IF);这种死等,在实验室没问题,在现场如果隔离器一侧掉电或者从机没响应,这个循环会永远卡住,看门狗都会被你喂死。正确的做法是加超时计数,等不到标志就退出并报错。
// 带超时的 SPI 字节交换 unsigned char SPI_ExchangeTimeout(unsigned char data, unsigned int timeout) { SSP1BUF = data; while(!PIR1bits.SSP1IF) { if(--timeout == 0) { return 0xFF; // 超时返回 } } PIR1bits.SSP1IF = 0; return SSP1BUF; }超时值怎么定?根据 SPI 时钟频率和字节数算。一个字节 8 位,1MHz 时钟下大约 8μs,留 10 倍裕量设 80μs 对应的计数值就够了。别设太大,否则真出问题时响应太慢。
5.3 上电初始化和状态机设计
系统上电时,隔离器两侧上电时序可能不一致,从机可能还没准备好。所以初始化流程里要加延时和握手。主机上电后先延时一段时间(比如 100ms),等隔离器和从机电源稳定,然后发一个握手命令,从机回应正确后才进入正常通信。
通信过程建议用状态机管理,而不是一坨顺序代码。状态机把"空闲、发送、等待、校验、重传、错误"这些状态分开,逻辑清晰,也方便加超时和异常处理。工业设备的固件,状态机是标配。
5.4 看门狗和异常恢复
PIC18LF45K22 自带看门狗定时器(WDT),一定要开。SPI 通信卡死、从机无响应、隔离器异常,这些情况都可能导致程序跑飞,看门狗能在超时后复位系统,让设备自己恢复。WDT 的溢出时间根据通信周期设置,一般设几百毫秒到一秒。
除了看门狗,还要有通信异常计数。连续多少次通信失败后,主动复位 SPI 模块或者重新初始化,而不是一直重试。有些故障是可以通过重新初始化恢复的,比如隔离器被瞬态干扰后状态异常。
6. 实测踩坑记录:那些文档里不会写的问题
6.1 隔离器两侧上电顺序导致的"偶发不通信"
这个坑我踩过。设备批量生产后,有大约 5% 的板子出现"上电后第一次通信失败,复位后正常"的现象。查了很久,最后定位到是隔离器两侧上电顺序问题:从机侧电源比主机侧晚了几十毫秒,主机在从机还没准备好时就发了第一条命令,从机没响应,主机进入错误状态。
解决办法有两个:一是在主机初始化里加足够的上电延时,等两侧都稳定;二是加握手流程,从机没回应就重试。两个一起用最稳。这个问题在实验室单板调试时几乎发现不了,因为实验室都是手动上电,顺序可控,批量生产时电源模块的启动时间有离散性,才会暴露。
6.2 隔离带铺铜跨接导致的"隔离失效"
另一个坑是 PCB 设计。有一次为了散热,在隔离器下方铺了一块铜,本意是均热,结果这块铜把两侧地连起来了,隔离耐压测试直接不过。后来把铜去掉,改成隔离带两侧各自铺铜、中间留空,问题解决。
这个教训是:隔离带区域任何铜皮、走线、过孔都不能跨,包括散热用的铜。如果确实需要散热,用不跨隔离带的独立铜块,或者干脆靠空气对流。
6.3 SPI 时钟太快导致的"随机误码"
有个项目 SPI 时钟设了 8MHz,实验室跑得好好的,现场偶尔误码。用示波器抓波形,发现 MISO 上的数据在主机采样点附近还在跳变,明显是延迟太大。把时钟降到 4MHz,误码消失。
原因是隔离器的传播延迟加上从机输出延迟,在 8MHz 下已经接近半个时钟周期,采样点太靠前就会采到不稳定的数据。降速是最简单有效的解决办法,工业场景对速度要求没那么高,稳定第一。
6.4 从机侧电源纹波耦合进 SPI 信号
还有一次,从机侧用了便宜的隔离 DC-DC 模块,纹波比较大,结果 SPI 通信误码率偏高。换成低纹波模块,或者在电源输出加 LC 滤波,问题解决。隔离电源的质量直接影响 SPI 信号质量,别在这上面省钱。
6.5 软件片选时序不足导致的"首字节错误"
软件控制 CS 时,如果拉低 CS 后立刻发数据,有些从机来不及准备,第一个字节会错。解决办法是 CS 拉低后加几个微秒延时,再发数据。这个延时用示波器确认最准,看 CS 下降沿到第一个 SCLK 上升沿之间的时间,对照从机手册的要求。
| 踩坑现象 | 根本原因 | 解决办法 |
|---|---|---|
| 偶发首次通信失败 | 两侧上电顺序不一致 | 加上电延时和握手 |
| 隔离耐压测试不过 | 隔离带铺铜跨接 | 隔离带禁止任何跨接 |
| 随机误码 | SPI 时钟过快 | 降速到 5MHz 以内 |
| 误码率偏高 | 隔离电源纹波大 | 换低纹波模块或加滤波 |
| 首字节错误 | CS 建立时间不足 | CS 拉低后加延时 |
7. 从单点隔离到系统级隔离的扩展思路
7.1 多路 SPI 从机怎么隔离
一个主机带多个 SPI 从机时,隔离方案有两种。一种是每个从机配一颗隔离器,各自独立,互不影响,但成本高。另一种是共用隔离器,把 SCLK、MOSI 共用,MISO 和 CS 各自独立,这样隔离器通道数要够。
共用方案要注意 MISO 的冲突问题。多个从机的 MISO 如果都接到同一个隔离器通道,必须保证同一时刻只有一个从机驱动 MISO,其他从机 MISO 处于高阻。这靠 CS 控制,CS 无效的从机 MISO 应该是高阻态。如果从机不支持高阻,就要加三态缓冲器。
7.2 隔离 SPI 和其他隔离总线的取舍
SPI 隔离适合短距离、高速、点对点或少量从机的场景。如果节点多、距离远,可以考虑 RS-485 加隔离,差分传输抗干扰能力更强。如果速率要求不高但节点多,I2C 加隔离也行,但 I2C 的隔离更麻烦,因为它是双向开漏总线,需要特殊处理。
选哪种总线,看具体需求。SPI 的优势是简单、快、全双工,劣势是线多、距离短、从机数量受 CS 数量限制。工业采集节点用 SPI 隔离很合适,多节点组网还是 RS-485 更实际。
7.3 隔离方案的认证和测试
工业产品做隔离,往往要过一些认证,比如耐压测试、EMC 测试。设计阶段就要考虑这些。耐压测试是给隔离带两侧加高压,看漏电流是否超标,所以爬电距离和隔离器耐压都要留裕量。EMC 测试包括辐射发射和抗扰度,隔离做得好,抗扰度一般没问题,但辐射发射要注意隔离器本身的开关噪声,必要时加屏蔽或者滤波。
测试时建议先做单板功能测试,再做整机 EMC 和耐压测试,问题早发现早改。别等整机装好了才发现隔离带设计有问题,那时候改板成本就高了。
8. 一些实操中的个人体会
做隔离 SPI 这些年,我最大的体会是:隔离设计是系统工程,不是加一颗隔离器就完事。电源、布局、保护、软件,每一环都要配套,缺一环整个方案就可能有短板。我见过太多"隔离器装了但现场还是出问题"的案例,追下去都是配套没做好。
第二个体会是降速保稳定。工业场景对 SPI 速度的要求其实不高,采集个传感器数据,1MHz 都嫌快。把速度降下来,时序裕量大了,误码率自然低。别为了追求指标好看把速度拉满,稳定才是工业产品的生命线。
第三个体会是测试要模拟真实环境。实验室里用稳压电源、短接线,测不出问题。有条件的话,用长线缆、加干扰源、模拟地电位差,把现场可能遇到的情况都试一遍。我现在的习惯是,新板子做出来先做"虐待测试",用可调电源模拟地电位差,用干扰发生器加噪声,能扛过去才敢发样机。
最后说个细节:隔离器的选型别只看价格。便宜的隔离器可能在 CMTI、传播延迟一致性、寿命这些指标上缩水,现场出问题的代价远大于省下的那点物料成本。MAX14431BAEE+ 这类产品价格适中、指标扎实,用在工业产品上是比较稳妥的选择。选型时多花半小时看数据手册,比现场返修省事得多。