PCU功能安全正向开发:ASIL分解、E2E校验与故障注入测试实践
2026/9/19 22:57:01 网站建设 项目流程

简介:面向电动汽车及新能源汽车领域功能安全工程师、电控系统开发者的一份专业技术文献,聚焦PCU(动力控制单元)系统从概念到验证的功能安全正向开发流程。内容以某款插电式混合动力车型搭载的PCU系统为案例,系统阐述相关项定义、边界与接口、危害分析和风险评估、安全目标、功能安全要求与技术安全要求,并针对V模型开发右侧环节详细展示故障注入测试的设计与实施示例,为整车及零部件层级的功能安全开发提供方法论参考。包内为单个PDF文件,大小1.45MB,属于文献类学习材料,可作为功能安全开发、测试验证及ISO 26262标准理解的配套阅读资料。目前已有174人学习下载,适合需要系统建立PCU功能安全完整开发框架的工程师快速获取核心要点。

1. PCU功能安全:真正难的不是标准,是让每个故障都有落点

做电驱动功能安全的人都有个共识:ISO 26262 的流程文档好写,难的是把 ASIL 等级拆到每一帧 CAN 报文、每一个 PWM 通道、每一颗芯片引脚上。PCU(Power Control Unit)作为整车扭矩输出的最后执行层,集成了逆变器、BOOST/OBC、电机控制器和发电机控制器,任何一个环节出现系统性失效或随机硬件失效,都可能让电机输出非预期扭矩,后果直接对应到整车的加速、制动和转向安全。这篇博文基于一篇实际的 PCU 功能安全开发论文,完整拆解 V 模型左侧的安全目标推导——从相关项定义、HARA 分析到 FSR/TSR 落地,以及右侧故障注入测试的工程实现路径。适合正在做电控系统功能安全正向开发的工程师,也适合想搞懂 ASIL 等级到底怎么分配、E2E 保护机制怎么验证的测试人员。

2. 相关项定义与 HARA:把"非预期扭矩"拆成可分配的安全目标

2.1 相关项边界:PCU 里每一块电路板的职责

概念阶段的起点是相关项定义(Item Definition)。论文分析的是一台紧凑型插电式混合动力汽车的电驱动系统,PCU 作为相关项的核心控制器,边界范围覆盖了 BOOST/OBC 高压变换器、逆变器、驱动电机(E-Motor)和发电机(G-Motor)。硬件架构上采用双芯片方案:TI TMS570LS1115 作为安全监控芯片,负责通信监控、E2E 校验和安全状态仲裁;TMS320F28379D 作为控制芯片,实现电动机、发电机、BOOST/OBC 的具体控制算法。

这项定义工作看似只是画框图,实际上决定了后续所有安全要求的分配粒度。我一般会要求硬件工程师在相关项定义阶段就给出芯片级接口清单,特别是安全监控芯片与控制芯片之间的交互通道。论文里 TMS570 与 F28379D 的分工很典型:监控芯片不参与扭矩控制环路,只做"监督+仲裁"——这符合 ISO 26262 中关于独立性(Freedom from Interference)的要求。如果监控芯片和控制芯片共用同一片电源或同一个晶振,就要在后续分析中额外考虑共因失效。

PCU 的典型功能列表需要覆盖所有运行模式。论文中给出了六类功能,其中有三类容易被忽略:

功能名称目的关键运行模式
电力驱动响应扭矩请求,输出驱动力矩电动模式
发电机械能转电能,通过 BMS 为电池充电发电模式
跛行故障状态下降额运行,支持车辆跛行降额模式
放电响应主动/被动放电请求,高压侧能量释放到安全状态放电模式
坡道辅助驻车和起步时防止反向溜车(溜车距离<10cm)驻车模式
交流充电220V 交流电转为高压直流电充电模式

注意"跛行"和"放电"这两个功能往往在概念阶段被当成次要功能,但实际上它们本身就是安全机制的一部分,需要在 HARA 中单独评估——降额策略如果设计不当,可能从"安全降额"变成"新的危害"。

2.2 HAZOP 与 HARA 的组合:从功能异常到 ASIL 等级

