AutoSAR 在 BMS 软件中的应用:从 Classic 到 Adaptive 的工程实践

AutoSAR 在 BMS 软件中的应用:从 Classic 到 Adaptive 的工程实践

BMS 的软件复杂度正呈指数级增长。当功能安全要求 ASIL-D、OTA 升级成为标配、域控架构逐步落地,传统的裸机/RTOS 开发模式已经捉襟见肘。AutoSAR 作为汽车软件标准化的基石,正在深刻重塑 BMS 的软件架构。本文将深入解析 AutoSAR 在 BMS 中的具体应用场景、分层实现策略,以及从 Classic Platform 向 Adaptive Platform 演进的工程路径。


1. 为什么 BMS 需要 AutoSAR?

BMS 软件面临的核心挑战不是”能不能写出逻辑”,而是以下三个根本矛盾:

矛盾 具体表现
安全 vs 复杂度 ASIL-D 要求单点故障覆盖率 ≥99%,但 BMS 软件规模动辄数十万行,传统裸机代码审计成本极高
迭代速度 vs 稳定性 OEM 要求 OTA 远程升级,但底层驱动与上层策略耦合过紧,修改一处可能牵动全局
供应链协作 电芯厂、BMS 控制器厂、整车厂三方协作,缺少统一的接口标准和组件复用机制

AutoSAR 的核心价值在于 “为复杂汽车软件提供标准化的中间件抽象”。对 BMS 而言,这意味着:

  • 硬件无关的应用层:AFE 选型从 NXP MC33771 切换到 ADI LTC6811,只需修改 MCAL 驱动,SWC(Software Component)零改动
  • 可验证的安全架构:通过 E2E Protection、WDGM、Program Flow Monitoring 实现端到端安全监控
  • 模块化与可复用性:SOC 估算、SOH 估算、均衡策略等核心算法可以独立开发、独立测试、跨项目复用

2. BMS 的 AutoSAR Classic 架构分层

典型的 BMS 单板控制器(SBC + AFE + MCU)采用 Classic Platform,分层如下:

┌─────────────────────────────────────────────────┐
│  Application Layer (SWC)                        │
│  ┌──────────┐ ┌──────────┐ ┌────────────────┐  │
│  │ SOC Est. │ │ SOH Est. │ │ Cell Balancing │  │
│  └──────────┘ └──────────┘ └────────────────┘  │
│  ┌──────────┐ ┌──────────┐ ┌────────────────┐  │
│  │ SOF Est. │ │ PowerLim │ │ Thermal Mgmt   │  │
│  └──────────┘ └──────────┘ └────────────────┘  │
├─────────────────────────────────────────────────┤
│  RTE (Runtime Environment)                      │
├─────────────────────────────────────────────────┤
│  BSW (Basic Software)                           │
│  ┌─────────────┐ ┌──────────┐ ┌─────────────┐  │
│  │ Services    │ │ ECU Abst │ │ MCAL        │  │
│  │ (NvM, WdgM, │ │ (AdcIf,  │ │ (Adc, Spi,  │  │
│  │  EcuM, BswM) │ │  CanIf)  │ │  Dio, Gpt)  │  │
│  └─────────────┘ └──────────┘ └─────────────┘  │
│  ┌────────────────────────────────────────────┐  │
│  │ Complex Drivers (SPI-Daisy Chain,         │  │
│  │  SBC Driver, Custom Crypto)               │  │
│  └────────────────────────────────────────────┘  │
├─────────────────────────────────────────────────┤
│  Microcontroller (e.g. NXP S32K344, Infineon   │
│  TC3xx, Renesas RH850)                         │
└─────────────────────────────────────────────────┘

2.1 MCAL 层:AFE 通信链路的关键

BMS 中 AFE 的 SPI 通信往往是系统中最关键的底层链路。AutoSAR MCAL 的标准 SPI 驱动只能处理 点对点 通信,而实际 BMS 中通常采用 SPI 菊花链(Daisy Chain)连接多个 AFE(10-18 颗 AFE 级联)。

因此,AFE 的 SPI 菊花链驱动必须作为 Complex Driver (CDD) 实现,这在 AutoSAR 规范中属于合法但需要特殊处理的部分。

关键的工程决策点在于 CDD 与 SWC 的交互模式

