一.电流检测芯片虚焊与损坏1.问题的发现电调上电后观察到电流检测功能使能失败告警。断点调试后发现问题出在上电首次电流检测ADC值没有落在中点附近。ADC范围为0~4095对应电流范围为-165A~165A。正常上电时电流应处于0A左右对应ADC取值2048左右2.解决思路可以看到A相与B相的值是正常处于2048附近的可以推断代码应该是没问题的考虑硬件问题。结合之前遇到过stm32引脚虚焊导致spi通信不正常的经历猜想是INA181A1的引脚虚焊导致的问题。于是重新对C相的INA181A1进行上锡。重新测试一遍仍发现值不正常遂更换一片新的INA181A1。再测试显示结果正常上电使能通过。二.电流检测波形杂乱1.问题分析上一个问题解决后用上位机观察电流检测三相电流波形发现十分杂乱。从图中还是可以看出三相数据具有120度相位差的特征且电机能正常转动。把波形图和现象丢给AIAI分析说可能是电流采样时机不对。原电流采样代码采用软件触发采样在主循环中每循环一次调用一次Read_Current()即采样一次。这样导致采样的时机不在定时器的同一时刻每次采样时的三相MOS管导通情况都不同。2.解决思路采用ADC注入组定时器触发采样的方法(1)在产生PWM信号的定时器再开一个通道设为输出比较模式(Frozen)设其CCRARR(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的值一直在变化说明定时器计数正常。把调试结果告诉AIAI给出了几个不太可能的原因。3.第二次尝试解决在AI回答的长篇大论中的一个不起眼的角落我注意到了它给出的一个推断想了一下确实有可能于是我把CCR调到790结果成功触发ADC采样与转换以下是采集到的三相正弦电流波形