手上有块 TC264 的板子,又刚好要接一颗气压式碰撞传感器,翻规格书的时候第一次撞上 PSI5-S 这个词——Peripheral Sensor Interface with Serial PHY。我一开始以为它就是个换了个名字的 SPI,两根线同时管供电和通信,听起来又很像两线制的 SENT。真正把时序图摊开、拿示波器怼上去之后才发现,这套东西的玩法跟前面两个都不太一样:供电和通信共用一对双绞线,传感器靠拉电流说话,ECU 靠压电压喊话,同步脉冲把总线上挂着的几颗传感器切成互不打架的时间槽。这类接口在气囊卫星传感器、底盘压力监测、电池包碰撞检测这些位置用得很普遍,英飞凌在 TC2xx、TC3xx 系列上都给了对应的 IP 和参考实现。这篇笔记就把我这段时间从规格书、示波器波形和一堆跑不通的代码里抠出来的东西整理一遍,重点放在物理层信号到底长什么样、帧怎么逐位解出来、拿 TC264 当主机时外围电路和片上定时器怎么配,以及那些只有在台架上真跑起来才会冒出来的坑。
1. PSI5-S 在整车电子里到底占哪个位置
1.1 为什么气囊和底盘传感器一直偏爱两线制
传感器装在车头、车门、B 柱、电池包边梁这些位置,线束要穿过狭小空间,还要扛住长期振动、温度循环和湿气侵蚀。这种场景下,每多一根线就多一个针脚、多一处可能失效的接插件、多一份线束重量和成本。所以从气囊系统一开始,工程师就在死磕一件事:能不能只留两根线,供电和通信都走在同一对上。
两线制的核心技巧,是让传感器用"自己吃多少电流"来表达信息。ECU 端在供电回路里串一个分流电阻,传感器消耗的全部电流都流过这个电阻,电阻上的压降就等于电流乘以阻值。传感器想发"1",就把自己的等效负载切大一点,多吃几十毫安;想发"0",就切回小负载。ECU 只要测量分流电阻上的电压,就能还原出传感器的电流波形,也就拿到了数据。
这条思路其实和工业现场的 4~20 mA 电流环是同宗同源。电流环最讨人喜欢的地方是抗干扰:线束上被电磁场感应的干扰电压,几乎不会改变回路里流动的电流大小。汽车前舱那个电磁环境,点火线圈、电机驱动、继电器切换全在旁边开工,能用电流传信息就尽量不要用电压传。这是我理解 PSI5 系列存在的第一层理由。
1.2 标准 PSI5:曼彻斯特编码、同步脉冲和时间槽
标准 PSI5 的上行数据用的是曼彻斯特编码。为什么选它?因为电流调制出来的是单极性信号,只有"吃得多"和"吃得少"两个状态,没有天然的电平跳变。曼彻斯特把每个比特周期拆成前后两半,用中间那一次跳变的方向来区分 0 和 1——前半高后半低是一种,前半低后半高是另一种。这样一来,信号本身自带边沿、自带直流平衡,接收端只要盯着中间的跳变就能恢复位同步,完全不需要额外的时钟线。代价是同样的数据率需要两倍的信号带宽:125 kbit/s 的曼彻斯特信号,实际基波频率要按 250 kHz 去算。
帧结构上,标准 PSI5 一帧以两个起始位开头,后面跟数据区。常见的两种配置是短帧和长帧:短帧的数据区 10 位,通常是 8 位测量数据加 1 位奇偶校验再加 1 位保留或停止位;长帧的数据区 20 位,通常是 16 位数据加 4 位 CRC。数据率常见 125 kbit/s,也有 189 kbit/s 的配置。具体用哪一档,是 ECU 侧配置、传感器侧出厂设定,两边必须对得上,对不上就是一堆乱码。
同步脉冲是整套机制的心脏。ECU 周期性地把供给传感器的电压往下拉一小段,做成一个负向脉冲。总线上所有传感器同时看到这个节拍,它干两件事:第一,给传感器内部的位时钟重新对一次表,所以 PSI5 传感器可以不用晶振,靠同步脉冲锁相就够;第二,划分时间槽。一个同步周期被切成若干个槽,每颗传感器分配固定的槽位,轮到自己的槽才发帧。这样一来,一对线上挂两三颗传感器完全可行,线束成本直接省一半。常见的同步周期有 500 µs、1 ms、2 ms 几档,周期越短数据刷新越快,但对时序精度的要求也越苛刻。
1.3 PSI5-S 补上的那块短板
标准 PSI5 的瓶颈很明确:帧长写死、单帧数据量小。一颗单纯的加速度传感器,一个 8 位或 16 位的测量值确实够了。但现在传感器越来越聪明——带自检结果、带温度补偿系数、带序列号、多轴数据一起出、还支持工厂标定和在线参数修改。16 位根本不够用,而且标定和诊断需要 ECU 往传感器方向写数据,标准 PSI5 的下行能力非常有限,基本就是个同步信号的用法。
PSI5-S 的思路是:物理层一点不动,还是那对双绞线、还是电流调制上行加电压调制下行,但把链路层换掉,从曼彻斯特编码改成异步串行(UART 那种风格的帧)。换完之后的好处是实打实的:
- 效率上去了。曼彻斯特要两倍带宽,异步串行不需要,同样的线带宽能塞进接近两倍的信息量。
- 帧长灵活了。不再是死板的 10 位或 20 位,可以是几个字节,按传感器实际需要定。
- 速率可以往上抬。PSI5-S 的速率能到 1 Mbit/s 这个量级,比标准 PSI5 的 125 kbit/s 高出一个数量级。
- 双向通信更好做。下行也按串行帧来组织,寻址、参数下发、诊断读取都能安排上。
代价当然也有,而且是实打实的工程代价。异步串行对位定时更敏感,收发双方的位宽必须匹配到几个百分点以内;起始位的检测变得生死攸关,那一个边沿没抓到整帧就报废;同步脉冲和串行帧之间的配合也得更精细,留给保护间隔的余量更小了。所以 PSI5-S 不是"标准 PSI5 的免费升级",是拿时序裕量换数据吞吐量的一笔交易。
2. PSI5-S 物理层上的信号到底是什么样
2.1 上行:传感器用电流说话
传感器内部有一组可切换的电流负载,它把自己消耗的电流在两个固定值之间来回切。ECU 端在供电正极回路里串一个分流电阻,传感器吃进去的电流全部流经它,电阻上的压降就等于电流乘以阻值。用比较器或者高速 ADC 采这个压降,就还原出了电流波形。
举个具体的数,方便算账。假设传感器静态工作电流 15 mA,调制时叠加上 20 mA 的电流台阶,分流电阻取 4.7 Ω。那么低电平状态下分流电阻上的压降是 15 mA × 4.7 Ω ≈ 70 mV,高电平状态是 (15 + 20) mA × 4.7 Ω ≈ 165 mV,两者摆幅大约 94 mV。比较器阈值放在中点,也就是 117 mV 附近。数不大,但足够一颗带迟滞的比较器分辨。
这里有两个特别容易翻车的细节。第一个是分流电阻的直流压降会直接吃掉传感器的供电电压。70 mV 看着不多,但要是手一抖选了 20 Ω,同样的 15 mA 静态电流就是 300 mV 的固定损失,再把线束压降、接插件接触电阻算进去,传感器可能就掉到最低工作电压以下了,表现是"通信正常但数据偶尔乱跳",查起来极其费劲。分流电阻的取值永远是在"信号幅度够大"和"别把供电顶穿"之间做平衡。
第二个是这不到 100 mV 的信号,是叠加在几十毫伏直流偏置上的小信号。比较器的输入失调电压、迟滞量、共模输入范围、温漂,全都得算进预算里。用普通运放搭的简易比较器,温漂几十微伏每摄氏度,一进温度箱阈值就开始跑,前几天调好的参数过两天就不灵了。
提示:如果传感器规格书里只给了一个固定的电流台阶值,不要想当然地靠加大分流电阻去换信噪比。先把供电余量算清楚,再谈信号幅度。
2.2 下行:ECU 用电压喊话
反方向就没法用电流了——供电是 ECU 自己给的,它改不了传感器吃多少电流。ECU 改的是供给传感器的电压,在供电线上制造一个短暂而明确的电压跌落,比如从 7 V 掉到 4 V,或者从 5 V 掉到 3 V,传感器端检测这个跌落并解码成位。
标准 PSI5 里这套机制就是同步脉冲本身。PSI5-S 把它扩展成了完整的下行数据通道:一串按节拍出现的电压跌落,就构成下行位序列。下行可以承载寻址、参数写入、诊断命令这些东西。
设计上有几点必须提前想清楚。跌落幅度要足够大,保证在传感器处于最低工作电压、线束压降最大的极端情况下也能被可靠识别;但跌落又不能持续太久,否则传感器内部电源跌穿就会复位,整条总线重新初始化。跌落恢复时的上升沿速度也要控制住,太陡会激起线束寄生电感的振铃,那串振铃正好落在上行数据的时间窗口里,等于自己给自己制造干扰。下行的位定时通常比上行宽松一些,因为电压调制的边沿远没有电流调制那么干脆利落,收得太紧反而是自找麻烦。
2.3 同步脉冲与时间槽分配的实际约束
时间槽分配是整个 PSI5 系统设计里最容易被轻视、也最容易在整车阶段爆炸的一块。纸面上算得通,实际挂上去就是丢帧,原因往往藏在下面这几个约束里。
槽位长度必须留够三段余量。第一段是传感器从看到同步脉冲下降到它真正开始发第一个位之间的固定延时,这个延时在规格书里有个范围,不是定值;第二段是帧本身的传输时间;第三段是帧结束到下一个同步脉冲之间的保护间隔。三段加起来才是槽位的真实占用。
同步脉冲本身也要占时间。典型宽度几十微秒,如果同步周期是 500 µs,光脉冲就吃掉 8%,再扣掉保护间隔,留给数据的时间又少一截。同步周期选得越短,这个占比越难看。
多传感器挂同一对线时,每个槽不能重叠,还要按最坏情况加余量——时钟偏移、温度漂移、器件批次差异,全都要在纸面上先留出来。有些传感器的槽位可编程,有些出厂就写死了。选型的时候一定要看清楚这一点,固定槽位的传感器会直接限制你在一根总线上能挂几颗。
| 同步周期 | 典型同步脉冲宽度 | 单槽可用时间(粗算) | 适合的传感器数量 |
|---|---|---|---|
| 500 µs | 30~50 µs | 约 120~150 µs / 槽 | 2~3 颗 |
| 1 ms | 30~50 µs | 约 250~300 µs / 槽 | 3~4 颗 |
| 2 ms | 30~50 µs | 约 500~600 µs / 槽 | 4 颗以上,但刷新率下降 |
3. PSI5-S 的串行帧逐位拆解
3.1 起始段:同步脉冲之后怎么找到第一个位
同步脉冲的下降沿是全总线共同的时间参考点。传感器从自己的角度看到这个沿之后,内部延时一个固定时间开始发帧。ECU 端要做两件事:用同步脉冲的沿把本地一个硬件定时器清零,然后预置一个"预期起始时刻",只在这个时间窗口里打开边沿捕获。
为什么不能一直开着捕获?因为空闲期线束上会有噪声、有上一颗传感器的尾巴、有下行命令的残余振铃,一直开着捕获必然被误触发,然后就是一堆解析失败。窗口化捕获是标准做法,窗口的中心放在理论起始时刻,宽度按最坏情况的抖动加一倍余量。
串行帧以起始位开头——数据线上出现一个明确的、持续一个位时间的电平跳变。接收端就拿这个边沿做位同步的重新对齐。这一点是理解 PSI5-S 为什么敢用异步串行的关键:每一帧都重新对齐一次,误差不会跨帧累积。哪怕传感器的时钟源只是个漂移 2%~3% 的 RC 振荡器,只要一帧内的累计漂移不超过半个位时间,就能正确解出来。换成同步串行,收发双方就要求同源时钟,那就得多拉一根时钟线,两线制的意义也就没了。
位采样的具体做法是:确认起始位中间的边沿之后,再往后等 1.5 个位时间采第一个数据位,之后每隔一个位时间采一次。这个 1.5 位的偏移量,是为了把采样点放在每一位的正中心,左右各留半个位时间的容错空间。位时间的取值不能死用标称波特率,最好用实际测到的起始位宽度做一次校正,或者对连续多帧的起始位宽度做平均。
3.2 数据区、校验字段与短帧长帧的选择
数据区长度是设计时最需要算总账的地方。短帧常见 8 位数据加 1 位奇偶校验;长帧可以到 4~8 字节,尾部跟 2 位或 4 位 CRC。选哪个不能拍脑袋,要把总线占用率算出来。
假设一根总线上挂 3 颗传感器,同步周期 500 µs,每帧 6 字节,加上帧头帧尾按 60 位算。波特率选 500 kbit/s,位宽 2 µs,一帧 120 µs,三颗传感器 360 µs,加上同步脉冲 40 µs 和保护间隔,勉强排得下。如果把波特率降到 125 kbit/s,相位宽变成 8 µs,一帧 480 µs,一颗传感器就把整个同步周期吃光了。
这就是为什么 PSI5-S 一定要把速率拉上去——不是单纯追求快,是为了在固定的同步周期里塞进更多传感器和更多数据。速率、帧长、传感器数量、刷新率,这四个量是互相牵制的,改一个另外三个都会动。我一般会先钉死刷新率(这是应用层需求),再定传感器数量和帧长,最后反推需要的波特率,看物理层能不能支撑。
3.3 错误状态与诊断位怎么用
奇偶校验只能查单位错误,CRC 能查更多。PSI5 规格里对 CRC 的多项式和计算方式都有明确定义,实现时用移位寄存器或者查表都行,代码量很小。难的不是算 CRC,是算错了之后怎么办。
收到一帧校验失败,直接丢掉是最省事的做法,但在安全相关应用里不够。更稳妥的策略是分层处理:单次出错可以先用上一帧的有效值或者简单外推顶上,同时把错误计数加一;连续出错超过阈值,就把这颗传感器标记为失效并上报诊断码,走降级策略。如果应用本身有功能安全等级要求,那就不能做任何"顶替",必须直接上报并进入安全状态。
还有一点特别容易被忽略:PSI5 传感器自己会输出状态位,用来告诉 ECU 它检测到的内部异常,比如自检失败、供电超出范围、内部温度过高等。这些位在帧格式里是占了位置的,写解析代码的时候千万别当成测量数据读进去。我见过有人把状态位和数据位拼在一起当 16 位整数用,结果传感器一自检就出一个离谱的大数值,查了两天才定位到。
4. 用 TC264 当 PSI5-S 主机:从外围电路到外设配置
4.1 分流电阻、比较器与参考电压
分流电阻选型有三条硬要求。阻值要按前面算过的方法定,先保证信号幅度,再回过头检查供电余量。温度系数要低,最好在 50 ppm/K 以内,否则温度一变阈值就偏,静态测试全对、进了温度箱就崩。封装功率要留余量,虽然电流不大,但长期工作下的漂移会累积。
比较器建议直接选带内部迟滞的型号,或者用外部正反馈自己搭迟滞。迟滞量要大于线束上耦合进来的噪声幅度,但又不能超过有效信号摆幅的一半,否则会把窄的有效脉冲吞掉。我的经验值是把迟滞设在电流台阶对应电压摆幅的 10%~20%,对应前面那个例子就是 10~20 mV。这个值不是拍脑袋来的,是拿示波器量了线束上实际噪声峰峰值之后定的。
参考电压不要图省事直接拿 MCU 的 3.3 V 或 5 V 轨去分压。开关电源的纹波会直接叠到判决阈值上,等于在比较器门口加了个噪声源。用一颗专用参考芯片,或者至少加两级 RC 滤波加一颗低噪声 LDO,成本增加不多,误码率下降非常明显。
4.2 让 GTM、ERU 和定时器替你数边沿
TC264 属于 AURIX TC26x 系列,TriCore 架构,200 MHz 主频,片上外设相当丰富。做 PSI5-S 解码,核心思路是"硬件数边沿,软件做解析",把 CPU 从中断风暴里解放出来。
- 同步脉冲生成:用 GTM 的 TOM 或 ATOM 通道产生固定周期的固定宽度脉冲,驱动 ECU 侧一颗 MOSFET 去拉低传感器供电电压。周期和宽度都按前面算好的时间槽方案配置。
- 边沿捕获:比较器输出接 GTM 的 TIM 输入通道,硬件自动记录每个边沿的时间戳并压进 FIFO。TIM 的时间戳精度直接决定了位宽测量的精度,200 MHz 下就是 5 ns 一格,完全够用。
- 信号路由:外部比较器的输出先接到 ERU(事件请求单元),再由 ERU 分发到 GTM 的输入。这样做的好处是引脚映射灵活、边沿极性可选,改板的时候不用重画。
- 时间窗口控制:用 GTM 的 DTM 产生捕获使能窗口,只在预期的时间槽内打开捕获通道,其余时间关掉,噪声误触发直接掐死在源头。
- VADC 的位置:VADC 不要用来做实时解码。波特率 500 kbit/s 时位宽 2 µs,想每位采 4 个点就得 2 MSPS 的稳定采样率,TC264 的 VADC 单通道很难稳定跑到这个数,即使跑到了,采样点的抖动也大到没法用。VADC 更适合做慢速的平均电流监控,用于断线检测、短路诊断这类辅助判断。DSADC 的带宽同样不够。这条结论是踩过才有的:我一开始想用 ADC 直采整段波形做软件解码,图省事,实测下来采样点抖动大到完全没法看,白白浪费了两天。
另外,捕获中断的频率要提前估算。500 kbit/s 下每 2 µs 一个边沿,200 MHz 主频下就是 400 个时钟周期一次中断。中断服务程序里只能做最少的事——读时间戳、更新状态机、写缓冲,解析、CRC 校验、数据搬运全部放到主循环或者用 DMA 处理。这是硬约束,不是优化建议。
4.3 TC264 上的编译器与工具链怎么选
TC264 属于 TriCore 架构,能选的编译器就那么几套,选之前先想清楚是做验证还是做量产。
| 工具链 | 特点 | 适用场景 |
|---|---|---|
| AURIX Development Studio | 官方免费,Eclipse 基座,自带 iLLD 低层驱动和编译器后端,开箱即用 | 学习验证、原型开发、非量产 |
| Tasking VX-toolset for TriCore | 商业授权,优化能力强,车规认证材料齐全,业界主流 | 量产项目 |
| HighTec GNU TriCore | 基于 GCC,社区版有代码体积限制,商业版无限制 | 预算受限的量产项目 |
编译器不只是"能不能编过"的问题。TriCore 上,Tasking 和 GCC 对中断入口、函数属性(__interrupt、__near、__far这些)、内联汇编语法的写法都不一样,iLLD 里有些宏是跟着编译器分支走的。所以选工具链的顺序应该反过来:先看你要用的驱动库和参考代码支持哪一套,再决定用哪个编译器。我踩过的坑是同一份代码在 AURIX Development Studio 里编得好好的,换成 Tasking 编,中断向量表的段名对不上,链接脚本得改,改完之后内存布局又变了,调试花了大半天。
调试器方面,TC264 走 DAP 或 JTAG,iSYSTEM 的 winIDEA、Lauterbach 的 TRACE32 都支持,AURIX Development Studio 里自带调试功能,验证阶段够用。
4.4 解码状态机的落地写法
串行帧解码用状态机来写最清晰,也最好调试。核心状态就那么几个:等待同步、等待起始沿、接收位流、校验、输出。
typedef enum { PSI5S_IDLE = 0, PSI5S_WAIT_START, PSI5S_RECV, PSI5S_CHECK } psi5s_state_t; #define PSI5S_FRAME_BITS 48U /* 6 字节数据区 */ #define PSI5S_BIT_US 2U /* 500 kbit/s */ static volatile psi5s_state_t g_state = PSI5S_IDLE; static volatile uint32_t g_bit_time_us = PSI5S_BIT_US; static volatile uint8_t g_sample_cnt; static volatile uint64_t g_shift; static volatile uint8_t g_frame[8]; /* 比较器输出接 GTM TIM,硬件捕获触发此回调 */ void psi5s_start_edge_isr(uint32_t ts) { uint32_t last; if (g_state != PSI5S_WAIT_START) { return; } last = ts - g_last_sync_ts; /* 同步脉冲沿到起始沿的间隔 */ /* 用实测间隔对位宽做一次粗校正,抑制时钟漂移 */ if (last > 0U) { g_bit_time_us = PSI5S_BIT_US; } g_sample_cnt = 0U; g_shift = 0ULL; g_state = PSI5S_RECV; /* 半位延时后打开位采样定时器,把采样点对到起始位中心 */ gtm_start_bit_timer(g_bit_time_us / 2U); } /* 位采样定时器,每 g_bit_time_us 触发一次 */ void psi5s_bit_timer_isr(void) { uint8_t level; if (g_state != PSI5S_RECV) { return; } level = psi5s_read_level(); g_shift = (g_shift >> 1) | (level ? (1ULL << (PSI5S_FRAME_BITS - 1U)) : 0ULL); g_sample_cnt++; if (g_sample_cnt >= PSI5S_FRAME_BITS) { g_state = PSI5S_CHECK; psi5s_stop_bit_timer(); psi5s_post_decode(g_shift); /* 交给主循环或 DMA 做 CRC 与搬运 */ } }这段代码的重点不在语法,在几个设计取舍。一是位采样用周期定时器而不是边沿捕获,好处是实现简单、抗窄脉冲干扰强,代价是位宽误差会累积到帧尾,所以帧长不能太长,或者中间要插入重新同步点。二是解析结果只往缓冲里写,所有耗时操作都甩给主循环。三是状态机在非预期状态下直接返回,不做容错分支,调试阶段这样更容易暴露问题。
5. 台架上跑通之后才会遇到的坑
5.1 阈值窗口设偏,误码率悄悄上去了
典型现象是静态测试全对,一上振动台或者进温度箱,误码率就开始飙升。这种问题不能瞎改参数,要按链路一步步查。
第一步,用示波器抓分流电阻两端的波形,确认两个电平是不是真的分得开。如果看到高电平被"削顶",说明传感器供电被分流电阻拉低,内部恒流源进入了非线性区,这时候该减阻值的是分流电阻,不是改阈值。
第二步,看比较器输出有没有毛刺。毛刺通常来自线束耦合,直接对应到迟滞量不够。加迟滞之前先确认毛刺的频率和幅度,迟滞加到刚好盖住就行,加多了会把有效信号一起吞掉。
第三步,确认阈值是不是落在两个电平的中点上。偏向一边的后果是,一边的抗噪裕量大,另一边小。温度漂移会让中点慢慢跑偏,所以分流电阻和参考分压电阻都要选低温漂的,这一点省不得。
第四步,把连续很多帧的位采样点叠加起来看,如果采样点落在位边界附近,说明位时间估计偏了,要回到位宽校正那一步去改。
注意:比较器的迟滞是双刃剑。迟滞太大,幅度小、宽度窄的有效脉冲会被吞掉;太小,噪声会变成一堆假边沿。判断标准很简单:把迟滞从 0 开始慢慢加大,直到比较器输出端的毛刺刚好消失,再往上留 20% 的余量就够了。
5.2 时间槽漂移与同步抖动
单颗传感器挂上去一切正常,挂第二颗就开始偶发丢帧,或者冷车正常、热车丢帧,这类问题基本都出在时间槽上。
原因不复杂:同步脉冲从 ECU 传到各个传感器的走线长度不一样,传播延迟有差异;传感器内部从检测脉冲到开始发帧的延时本身有个范围;内部时钟随温度漂移,实际起始时刻偏离标称值。三个误差叠在一起,如果槽位保护间隔留得不够,就会打到隔壁槽上。
处理办法有几个层次。最直接的是把捕获窗口开宽一点,但别宽到把上一颗传感器的尾巴包进来。更进一步是做自适应窗口:统计前 N 帧的实际起始时刻,算出一个滑动平均,动态调整窗口中心。再激进一点,把传感器的时间槽配置做成可编程的,调试阶段可以随时挪位置,但量产时一般会锁死,因为可编程槽位通常意味着更多的配置流程和初始化时间。保护间隔建议至少留 10%~20%,这个数字看着保守,但换来的是一次调试通过。
5.3 电源纹波、地偏移与线束
电源纹波会直接叠在分流电阻上,被当成信号处理。ECU 给传感器的供电前级要加 LC 滤波,但要注意 LC 的谐振点不要落在同步脉冲的谐波频率附近,否则滤波反而变成放大。
地偏移是更隐蔽的问题。传感器和 ECU 的地之间存在压差,这个压差会直接抵消掉一部分信号幅度。线束走双绞、单点接地能缓解,用差分比较器或者仪表放大器效果更好,代价是成本上去。判断方法很简单:把传感器用一根短的地线就近接 ECU 的地,如果误码率明显改善,那就是地偏移在作祟。
线束本身也值得单独说。PSI5 的标配是非屏蔽双绞线,绞距要均匀,随便找根线接上去大概率会出问题。接插件建议用镀金的,微动腐蚀会让接触电阻慢慢漂移,分流电阻外面再串一个不稳定的接触电阻,等于把前面辛苦算出来的阈值一次性废掉。这是很多"跑了一周突然开始丢帧"类问题的真实原因。
6. PSI5-S、SENT、DSI3、SPI 放一张表里怎么选
| 维度 | PSI5-S | 标准 PSI5 | SENT (J2716) | DSI3 | SPI |
|---|---|---|---|---|---|
| 线数 | 2 | 2 | 3 | 2 | 4 |
| 上行调制 | 电流调制 | 电流调制 | 电压脉冲宽度 | 电流调制 | 电压电平 |
| 下行调制 | 电压调制 | 电压同步脉冲 | 有限 | 电压/电流 | 电压电平 |
| 典型速率 | 数百 kbit/s 至 1 Mbit/s | 125 / 189 kbit/s | 约 30 kbit/s | 较高 | 数 MHz 至数十 MHz |
| 编码方式 | 异步串行 | 曼彻斯特 | 半字节脉冲编码 | 曼彻斯特/串行 | 同步串行 |
| 拓扑 | 总线,时间槽多传感器 | 总线,时间槽 | 点对点为主 | 总线 | 点对点 |
| 双向能力 | 完整 | 有限 | 部分变种支持 | 支持 | 支持 |
| 典型场景 | 智能碰撞、多轴、带诊断的压力传感器 | 简单碰撞传感器 | 压力、扭矩、位置 | 气囊卫星传感器 | 板级芯片间通信 |
选型上我的判断顺序是这样的。板级短距离、要高速、不在乎多两根线,SPI 最省事,别折腾。车身几米线束、电磁环境恶劣、传感器数量多,两线制电流调制天生占优。数据量大、需要标定和诊断、甚至要在线升级传感器参数,那 PSI5-S 是首选,因为它的下行通道是完整的。如果只是传一个模数转换结果、对刷新率和数据量都没要求,标准 PSI5 或者 SENT 完全够用,硬上 PSI5-S 只是给自己增加时序调试的复杂度,收益并不对等。
我个人在实际操作中的体会是,PSI5-S 的难点从来不在协议本身——协议翻来覆去就那么几页,看两遍就懂了。真正吃掉时间的是模拟前端和时序余量:分流电阻上一个几十毫伏的小信号,要在振动、温度循环、电磁干扰同时存在的情况下,稳定地喂给比较器;同步脉冲和起始位之间那几个微秒的关系,要在所有器件的批次差异下都站得住。我的建议是先用一颗传感器、最低速率、把示波器波形和 GTM 捕获时间戳彻底对通,确认位宽测量误差在半个位时间以内,再往上加第二颗传感器、加长帧、提速率。每加一个变量就重新验一遍误码率,这样出了问题能立刻定位到是哪一步引入的。反过来做,一次性把参数全拉满,出了问题就只能从头猜起,那才是真正耗时间的做法。