方案 A: CDD → Callback → RTE → SWC
    ├── 优点:符合 AutoSAR 分层规范
    └── 缺点:额外的 RTE 上下文切换延迟

方案 B: CDD → Direct Function Call → Application
    ├── 优点:最低延迟(适用于过流保护等快速响应场景)
    └── 缺点:破坏了分层隔离原则

实际项目中通常采用 混合策略:常规数据采集走方案 A,而硬件过流保护、短路保护等 μs 级响应需求走方案 B 的直连路径,并在安全手册中明确标注为安全相关的架构偏差。

2.2 BSW 服务层:BMS 特化的功能安全组件

BMS 在 BSW 层有几个特殊需求是通用 AutoSAR 栈需要定制化配置的:

NvM(Non-Volatile Memory)的特殊处理:

BMS 需要在 NVM 中存储大量状态数据——SOC/SOH 校准值、均衡历史、故障日志、累计充放电量等。这些数据必须保证 掉电不丢失 + 写入寿命管理

// NvM Block 配置示例(ARXML 逻辑等效)
NvM_BlockDescriptorType BMS_SoC_Calibration_Block = {
    .NvM_BlockId           = 0x0101,
    .NvM_BlockLength       = 128,
    .NvM_NvBlockNum        = 1,
    .NvM_NvBlockCrcType    = NVM_CRC32,
    .NvM_ResistantToLayout = TRUE,      // 跨版本兼容
    .NvM_WriteVerification = TRUE,      // 回读校验
    .NvM_WriteCyclesLimit  = 50000      // 疲劳管理
};

WdgM(Watchdog Manager)的挑战:

BMS 的看门狗需要同时服务于功能安全(ASIL-C/D 等级)和系统可靠性两个目标。实践中推荐使用独立的 Program Flow Monitoring 机制:

Alive Supervision
├── SWC_SoCEstimation_Checkpoint → 每 10ms
├── SWC_CellMonitoring_Checkpoint → 每 5ms
├── CDD_AFE_Communication_Checkpoint → 每 1ms
└── WdgM_MainFunction → 汇总上报

如果一个 Checkpoint 超时(Deadline Miss),WdgM 不是直接复位,而是:
1. 触发 E2E 保护的回退策略(Fallback)
2. 尝试软复位该 SWC
3. 连续 3 次超时才触发系统级 Safe State(断开主继电器)


3. 关键 BMS 算法的 SWC 化设计

3.1 SOC 估算 SWC

SOC 估算是最核心的 BMS SWC,典型的 RTE 接口如下:

// RTE Port 定义(概念级)
// S/R Interface: SoCEstimation →
//   Required: CellVoltage[18], CellCurrent, CellTemp[6], PackStatus
//   Provided: SoC_Value, SoC_Confidence, SoC_MinCell, SoC_MaxCell

// RTE Data Receive (Runnable: SoC_Calculate)
Std_ReturnType SoC_Calculate(uint8 InstanceId)
{
    // 1. 读取输入
    Rte_Read_R_CellVoltage(&cellVoltage);      // uint16[18]
    Rte_Read_R_CellCurrent(&packCurrent);       // sint32
    Rte_Read_R_CellTemperature(&cellTemp);      // sint16[6]

    // 2. 核心算法——扩展卡尔曼滤波
    // 状态向量: x = [SOC, Vp1, Vp2]^T
    // 观测向量: z = [Vt] (终端电压)

    // 预测步 (基于 1-RC 或 2-RC 等效电路模型)
    EKF_Predict(&ekf_state, packCurrent, deltaT);

    // 更新步 (仅在满足可观测条件时执行)
    if (packCurrent < CURRENT_THRESHOLD && abs(packCurrent) < CURRENT_THRESHOLD) {
        EKF_Update(&ekf_state, cellVoltage[0], packCurrent);
    }

    // 3. 写入输出
    Rte_Write_P_SoC_Value(ekf_state.soc);
    Rte_Write_P_SoC_Confidence(ekf_state.covariance);

    return RTE_E_OK;
}

工程要点:

  • EKF 的矩阵运算(3×3 矩阵求逆)在嵌入式 MCU 上需要定点化实现,避免浮点性能开销
  • SOC 估算的输入必须经过 E2E Protection(CRC + Counter),防止 SPI 传输错误导致估算偏差
  • 推荐增加 SOC 合理性监控(Plausibility Check)独立 SWC,通过库仑计数交叉验证

