一.电流检测芯片虚焊与损坏
1.问题的发现
电调上电后,观察到电流检测功能使能失败告警。断点调试后发现,问题出在上电首次电流检测ADC值没有落在中点附近。
(ADC范围为0~4095,对应电流范围为-165A~+165A。正常上电时电流应处于0A左右,对应ADC取值2048左右)
2.解决思路
可以看到A相与B相的值是正常处于2048附近的,可以推断代码应该是没问题的,考虑硬件问题。结合之前遇到过stm32引脚虚焊导致spi通信不正常的经历,猜想是INA181A1的引脚虚焊导致的问题。于是重新对C相的INA181A1进行上锡。
重新测试一遍仍发现值不正常,遂更换一片新的INA181A1。再测试显示结果正常,上电使能通过。
二.电流检测波形杂乱
1.问题分析
上一个问题解决后,用上位机观察电流检测三相电流波形,发现十分杂乱。
从图中还是可以看出三相数据具有120度相位差的特征,且电机能正常转动。
把波形图和现象丢给AI,AI分析说可能是电流采样时机不对。
原电流采样代码采用软件触发采样,在主循环中每循环一次调用一次Read_Current(),即采样一次。这样导致采样的时机不在定时器的同一时刻,每次采样时的三相MOS管导通情况都不同。
2.解决思路
采用ADC注入组+定时器触发采样的方法:
(1)在产生PWM信号的定时器再开一个通道,设为输出比较模式(Frozen),设其CCR=ARR;
(2)设置ADC注入组的触发源为Time 1 Capture Compare 4 event(CC4事件),触发信号沿为上升沿;
(3)当CNT等于ARR时,TIM1的通道4产生CC4事件,触发ADC注入组采样与转换,这样每次调用Read_Current()得到的电流结果都是在指定时刻采样得到的,可以采集到三相MOS下管导通时的电流,这正是我们想要的。
但又出现了个新问题。
三.ADC注入组无法被正常触发采样
1.问题的发现
设置了ADC注入组+定时器触发采样后,上电又发现电流检测功能使能失败告警。
断点调试发现,FOCfunc.c:Read_ADC3()中st = HAL_ADCEx_InjectedPollForConversion(&FOC_ADC, ADC_READ_TIMEOUT);等待整个注入序列结束超时。
2.第一次尝试解决
根据AI的建议,把TIM1通道4改为PWM Generation No Output模式(PWM Mode 1),但还是等待整个注入序列结束超时。
用__HAL_TIM_GET_COUNTER(&htim1)检查定时器是否正常计数,调试显示CNT的值一直在变化,说明定时器计数正常。
把调试结果告诉AI,AI给出了几个不太可能的原因。
3.第二次尝试解决
在AI回答的长篇大论中的一个不起眼的角落,我注意到了它给出的一个推断:
想了一下确实有可能,于是我把CCR调到790,结果成功触发ADC采样与转换!
以下是采集到的三相正弦电流波形: