产品总览
产品名称:HVCH — High Voltage Coolant Heater(高压冷却液加热器)
客户:Toyota 丰田
供应商:Valeo THS TCC(法雷奥热系统事业部)
料号:bcd8880_00-ESF020
这个产品是干什么的?
电动车没有发动机余热来供暖,所以需要一个独立的加热器。HVCH就是这个角色——它用电池包的高压电(~400V)加热冷却液,热的冷却液通过管路流到暖风芯体,给座舱供暖。
核心工作流程
车辆空调控制器 → 通过LIN总线发指令 → MCU收到并解析 → 计算加热功率 → PWM驱动IGBT开关 → IGBT导通高压电流经过加热元件(HE) → 冷却液被加热 → 同时持续监控温度/电压/电流 → 异常则锁机保护
关键参数
| 参数 | 值 |
|---|---|
| 输入电压(高压侧) | ~400V DC |
| 输入电压(低压侧) | 12V DC (VSUP) |
| 加热功率 | 7KW (60PL) / 10KW (600D/800D) |
| 通信协议 | LIN 2.1 |
| MCU | NXP S32K144 (ARM Cortex-M4) |
| SBC | TJA1128E |
系统架构
硬件架构总览
整个板子分为低压侧(LV)和高压侧(HV)两个域,通过隔离电源(Flyback)和隔离信号连接。
低压侧 (12V域)
- LV_CONNECTOR:外部连接器,接12V电源(LV+)、LIN总线、WSTB待机信号
- DM_FILTER:输入滤波,防EMI 📄 Page 3
- SBC (TJA1128E):系统基础芯片 — 5V稳压 + LIN收发 + 看门狗 📄 Page 8
- MCU (S32K144):主控芯片 📄 Page 5
- 温度传感器:T_OUTLET / T_LS_CMOS / T_LS_NTC 📄 Page 4
- 外部ADC:I2C接口,采高压侧测量值 📄 Page 2
高压侧 (400V域)
- HV_CONNECTOR:高压连接器,接电池包400V
- IGBT模块:HS-IGBT(高侧) + LS-IGBT(低侧),功率开关 📄 Page 7
- Gate Driver (UCC5350):IGBT栅极驱动 📄 Page 7
- HE1/HE2:加热元件(Heating Element),Busbar连接
- Flyback电源:低压侧→高压侧隔离供电(17V_HS/17V_LS) 📄 Page 6
- 过流保护:电流采样 + 比较器(LM2903) 📄 Page 15-16
- 高压测量:HV_MEAS分压采样 📄 Page 2
信号流框图
┌─────────────┐ LIN ┌──────────┐
│ 空调控制器 │─────────────▶│ SBC │
│ (车上) │ │ TJA1128E │
└─────────────┘ └────┬─────┘
│ SPI/UART
┌────▼─────┐
ADC ◄─────│ MCU │─────▶ CMD_HS1 (PWM)
T_OUTLET ◄─────│ S32K144 │─────▶ CMD_LS1/LS2
T_LS_NTC ◄─────│ │─────▶ FLY_EN
T_LS_CMOS ◄─────│ │─────▶ VSUP_EN
I2C ◄───────│ │─────▶ WND (看门狗)
└──────────┘
│
┌───────┴───────┐
│ Flyback 隔离 │
└───────┬───────┘
│ 17V_HS / 17V_LS
┌───────▼───────┐
│ Gate Driver │
│ UCC5350 │
└───────┬───────┘
│ GATE_HS / GATE_LS
HV+ ──▶┌──────▼──────┐──▶ HE1/HE2 ──▶ HVGND
(400V) │ HS-IGBT │ (加热元件)
│ LS-IGBT │
└─────────────┘
项目变体
| 变体 | 型号 | 电压 | 功率 | HW CMOS |
|---|---|---|---|---|
| 00 | Full-featured | 400V | — | ✅ |
| 01 | 60PL | 400V | 7KW | ✅ |
| 02 | 60PL | 400V | 7KW | ❌ |
| 03 | 600D | 400V | 10KW | ✅ |
你当前代码的产品编号是 7DA10017,属于 60PL 系列。变体之间主要区别是功率等级和是否有CMOS安全温度传感器。
软件分层结构
代码严格分层,从上到下:
第1层:入口 (APMAIN)
文件:APMAIN_Applicative.c
main() 函数只做三件事:ICONF_vidInit() → ICONF_vidInitConfiguration() → APMODMGR_vidApplicaive()(进入无限循环)
第2层:应用层 (Applicative)
文件:Applicative/APMODMGR/
核心是模式管理状态机,for(;;) 死循环 + switch-case 切换模式。每个模式函数里按时间片执行不同的任务。
第3层:服务层 (Services)
| 模块 | 功能 |
|---|---|
SCECOM | LIN通信管理:解析指令、组装回复 |
SCEMONI | 主监控:电压/电流/温度/DCDC监控 |
SCEMONIS | 安全传感器监控:NTC/CMOS温度监控和一致性校验 |
SCEDRIV | 驱动控制:加热功率算法、温度调节 |
SCEFCTR | 故障计数器:故障记录和EEPROM管理 |
SCEWDG | 看门狗监管:喂狗 + 各时间片任务监控 |
SVCCKHW | 硬件自检:IGBT HW Check模式 |
第4层:硬件抽象层 (Handler)
| 模块 | 硬件 | 功能 |
|---|---|---|
HDADC | 片内ADC | 采样低压侧模拟信号 |
HDEXTADC | 外部ADC (I2C) | 采样高压侧测量值(隔离的) |
HDDIO | GPIO | 数字IO控制(CMD_HS1等) |
HDLIN | LIN PHY | LIN总线底层驱动和超时管理 |
HDNVM | EEPROM | 非易失存储读写(故障计数等) |
HDPWM | PWM模块 | PWM输出控制 |
HDSBC | TJA1128E | SBC配置和管理 |
HDCPU | S32K144 | CPU相关:时钟、定时器、中断 |
其他模块
OSRTE— 调度器(定时中断分频)MEMCK— 内存/堆栈检查ICONF— 初始化配置COMMON— 通用定义、版本信息
运行模式状态机
系统上电后进入 Start 模式,然后根据条件在各模式间切换。模式切换由 enuManageModeTras() 函数决定。
模式一览
| 模式 | 枚举值 | 说明 |
|---|---|---|
| 🟢 Start | STD_START_MODE | 上电初始化,跑250ms后切到Neutral或HW Check |
| 🔵 Neutral | STD_NEUTRAL_MODE | 空闲待命,监控传感器但不加热 |
| 🔵 IGBT HW Check | STD_IGBT_HW_CHECK_MODE | IGBT硬件自检模式 |
| 🔴 Heating | STD_HEATING_MODE | 正在加热!驱动IGBT输出功率 |
| ⚙️ Calibration | STD_CALIBRATION_MODE | 标定模式(工厂用) |
| ⚠️ Temp Lock | STD_TEMP_LOCK_MODE | 临时锁定:检测到可恢复故障,停止加热但保持监控 |
| ⚠️ LCM | STD_LCM_MODE | Life Cycle Management:带限制的运行模式 |
| 🔒 Perm Lock | STD_PERM_LOCK_MODE | 永久锁定:严重故障,需要维修 |
| 💤 Sleep | STD_SLEEP_MODE | 休眠:SBC进低功耗,等LIN唤醒 |
| 📥 Download | STD_DOWNLOAD_MODE | 刷写模式:更新固件 |
典型流转
上电 → Start → [HW Check OK] → Neutral → [收到加热指令] → Heating
↑ │
└─── [指令=停止] ─────────┘
Heating → [过温/过流] → Temp Lock → [故障恢复] → Neutral
Heating → [严重故障] → Perm Lock(需维修)
Neutral → [待机指令] → Sleep → [LIN唤醒] → Start
每个模式里发生什么
每个模式函数(如 enuAppHeatingMode())内部结构一样:
1ms到了?
├── 做1ms的事(ADC采样、喂狗、传感器监控)
├── 4ms到了?
│ └── 做4ms的事(LIN通信、故障管理、模式切换判断)
├── 10ms到了?
│ └── 做10ms的事(温度监控、LIN状态刷新、驱动控制)
├── 50ms到了?
│ └── 做50ms的事(加热器管理、功率管理)
└── 100ms到了?
└── 做100ms的事(IO刷新、堆栈检查、过流监控)
调度器 OSRTE
文件:OS/Src/OSRTE_Scheduler.c
OSRTE 不是操作系统,是一个极简的定时中断分频器。
工作原理
硬件定时器每 1ms 产生一次中断,调用 OSRTE_vidITSchedulerManage()。这个中断函数做的事很简单:
- 设置 1ms flag = TRUE(每次都设)
- 计数器++,到4就设 4ms flag
- 计数器++,到10就设 10ms flag
- 计数器++,到50就设 50ms flag
- 计数器++,到100就设 100ms flag
主循环里各模式函数通过 OSRTE_bReadClearFlag*msTask() 轮询这些flag,到了就执行对应的任务。读完flag自动清零。
时间片任务分配规律
| 时间片 | 典型任务 | 特点 |
|---|---|---|
| 1ms | ADC采样、喂狗、传感器状态检测、DCDC监控 | 最高优先级,每个周期都跑 |
| 4ms | LIN通信、故障管理、模式切换、NVM写入 | 通信和决策 |
| 10ms | 温度监控、LIN状态回复、驱动控制律 | 控制环路 |
| 50ms | 加热管理、功率管理 | 慢速控制 |
| 100ms | IO刷新、堆栈检查、过流监控 | 后台维护 |
SCEDRIV — 驱动控制服务
路径:Services/SCEDRIV/
负责加热功率控制的核心模块。接收LIN指令的目标功率/温度,计算PWM占空比,驱动IGBT。
关键函数
SCECOM — LIN通信服务
路径:Services/SCECOM/
管理LIN总线通信:解析空调控制器发来的指令帧,组装HVCH的状态回复帧。
关键函数
SCEMONI / SCEMONIS — 监控服务
路径:Services/SCEMONI/
系统最复杂的模块之一。分两部分:SCEMONI管主监控,SCEMONIS管安全传感器。
SCEMONI — 主监控
SCEMONIS — 安全传感器监控
bGetXxxInhibStatus()。Inhibitor = 抑制器。如果某个传感器/通道被检测到故障,就把它的inhibitor激活,后续不再用这个通道的数据做判断,防止用坏数据做决策。
SCEFCTR — 故障计数器服务
路径:Services/SCEFCTR/
管理所有故障的计数和记录。检测到故障时计数器增加,故障消失时递减(去抖动),达到阈值时触发模式切换。
关键函数
enuManageModeTras() 读取这些请求决定切到哪个模式。比如过温确认 → 请求Temp Lock,严重故障 → 请求Perm Lock。
SCEWDG — 看门狗服务
路径:Services/SCEWDG/
双重看门狗机制:
- 外部看门狗:SBC(TJA1128E)内置的看门狗,
SCEWDG_vidManageWatchDog()每1ms通过WND引脚喂一次。不喂就复位。 - 软件看门狗:
SCEWDG_vidMonitor*msTask()监控各时间片任务有没有按时执行。如果某个任务卡住超时,也会触发保护。
Handler 硬件抽象层
路径:_S32K144/Handler/
每个Handler封装一类硬件外设,上层服务不直接操作寄存器,而是调Handler的接口函数。
HDADC — 片内ADC
管理S32K144片内ADC通道的采样。主要采低压侧信号:温度传感器(T_OUTLET, T_LS_NTC)、电压(LV_MEASURE)等。
关键函数:HDADC_vidRefreshAdcChannels() — 1ms调用,刷新所有ADC通道
HDEXTADC — 外部ADC (I2C)
通过I2C接口读取高压侧的测量值。高压侧和低压侧物理隔离,片内ADC够不到,所以用外部ADC桥接。
关键函数:HDEXTADC_vidRfreshAdcExtChannel() — 1ms调用(DCDC OK时)
HDDIO — 数字IO
控制GPIO引脚的输出状态。
关键函数:HDDIO_vidSetCmdHs() — 控制高侧IGBT使能;HDDIO_vidSetFlyEn() — 控制Flyback电源使能;HDDIO_vidRefreshPorts() — 100ms刷新所有IO状态
HDLIN — LIN驱动
LIN总线底层驱动,管超时计时。
关键函数:HDLIN_vidLinTimerTask() — 1ms调用,LIN超时管理
HDNVM — EEPROM
非易失存储,保存故障计数器、标定数据等断电不能丢的东西。
关键函数:HDNVM_vidTaskManageNvmWriting() — 4ms调用,管理写入队列
HDSBC — 系统基础芯片
配置和管理TJA1128E,包括看门狗窗口设置、SPI通信等。
HDCPU — CPU管理
时钟监控、定时器管理。
关键函数:HDCPU_vidManageClockMoni() — 4ms调用,时钟监控;HDCPU_vidClearSchTimerFlag() — 在调度器中断里清除定时器标志
代码 ↔ 硬件对照表
| 代码信号名 | 原理图网络 | MCU引脚 | 功能 | 原理图页 |
|---|---|---|---|---|
CMD_HS1 | CMD_HS1 | PTD15 | 高侧IGBT使能 | Page 5, 16 |
CMD_LS1 | CMD_LS1 | — | 低侧IGBT1控制 | Page 2 |
CMD_LS2 | CMD_LS2 | — | 低侧IGBT2控制 | Page 2 |
FLY_EN | FLY_EN | PTD3 | Flyback电源使能 | Page 5, 6 |
VSUP_EN | VSUP_EN | PTD3 | 电源使能 | Page 5 |
WND | WND | PTB1 | 看门狗喂狗 | Page 5, 8 |
T_OUTLET | T_OUTLET | ADC ch | 出口水温 | Page 4, 5 |
T_LS_NTC | T_LS_NTC | ADC ch | NTC安全温度 | Page 4, 5 |
T_LS_CMOS | T_LS_CMOS | ADC ch | CMOS安全温度 | Page 4, 5 |
LV_MEASURE | LV_MEASURE | ADC ch | 12V电源电压 | Page 3, 5 |
DATA_EXT_ADC | DATA_EXT_ADC | PTA2 | 外部ADC I2C数据 | Page 5 |
CLK_EXT_ADC | CLK_EXT_ADC | PTA3 | 外部ADC I2C时钟 | Page 5 |
TXD_SDI | TXD_SDI | — | SBC SPI发送 | Page 8 |
LIN | LIN | — | LIN总线 | Page 8 |
SHORT_CIRCUIT | SHORT_CIRCUIT | PTB0 | 短路检测 | Page 5 |
STB | STB | — | SBC待机控制 | Page 9 |
缩写速查表
| 缩写 | 全称 | 中文 |
|---|---|---|
| HVCH | High Voltage Coolant Heater | 高压冷却液加热器 |
| IGBT | Insulated Gate Bipolar Transistor | 绝缘栅双极晶体管(功率开关) |
| HE | Heating Element | 加热元件 |
| SBC | System Basis Chip | 系统基础芯片 |
| MCU | Micro Controller Unit | 微控制器 |
| LIN | Local Interconnect Network | 本地互联网络(车载通信协议) |
| ADC | Analog to Digital Converter | 模数转换器 |
| NVM | Non-Volatile Memory | 非易失存储(EEPROM) |
| PWM | Pulse Width Modulation | 脉宽调制 |
| DCDC | DC-DC Converter | 直流变换器 |
| NTC | Negative Temperature Coefficient | 负温度系数热敏电阻 |
| CMOS | — | CMOS温度传感器(ES0003) |
| OC | Over Current | 过流 |
| SC | Short Circuit | 短路 |
| LCM | Life Cycle Management | 生命周期管理 |
| WDG | WatchDog | 看门狗 |
| OSRTE | OS Real Time Environment | 实时环境调度器 |
| HD* | Handler | 硬件抽象层模块 |
| SCE* | Service | 服务层模块 |
| AP* | Applicative | 应用层模块 |
| vid | void | 函数名中表示无返回值 |
| b | boolean | 函数名前缀表示返回布尔值 |
| enu | enum | 函数名前缀表示返回枚举值 |
| u8/u16/u32 | unsigned 8/16/32 bit | 无符号整型 |
原理图页码索引
| 页码 | 内容 | 关联代码模块 |
|---|---|---|
| 1 | 变更历史 + 项目信息 | — |
| 2 | 系统总览框图(信号流) | 全部 |
| 3 | DM_FILTER 输入滤波 + LV_MEASURE | HDADC |
| 4 | 温度传感器 (OUTLET / CMOS / NTC) | SCEMONI, SCEMONIS |
| 5 | MCU S32K144 引脚分配 | 全部 |
| 6 | Flyback隔离电源 + 5V_HV_LS | HDDIO (FLY_EN) |
| 7 | IGBT Gate Driver (UCC5350) | HDDIO (CMD_HS1), SCEDRIV |
| 8 | SBC TJA1128E + LIN | HDSBC, HDLIN, SCECOM |
| 9 | WSTB待机 + STB控制 | SCEMONI (Standby) |
| 10-14 | 其他外围电路 | — |
| 15-16 | 过流保护 + IGBT使能逻辑 (LM2903) | SCEMONI (OC/SC), HDDIO |