危害分析和风险评估的核心方法是 HAZOP(Hazard and Operability Analysis),对"输出驱动扭矩"这项功能,用引导词(Guide Word)体系识别功能异常表现:

引导词功能异常表现
功能丧失有需求时不能输出驱动扭矩
提供错误的功能实际输出扭矩大于/小于期望值
非预期功能无需求时输出驱动扭矩
输出卡滞扭矩输出量无法更新
方向错误扭矩输出方向与期望值反向

这六类异常每一条都要映射到整车层面的危害事件。论文给出的例子非常典型:非预期输出驱动扭矩,运行场景为新车起步或拥堵路况变道时,高车速过弯道,最终危害事件是与侧方车辆碰撞,严重度 S3、暴露概率 E4、可控性 C2,组合结果为 ASIL C。

这里有一个工程上容易出错的地方:S、E、C 三个参数的确定不能完全靠主观判断,ISO 26262-3 提供了量化参考表,但实际企业做 HARA 时通常依赖内部的事故统计数据加上对标数据库。论文中暴露概率取 E4 的依据是"该场景在总运行时间中的占比小于 10%",这个数据需要从整车实际运行工况中采集,而不是从实验室工况里取。我见过不少项目在 HARA 阶段把暴露概率估低,导致 ASIL 等级降级,后期在功能安全审计时被 challenge 甚至返工。

2.3 安全目标的确定:注意 SG3 和 SG4 的差异

每个危害事件需要对应一个安全目标(Safety Goal),安全目标必须描述到可以用"安全状态+故障容错时间间隔(FTTI)"来验证的粒度。论文中列举了四个安全目标:

序号安全目标安全状态ASILFTTI
SG1防止电机非预期输出驱动扭矩,输出扭矩不应超过需求扭矩 20N发出警示,终止扭矩输出,可进入主动短路模式(ASC)或滑行模式(Freewheeling)C400ms
SG2防止电机非预期输出反向扭矩发出警示,终止扭矩输出,可进入 ASC 或 FreewheelingC400ms
SG3系统放电时应避免非预期的高压直流电压超过 60V超过 60V 时发出警告信号,避免人员靠近高压系统A3s
SG4系统应避免非预期的高温保持电机温度 160℃ 以下,IGBT 和 PCBA 温度 100℃ 以下B-

注意 SG3 的 FTTI 是 3 秒,而 SG1/SG2 只有 400ms——这个差异直接决定了安全机制实现方案。高压放电保护可以通过硬件比较器独立触发,因为 60V 的阈值判定不需要复杂的算法;而扭矩监控必须在一个控制周期内完成,通常需要 TMS570 在 10ms~20ms 的任务周期内连续检测多帧扭矩报文,才能在 400ms 内完成仲裁并触发 ASC。SG4 的 ASIL B 等级则意味着温度监控可以通过软件诊断方式实现,不需要独立的硬件安全路径,这为后续 TSR 的制定留了余地。

3. 从安全目标到 FSR/TSR:V 模型左侧的层层细化

3.1 FSR 的粒度:CAN 通信相关功能安全要求的写法

在安全目标确定之后,需要为每个 SG 导出功能安全要求(Functional Safety Requirement, FSR)。FSR 的粒度是关键——写得太粗,后续 TSR 无法落地;写得太细,又在系统层绑死了实现方案,违背了"FSR 应独立于实现"的原则。论文中给出的 FSR 示例以 CAN 通信为主线:

  • FSR_01:驱动控制系统应通过 CAN 总线建立通信接口,QM——SG1、SG2
  • FSR_02:电驱动控制系统应通过 CAN 总线接收 VCU 发送的电动机和发电机的扭矩需求值,ASIL C——SG1、SG2
  • FSR_03:电驱动控制系统应通过 CAN 总线向 VCU 持续发送电动机和发电机的实际扭矩值,ASIL C——SG1、SG2
  • FSR_04:电驱动和发电功能运行时,应避免输出扭矩非预期地超出需求扭矩,超出阈值且持续超过时间阈值时,系统应进入安全状态,ASIL C——SG1
  • FSR_05:应对逆变器的 PWM 扭矩控制信号进行诊断,根据故障相位数关断功率管,ASIL C——SG1、SG2

这个写法有一个值得学习的点:FSR 中明确写了"QM"与"ASIL C"的混合分配。FSR_01 的通信接口建立本身是 QM,但承载扭矩需求的通信内容必须达到 ASIL C。这意味着在系统设计时,通信接口的底层驱动不需要按照 ASIL C 开发,但报文内容的 E2E 保护必须按照 ASIL C 的度量要求来设计。这种 QM/ASIL 混合的做法在业内是允许的,但前提是 QM 部分不能干扰 ASIL 部分的安全机制——比如 CAN 驱动发生故障时不能导致 E2E 校验失效。司是在做 FSR 评审时,重点核对的就是这类"降级"是否合理。

3.2 TSR 的落地:TMS570 芯片层面的 E2E 校验设计

从 FSR 到技术安全要求(Technical Safety Requirement, TSR),需要把"系统应做什么"翻译成"芯片应做什么"。论文中对应 FSR_02 的 TSR 示例有九条,工程参考价值最高的是 E2E 保护部分:

TSR_02_01: 电驱动系统必须持续读取 CAN 信息中的扭矩需求 TSR_02_02: 电驱动系统必须验证 CAN 信息中的扭矩需求 TSR_02_03: TMS570 芯片必须对 CAN 接收报文进行 E2E 校验(例如 CRC) TSR_02_04: E2E 校验连续故障次数超过 10 次时,TMS570 通过 CAN 上报 VCU,控制电机进入安全状态 TSR_02_05: TMS570 芯片应检测 VCU 请求扭矩的范围 TSR_02_06: VCU 请求扭矩超过合理范围时,TMS570 通过 CAN 上报 VCU,控制电机进入安全状态 TSR_02_07: CAN 通信 E2E 校验故障恢复后,电驱动系统应能恢复工作 TSR_02_08: 持续性 CAN 通信丢失达到故障允许阈值时间,电驱动系统进入安全状态 TSR_02_09: 持续性 CAN 通信丢失小于故障允许阈值时间,电驱动系统应能保持工作

这组 TSR 有几处容易被低估的细节:

第一,TSR_02_03 明确规定 E2E 校验由 TMS570 完成,而不是由 F28379D 完成。这是独立性原则的体现——控制芯片负责扭矩计算,监控芯片负责验证扭矩指令的完整性,两者互不信任。如果 E2E 校验跑在控制芯片上,一旦控制芯片软件逻辑出错,校验也会跟着失效。

第二,TSR_02_04 引入了"连续故障次数"的概念,这比单帧故障直接进安全状态更合理。CAN 通信受到电磁干扰时出现单帧 CRC 错误是正常现象,如果因为一帧错误就切断扭矩,整车的驾驶体验会非常差,甚至引发新的危害——比如在高速超车时突然失去动力。连续 10 次故障作为一个阈值,实际上是在"容忍瞬态干扰"和"及时进入安全状态"之间做平衡。这个 10 的取值不是拍脑袋定的,需要结合 FTTI 反推:假设每条 CAN 报文周期是 10ms,10 次连续故障对应 100ms,加上检测和仲裁时间,仍然小于 SG1 的 400ms FTTI。

第三,TSR_02_07 和 TSR_02_09 要求系统在故障恢复后能自动恢复工作,这是功能安全里容易被忽略的"恢复路径"。很多项目只关注"进安全状态",不关注"从安全状态出来"。如果故障恢复逻辑设计不当,会出现两种问题:要么系统永远卡在安全状态,整车需要下电重启——这在实际行驶中是不可接受的;要么恢复条件设置太宽松,故障尚未完全消除就恢复输出,导致反复震荡。

3.3 需求分配要解决的两个问题

完成了 FSR 和 TSR 之后,还需要在系统架构层面做安全要求分配,这里有两个核心问题需要解决:

第一个问题是安全机制的覆盖率。每个 FSR/TSR 都要有明确的实现载体(硬件单元或软件模块),并且这个载体要能证明自己具备处理该故障的能力。论文中以 CAN 通信故障为例,FSR_02 对应的安全机制分布在 TMS570 的 CAN 外设、E2E 校验软件模块、ASC 触发逻辑三个位置,三个位置的故障相互独立,才能保证"整车控制器和电机控制器之间的 CAN 传输发生故障"时,系统依然能通过 TMS570 内部的校验逻辑感知到通信异常。

