让车上的部件能协调工作,明白司机意图并可操作
可靠性、舒适性、可控性
采用Freescal汽车控制芯片:MC9S12XEP100-144LQFP 主频最高80M,还有一个协处理器,用于处理中断、CAN报文收发
BMS系统、车载充电机、充电桩、绝缘检测仪、电机控制器一体机、数据采集终端、真空泵、助理转向泵、DCDC
根据载波率的负载,将部件放在不同的总线上
1、模拟量输入:
采样周期使用的是0.4ms,加速踏板、制动踏板、真空泵气压传感器、低压电瓶电压采集
2、数字量输入:
前进档、后退档、二档电开关、是否进入测试模式判断
3、数字量输出:
12v兼容接触器、交流充电接触器、交流预充电接触器、直流充电接触器、真空泵控制接触器
4、模拟量当作开关量:
制动开关信号、直流插枪信号、手刹信号、交流插枪信号
5、PWM波输入:
充电PWM波
由Bootloader和应用程序构成
目的:串口烧录、CAN烧录(通过CCP协议),内存分配
目的:处理信号输入输出、完成整车控制策略、进入汽车不同的模式(充电、前进、后退、停止、故障、调试、紧急)、踏板解析(matlab算法)
通过周期中断分时完成多任务,每隔50ms更新输入信号、输出信号、故障检测,每隔100ms故障显示,每隔400ms故障处理,根据can总线上的设备特性分时发送can报文,控制can连接部件
void main(void)
{
DisableInterrupts;
Start_init();
EnableInterrupts;
for(;;)
{
if(task_level_2ms == OPEN)
{
task_level_2ms = LOCKED;
}
if(task_level_4ms == OPEN)
{
interrupt VectorNumber_Vpit0 void Timer_Interrupt0_isr() //主CPU周期中断0服务函数
{
// XGSWT = 0x0202;//软件触发中断1,用于AD扫描,滤波等
if(pc_counter<6000)
{
pc_counter++;
}
else
{
pc_counter=1;
}
//pc_counter++;
if((pc_counter % 2) == 0)
{
task_level_2ms = OPEN;
}
1、在每个部件发送过来的报文中要有life值,检测部件通信中断
2、报文中有部件的故障号,判断部件发生了什么故障
3、can报文的收发任务(通过中断,会有不固定的延时)让协处理器去完成,避免can总线发送延时,影响控制策略
4、在主控处理器和协处理器中都有can收发处理函数,根据共享内存,相同的变量名传值。
1、对于加速、制动踏板,要有一个有效值范围
2、对输入信号都应该要检测
故障处理机制:定时检测故障
故障结构
typedef struct
{
Word ErrorSPN; //故障号
Byte ErrorStatus;//故障状态使能位、故障等级
Byte ErrorFMI;
Byte ErrorOC; //故障次数
Byte ErrorProcessStatus; //故障处理状态
Byte ErrorTime[6]; //故障发生时间,年/月/日/时/分/秒
LWord error_number_array;
} ErrorBlock;
故障处理
void BatteryErrorCheck(void) //50ms
{
Byte i;
if((prev_battery_ecu_life == battery_ecu_life)&&((charge_work_flag==1)||(switch_second==1) ) )
{
if(BMS_commu_count < 200) //=10s
{
BMS_commu_count++;
if(BMS_commu_count >= 0xF0)
BMS_commu_count = 0xF0;
}
else
{
Record_Error(&Error[35],ERROR_GRADE_1,1835,ERROR_PROCESS_STATUS_VSTOP,14);
}
}
else
{
Error[35].ErrorStatus &= ERROR_STATUS_DISABLE; //清除故障有效位
Error[35].ErrorProcessStatus = 0x00; //清楚故障处理方式
Error[35].error_number_array = 0;
Error[35].ErrorSPN = 0;
BMS_commu_count = 0;
prev_battery_ecu_life = battery_ecu_life;
}
通过freemaster检测和更改变量,bootloader通过仿真器烧录,通过ccp标定控制参数,通过can卡截取报文,通过专门的can处理软件检测部件信息和vcu信息
将matlab模块建立输入输出接口,编译后生产C代码文件,将其加入到工程中,即可编译
drive_switch_explain_input();
drive_switch_explain_step();
drive_switch_explain_output(); //判断开关状态
drive_pedal_explain0_input();
drive_pedal_explain0_step();
drive_pedal_explain0_output(); //踏板需求解析
motor_power0_input();
motor_power0_step();
motor_power0_output(); //电机功率计算