一.IoHwAb层代码的文件结构
IoHwAb/
├── ICs/
│ ├── PT2001_FullBridge_Cfg.h│ ├── PT2001_FullBridge.c
│ ├── PT2001_FullBridge.h
│ ├── PT2001_FullBridge_PBCfg.c
│ └── ...
├── IoHwAb_Analog.h
├── IoHwAb_Cfg.h
├── IoHwAb_Diag_Cfg.h
├── IoHwAb_Diag_PBCfg.c
├── IoHwAb_Diag.c
├── IoHwAb_Diag.h
├── IoHwAb_Discrete.c
├── IoHwAb_Discrete.h
├── IoHwAb_PBCfg.c
├── IoHwAb_Pwm.c
├── IoHwAb_Pwm.h
├── IoHwAb.c
└── IoHwAb.h
其中,以IoHwAb_Diag开头的四个文件就是诊断层的代码.
二.文件说明
1.IoHwAb_Diag.c
IoHwAb_Diag.c文件中存放着诊断层的各个变量定义与功能函数
2.IoHwAb_Diag.h
IoHwAb_Diag.h文件中存放着诊断层的各个变量与函数的声明,以及一些状态机的宏
3.IoHwAb_Diag_PBCfg.c
IoHwAb_Diag_PBCfg.c文件中存放着诊断层的通道配置,诊断层按照不同的驱动类型来分组,手动将相同类型的驱动分为一组,以便程序周期性得去遍历每一个驱动故障.
4.IoHwAb_Diag_Cfg.h
IoHwAb_Diag_Cfg.h文件中存放着诊断层的各种宏定义,枚举声明
三.移植过程
1.复制四个文件至项目的IoHwAb文件夹下.
2.核对地址段名称.
核对代码各个地址段的名字是否正确,若是跨平台项目,大概率各地址段的宏名称是不一样的,如若不修改,编译会报MEMMAP_ERROR错误.
由于段的划分基本在每个文件中都使用得到,故可以参考同项目其它文件对地址段的引用,来修正诊断层的地址段名称
例如:
3.修改100us中断使能.
函数:IoHwAb_Diag_Check()
在跨平台的移植中,不同平台100us的使能方式不一样,需要修改.
例如:
THA6平台:
...
for(idxGrpUB=0;idxGrpUB<IOHWAB_DIAG_NUM_GROUP;idxGrpUB++)
{
if(1==IoHwAb_Diag_stGrpUA[idxGrpUB].Bits.bTimerTrigger)
{
/*触发100us*/
//触发定时中断
Gpt_SetPeriod(GPT_INDEX_CHAN_Diag100us, 100);
Gpt_Enable(GPT_INDEX_CHAN_Diag100us);
return;
}
}
...
TC387平台:
...
for(idxGrpUB=0;idxGrpUB<IOHWAB_DIAG_NUM_GROUP;idxGrpUB++)
{
if(1==IoHwAb_Diag_stGrpUA[idxGrpUB].Bits.bTimerTrigger)
{
/*触发100us*/
//触发定时中断
Fgtm=Gpt_lGetFgtm(); //100MHz
Fgtm=((uint32)(Fgtm/10000)); //100us
Gpt_StartTimer(GptConf_GptChannelConfiguration_GptChannelConfiguration_VarTimer,Fgtm);
return;
}
}
...
4.修改各个驱动的数量.
a)修改.c文件数组的维数以及数组成员的数量.
b)修改代表各组驱动数量的宏的值.
5.修改IoHwAb_Diag_PBCfg.c中的通道配置.
如何从PCB配置到代码?
四.调试前环境的检查
1.基础驱动测试.
测试所有驱动芯片的驱动功能是否正常.
2.核对芯片故障重试策略
a)对于L9945或者HE9945
COMMAND1-8的bit8需要都设置为1,表示为SPI读故障后跟随驱动信号更新.
b)对于PT2001
由微码逻辑决定,易控PT2001的故障重试逻辑是在SPI读出故障后随驱动信号更新,与L9945类似.
3.核对过流阈值和过流滤波时间
a)对于L9945或者HE9945
eg:没有外接采样电阻的通道,过流阈值先设置为10档;有外置采样电阻的,电流给到18A左右
过流阈值通常设置在33A以下,具体还需根据实际驱动的负载来进行微调.
过流滤波时间需设置为11.1us.
4.核对诊断层和IC层交互函数是否缺失,形参定义和类型是否一致.
5.核对各个ic的异步/同步函数是否缺失,10ms更新函数是否缺失,获取通道故障函数是否缺失.
6.核实IC层的故障清除逻辑,须有明确的清除条件才能清除.
7.核实诊断层的10ms和100us周期和调用频率是否正确,100us是否为单次触发.
a)100us奇数次拉高测试管脚,偶数次拉低测试管脚,手动触发100us,示波器观测测试管脚电平,检查是否会出现连续拉高或拉低的情况.
b)测量每次电平转换的时间,务必每次都是100us.
8.核实诊断层故障重试间隔
若诊断层故障重试间隔大于诊断包的最小时常,则会出现诊断未完成就触发新诊断的情况.
9.保证IC默认控制周期小于10ms
诊断层会基于10ms等待并将其切换入50us高频控制
10.准备开始测试.
确保电源功率足够大,先测试非过流故障,正确后再测试过流故障.