第二个问题是安全机制自身的失效模式。安全机制也是系统的一部分,它自己也会出故障。TSR 中已经隐含了这个考量——TMS570 如果自身失效怎么办?通常的方案是再增加一个硬件看门狗(External Watchdog)或者锁步核(Lockstep Core)来监控 TMS570 本身。但论文的方案里没有展开这部分,实际做系统设计时这一块不能省,可以在 FSR 层补充一条"安全监控功能自身应具备失效检测能力",然后再向下细化 TSR。

4. 故障注入测试:信号级 HIL 与功率级 PHIL 怎么选

4.1 信号级 HIL 与功率级 PHIL 的边界

V 模型右侧的验证和确认工作,故障注入测试是最直接的手段。论文搭建了信号级 HIL 和功率级 PHIL 两套平台:信号级 HIL 通过 USPACE 模拟逆变器、电机和机械执行部件,整个模拟过程仅需上位机编程,修改电机参数或被模拟部件的参数非常方便;功率级 PHIL 则通过电机模拟器与 MCU 直接相连,能够真实模拟电机绕组的电气特性。

两套平台的选用逻辑是:信号级 HIL 适合做功能安全需求的逻辑验证,因为它的仿真模型参数可调,可以快速覆盖大量的故障注入用例;功率级 PHIL 适合做控制器的真实电气特性验证,因为信号级 HIL 无法模拟功率器件在短路、过流等故障下的真实响应。论文中特别提到,用功率级 HIL 做故障注入测试的最大优势是"修改电机参数无需额外增加台架",对比传统台架测试——换一个电机参数可能要重新定制台架夹具和传感器,耗时数周,而 PHIL 平台只需要修改上位机模型参数。

工程中普遍的做法是先做信号级 HIL 的自动化回归测试,把安全机制的逻辑功能验证透,再针对高风险场景做功率级 PHIL 抽测。如果预算有限,功率级 PHIL 至少要吃透三类场景:IGBT 短路故障、电机定子绕组相间短路、以及旋变信号受到强电磁干扰时的解码行为——这三类故障在信号级 HIL 里很难真实模拟。

4.2 故障注入列表设计与优先级

故障注入不是随机乱打,需要从底层故障模式和危害场景出发,系统性地枚举。论文中给出了 MCU 和 OBC 两部分的常见故障类型,按照故障注入测试类型进一步细化为七大类:

故障源类型故障注入示例验证目的
解析器错误正/余弦信号注入噪音和电磁干扰旋变解码安全机制
电机温度传感器信号中断温度采样断线诊断
定子绕组模拟绕组电感错误电机参数辨识异常处理
转子转子惯性误差过大转子位置估算精度
轴承异常波动的扭矩注入机械故障导致扭矩波动
控制器失效过压、欠压故障控制器电源异常保护

在做故障注入测试用例设计时,我一般会按照三个维度排列优先级:一是该故障与安全目标的关联度(比如涉及 SG1/SG2 的优先);二是故障发生的概率(参考市场售后数据和 FMEA 中的发生频度评级);三是故障注入的难度(简单易复现的先做,复杂场景后做)。论文中特别强调,故障注入要根据底层故障模式和种类,结合 HIL 台架完成故障注入,评价安全机制和安全措施是否有效执行,以及执行结果是否实现了功能安全要求。

4.3 测试序列脚本示例

故障注入测试的自动化程度直接影响测试效率。以下是一个典型的 CAN 总线故障注入测试脚本逻辑,使用 Python 编写,通过 HIL 台架的上位机接口控制 CAN 节点开关:

