ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CAN接口PCB Layout核心要点:差分走线与阻抗匹配实战

CAN接口PCB Layout核心要点:差分走线与阻抗匹配实战 做硬件这几年我在CAN接口的PCB Layout上交过不少学费。刚入行的时候总觉得CAN协议里有仲裁、有校验物理层又是差分信号板子上随便拉两条线就能跑直到亲手做过一块节点板实验室里一切正常接到总线上却每隔一段时间就报CRC错误才真正意识到Layout里的每一个细节都能决定一条总线的生死。这篇文章是我用Altium Designer从零设计CAN接口板卡的完整实操记录重点放在阻抗匹配的实现、差分走线的处理方法以及画完之后怎么验证。读这篇文章之前建议你先把ISO 11898-2和CAN收发器的数据手册放在手边后面很多问题绕不开这两个东西。1. 先把物理链路看明白CAN接口Layout要解决的核心矛盾1.1 CAN信号速率不高但边沿一点都不慢经典CAN的波特率最高1MbpsCAN FD能到5Mbps以上单看速率确实不高很多人的第一反应是“低速信号随便画”。但如果你用示波器看TJA1051这类收发器输出的CAN_H/CAN_L波形上升沿通常在十几纳秒到几十纳秒之间。信号边沿包含的高频分量按0.35/tr估算tr按20ns算对应的拐点频率都有17.5MHz左右。这个频率已经足够在几十厘米的PCB走线上产生明显反射。反射的本质是阻抗不连续。CAN总线标准设计成120Ω差分特性阻抗双绞线、连接器、PCB走线都应该尽量往这个值靠。PCB走线如果只有60Ω、80Ω信号走到线尾时一部分能量反射回来波形上就会出现台阶、过冲和振铃。低速情况下振铃可能只是波形难看但在一根总线上挂着多个节点、总线长度拉到几十米时就会表现为显性位被误判成隐性位产生位错误错误计数攒够之后节点直接进入bus-off。所以做CAN接口的PCB Layout第一件事不是打开软件放器件而是先把“差分传输线”的思维方式建立起来。CAN_H和CAN_L是一对差分信号不是两根独立的普通线。这个思维不转换过来后面所有关于线宽、线距、等长、参考平面的讨论都是空的。1.2 120Ω终端电阻与总线拓扑决定了你的板子画法高速CAN的标准物理层要求在总线两端各接一个120Ω终端电阻这两个电阻的作用是吸收信号到达总线末端时的能量减少末端反射。常见误区是每个节点都焊120Ω结果整个网络的差分阻抗被并联拉低波形幅度严重下降通信反而更容易出错。画板之前先确定你的板子在总线网络中的位置如果板子位于总线一端连接器旁边必须预留终端电阻量产时焊120Ω如果板子只是中间节点原则上不焊终端电阻但为了方便调试Layout上最好还是预留焊盘用0Ω电阻或跳线选择是否接入。终端电阻精度我建议用1%。虽然120Ω的5%电阻也能跑但终端阻值直接影响网络差分负载批量产品不值得省这点钱。如果产品对EMC要求高可以用两个60Ω电阻串联把中点通过一个4.7nF电容接地这种方案叫split termination能给共模噪声提供一条低阻抗泄放路径。代价是多两个器件、多一点布线换来的是更干净的波形成分。1.3 中间节点板与末端板Layout策略完全不同中间节点板和末端板不只是“焊不焊电阻”的区别布线策略也不一样。末端板的终端电阻要尽量靠近连接器让电阻到总线的分支stub最短。如果电阻放在收发器旁边而连接器在板子另一头那么从连接器到电阻那段走线就变成了没有端接的分支高速时照样反射。中间节点板不需要终端电阻但连接器到收发器之间的走线仍然是整个网络的一部分这段线同样要按120Ω差分阻抗来设计不能想当然随便拉。总线的拓扑优先采用直线或菊花链尽量避免星型连接。分支过长等于一根悬空的天线阻抗突变最明显。机械结构上如果不得不把板子接成星型理想做法是加CAN中继器或集线器而不是靠拉长走线硬扛。2. 原理图阶段就要为PCB埋好伏笔器件选型与网络命名2.1 收发器封装和引脚排列怎么看很多初学者画原理图时只关心收发器型号能不能通信很少看封装和引脚排列对Layout的影响。实际布板时收发器的引脚顺序决定了信号能不能顺顺当当地走到连接器。常用收发器里TJA1051、TJA1042、SN65HVD230这些多是SOIC-8或类似封装CANH/CANL引脚排布并不难。但如果是隔离型收发器比如ISO1042、ADM3053引脚会多出隔离电源和隔离地Layout时要把两侧地平面分开复杂度立刻上一个台阶。选型时还要注意逻辑供电引脚。部分收发器有VIO引脚用来匹配MCU电平。如果MCU是3.3V而CAN收发器是5VVIO的去耦电容就要放在对应引脚旁边。引脚分布一旦不合理后期绕线会绕得很痛苦。我的习惯是原理图阶段就把CAN收发器周围的核心网络单独列出来电源、两个CAN总线信号、总线地。先看一遍引脚物理位置再决定器件摆在板子的哪个区域。这个工作做在前面PCB阶段就会省很多事。2.2 共模电感、TVS、终端电阻的摆放顺序CAN接口外围器件看起来简单但摆放顺序有讲究。我常用的信号链顺序是连接器 - TVS二极管 - 终端电阻 - 共模电感 - 收发器TVS要放在最外侧越靠近连接器越好因为ESD电流应该尽快被泄放到地而不是一路穿到PCB内部。共模电感放在终端电阻后面用来抑制共模干扰它内部是两根线成对绕制所以Layout两侧必须完全对称。终端电阻要靠近连接器这个原则前面说过。如果共模电感离连接器太远电阻和共模电感之间的走线没有100Ω或120Ω的连续端接同样是一段隐形的stub。所以实际布局时我倾向于把连接器、TVS、终端电阻排成一条直线共模电感紧随其后每一级之间距离都控制在几百密耳以内。如果板子上只用TVS不用共模电感顺序就是连接器 - TVS - 终端电阻 - 收发器。但需要注意TVS的结电容会给总线增加负载。多个节点的板子都装TVS时结电容叠加可能拖慢边沿所以低结电容的TVS优先一般选几pF到十几pF级别的器件。2.3 网络命名与差分对方向的统一Altium Designer里创建差分对最省事的做法是网络命名时用后缀区分正负。比如把CANH命名为CAN_PCANL命名为CAN_NAltium就能根据后缀自动识别配对。如果你习惯沿用CANH/CANL这种行业通用名也可以在PCB中手动选中两条Net创建差分对只是自动识别没那么方便。原理图里还有一个更规范的做法在CAN_P和CAN_N上放置Differential Pair Directive标志好差分对名称和阻抗目标。同步到PCB之后差分对会自动进Differential Pairs面板布线规则也能一起带过去。方向统一也同样重要。连接器上CANH和CANL的Pin定义不能乱A板接B板如果正负反了总线立刻瘫痪。批量生产时还要确认连接器封装里Pin1位置是否一致我一个朋友就因为连接器库封装里两个脚放反了板子回来之后整条线怎么调都通信不上最后发现是原理图符号和封装引脚对应关系错误。3. 层叠与阻抗计算把120Ω算出来再开工3.1 双层板和四层板的取舍CAN接口板如果只是做实验、成本敏感双层板多数够用。但双层板要做120Ω差分阻抗难点在于参考平面。差分线的正下方必须有一块完整的地铜一旦底层被其它走线分割参考平面断掉阻抗直接失控。四层板的优势是地平面完整、信号层到参考层的距离小阻抗可控EMC表现通常比双层板好一个档次。我的经验是只要产品要过EMC测试、或者总线上要跑CAN FD直接上四层板别在双层板上死磕。CAN部分占的面积通常不大四层板多出来的成本远低于后期整改天线和加磁珠的费用。四层板的层叠顺序一般建议“信号-地-电源-信号”CAN差分线走在表层或底层时相邻参考层是完整地平面。如果走内层就变成带状线结构阻抗更稳定但过孔进出麻烦一点。表层微带线是常见选择做阻抗匹配也相对好调。3.2 用阻抗计算工具和Altium层叠管理器跑一遍不要凭经验拍脑袋定线宽。FR4的介电常数、半固化片厚度、铜箔厚度、阻焊厚度都会影响阻抗。常见的FR4介质常数在4.2到4.5之间与玻纤布结构有关。第一次做可靠产品之前最好先向板厂要一份叠层信息再开始算。计算工具我一般用Polar SI9000新版本Altium的Layer Stack Manager也支持阻抗配置。在Altium里创建好层叠填上介质厚度、铜厚、介电常数再添加一个Differential Impedance为120Ω的阻抗配置文件软件会给出建议的线宽和间距。这个功能的好处是阻抗配置可以直接关联到布线规则不用手动一个个去填。举一个典型场景1.6mm四层板L1表层到L2地平面的PP厚度大约0.1mm表层铜厚1oz。这种情况下想做120Ω差分微带线线宽通常不会太宽线距反而可能比预想的大。我做过的一块量产板实际值是线宽0.12mm、间距0.4mm。但这个数据只适用于那套特定叠层换个PP厚度马上变化。所以我的建议是先用工具算一组数值然后把“目标阻抗120Ω±10%、表层微带线、差分类型”这些参数发给板厂让板厂用自己的工艺修正线宽线距再回来更新PCB规则。很多问题出在“板厂会默认帮我调阻抗”的错觉上你不写清楚板厂只会按标准工艺生产不会帮你做主。3.3 阻抗计划如何落到差分规则里在Altium的Design Rules里Differential Pairs Routing规则需要设置两个核心参数Width每条线宽和Gap线到线间距。布线时按TAB键可以在属性面板里看到实时算出来的差分阻抗走完之后也能通过规则检查确认是否满足。这里要分清一个概念差分阻抗不是单端阻抗的简单相加。两条线离得越远相互耦合越弱差分阻抗越接近两倍单端阻抗离得越近耦合越强差分阻抗会低于两倍单端阻抗。因此调整Gap也会改变阻抗不是随便拉一个5mil间距就完成任务。规则设置时Width和Gap都建议填最小、典型、最大值三档。实际布线时用典型值DRC检查时用最小和最大兜底。Altium的差分规则是按差分对对象来匹配的如果整板有多组差分对每组单独建规则别把所有差分网络都塞进同一条规则里万一后面调整某一路的阻抗会很麻烦。4. 差分走线实操在Altium里拉出合格的CAN线4.1 差分对怎么创建规则怎么设同步完原理图后在PCB文档里打开PCB Panel找到CAN_P和CAN_N两条Net同时选中并右键选择Create Differential PairAltium会把它放到Differential Pairs面板里。如果原理图已经放了Differential Pair Directive同步过来后会自动生成省去手动配对。差分对创建好之后到Design Rules - Routing - Differential Pairs Routing里新建规则把对象指向这个差分对然后填入线宽和线距。规则设置完成后用Place - Differential Pair Routing开始走线。走线过程中按ShiftR可以切换“忽略障碍、推挤、绕障”等模式。CAN线数量少我一般不用自动布线手动拉反而更快差分对走线工具会保证两条线同时走、同时拐弯间距基本一致。实际拉线时先把差分对网络高亮显示确认走线路径上有没有挡路的焊盘或过孔。如果空间拥挤优先调整其它器件位置不要强行让CAN线从一排密集引脚中间挤过去。差分对是口粮其它信号是零食饿着零食也不能饿口粮。4.2 走线顺序、拐角与间距控制布局时就要把CAN差分线的通路留出来。我的优先级是先走CAN差分线再走其它数字信号。CAN线路径越短越好尽量减少换层尽量远离晶振、DC-DC电感、MOSFET驱动这类干扰源。如果板子上有开关电源CAN线不要从电感正下方穿过也不要和电源走线平行长距离并排。拐角用45度倒角不用90度。90度拐角的等效阻抗变化和额外电容在低速时未必致命但没有必要去赌。圆弧拐角最好但多数板厂和设计效率下45度已经完全够用。差分对内部两条线要保持相同的弯曲路径不能一条线走了直线、另一条绕了个大弯再去汇合。差分对与其它信号的间距建议至少3倍线宽与高速时钟、开关节点保持20mil以上的距离。如果空间允许CAN线两侧可以加一圈接地过孔。这个地栅栏对抑制外部干扰很有效但要注意别把差分线下方的参考平面打成筛子过孔不能排得太密形成缝隙。4.3 等长处理、过孔与回流路径很多硬件工程师听到差分就条件反射地喊“要等长”。CAN经典速率下等长要求其实没有那么苛刻重点在于不要出现夸张的长度差。CAN FD跑5Mbps以上时才需要对内误差控制到5~10mil左右。我的做法是先用Tools - Length Tuning查看当前长度差再用Interactive Length Tuning把它调成规则的锯齿或Trombone形状。Altium的线长调节工具会跟着物理路径自动加蛇形线效率很高。但蛇形线的间距不能太小否则相邻线段之间会产生额外耦合一般锯齿间距至少是线距的三倍以上。过孔是差分线的痛点。每次换层差分对的回流路径都会从参考平面的一侧换到另一侧如果旁边没有地过孔回流电流就得绕路造成共模辐射。因此换层的位置必须成对打孔并在同一点附近加一个接地过孔。差分对的两个过孔要对称不能一个进了孔、另一个绕了一段再过孔。最后强调一遍无论什么情况差分线都不能跨过地平面上的分割槽。四层板里地平面如果为了模拟地和数字地隔离被切开CAN线跨过去等于参考平面断裂阻抗瞬间失控。实在避免不了就在跨越处放一个高频跨接电容但最好还是通过布局调整避开。5. 布局的细节连接器、收发器与电源组成的铁三角5.1 连接器到收发器的信号路径怎么最短CAN连接器最好放在板边靠近总线接入的位置。连接器选定之后收发器离它越近越好中间夹着TVS、终端电阻、共模电感排列方向最好是一条直线连接器引脚 - TVS - 终端电阻 - 共模电感 - 收发器CANH/CANL引脚。这样每级器件之间的走线都短stub效应最小。如果收发器被迫离连接器很远比如接口在板子一端而MCU在另一端那么至少把收发器放在靠近连接器的一侧让CAN信号线不要横穿整块板子。CAN是差分总线接口把它和数位电路混在一起走长线等于主动给自己埋雷。这个原则在汽车电子板卡上尤其重要振动、温度、线束寄生参数都会放大Layout缺陷。排布的时候还要考虑插头的方向。一些DB9或J1939标准连接器内部引脚是斜排的焊盘出来后天然要拐一个弯。这时最好把收发器放在连接器开口方向的垂直延长线上让CAN信号能从最短路径到达而不是绕一下再去追收发器。5.2 终端电阻位号怎么放才不坑人终端电阻的焊盘要靠近连接器但具体放在连接器的哪一侧有一点讲究。我通常放在TVS和连接器之间偏连接器一侧这样电阻本身就成为了总线进入板内的第一个负载能第一时间吸收来自线束的反射。有些方案因为结构限制会把电阻放在共模电感后面这时共模电感到连接器之间的走线本身就是一段stub必须尽量短。终端电阻封装建议用0603以上。0402虽然常见但在振动环境中焊点强度不如0603终端电阻长期流过差分电流功率不大但太小的封装在返修时容易丢件。如果板子要过振动测试0603是底线。如果同一块板要兼容“末端节点”和“中间节点”两种用法推荐两种做法一是终端电阻位用0603焊盘旁边预留0Ω位二是用一个2pin跳线帽或焊桥。量产后根据实际装配焊接就好别在产品上留一个需要烙铁改装的选项现场维护的人会骂你。5.3 隔离CAN的地分割与回流处理隔离型CAN收发器的Layout比普通方案多考虑一层问题两侧地。逻辑侧GND接系统数字地总线侧CAN_GND接连接器的地两边在芯片内部没有电气连接所以PCB上也不能用铜直接连起来。常见做法是在隔离器件下方把地平面断开形成隔离带。难点在隔离电源。如果用隔离DC-DC模块模块的初级侧和次级侧必须严格分属两个地平面。次级侧的所有走线、滤波电容、TVS接地都要回到CAN_GND不能跨到逻辑地。很多新手画隔离CAN板隔离芯片选了但地平面没割开共模干扰绕过大半个板子回到初级侧隔离的意义直接归零。跨分割的底线是不能有信号线横跨隔离带。如果非要有线跨过去那只能是隔离器件本身靠内部隔离电容撑起信号回流。实际布局时我会把连接器、TVS、终端电阻、共模电感、隔离收发器的总线侧、隔离电源次级侧全部放在同一区域和MCU保持距离再在机械结构允许的情况下开一条完整的隔离槽。6. 画完板子还不算完检查、制板文件与阻抗沟通6.1 把DRC之外的“人工检查”做一遍DRC跑完只是及格线。我每次在出Gerber前会花半小时做几件枯燥但必要的事高亮CAN差分网络沿路径走一遍确认没有从器件焊盘中间穿过、没有跨分割、没有和电感变压器靠得太近确认终端电阻位号和焊接配置一致别把末端板的电阻位漏了检查差分对的实际线宽间距和规则设定值是否一致有时候规则设了但走线没更新DRC却没报出来。Altium里可以用查询条件或者直接点击差分对看属性。实际查看时我习惯把差分对走线高亮成一种颜色再打开地平面显示一眼就能看出参考平面是否完整。这个操作花不了几分钟但能避免板子报废后多花两周改版。6.2 给板厂的阻抗说明文件怎么写制板文件里除了Gerber和钻孔文件还应该附一份简短的叠层阻抗说明。不要写得太模糊比如只写“CAN线控制120Ω”是不够的。应该包含需要控阻的网络和类型差分目标120Ω±10%哪些层的哪些走线要控阻走线类型是表层微带线还是内层带状线声明如果板厂工艺无法实现请先EQ确认而不是自行更改。大多数板厂在工程确认阶段会回复一份阻抗叠层建议告诉你线宽线距需要调整到什么值。你要做的是根据建议决定是否接受并在确认文件中签字。这个流程走完再投产才靠谱。如果你不回应板厂的EQ对方可能默认按原图生产也可能默认按自己经验调整这两种情况都很危险。6.3 用Viewer自检Gerber的习惯Gerber文件生成后不要直接打包发给板厂就完事。先用Altium Designer Viewer或CAM编辑器打开一层层看铜层有没有缺线、阻焊开窗位置对不对、丝印有没有盖焊盘、钻孔文件和铜层对齐关系是否正常。很多问题在PCB编辑器里看不出来转成Gerber就暴露了比如某些非标准过孔孔径异常、文字笔画过细等。Altium的OutJob输出功能可以把Gerber、钻孔、坐标、PDF一次性打包输出。流程本身不多说重要的是输出后打开检查一遍再发。我见过不止一次板子回来发现某个定位孔被丝印盖住或者焊盘上多出阻焊原因就是Gerber阶段没检查。7. 上板实测和故障排查从波形到总线错误7.1 示波器探头设置与阻抗匹配拿到板子之后第一个建议是别急着连总线跑程序先用示波器看一下CAN波形。测CAN_H和CAN_L的差分波形最理想是用差分探头。普通单端探头同时测两个点再做数学减法时示波器两个通道的共模抑制能力有限而CAN总线上的共模电压是动态变化的稍有偏移就会污染波形。常用的10x无源探头在高频段的输入阻抗并不是恒定1MΩ而是与探头电容并联。探头地线如果是一条十几厘米的长夹子线会在测量回路里额外引入电感测出的波形经常带振铃。这个振铃未必是板子的问题而是探头的问题。正确做法是用探头自带的短弹簧地针或者把地线尽量缩短确保测量环路面积最小。所谓探头的阻抗匹配就是让探头阻抗在整个被测频率范围内不明显影响信号。对CAN这种边沿很快的信号100MHz以上的探头基本够用但关键是不能用1x档测。1x档带宽低、输入电容大会把波形直接压圆。7.2 断电测电阻、上电测电压、测地偏移实测的第一个快速判断是断电状态下测连接器处CANH和CANL之间的电阻。如果总线上只有两个端节点、都接了120Ω终端电阻那么从任意节点测量应该接近60Ω如果只测到120Ω说明有一端没有接终端电阻如果数值明显偏低说明某个节点多加了一个电阻或者有短路。这个测试不能替代波形分析但能快速筛掉一半的硬件问题。上电后测量CANH、CANL分别对地的直流电压。静态时两根线应在2.5V附近有通信时用万用表读的是平均值看到2.5V上下波动是正常的。重点是用示波器观察显性位时CANH升到3.5V左右、CANL降到1.5V左右且幅度对称。如果不对称多半是收发器供电、地偏移或终端电阻焊错。还要测一下各节点的地偏移。CAN收发器的共模输入范围一般可以容忍±12V左右的电位差但总线长距离传输时地电位差会叠加在共模电压上。如果发现地偏移太大先看电源地线是否够粗、各节点是否单点接地再考虑是不是要上隔离方案。7.3 误码和bus-off的排查思路通信出现CRC错误或位错误最终导致节点进入bus-off我的排查顺序是这样的先确认波特率和采样点配置这属于软件层面但经常先被误判成硬件问题用示波器测连接器处的波形看终端电阻、上升沿、过冲振铃用万用表确认终端电阻数量和总线阻抗检查总线上是否有一个节点把CANH和CANL接反了检查地偏移和电源纹波尤其是瞬时大电流时CAN供电是否被拉垮。我遇到过最隐蔽的一次是某个中间节点板上的TVS二极管选型容量过大结电容超过50pF。多个节点并联之后总线边沿被拖慢采样点位置稍有偏移就误码。这说明Layout不只是“走线好看”每颗器件的寄生参数都会反馈到信号完整性上。最后分享一个我自己的验收习惯CAN板子回来后先接一个60到70Ω的电阻模拟末端负载在最大波特率下循环收发包跑一晚上长时通信测试同时用示波器盯着波形。如果眼图干净、误码为零再把板子接到真实总线上。这样能把大多数Layout问题留在实验室里解决而不是让现场去发现。
返回列表