首页 / 资讯中心 / 文章详情

工业SPI隔离方案:MAX14431BAEE+与MK20DN128VFM5实战

工业SPI隔离方案:MAX14431BAEE+与MK20DN128VFM5实战 ★ FEATURED ARTICLE
工业现场里跑SPI通信最怕的不是协议调不通而是调通了却在电机启停、继电器吸合的那一瞬间数据全乱。我做过好几个带隔离的采集板早期图省事直接用光耦搭隔离结果速率上不去、占板面积还大后来换成数字隔离器方案才把问题压下去。这篇就围绕MAX14431BAEE和MK20DN128VFM5这一对组合聊聊怎么把一条SPI链路从MCU侧干净地隔离到工业现场侧包括选型逻辑、硬件连接、时序匹配、软件配置以及我在实测中踩过的那些坑。如果你正在做嵌入式工业设备、需要把控制域和现场域隔开或者单纯想搞清楚数字隔离器替代光耦到底值不值这篇内容应该能帮你少走点弯路。1. 为什么SPI隔离不能只靠光耦凑合1.1 工业现场对隔离的真实诉求先说清楚一件事隔离不是为了看起来专业而是因为工业现场存在实实在在的电位差和干扰。当MCU侧的地和现场传感器侧的地之间存在几十伏甚至上百伏的共模电压时不隔离的SPI链路轻则误码重则直接烧掉MCU的IO口。我见过一个案例某采集板在现场运行三个月后MK20的SPI引脚击穿排查下来就是现场侧地电位漂移导致的。隔离要解决三个层面的问题电气隔离阻断直流和低频共模路径、信号完整性高速信号跨隔离栅后不能畸变太厉害、供电隔离两侧电源必须独立否则隔离等于白做。很多人只关注信号隔离忘了电源结果隔离器两侧共地前功尽弃。SPI本身是四线制——SCLK、MOSI、MISO、CS全双工同步通信。隔离SPI意味着这四根线都要跨隔离栅而且方向不同SCLK和MOSI是MCU到现场MISO是现场到MCUCS通常也是MCU到现场。方向不一致意味着隔离器需要支持双向或者多通道单向组合。1.2 光耦方案的天花板在哪里光耦隔离SPI不是不能用但有几个硬伤。第一是速率普通光耦比如PC817这类的上升下降时间在微秒级SPI时钟跑到1MHz以上波形就烂得没法看。高速光耦6N137这类能到10Mbps但价格和功耗都上去了。第二是通道间延迟不一致SPI是同步通信SCLK和MOSI之间的偏斜如果太大接收端采样就会出错。第三是寿命和温漂光耦的CTR电流传输比会随时间和温度衰减工业环境温度范围宽长期可靠性打折扣。我早期用6N137做过一版隔离SPI跑在2MHz时钟下勉强能用但板子上光耦加限流电阻加去耦电容占了一大片面积而且每个通道的延迟还不一样调试时得拿示波器一个个对。后来换成数字隔离器同样的功能面积缩了一半速率直接上到10MHz以上延迟一致性也好很多。1.3 数字隔离器替代光耦的核心优势MAX14431BAEE这类数字隔离器用的是变压器或者电容耦合原理不是光耦的发光二极管加光敏三极管。带来的好处很直接速率高几十Mbps起步、延迟低且一致纳秒级偏斜、功耗低、寿命长、集成度高。MAX14431BAEE是四通道数字隔离器正好覆盖SPI的四根线而且通道方向可以配置SCLK和MOSI走一个方向MISO走反方向CS再走一个方向一颗芯片搞定。选它还有一个原因默认输出状态。隔离器在输入侧掉电或者悬空时输出侧应该保持一个确定的状态不能让现场侧收到乱码。MAX14431BAEE支持默认输出高或低的选择这个细节在系统上电初始化阶段特别重要后面会细说。2. MAX14431BAEE与MK20DN128VFM5的搭配逻辑2.1 MK20DN128VFM5的SPI资源盘点MK20DN128VFM5是飞思卡尔现NXPKinetis K20系列的一款Cortex-M4 MCU128KB Flash主频50MHz。它内部有多个SPI模块具体数量看封装和型号变体VFM5这个封装通常带至少两个SPI。SPI模块支持主机和从机模式时钟极性CPOL和相位CPHA可配支持硬件CS或者软件CS控制。用MK20做SPI主机有几个点要注意。第一是SPI时钟分频MK20的SPI时钟源来自总线时钟分频系数是2的幂次实际能跑的最高SPI时钟受限于总线频率和分频寄存器。第二是FIFO深度MK20的SPI有FIFO发送和接收各若干级用好了能减少中断开销用不好反而容易搞乱数据顺序。第三是引脚复用SPI的SCLK、MOSI、MISO、CS分散在多个PORT上配置时要同时设置PORT的复用功能和电气属性。2.2 为什么选四通道隔离器而不是更多通道MAX14431BAEE是四通道刚好对应SPI的四根线。有人会问如果我还想隔离中断线或者复位线怎么办那就得选六通道或者八通道的型号。但通道越多芯片越大、越贵、布线越复杂。我的经验是先把SPI四根线隔离干净其他低速信号如果确实需要隔离用独立的低速隔离器或者光耦单独处理不要为了省一颗芯片把高速和低速信号混在一颗隔离器里因为高速隔离器和低速隔离器的内部结构不一样混用可能影响信号质量。另外SPI隔离后如果现场侧还有别的数字信号要回传比如状态指示或者故障报警这些信号速率低用普通光耦或者低速数字隔离器就够了没必要占用高速隔离器的通道。2.3 隔离器两侧的供电设计这是最容易翻车的地方。MAX14431BAEE的两侧需要独立供电MCU侧用3.3V和MK20同电源域现场侧也要3.3V或者5V取决于现场侧器件的电平。两侧的地必须是隔离地不能有任何直接连接包括不能通过示波器探头的地夹子连在一起——调试时我见过有人用示波器同时看两侧波形结果探头地一夹隔离栅被短路芯片当场冒烟。现场侧供电通常来自隔离DC-DC模块比如B0505或者类似的隔离电源。选隔离电源时要注意输出电流能力和隔离耐压隔离耐压至少要覆盖系统要求的等级输出电流要算上隔离器本身、现场侧SPI从器件、以及可能的其他负载。3. 硬件连接与时序匹配的实操细节3.1 四线SPI的隔离通道分配MAX14431BAEE的四个通道方向需要根据SPI信号流向配置。典型分配如下SPI信号方向隔离通道说明SCLKMCU→现场通道A时钟速率最高优先选延迟最小的通道MOSIMCU→现场通道B主机输出从机输入MISO现场→MCU通道C从机输出主机输入方向相反CSMCU→现场通道D片选低速但时序关键通道A和B同向C反向D同向。MAX14431BAEE的通道方向是出厂固定的还是可配置的取决于具体型号变体选型时要看清楚数据手册。如果方向不匹配就得换型号或者用两颗芯片拼。3.2 时序参数必须对齐的三个点SPI隔离后信号从MCU到现场从器件之间多了一段隔离器延迟。这个延迟本身不影响SPI协议因为SPI是同步的SCLK和MOSI一起延迟接收端用延迟后的SCLK采样延迟后的MOSI相对关系不变。但有几个地方会出问题第一是MISO的回传延迟。现场从器件在SCLK边沿输出MISOMISO经过隔离器回到MCUMCU在SCLK的另一个边沿采样MISO。如果隔离器延迟太大MCU采样时MISO还没稳定就会读到错误数据。计算方法是隔离器传播延迟 从器件输出延迟 PCB走线延迟 SCLK半周期 - MCU采样建立时间。以10MHz SCLK为例半周期50ns隔离器延迟如果20ns从器件输出延迟10ns走线5ns加起来35ns留给MCU建立时间只有15ns比较紧张。所以高速SPI要选低延迟隔离器或者降低SCLK频率。第二是CS的建立和保持时间。CS拉低到第一个SCLK边沿之间要有足够建立时间最后一个SCLK边沿到CS拉高之间要有足够保持时间。隔离器对CS也有延迟如果CS和SCLK走不同通道延迟不一致会导致CS相对SCLK偏移。好在MAX14431BAEE通道间偏斜很小通常几纳秒影响不大。第三是上电初始化阶段的默认状态。系统上电时MCU可能还没配置好SPI但隔离器已经上电。如果隔离器输入侧悬空输出侧可能输出随机电平现场从器件收到乱码CS和SCLK可能误触发。所以隔离器的默认输出状态要选对CS默认高不选中SCLK默认低MOSI默认低。MAX14431BAEE的默认输出选项要按这个来选。3.3 PCB布局的隔离栅处理隔离器在PCB上要跨隔离栅布局时注意几点。隔离栅两侧的铜皮要分开不能有走线跨越隔离带包括电源和地。隔离器下方不要铺铜或者两侧铺铜要严格分开爬电距离和电气间隙要满足安规要求。去耦电容要紧靠隔离器电源引脚两侧各放一个0.1uF加一个1uF高频去耦和低频储能都要有。SPI信号线在隔离器两侧的走线要尽量短尤其是SCLK。如果SCLK走线太长容易辐射干扰也容易受干扰。我一般把隔离器放在MCU和现场连接器之间MCU侧走线短现场侧走线也短隔离器居中。4. MK20侧SPI主机的软件配置4.1 时钟极性与相位的选择SPI有四种模式CPOL/CPHA组合选哪种取决于现场从器件的要求。大多数SPI Flash和传感器支持模式0CPOL0CPHA0或模式3CPOL1CPHA1。MK20的SPI模块通过CTAR寄存器配置CPOL和CPHA。配置时要注意模式选错不会报错只会读到全0或者全1调试时如果发现MISO一直是固定电平先检查模式。我一般先用模式0试不通再换模式3。如果从器件手册明确写了模式直接按手册来。有些器件支持多种模式那就选时序最宽松的那种。4.2 波特率与隔离器速率的匹配MK20的SPI波特率由总线时钟分频得到。假设总线时钟50MHz分频系数选8SPI时钟就是6.25MHz。MAX14431BAEE的速率上限通常远高于这个所以隔离器不是瓶颈。但要注意隔离器的速率等级有些型号分1Mbps、25Mbps、100Mbps几档选的时候留余量别卡着上限用。实际配置时我习惯先把SPI时钟设低一点比如1MHz确保通信正常再逐步提高观察波形和误码率。提高过程中如果出现偶发误码用示波器看MISO在采样点的眼图判断是隔离器延迟问题还是从器件问题。4.3 FIFO与中断的配合MK20的SPI有FIFO发送和接收各有几级。用FIFO可以减少中断次数提高吞吐。但FIFO用不好会出问题比如发送FIFO里还有数据没发完你就去读接收FIFO可能读到的是上一次的残留数据。我的做法是每次传输前清空FIFO传输时根据数据长度决定用中断还是轮询。短数据传输用轮询简单可靠长数据或者高速连续传输用中断加FIFO。还有一个坑MK20的SPI在主机模式下发送和接收是同时进行的。你发一个字节同时也会收到一个字节。如果只想发不想收也要把接收FIFO读空否则接收FIFO满了会阻塞后续发送。4.4 片选控制硬件还是软件MK20支持硬件CS由SPI模块自动控制和软件CS用GPIO手动控制。硬件CS时序精确但灵活性差CS的建立保持时间固定。软件CS灵活可以在CS拉低前后加延时但占用CPU时间。我的选择是如果从器件对CS时序要求严格用硬件CS如果需要灵活控制或者CS引脚和SPI模块不匹配用软件CS。用软件CS时注意在CS拉低后加一点延时再发SCLK确保从器件已经准备好。这个延时不用太长几百纳秒到一微秒就够。5. 实测中遇到的典型问题与排查过程5.1 通信偶发失败从波形找根因有一次调试SPI在低速下正常提到5MHz后偶发读不到数据。用示波器同时抓SCLK和MISO发现MISO在SCLK上升沿附近有振铃MCU采样时正好落在振铃区。排查下来是隔离器输出到MCU的走线太长加上没有端接电阻信号反射导致振铃。解决办法有两个一是缩短走线把隔离器挪近MCU二是在MISO线上加一个几十欧姆的串联电阻抑制反射。我选了后者因为板子已经打样了改走线成本高。加电阻后振铃明显减小通信稳定。5.2 上电瞬间从器件误动作另一个问题是系统上电时现场侧的从器件偶尔会误触发。查下来是隔离器上电过程中输出侧有短暂的不确定状态CS出现了毛刺。解决办法是选默认输出高的隔离器型号并且在从器件的CS引脚上加一个上拉电阻确保上电期间CS被拉高。这个问题的根因是隔离器两侧上电时序不一致。MCU侧电源和现场侧电源是独立的上电快慢不同。如果现场侧先上电隔离器输入侧还没上电输出侧就处于默认状态。所以默认状态的选择很关键。5.3 隔离器发热与功耗核算MAX14431BAEE在高速运行时会有一定功耗尤其是两侧电源电压不同或者速率很高时。我实测过在10MHz SCLK、3.3V两侧供电下芯片温升大概十几度手摸有点温但不烫。如果现场侧用5V供电功耗会更高因为内部电平转换会有额外损耗。核算功耗时除了隔离器本身还要算上现场侧SPI从器件的功耗。如果现场侧还有别的负载隔离DC-DC的选型要留足余量。我一般按总功耗的1.5倍选隔离电源避免满载发热。5.4 地线处理不当导致的隔离失效前面提过示波器探头地的问题这里再强调一次。调试隔离电路时示波器探头的地夹子只能夹一侧的地不能同时夹两侧。如果要看两侧波形用差分探头或者用两个探头但只夹一侧地另一侧用隔离通道。我见过有人用普通探头同时测两侧结果隔离栅被短路隔离器烧毁MCU也挂了。还有一个隐蔽的问题如果现场侧的地和MCU侧的地通过其他路径比如调试器、USB转串口连在一起隔离也会失效。调试时尽量用隔离的调试工具或者调试完成后断开调试器再测。6. 隔离SPI链路的验证与长期可靠性6.1 用回环测试验证链路完整性板子焊好后第一步不是接现场从器件而是做回环测试。把MOSI和MISO短接在现场侧短接MCU发什么就应该收到什么。这个测试能验证隔离器通道、MCU的SPI配置、以及PCB走线是否正常。回环测试通过后再接从器件缩小问题范围。回环测试时注意MOSI和MISO短接要在隔离器的现场侧不能在MCU侧否则测不到隔离器。短接后发一串递增数据看接收是否一致。如果不一致先降速再查波形。6.2 长时间跑数据的误码率统计回环测试通过后做长时间误码率测试。我一般让MCU连续发送几百万个字节统计接收错误的次数。工业应用对误码率要求高通常要求连续运行24小时无错。测试时把板子放在温度箱里从-40度到85度循环观察不同温度下的误码情况。温度变化会影响隔离器的延迟和从器件的时序有些问题只在极端温度下暴露。6.3 现场安装后的抗干扰检查板子装到现场后还要做抗干扰检查。最简单的办法是在现场侧加一个继电器或者电机让它在SPI通信时反复启停观察通信是否受影响。如果受影响说明隔离和滤波还不够可能需要加共模扼流圈或者TVS管。我在一个项目里遇到过现场侧继电器吸合导致SPI误码后来在隔离器现场侧的电源和信号线上加了共模扼流圈问题解决。共模扼流圈选的时候注意额定电流和阻抗特性别选太大导致信号衰减。6.4 隔离器的寿命与失效模式数字隔离器的寿命通常比光耦长很多因为它没有发光器件的老化问题。但也不是永久的隔离栅的绝缘材料会随时间老化尤其是在高温高湿环境下。选型时看隔离器的工作温度范围和隔离耐压工业级通常要求-40到105度隔离耐压至少2.5kVrms。失效模式方面数字隔离器一般是开路失效输出固定电平不会像光耦那样逐渐衰减。开路失效相对安全因为从器件会收到固定电平不会乱动作。但如果默认输出状态选错开路失效可能导致CS一直低从器件一直被选中这个要在设计时避免。7. 几个容易被忽略的设计细节7.1 隔离器使能引脚的处理MAX14431BAEE可能有使能引脚用来控制输出是高阻还是有效。如果不用使能功能使能引脚要接到正确的电平不能悬空。悬空可能导致输出状态不确定或者芯片进入低功耗模式。具体接高还是接低看数据手册。7.2 未用通道的端接四通道隔离器如果只用了三个通道剩下的一个通道输入输出怎么处理输入侧不能悬空要接到固定电平地或者电源输出侧可以悬空。输入侧悬空会导致输出侧振荡增加功耗也可能干扰其他通道。7.3 电源去耦电容的选型与布局去耦电容不是随便放一个0.1uF就行。高速数字隔离器的电源引脚需要高频去耦0.1uF的陶瓷电容要靠近引脚走线尽量短。同时还需要一个1uF到10uF的储能电容放在稍远一点的位置。如果两侧电源电压不同去耦电容的耐压要够。7.4 隔离栅两侧的爬电距离PCB设计时隔离栅两侧的走线和铜皮要满足爬电距离要求。爬电距离取决于工作电压和污染等级工业环境通常要求至少几毫米。如果板子空间紧张可以在隔离带开槽增加爬电距离。开槽后要注意板子强度别开太深导致断裂。8. 从这条链路延伸出去的思考8.1 什么时候该用隔离什么时候不该用不是所有SPI都需要隔离。如果MCU和从器件在同一块板子上共地没有长线连接不需要隔离。如果从器件在另一个板子上但两块板子共电源共地也不需要隔离。只有当场侧存在电位差、长线连接、或者安全规范要求时才需要隔离。过度隔离增加成本、占面积、还可能引入新的问题。8.2 隔离SPI与其他隔离方案的对比除了数字隔离器还有电容隔离、磁隔离、光耦隔离几种方案。电容隔离速率高、功耗低但对共模干扰敏感。磁隔离变压器抗共模干扰好但体积大。光耦隔离成熟、便宜但速率和寿命受限。MAX14431BAEE属于哪种看数据手册的内部结构选型时根据应用场景权衡。8.3 多路SPI隔离的扩展思路如果一个系统有多路SPI需要隔离可以用多颗四通道隔离器或者选通道更多的型号。多路隔离时注意通道间的串扰以及电源的分配。每路SPI的电源最好独立避免一路出问题影响其他路。8.4 隔离SPI在嵌入式工业设备中的典型应用隔离SPI常见于工业采集板、电机驱动控制器、PLC扩展模块、隔离ADC/DAC接口等场景。这些场景的共同点是现场侧有高压或者大电流控制侧需要安全隔离。MK20加MAX14431BAEE的组合适合中等速率、中等通道数的应用速率要求更高的可以选更快的隔离器通道更多的可以选更多通道的型号。我在实际项目里用这套组合做过一个八通道模拟采集板SPI隔离后接现场侧的ADC跑了两年多没出过隔离相关的问题。关键还是前期把时序算清楚、把电源和地处理好、把默认状态选对。这三点做到了隔离SPI链路基本就稳了。
阅读完成 · 觉得有帮助?
咨询建站