import can import time # 定义安全状态判定阈值 ASC_ACTIVE = 0x01 # 主动短路模式标志位 FREEWHEEL_ACTIVE = 0x02 # 滑行模式标志位 def can_fault_injection_test(bus_channel, fault_duration_ms, mode): """ CAN总线故障注入测试 mode: 0-短路, 1-断路, 2-CAN阻抗异常 """ # 打开CAN通信 bus = can.interface.Bus(channel=bus_channel, bustype='pcan', bitrate=500000) # 记录注入前的扭矩指令与实际扭矩 torque_cmd_before = read_torque_command(bus) torque_actual_before = read_actual_torque(bus) # 执行故障注入 if mode == 0: inject_short_circuit(bus_channel) # 注入短路故障 elif mode == 1: inject_open_circuit(bus_channel) # 注入断路故障 else: inject_impedance_anomaly(bus_channel) # 注入R/C阻抗异常 # 故障持续期间监控安全机制响应 fault_start = time.time() safety_state = 0 while (time.time() - fault_start) < (fault_duration_ms / 1000.0): # 读取TMS570上报的安全状态标志 safety_state = read_safety_state(bus) if safety_state == ASC_ACTIVE or safety_state == FREEWHEEL_ACTIVE: break time.sleep(0.005) # 5ms轮询周期 # 恢复CAN通信 remove_fault_injection(bus_channel) # 判断测试结果:是否在FTTI=400ms内进入安全状态 response_time = (time.time() - fault_start) * 1000 if safety_state != 0 and response_time <= 400: print(f"PASS: 安全机制在{response_time:.0f}ms内触发,进入ASC/Freewheeling模式") else: print(f"FAIL: 安全机制未在400ms内触发,响应时间{response_time:.0f}ms") # 验证故障恢复后系统能恢复零扭矩控制 time.sleep(1.0) torque_actual_after = read_actual_torque(bus) if abs(torque_actual_after) < 5: # 扭矩小于5Nm视为恢复零扭矩 print("PASS: 故障恢复后系统回到零扭矩控制模式") bus.shutdown()

这段脚本的核心逻辑是:注入故障之后,以 5ms 周期轮询 TMS570 上报的安全状态标志位,记录从故障注入到安全机制触发的时间间隔,并对比 FTTI 要求(400ms)判断测试是否通过。脚本最后对故障恢复后的扭矩输出做了验证,确保系统回到零扭矩控制而不是停留在 ASC 模式。这里有一个参数要注意:轮询周期 5ms 不能太长,否则会漏掉安全机制在 FTTI 内的高频状态变化;也不能太短,否则总线负载过高,干扰被测试系统的正常运行。5ms 对 500kbps 的 CAN 总线是合理取值,如果总线负载本身较高,可以适当调整到 10ms。

4.4 通信故障注入的台架实践

论文中对 CAN 总线故障注入做了具体展开:电机控制器通常放置在动力 CAN 网络中,驾驶员的控制命令输出给整车控制器(VCU),VCU 经过策略执行后输出扭矩控制指令给电机控制器。如果 VCU 与电机控制器之间的 CAN 传输发生故障——例如 VCU CAN 总线受干扰、CAN 总线节点故障、或 CAN 总线的 R/C 阻抗变化过大——都可能影响信号传输的完整性,导致电机控制器收不到扭矩指令,进而可能造成整车危害。

台架测试时,故障注入的触发方式分为两种:一种是通过特殊的硬件设备在线完成,比如 CAN 总线故障注入仪,可以在线切换短路、断路、C 型阻抗网络;另一种是通过特殊软件程序在上位机侧完成,比如通过 USPACE 上位机修改 CAN 控制器参数,模拟总线关闭(Bus-Off)状态。论文中采用的方案是硬件故障注入为主——因为 CAN 短路和断路故障无法通过软件真实模拟,只有硬件级别的故障注入才能验证控制器在物理层故障下的真实响应。

5. E2E 连续故障判定与安全状态恢复验证

5.1 "连续 10 次"的逻辑陷阱

TSR_02_04 要求 E2E 校验连续故障次数超过 10 次才触发安全状态,但"连续"的判定逻辑在嵌入式软件实现中有一些细节需要注意:

