第2章:VCU硬件基础——主控芯片选型与接口设计

做VCU开发这么多年,我始终觉得硬件基础是决定项目成败的基石。软件写得再漂亮,硬件选型出了问题,一切归零。今天咱们就聊聊VCU硬件里最核心的几个模块。

2.1 主控芯片选型:Infineon TC2xx与TC3xx

主控芯片是VCU的大脑。目前行业里用得最多的,就是英飞凌的AURIX系列。我个人习惯把TC2xx和TC3xx分开看,它们各有各的脾气。

TC2xx系列:成熟可靠的老将

TC2xx系列,比如TC275、TC277,在量产项目里已经跑了快十年了。我最早接触TC275是在2016年,那时候国内做VCU的厂家还不多。

  • 内核架构:三核架构,两个CPU核加一个校验核。说白了就是两个干活的一个监工的。
  • 主频:200MHz,对于常规VCU控制策略完全够用。
  • Flash:4MB到8MB,存个Bootloader加应用层程序绰绰有余。
  • SRAM:472KB,跑RTOS和中间件没问题。
我的经验:TC275做VCU,成本控制得很好。如果你做的是商用车或者中低端乘用车,TC2xx系列性价比很高。我在一个轻卡项目中用过TC277,跑了三年没出过问题。

TC3xx系列:性能怪兽

TC3xx系列,比如TC387、TC397,是近几年才大规模铺开的。为什么要升级?因为VCU要处理的东西越来越多了——OTA、信息安全、功能安全ASIL-D,老芯片扛不住。

参数 TC2xx (TC275) TC3xx (TC387)
内核数 3核 6核
主频 200MHz 300MHz
Flash 4MB 16MB
功能安全 ASIL-B ASIL-D
价格 约$15 约$35

你看这个表就明白了。TC3xx贵了一倍多,但性能翻倍。我建议做高端车型或者需要功能安全等级高的项目,直接上TC3xx。别为了省几块钱,后面认证过不去,那才叫亏。

避坑指南:我曾经在一个项目中选了TC275做ASIL-C级别的VCU,结果认证时发现硬件冗余不够,最后被迫加了一个外部监控芯片。成本没省下来,反而多花了开发时间。所以选型时一定要提前确认功能安全目标。

2.2 电源管理:SBC与LDO

VCU的电源管理,说白了就是给各个模块供电。但汽车电源环境很恶劣——12V电池电压波动大,还有各种电磁干扰。所以电源芯片的选择很关键。

SBC(系统基础芯片)

SBC是现在的主流方案。它把电源、CAN收发器、看门狗、唤醒逻辑集成在一起。我常用的有TLE926x系列和TLE927x系列。

为什么用SBC?因为省空间、省成本。一个SBC芯片,替代了原来三四个分立器件。而且SBC的休眠电流极低,能做到几十微安,这对整车的静态功耗控制很重要。

LDO(低压差线性稳压器)

LDO主要用于给主控芯片的内核供电。TC2xx的内核电压是1.3V,TC3xx是1.25V。LDO的纹波要控制在50mV以内,否则芯片会跑飞。

我记得有一次调试,VCU总是莫名其妙复位。查了三天,最后发现是LDO输出电容选错了,ESR太大导致纹波超标。嗯,这种问题最难查,因为现象不固定。

电源设计要点
  • SBC的唤醒源要配置好,支持CAN唤醒和KL15唤醒
  • LDO的输出电容要选低ESR的陶瓷电容,至少10μF
  • 电源走线要加粗,至少40mil以上
  • 每个电源引脚都要加去耦电容,0.1μF和10μF搭配使用

2.3 输入输出接口

VCU要跟整车各个部件打交道,接口类型五花八门。我把它分成五类:DI、DO、AI、AO、PWM。

DI(数字量输入)

DI用来检测开关信号,比如刹车开关、钥匙档位、车门状态。输入电压一般是12V或24V,但主控芯片只能接受3.3V或5V,所以需要分压电路。

你想想看,如果直接接12V到芯片引脚,芯片瞬间就烧了。所以DI电路要加电阻分压,再加一个TVS管做保护。