3.2 均衡策略 SWC

被动均衡和主动均衡的 SWC 设计有显著差异:

Passive Balancing SWC
├── 输入:单体电压、SOC、温度、均衡状态
├── 核心逻辑:
│   ├── 电压差阈值判定 (DeltaV > 10mV)
│   ├── 均衡电流计算 (基于 R_balance)
│   ├── 占空比计算 (PWM_balance = f(DeltaSOC, T_junction))
│   └── 热管理约束 (不能同时均衡相邻电芯)
└── 输出:均衡开关阵列控制 (18-bit mask)

Active Balancing SWC (基于变压器/飞电容)
├── 额外输入:电感/变压器效率曲线、开关频率
├── 核心逻辑:
│   ├── 源电芯-目标电芯配对优化
│   ├── 能量传输效率最大化 (MPPT-like)
│   └── 开关损耗估计
└── 额外输出:H-Bridge 驱动信号 + 故障保护

均衡策略 SWC 的一个关键架构决策是 同步性:主均衡循环建议放在 100ms 周期的慢速 Task 中运行,而均衡开关的硬件保护(过温关断)必须放在 1ms 快速 Task 中作为安全监控。


4. Classic 到 Adaptive 的演进:BMS 域控场景

当 BMS 从单体控制器演进到 域控制器(Domain Controller)+ 智能传感器 架构时,Classic Platform 在以下几个维度开始受限:

维度 Classic Platform 局限 Adaptive Platform 优势
算力 TC3xx 单核 300MHz,跑 EKF 尚可,无法部署 DNN/RNN SoC(如 Xilinx ZU5)+ Linux,支持 TensorFlow Lite
OTA 需要 OEM 定制 Bootloader,Flash 分区复杂 原生支持 POSIX 文件系统 + Docker 容器化 OTA
网络 CAN/CAN-FD 为主,带宽受限 以太网(SOME/IP),支持大数据量传输
敏捷开发 配置工具 + 代码生成,迭代周期长 C++11/14/17,标准 CMake,CI/CD 友好

4.1 BMS 域控的 Adaptive 架构

┌──────────────────────────────────────────────────┐
│  BMS Domain Controller (AUTOSAR Adaptive)        │
│  ┌────────────────────────────────────────────┐  │
│  │  Application (AA - Adaptive Application)   │  │
│  │  ┌──────────┐ ┌──────────┐ ┌────────────┐ │  │
│  │  │ AI-SOC   │ │ Cloud-   │ │ Predictive │ │  │
│  │  │ (DNN)    │ │ Diagnose │ │ Balancing  │ │  │
│  │  └──────────┘ └──────────┘ └────────────┘ │  │
│  └────────────────────────────────────────────┘  │
│  ┌────────────────────────────────────────────┐  │
│  │  ARA (AUTOSAR Runtime for Adaptive)        │  │
│  │  ┌───────┐ ┌───────┐ ┌───┐ ┌───────────┐ │  │
│  │  │ ara:: │ │ ara:: │ │ara│ │ ara::     │ │  │
│  │  │  com  │ │  diag │ │:: │ │  crypto   │ │  │
│  │  │       │ │       │ │log│ │           │ │  │
│  │  └───────┘ └───────┘ └───┘ └───────────┘ │  │
│  └────────────────────────────────────────────┘  │
│  ┌────────────────────────────────────────────┐  │
│  │  Foundation / OS (Linux + Xen Hypervisor)  │  │
│  │  ├── Safe World: QNX (ASIL-B 功能安全)     │  │
│  │  └── Normal World: Linux (非安全功能)       │  │
│  └────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────┘
          │ SOME/IP (Ethernet)
          ▼
┌────────────────┐  ┌────────────────┐
│ Smart Cell     │  │ Smart Current  │
│ Monitor (CP)   │  │ Sensor (CP)   │
│ (AutoSAR CL)   │  │ (AutoSAR CL)  │
└────────────────┘  └────────────────┘

4.2 混合架构的通信设计

域控(Adaptive)与智能传感器(Classic)之间的通信通过 SOME/IP 承载:

// Adaptive 侧:SOME/IP Service Discovery + Event Subscribe
#include <ara/com/com.h>

