直接上干货。今天聊聊基于MC9S12XEP100的电动汽车VCU开发那些事,特别是CAN Bootloader这种实战型功能怎么落地
用CANoe发非法扭矩请求时,看VCU的拒绝响应时间是否小于50ms,这时候逻辑分析仪抓MCU的CLKOUT信号,能直接看到看门狗复位前的指令流。这段代码最坑的是BTR寄存器配置,特别是搞国产CAN收发器的时候,实测遇到过相位误差导致丢帧。7.支持CANBOOTLOADER更新下载程序,提供上位机下载软件,bootS19文件。7.支持CANBOOTLOADER更新下载程序,提供上位机下载软件,bo
电动汽车整车控制器 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型号,这才避免变砖事故。

更多推荐
所有评论(0)