/* TMS570 E2E校验连续故障计数器实现 */ #define E2E_FAILURE_THRESHOLD 10 #define E2E_FAULT_RECOVERY_TIMEOUT 100 /* 故障恢复判定时间窗,单位ms */ static uint8_t e2e_fail_cnt = 0; static uint8_t e2e_pass_cnt = 0; void E2E_MonitorTask_10ms(void) { uint8_t crc_ok = CheckE2E_CRC(); /* 校验CRC字段 */ uint8_t timeout_ok = CheckTimeout(); /* 校验报文超时 */ if (crc_ok && timeout_ok) { /* 一帧通过,恢复计数清零 */ if (e2e_fail_cnt > 0) { e2e_fail_cnt--; } else { e2e_pass_cnt++; } if (e2e_pass_cnt >= 5) { /* 连续5帧通过,判定故障恢复 */ e2e_fail_cnt = 0; e2e_pass_cnt = 0; SetFaultStatus(E2E_FAULT_RECOVERED); } } else { /* 一帧失败,连续故障计数递增 */ e2e_fail_cnt++; e2e_pass_cnt = 0; if (e2e_fail_cnt >= E2E_FAILURE_THRESHOLD) { SetFaultStatus(E2E_FAULT_ACTIVE); TriggerSafetyState(ASC_MODE); /* 进入主动短路模式 */ } } }

这里的逻辑说明:E2E 校验任务以 10ms 为周期执行,每次执行时检查 CAN 报文的 CRC 字段和超时标志。当连续 10 帧(100ms)都校验失败时,触发安全状态;当连续 5 帧通过时,判定故障恢复,并清空故障计数。注意故障恢复的判定阈值(5 帧)与故障触发的阈值(10 帧)是不对称的——这种不对称是刻意设计的,目的是防止系统在故障边缘状态下反复震荡。如果恢复阈值设得比触发阈值还低,只要故障间歇性出现,系统就会在"进安全状态"和"出安全状态"之间反复切换,这在整车上是不可接受的。

另一个工程细节是故障计数器的递减逻辑:很多初学者把"连续"实现成"只要有一帧成功就清零",这也会出问题。真正的"连续"应该是"一帧成功抵消一次计数",而不是把之前积累的失败次数全部抹掉。论文中 TSR_02_04 的"连续故障次数超过 10 次"配合 TSR_02_09 的"通信丢失小于故障允许阈值时间时系统应能保持工作",实际上要求实现方必须明确什么算"一次故障",什么算"一次恢复"。

5.2 故障恢复后的行为验证

故障恢复验证是整个功能安全测试中最容易被跳过、也最容易出问题的环节。论文中的测试结果是:在高速零扭矩控制状态下,通信故障(前一帧通信)发生后,触发安全机制,控制进入 ASC 模式;通信恢复(后一帧通信)后,控制回到零扭矩控制模式。

这个验证至少回答三个问题:

第一,恢复时间是多久?从通信恢复到系统退出 ASC 模式,会经过"E2E 连续 5 帧通过"的判定,加上安全状态仲裁逻辑的处理时间,最终的恢复时间通常在 100ms 量级。这个时间不能太长,否则驾驶员在故障恢复后会感到明显的动力中断;也不能太短,否则没有充分确认通信链路的稳定性。

第二,恢复过程中扭矩输出是否有跳变?系统从 ASC 模式切回零扭矩控制模式时,如果扭矩指令和实际电机转速之间有明显偏差,会产生扭矩冲击。所以在台架测试中需要额外加一个观测点:记录恢复模式切换时刻的电机力矩实测值,确认没有超过预设的突变阈值。

第三,故障恢复后,累计的相关故障计数是否需要通过诊断仪清除?论文中没有展开,但实际项目里,ISO 26262 要求故障事件要记录在非易失性存储器中,便于售后诊断和召回分析。这个"故障记忆"功能本身也需要测试——验证下电重启后故障码依然存在,只有通过诊断仪手动清除才能复位。

以上是从 V 模型左侧的需求开发到右侧的故障注入验证的完整闭环。整个过程中最值得留意的两个参数:一个是安全目标的 FTTI 值(400ms 或 3s),另一个是 E2E 连续故障计数阈值(10 次),二者共同决定了整个安全机制在时间维度上是否满足要求——这个时间轴上的自洽性,是功能安全开发中最容易在样件阶段暴露问题的环节。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询