// SOC 状态事件(周期性发布,100ms)
struct SoCStatusEvent {
    float soc;                       // SOC 百分比
    float confidence;                // 置信度 [0,1]
    std::array<float, 18> cellV;     // 单体电压
    std::array<float, 6>  cellT;     // 温度采样
};

// 通过 ARA::COM 发布
class SoCEventPublisher {
    ara::com::EventPublisher<SoCStatusEvent> m_publisher;
public:
    void Publish(const SoCStatusEvent& event) {
        m_publisher.Send(event);
    }
};

5. 实战经验:工程落地中的坑与对策

5.1 配置管理地狱

AutoSAR 的配置复杂度往往被低估。一个中等规模的 BMS Classic 项目,ARXML 配置文件可能超过 200 个,涉及 BSW 模块配置、SWC 描述、RTE 映射、ECU 提取等。配置一致性 是项目延期的主要根因。

对策:
– 使用脚本化配置管理(Python + ARXML 解析器)替代手动 Vector DaVinci Developer 配置
– 将配置拆分为 ODM(OEM Domain Model)和 BSW-MDT(BSW Module Definition Template),用 CI 流水线自动校验一致性
– 建立 配置变更影响分析 工具链(例如追踪一个 Port 的修改会触发哪些 ECU Extract 更新)

5.2 Timing Analysis 的 BMS 特有问题

BMS 的时序分析有两个特殊挑战:

  1. AFE 扫描的异步性:18 颗电芯的电压不能”同时”获取(SPI 菊花链逐个读取),导致 SOC SWC 看到的输入在时间轴上并非严格对齐。这需要引入 时间戳标记 + 补偿外推 机制。

  2. 长周期任务的可调度性问题:例如 SOC 的安时积分需要 10ms 周期,而 OCV 校正可能 10 秒才触发一次。如果 OCV 校正的可运行体(Runnable)执行时间过长(例如涉及 Flash 写入),可能导致 10ms Task 的 Deadline 丢失。

对策:
– 将 OCV 校正拆分为多步状态机,分帧执行
– 在 RTE 中配置 Exclusive Area 保护共享数据
– 使用 Timing Protection(WdgM 的 Deadline Monitoring)

5.3 跨项目复用策略

实际的 Tier-1 不可能为每个项目从头开发 BMS 软件。推荐的复用层次:

Level 1: BSW 配置复用(MCAL + EcuM + CanSM 等)
    └── 项目间差异小,复用率 > 80%

Level 2: CDD 复用(AFE 驱动、SBC 驱动)
    └── 依赖 AFE 选型,同一系列可复用,不同系列需适配

Level 3: SWC 算法复用(SOC/SOH/SOF/Balancing)
    └── 核心 EKF/模型算法 100% 复用,标定参数项目化

Level 4: 系统集成复用(RTE Mapping + ECU Extract)
    └── 复用率低(< 30%),强依赖 ECU 拓扑

6. 总结与展望

AutoSAR 在 BMS 中的应用已经从 “要不要用” 的阶段进入了 “如何用得好” 的阶段。以下是我们对行业趋势的判断:

  1. Classic 不会消亡:对于 12V/48V 小电池和从板级 CMU(Cell Monitoring Unit),Classic Platform 仍然是主流选择,因为其确定性和低资源开销无可替代。

  2. Adaptive 正在切入高压域控:动力电池域控制器(BDU/BMS Domain)正在成为 Adaptive Platform 的最佳落地场景,特别是融合了云端大数据驱动的 AI-SOC 算法后。

  3. 混合异构是关键:未来的 BMS 软件架构将是 Classic(安全实时控制)+ Adaptive(高性能计算 + AI + 云端连接)的混合异构模式,通过 SOME/IP + DDS 实现跨平台通信。

  4. 配置自动化是工程刚需:任何不使用脚本化配置管理的 AutoSAR BMS 项目,其软件集成阶段的工时将至少膨胀 3 倍。

最后一点建议:如果你所在的团队正在考虑启动 AutoSAR BMS 项目,请把 40% 的评估精力花在工具链和配置管理流程上,30% 花在功能安全架构设计上,剩下的 30% 才是算法和业务逻辑。这是我们从多个量产项目中用真金白银换来的经验。


Tags: #AutoSAR #BMS #嵌入式软件 #功能安全 #域控制器
首次发布:2026-08-11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Navigation

About

Writing on the Wall is a newsletter for freelance writers seeking inspiration, advice, and support on their creative journey.