// DI读取示例代码
uint8_t DI_Read(uint8_t channel)
{
    uint8_t value = 0;
    if(IfxPort_getPinState(DI_PORT[channel], DI_PIN[channel]) == IfxPort_State_high)
    {
        value = 1;  // 高电平表示开关闭合
    }
    else
    {
        value = 0;  // 低电平表示开关断开
    }
    return value;
}

DO(数字量输出)

DO用来驱动继电器、指示灯、电磁阀。输出电流一般要求500mA以上,所以不能直接用芯片引脚驱动,需要加MOSFET或达林顿管。

我建议DO电路一定要加续流二极管。为什么?因为继电器线圈是感性负载,关断时会产生反向电动势,没有续流二极管,MOSFET很容易被击穿。

AI(模拟量输入)

AI用来采集模拟信号,比如加速踏板位置传感器、温度传感器、油位传感器。这些信号一般是0-5V或4-20mA。

主控芯片内部有ADC模块,TC2xx是12位精度,TC3xx是12位或16位。但要注意,ADC的参考电压要稳定,否则采集值会漂移。

我的习惯:AI电路前端一定要加RC低通滤波,截止频率设在100Hz左右。这样可以滤掉高频噪声。我在一个项目中没加滤波,结果加速踏板信号抖动,导致车辆闯动,被客户投诉了。

AO(模拟量输出)

AO用得比较少,主要用于控制比例阀或者给其他ECU发送模拟信号。一般用PWM加RC滤波来实现,或者用DAC芯片。

PWM(脉宽调制)

PWM是VCU最常用的输出方式。电机控制、水泵控制、风扇控制,都是PWM。频率从100Hz到20kHz不等。

TC2xx的GTM模块可以生成多路PWM,而且支持死区时间配置。做H桥控制时,死区时间一定要设好,否则上下桥臂直通,MOSFET瞬间冒烟。

// PWM配置示例
void PWM_Init(void)
{
    // 配置PWM频率为1kHz,占空比50%
    IfxGtm_Pwm_Config config;
    IfxGtm_Pwm_initConfig(&config, &MODULE_GTM);
    config.frequency = 1000;  // 1kHz
    config.dutyCycle = 0.5;   // 50%
    IfxGtm_Pwm_init(&g_pwmDriver, &config);
    IfxGtm_Pwm_start(&g_pwmDriver);
}

2.4 CAN/LIN通信接口

VCU是整车网络的核心节点,通信接口必不可少。CAN用于高速通信,LIN用于低速通信。

CAN接口

CAN总线速率一般是500kbps或250kbps。TC2xx和TC3xx内部都有MultiCAN模块,支持CAN 2.0和CAN FD。

我建议新项目直接上CAN FD。为什么?因为传统CAN一帧只能传8字节数据,CAN FD可以传64字节。做OTA升级时,CAN FD能省一半时间。

CAN收发器一般用TJA1043或TJA1145。TJA1043支持CAN唤醒和休眠,TJA1145支持CAN FD和部分网络。

注意:CAN总线终端电阻一定要加,120Ω,放在总线两端。我曾经见过一个项目,没加终端电阻,CAN通信时好时坏,查了两个月才发现是这个问题。

LIN接口

LIN总线速率低,20kbps,主要用于车窗、车灯、雨刮等低速设备。VCU作为LIN主节点,可以挂接最多16个从节点。

LIN收发器一般用TJA1021。电路设计很简单,只需要一个1kΩ的上拉电阻到LIN总线。

知识体系总览

下面这张图,是我梳理的VCU硬件知识体系。你可以把它当作一个检查清单,做设计时对照着看,不容易漏项。

VCU硬件知识体系 主控芯片 Infineon TC2xx / TC3xx 三核/六核架构 电源管理 SBC (TLE926x/TLE927x) LDO (1.3V/1.25V内核供电) 输入输出接口 DI (数字量输入) DO (数字量输出) AI (模拟量输入) AO (模拟量输出) PWM (脉宽调制) 通信接口 CAN 2.0 / CAN FD LIN (20kbps) VCU硬件设计核心模块关系图

这张图把VCU硬件的四个核心模块串起来了。主控芯片是大脑,电源管理是心脏,输入输出接口是手脚,通信接口是神经。缺了哪个,VCU都转不起来。

好了,这一章的内容就到这儿。硬件基础打牢了,后面讲控制策略时你才能理解为什么这么设计。咱们下一章见。


公众号:蓝海资料掘金营,微信deep3321