60PL HVCH 学习文档

🔥

产品总览

产品名称: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
MCUNXP S32K144 (ARM Cortex-M4)
SBCTJA1128E
📐

系统架构

硬件架构总览

整个板子分为低压侧(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
00Full-featured400V
0160PL400V7KW
0260PL400V7KW
03600D400V10KW

你当前代码的产品编号是 7DA10017,属于 60PL 系列。变体之间主要区别是功率等级和是否有CMOS安全温度传感器。

🧱

软件分层结构

代码严格分层,从上到下:

命名规则:前缀决定层级。AP* = Applicative层,SCE*/SVC* = Services层,HD* = Handler硬件层,OS* = 操作系统层。

第1层:入口 (APMAIN)

文件:APMAIN_Applicative.c

main() 函数只做三件事:ICONF_vidInit() → ICONF_vidInitConfiguration() → APMODMGR_vidApplicaive()(进入无限循环)

第2层:应用层 (Applicative)

文件:Applicative/APMODMGR/

核心是模式管理状态机,for(;;) 死循环 + switch-case 切换模式。每个模式函数里按时间片执行不同的任务。

第3层:服务层 (Services)

模块功能
SCECOMLIN通信管理:解析指令、组装回复
SCEMONI主监控:电压/电流/温度/DCDC监控
SCEMONIS安全传感器监控:NTC/CMOS温度监控和一致性校验
SCEDRIV驱动控制:加热功率算法、温度调节
SCEFCTR故障计数器:故障记录和EEPROM管理
SCEWDG看门狗监管:喂狗 + 各时间片任务监控
SVCCKHW硬件自检:IGBT HW Check模式

第4层:硬件抽象层 (Handler)

模块硬件功能
HDADC片内ADC采样低压侧模拟信号
HDEXTADC外部ADC (I2C)采样高压侧测量值(隔离的)
HDDIOGPIO数字IO控制(CMD_HS1等)
HDLINLIN PHYLIN总线底层驱动和超时管理
HDNVMEEPROM非易失存储读写(故障计数等)
HDPWMPWM模块PWM输出控制
HDSBCTJA1128ESBC配置和管理
HDCPUS32K144CPU相关:时钟、定时器、中断

其他模块

  • OSRTE — 调度器(定时中断分频)
  • MEMCK — 内存/堆栈检查
  • ICONF — 初始化配置
  • COMMON — 通用定义、版本信息
🔄

运行模式状态机

系统上电后进入 Start 模式,然后根据条件在各模式间切换。模式切换由 enuManageModeTras() 函数决定。

模式一览

模式枚举值说明
🟢 StartSTD_START_MODE上电初始化,跑250ms后切到Neutral或HW Check
🔵 NeutralSTD_NEUTRAL_MODE空闲待命,监控传感器但不加热
🔵 IGBT HW CheckSTD_IGBT_HW_CHECK_MODEIGBT硬件自检模式
🔴 HeatingSTD_HEATING_MODE正在加热!驱动IGBT输出功率
⚙️ CalibrationSTD_CALIBRATION_MODE标定模式(工厂用)
⚠️ Temp LockSTD_TEMP_LOCK_MODE临时锁定:检测到可恢复故障,停止加热但保持监控
⚠️ LCMSTD_LCM_MODELife Cycle Management:带限制的运行模式
🔒 Perm LockSTD_PERM_LOCK_MODE永久锁定:严重故障,需要维修
💤 SleepSTD_SLEEP_MODE休眠:SBC进低功耗,等LIN唤醒
📥 DownloadSTD_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()。这个中断函数做的事很简单:

  1. 设置 1ms flag = TRUE(每次都设)
  2. 计数器++,到4就设 4ms flag
  3. 计数器++,到10就设 10ms flag
  4. 计数器++,到50就设 50ms flag
  5. 计数器++,到100就设 100ms flag

主循环里各模式函数通过 OSRTE_bReadClearFlag*msTask() 轮询这些flag,到了就执行对应的任务。读完flag自动清零。

注意:4ms/10ms/50ms/100ms 的flag是互斥的(if-else if结构),也就是说每个1ms周期里最多只会额外触发一个较慢的任务。这是为了避免在一个1ms里塞太多事导致超时。

时间片任务分配规律

时间片典型任务特点
1msADC采样、喂狗、传感器状态检测、DCDC监控最高优先级,每个周期都跑
4msLIN通信、故障管理、模式切换、NVM写入通信和决策
10ms温度监控、LIN状态回复、驱动控制律控制环路
50ms加热管理、功率管理慢速控制
100msIO刷新、堆栈检查、过流监控后台维护

SCEDRIV — 驱动控制服务

路径:Services/SCEDRIV/

负责加热功率控制的核心模块。接收LIN指令的目标功率/温度,计算PWM占空比,驱动IGBT。

关键函数

SCEDRIV_vidTaskManageCtrlLaw()
控制律管理 — 10ms调用,计算输出功率
SCEDRIV_vidTaskManageHeater()
加热管理 — 50ms调用,管理PTC加热元件的开关
SCEDRIV_vidTaskManagePower()
功率管理 — 50ms调用,监控和限制输出功率
SCEDRIV_vidManageTempDerate()
温度降额 — 100ms调用,冷却液温度过高时降功率
SCEDRIV_vidTaskManageResCalc()
负载电阻计算 — 100ms调用,通过V/I算加热丝电阻
只在Heating模式下运行。Neutral模式不调用SCEDRIV的任何函数。
📡

SCECOM — LIN通信服务

路径:Services/SCECOM/

管理LIN总线通信:解析空调控制器发来的指令帧,组装HVCH的状态回复帧。

关键函数

SCECOM_vidManageLinConf()
LIN配置管理 — 4ms调用,处理LIN帧收发
SCECOM_vidManageRefLinStatus()
刷新LIN状态 — 10ms调用,把当前模式/温度/故障状态写进LIN回复帧
SCECOM_vidLinCommMoni()
LIN通信监控 — 检测通信超时/错误
SCECOM_vidHandleDataDumpRequest()
Data Dump请求处理 — 诊断用
🔍

SCEMONI / SCEMONIS — 监控服务

路径:Services/SCEMONI/

系统最复杂的模块之一。分两部分:SCEMONI管主监控,SCEMONIS管安全传感器。

SCEMONI — 主监控

SCEMONI_vidTaskDcdcMonitor()
DCDC电压监控 — 检测高压侧隔离电源是否正常
SCEMONI_vidManageLvMoni()
低压监控 — 检测12V是否过高/过低
SCEMONI_vidManageHvMoni()
高压监控 — 检测400V是否在安全范围
SCEMONI_vidManagOutltSensorMoni()
出口温度传感器监控 — T_OUTLET开路/短路检测
SCEMONI_vidManageTOutletMoni()
出口温度值监控 — 检测冷却液温度是否过高
SCEMONI_vidIavMoni()
平均电流监控 — 检测加热电流
SCEMONI_vidIHeOcMoni()
加热元件过流监控 — 100ms调用
SCEMONI_vidTaskScHeMont()
加热元件短路监控
SCEMONI_vidManageStandby()
待机管理 — 判断是否进Sleep

SCEMONIS — 安全传感器监控

SCEMONIS_vidManageNtcSensorMoni()
NTC传感器状态监控 — 开路/短路检测
SCEMONIS_vidManagCmosSensorMoni()
CMOS传感器状态监控
SCEMONIS_vidManageNtcTempMoni()
NTC过温监控
SCEMONIS_vidManageCmosTempMoni()
CMOS过温监控
SCEMONIS_vidManageConsisMoni()
NTC与CMOS一致性监控 — 两个传感器互相校验
SCEMONIS_vidTempGradMoni()
温度梯度监控 — 温升速率是否异常
SCEMONIS_vidLowFlowMoni()
低流量监控 — 冷却液流量是否过低
Inhibitor机制:代码里大量出现 bGetXxxInhibStatus()。Inhibitor = 抑制器。如果某个传感器/通道被检测到故障,就把它的inhibitor激活,后续不再用这个通道的数据做判断,防止用坏数据做决策。
📊

SCEFCTR — 故障计数器服务

路径:Services/SCEFCTR/

管理所有故障的计数和记录。检测到故障时计数器增加,故障消失时递减(去抖动),达到阈值时触发模式切换。

关键函数

SCEFCTR_vidManageFail()
1ms调用 — 管理所有故障的状态机(出现/确认/恢复)
SCEFCTR_vidManageNvmFailCnt()
4ms调用 — 把故障计数写入EEPROM持久化
故障 → 模式切换:故障确认后会改变模式请求,enuManageModeTras() 读取这些请求决定切到哪个模式。比如过温确认 → 请求Temp Lock,严重故障 → 请求Perm Lock。
🐕

SCEWDG — 看门狗服务

路径:Services/SCEWDG/

双重看门狗机制:

  1. 外部看门狗:SBC(TJA1128E)内置的看门狗,SCEWDG_vidManageWatchDog() 每1ms通过WND引脚喂一次。不喂就复位。
  2. 软件看门狗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_HS1CMD_HS1PTD15高侧IGBT使能Page 5, 16
CMD_LS1CMD_LS1低侧IGBT1控制Page 2
CMD_LS2CMD_LS2低侧IGBT2控制Page 2
FLY_ENFLY_ENPTD3Flyback电源使能Page 5, 6
VSUP_ENVSUP_ENPTD3电源使能Page 5
WNDWNDPTB1看门狗喂狗Page 5, 8
T_OUTLETT_OUTLETADC ch出口水温Page 4, 5
T_LS_NTCT_LS_NTCADC chNTC安全温度Page 4, 5
T_LS_CMOST_LS_CMOSADC chCMOS安全温度Page 4, 5
LV_MEASURELV_MEASUREADC ch12V电源电压Page 3, 5
DATA_EXT_ADCDATA_EXT_ADCPTA2外部ADC I2C数据Page 5
CLK_EXT_ADCCLK_EXT_ADCPTA3外部ADC I2C时钟Page 5
TXD_SDITXD_SDISBC SPI发送Page 8
LINLINLIN总线Page 8
SHORT_CIRCUITSHORT_CIRCUITPTB0短路检测Page 5
STBSTBSBC待机控制Page 9
📖

缩写速查表

缩写全称中文
HVCHHigh Voltage Coolant Heater高压冷却液加热器
IGBTInsulated Gate Bipolar Transistor绝缘栅双极晶体管(功率开关)
HEHeating Element加热元件
SBCSystem Basis Chip系统基础芯片
MCUMicro Controller Unit微控制器
LINLocal Interconnect Network本地互联网络(车载通信协议)
ADCAnalog to Digital Converter模数转换器
NVMNon-Volatile Memory非易失存储(EEPROM)
PWMPulse Width Modulation脉宽调制
DCDCDC-DC Converter直流变换器
NTCNegative Temperature Coefficient负温度系数热敏电阻
CMOSCMOS温度传感器(ES0003)
OCOver Current过流
SCShort Circuit短路
LCMLife Cycle Management生命周期管理
WDGWatchDog看门狗
OSRTEOS Real Time Environment实时环境调度器
HD*Handler硬件抽象层模块
SCE*Service服务层模块
AP*Applicative应用层模块
vidvoid函数名中表示无返回值
bboolean函数名前缀表示返回布尔值
enuenum函数名前缀表示返回枚举值
u8/u16/u32unsigned 8/16/32 bit无符号整型
📋

原理图页码索引

页码内容关联代码模块
1变更历史 + 项目信息
2系统总览框图(信号流)全部
3DM_FILTER 输入滤波 + LV_MEASUREHDADC
4温度传感器 (OUTLET / CMOS / NTC)SCEMONI, SCEMONIS
5MCU S32K144 引脚分配全部
6Flyback隔离电源 + 5V_HV_LSHDDIO (FLY_EN)
7IGBT Gate Driver (UCC5350)HDDIO (CMD_HS1), SCEDRIV
8SBC TJA1128E + LINHDSBC, HDLIN, SCECOM
9WSTB待机 + STB控制SCEMONI (Standby)
10-14其他外围电路
15-16过流保护 + IGBT使能逻辑 (LM2903)SCEMONI (OC/SC), HDDIO