Other Parts Discussed in Thread: 4428, BQSTUDIO
Hi
The NTC I used is CWF1_10KF3950, and the B value is different from the default 18k temperature model, so I used TI's online tool to generate a calibration coefficient based on the relationship between the resistance value and temperature of CWF1_10KF3950, but the temperature read after writing is 127°C. Attached are the NTC specifications used and the generated calibration parameters. Please help analyze the reasons. Thank you!
The pin configuration code is as follows:
U08 BQ769x2_SetEnableTS1(void)
{
U08 u08Result = 0;
u08Result = BQ769x2_SetRegister(BQ769X2_SET_CONF_TS1, 0x0B, 1);//18K temperature model,
return u08Result;
}
The code to set the 18K temperature model calibration parameters is as follows:
Please help to see if there is any problem with this setting function.3324.CWF1_10KF3950-report.zip3324.CWF1 10KF3950-B1-500.pdfCWF1_10KF3950 (1).zip
U08 BQ76952_Set18kTempModeCalib(void)
{
//CWF1 10KF3950-B1-500
U08 result = 0;
//Coeff a1 -17995 = 0x10000 - 0x464B = 0xB9B5
result = BQ769x2_SetRegister(BQ769X2_CAL_18K_TEMP_COEFF_A1, 0xB9B5, 2);
//Coeff a2 26324
result |= BQ769x2_SetRegister(BQ769X2_CAL_18K_TEMP_COEFF_A2, 26324, 2);
//Coeff a3 -16652 = 0x10000 - 0x410C = 0xBEF4
result |= BQ769x2_SetRegister(BQ769X2_CAL_18K_TEMP_COEFF_A3, 0xBEF4, 2);
//Coeff a4 31695
result |= BQ769x2_SetRegister(BQ769X2_CAL_18K_TEMP_COEFF_A4, 31695, 2);
//Coeff a5 2793
result |= BQ769x2_SetRegister(BQ769X2_CAL_18K_TEMP_COEFF_A5, 2793, 2);
//Coeff b1 -14950 = 0x10000 - 0x3A66 = 0xC59A
result |= BQ769x2_SetRegister(BQ769X2_CAL_18K_TEMP_COEFF_B1, 0xC59A, 2);
//Coeff b2 13924
result |= BQ769x2_SetRegister(BQ769X2_CAL_18K_TEMP_COEFF_B2, 13924, 2);
//Coeff b3 -6450 = 0x10000 - 0x1932 = 0xE6CE
result |= BQ769x2_SetRegister(BQ769X2_CAL_18K_TEMP_COEFF_B3, 0xEF94, 2);
//Coeff b4 4428
result |= BQ769x2_SetRegister(BQ769X2_CAL_18K_TEMP_COEFF_B4, 4428, 2);
//Adc0 default is 11703
// result |= BQ769x2_SetRegister(BQ769X2_CAL_18K_TEMP_COEFF_ADC0, 11703, 2);
return result;
}
Read the temperature code as follows:
S32 BQ769x2_ReadThermistorTemp(TE_BQ769X2_THERMISTOR thermistor)
{
U08 cmd;
S16 TemValue;
switch (thermistor)
{
case E_TH_TS1:
cmd = BQ769X2_CMD_TEMP_TS1;
break;
case E_TH_TS2:
cmd = BQ769X2_CMD_TEMP_TS2;
break;
case E_TH_TS3:
cmd = BQ769X2_CMD_TEMP_TS3;
break;
case E_TH_HDQ:
cmd = BQ769X2_CMD_TEMP_HDQ;
break;
case E_TH_DCHG:
cmd = BQ769X2_CMD_TEMP_DCHG;
break;
case E_TH_CFETOFF:
cmd = BQ769X2_CMD_TEMP_CFETOFF;
break;
case E_TH_DFETOFF:
cmd = BQ769X2_CMD_TEMP_DFETOFF;
break;
case E_TH_INT:
cmd = BQ769X2_CMD_TEMP_INT;
break;
}
BQ769x2_DirectRead_Int2(cmd,&TemValue);
float raw = TemValue / 10.0;
return (lroundf(raw - 273.15));
}
The temperature value read using the read internal temperature command 0x68 is 32, and the value read using the TS1 pin read temperature command 0x70 is 127.
When the TS1 temperature value is 128, the original value read is 1522282 or 1523628 or 1509391 or 1510016....from this data can know the ADC is reading ~0.545V, which, assuming an ideal 18k pull-up resistor, translates to ~7.8kohms on the thermistor. Looking at your thermistor curve that's 30~31ºC, so we can be quite certain that this is not a hardware issue.
I also compared it with the official code. I really don’t know where the problem is. Can you help me find out?
looking forward to your reply
thanks
quincey