|
@@ -416,22 +416,40 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
|
|
|
int32_t Temp_32;
|
|
|
static int32_t BusVoltageFltSum = 0;
|
|
|
static int32_t IdcFltSum = 0;
|
|
|
+ static uint16_t T_Filt_Cnt = 0;
|
|
|
static uint32_t T_Coil_Sum = 0;
|
|
|
- static uint16_t T_Coil_FiltCnt = 0;
|
|
|
static uint32_t T_PCB_Sum = 0;
|
|
|
- static uint16_t T_PCB_FiltCnt = 0;
|
|
|
static uint32_t T_MCU_Sum = 0;
|
|
|
- static uint16_t T_MCU_FiltCnt = 0;
|
|
|
+ static TrueOrFalse_Flag_Struct_t T_MCU_Init_Flag = FALSE;
|
|
|
+ static uint8_t T_MCU_Init = 0;
|
|
|
+ static uint16_t T_MCU_Init_AD = 0;
|
|
|
static int32_t GasSensorFltSum = 0;
|
|
|
|
|
|
- //更新PCB温度
|
|
|
+ //更新PCB温度,绕组温度,MCU温度
|
|
|
T_PCB_Sum += ADC1_Result[ADC1_RANK_NTC_PCB];
|
|
|
- T_PCB_FiltCnt++;
|
|
|
- if(T_PCB_FiltCnt >= 2048)
|
|
|
+ T_Coil_Sum += ADC1_Result[ADC1_RANK_NTC_COIL];
|
|
|
+ T_MCU_Sum += ADC1_Result[ADC1_RANK_TP_MCU];
|
|
|
+ T_Filt_Cnt++;
|
|
|
+ if(T_Filt_Cnt >= 3000)
|
|
|
{
|
|
|
- MC_RunInfo.T_PCB = GetNTCTempera(T_PCB_Sum >> 11);
|
|
|
+ //计算PCB温度
|
|
|
+ MC_RunInfo.T_PCB = GetNTCTempera(T_PCB_Sum / 3000);
|
|
|
T_PCB_Sum = 0;
|
|
|
- T_PCB_FiltCnt = 0;
|
|
|
+ //计算绕组温度
|
|
|
+ MC_RunInfo.T_Coil = GetNTCTempera(T_Coil_Sum / 3000);
|
|
|
+ T_Coil_Sum = 0;
|
|
|
+ //MCU温度根据PCB初始温度进行校准
|
|
|
+ if(T_MCU_Init_Flag == FALSE)
|
|
|
+ {
|
|
|
+ T_MCU_Init = MC_RunInfo.T_PCB;//校准时温度
|
|
|
+ T_MCU_Init_AD = T_MCU_Sum / 3000;//校准时AD值
|
|
|
+ T_MCU_Init_Flag = TRUE;
|
|
|
+ }
|
|
|
+ //计算MCU温度
|
|
|
+ MC_RunInfo.T_MCU = T_MCU_Init + ((int16_t)(T_MCU_Init_AD - T_MCU_Sum / 3000) * 192 >> 10);//4.3mV/度, 3300 / 4095 / 4.3 * 1024 = 192
|
|
|
+ T_MCU_Sum = 0;
|
|
|
+
|
|
|
+ T_Filt_Cnt = 0;
|
|
|
}
|
|
|
|
|
|
//更新母线电压
|
|
@@ -439,16 +457,6 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
|
|
|
MC_RunInfo.BusVoltage = (uint32_t)((BusVoltageFltSum >> 10) * 18382) >> 10; //3300 * 1047 / (4095 * 47)
|
|
|
MC_RunInfo.BusVoltage += (MC_RunInfo.BusCurrent >> 7) * 26; //根据母线电流和估算的线阻进行补偿, 补偿电阻 0.2 * 128 = 25.6
|
|
|
|
|
|
- //更新绕组温度
|
|
|
- T_Coil_Sum += ADC1_Result[ADC1_RANK_NTC_COIL];
|
|
|
- T_Coil_FiltCnt++;
|
|
|
- if(T_Coil_FiltCnt >= 2048)
|
|
|
- {
|
|
|
- MC_RunInfo.T_Coil = GetNTCTempera(T_Coil_Sum >> 11);
|
|
|
- T_Coil_Sum = 0;
|
|
|
- T_Coil_FiltCnt = 0;
|
|
|
- }
|
|
|
-
|
|
|
//更新母线电流
|
|
|
Temp_32 = (ADC1_Result[ADC1_RANK_CURRENT] - uw_current_offset) * 50000 >> 11;
|
|
|
Temp_32 = (Temp_32 <= 0) ? 0 : Temp_32;
|
|
@@ -490,19 +498,6 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
|
|
|
Temp_32 = (Temp_32 <= 0) ? 0 : Temp_32;
|
|
|
GasSensorFltSum += ((Temp_32 << 10) - GasSensorFltSum) >> 8; //滤波延时0.33*256=85.3ms
|
|
|
ADC_SensorData.GasSensor = GasSensorFltSum >> 10;
|
|
|
-
|
|
|
- //更新MCU温度
|
|
|
- T_MCU_Sum += ADC1_Result[ADC1_RANK_TP_MCU];
|
|
|
- T_MCU_FiltCnt++;
|
|
|
- if(T_MCU_FiltCnt >= 2048)
|
|
|
- {
|
|
|
- Temp_32 = 3300 * (T_MCU_Sum >> 11) >> 12;
|
|
|
- Temp_32 = (int32_t)1430 - Temp_32;
|
|
|
- MC_RunInfo.T_MCU = (uint8_t)((Temp_32 * 238 >> 10) + 25 + 40);
|
|
|
- T_MCU_Sum = 0;
|
|
|
- T_MCU_FiltCnt = 0;
|
|
|
- }
|
|
|
-
|
|
|
}
|
|
|
|
|
|
//ADC1和ADC2数据滑动滤波
|