电动汽车整车控制器 VCU 电动汽车整车控制含canbootloader 基于飞思卡尔MC9S12XEP100整车控制器 VCU方案 1:C源文件,底层驱动+控制策略 2:程序变量表格,Execl文件;can 通讯发送接收数据对应; 3:DBC数据库,CANoe数据库支持文件;可以通过上位机方便解析报文数据,可以; 4:原理图,满足二次开发的原理图,将控制输入输出口全部列出; 5:接口定义,Execl文件;接口定义与芯片管脚一一对应;方便二次开发; 6:pcb图纸 7.支持CANBOOTLOADER更新下载程序,提供上位机下载软件,bootS19文件。 支持周立工USB

先看底层驱动的骚操作。这个芯片的CAN模块配置必须上硬菜:

void CAN_Init(void) {
    CAN0CTL1_CANE = 0;  //先关模块
    CAN0CTL1_CLKSRC = 1; //总线时钟源
    CAN0BTR0 = 0x87;   //500kbps时这个值得拿示波器校准
    CAN0BTR1 = 0x25;
    CAN0CTL1 = 0x80;   //使能模块但不过电
    CAN0RIER = 0x1F;    //接收中断全开
}

这段代码最坑的是BTR寄存器配置,特别是搞国产CAN收发器的时候,实测遇到过相位误差导致丢帧。后来发现把采样点从75%调到80%才稳。

控制策略里最常用的是扭矩仲裁逻辑,举个油门处理的例子:

uint16_t Torque_Arbitrate(uint16_t driver_torq, uint16_t regen_torq) {
    static uint16_t final_torq = 0;
    // 防抖滤波
    driver_torq = MovingAvgFilter(driver_torq, 5);
    
    // 制动力优先
    if(regen_torq > driver_torq) {
        final_torq = regen_torq;
        Brake_Light_Control(ON);
    } else {
        final_torq = driver_torq;
        Brake_Light_Control(OFF);
    }
    
    return Torque_Limiter(final_torq); //限制在电机MAP范围内
}

这里有个细节:制动灯控制必须比实际机械制动提前50ms触发,否则测试场过检会跪。

说到Excel变量表,我们搞了个骚操作——用VBA自动生成DBC文件。比如油门踏板信号在Excel里配置起始位、长度、缩放系数后,脚本自动生成:

BO_ 256 VCU_CTRL: 8 VCU
 SG_ Throttle_Pedal : 24|16@1+ (0.1,0) [0|100] "%" EMS

配套的CANoe解析界面直接导入DBC后,工程师能实时看到踏板开度曲线,比用J1939标准帧省带宽。

电动汽车整车控制器 VCU 电动汽车整车控制含canbootloader 基于飞思卡尔MC9S12XEP100整车控制器 VCU方案 1:C源文件,底层驱动+控制策略 2:程序变量表格,Execl文件;can 通讯发送接收数据对应; 3:DBC数据库,CANoe数据库支持文件;可以通过上位机方便解析报文数据,可以; 4:原理图,满足二次开发的原理图,将控制输入输出口全部列出; 5:接口定义,Execl文件;接口定义与芯片管脚一一对应;方便二次开发; 6:pcb图纸 7.支持CANBOOTLOADER更新下载程序,提供上位机下载软件,bootS19文件。 支持周立工USB

硬件设计上,XEP100的PortP做高边驱动控制时要注意散热。原理图里每个驱动口都加了TVS和自恢复保险丝,比如空调压缩机控制回路:

PWM_OUT ——|LM2937-5.0|——[10Ω]——[P6KE15CA]——[MF-R020]——>继电器线圈

PCB布局时把功率地和数字地用磁珠隔离,但实测发现用0Ω电阻反而EMC更好。底层铺铜时特意把CAN收发器下方挖空,降低共模干扰。

Bootloader实现是真刀真枪的活。升级流程关键代码段:

void JumpToApp(void) {
    asm {
        ldx #APP_START_ADDR
        jmp 0,x  //强制跳转前必须关中断
    }
}

上位机用周立功USB-CAN盒发带CRC校验的分包数据,Boot区程序边收边写入Flash。实测发现写入前必须执行Flash块擦除,但XEP100的块擦除时间长达200ms,得在CAN应答里插入等待帧防止超时。

整套方案最爽的是故障注入测试。用CANoe发非法扭矩请求时,看VCU的拒绝响应时间是否小于50ms,这时候逻辑分析仪抓MCU的CLKOUT信号,能直接看到看门狗复位前的指令流。

最后说个血泪教训:早期版本没做Bootloader版本兼容,导致现场升级后IO配置错乱。后来在App区头4字节加了硬件特征码,上位机每次升级前先校验ECU型号,这才避免变砖事故。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