This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] BQ76952:BQ76952 TS1问题

Guru**** 2443520 points
Other Parts Discussed in Thread: BQ76952

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1261337/bq76952-bq76952-ts1-issue

器件型号:BQ76952
主题中讨论的其他器件: 4428

您好

使用的 NTC 为 CWF1_ B 值 与默认的18k 温度模型之间存在差异、因此我使用了 通过 TI 在线工具生成的 CWF1_10KF3950的电阻值与温度之间的关系来生成校准系数、但读出的温度为127 ℃。

随附 NTC 规格和生成的校准参数

引脚配置代码如下:

U08 BQ769x2_SetEnableTS1 (void)
{
U08 u08Result = 0;

U08Result = BQ769x2_SetRegister (BQ769X2_SET_CONF_TS1、0x0B、1);//18K 温度模型、

返回 u08Result;

18K 温度模型的校准参数代码如下:

U08 BQ76952_Set18kTempModeCalib (void)
{
/CWF1 10KF3950-B1-500
U08结果= 0;
// Coeff A1 -17995 = 0x10000 - 0x464B = 0xB9B5
结果= BQ769x2_SetRegister (BQ769X2_CAL_18K_TEMP_COEFF_A1、0xB9B5、2);

//系数 A2 26324
结果|= BQ769x2_SetRegister (BQ769X2_CAL_18K_TEMP_COEFF_A226324、2);

// Coeff A3 -16652 = 0x10000 - 0x410C = 0xBEF4
结果|= BQ769x2_SetRegister (BQ769X2_CAL_18K_TEMP_COEFF_A3、0xBEF4、2);

//系数 A4 31695
结果|= BQ769x2_SetRegister (BQ769X2_CAL_18K_TEMP_COEFF_A431695、2);

//系数 A5 2793
结果|= BQ769x2_SetRegister (BQ769X2_CAL_18K_TEMP_COEFF_A52793、2);

// Coeff B1 -14950 = 0x10000 - 0x3A66 = 0xC59A
结果|= BQ769x2_SetRegister (BQ769X2_CAL_18K_TEMP_COEFF_B1、0xC59A、2);

//系数 B2 13924
结果|= BQ769x2_SetRegister (BQ769X2_CAL_18K_TEMP_COEFF_B213924、2);

//Coeff B3 -6450 = 0x10000 - 0x1932 = 0xE6CE
结果|= BQ769x2_SetRegister (BQ769X2_CAL_18K_TEMP_COEFF_B3、0xEF94、2);

//系数4 4428
结果|= BQ769x2_SetRegister (BQ769X2_CAL_18K_TEMP_COEFF_B44428、2);

//ADC0默认值为11703
//结果|= BQ769x2_SetRegister (BQ769X2_CAL_18K_TEMP_COEFF_ADC011703、2);

返回结果;

按如下方式读取温度代码:

S32 BQ769x2_ReadThermistorTemp (TE_BQ769X2_Thermistor Thermistor)
{
U08命令;
S16温度值;
开关(热敏电阻)
{
情形 E_TH_TS1:
CMD = BQ769X2_CMD_TEMP_TS1;
中断;
用例 E_TH_TS2:
CMD = BQ769X2_CMD_TEMP_TS2;
中断;
情况 E_TH_TS3:
CMD = BQ769X2_CMD_TEMP_TS3;
中断;
用例 E_TH_HDQ:
CMD = BQ769X2_CMD_TEMP_HDQ;
中断;
用例 E_TH_DCHG:
CMD = BQ769X2_CMD_TEMP_DCHG;
中断;
用例 E_TH_CFETOFF:
CMD = BQ769X2_CMD_TEMP_CFETOFF;
中断;
用例 E_TH_DFETOFF:
CMD = BQ769X2_CMD_TEMP_DFETOFF;
中断;
案例 E_TH_INT:
CMD = BQ769X2_CMD_TEMP_INT;
中断;

BQ769x2_BQ4552 (cmd、& Read_Int);
浮点 RAW = TemValue / 10.0;
返回(lroundf (raw - 273.15));

e2e.ti.com/.../CWF1_5F00_10KF3950.zipe2e.ti.com/.../CWF1-10KF3950_2D00_B1_2D00_500.pdfe2e.ti.com/.../CWF1_5F00_10KF3950_2D00_report.zip

底层驱动程序是指由 I2C 编写的 Sluc701a_中的 STM32、以下内容供参考。

//1-成功0-失败
U08 BQ769x2_DirectReadBytes (const U08 reg_addr、U08 *数据、const U08 num_Bytes)
{
返回 I2C_ReadReg (reg_addr、data、num_Bytes);

//1-成功0-失败
U08 BQ769x2 BQ769x2_52 Read_Int (const U08 reg_addr、S16 *值)
{
U08 buf[2];
U08 u08Result = 0;

u08Result = BQ769x2_DirectReadBytes (reg_addr、buf、2);
如果(!u08Result)
{
BQ769X2_DBG ("direct_read failed");

否则
{
*value =(S16)(buf[0]| buf[1]<<8);//小端字节序

返回 u08Result;

//1-成功0-失败
U08 BQ769x2_SetRegister (U16 reg_addr、U32 reg_data、U08 datalen)
{
U08 TX_Buffer[2]={0x00、0x00};
U08 TX_RegData[6]={0x00、0x00、0x00、0x00、0x00、 0x00};
U08 u08Result = 0;

//TX_RegData、小端字节序格式
TX_RegData[0]= reg_addr 与0xff;
TX_RegData[1]=(reg_addr >> 8)& 0xff;
TX_RegData[2]= reg_data & 0xff;//数据的第一个字节

switch (datalen)
{
情形1://1字节数据长度
u08Result = I2C_WriteReg (BQ769X2_CMD_SUBCMD_LOWER、TX_RegData、3);
SystemTickDelay (2);
TX_Buffer[0]=校验和(TX_RegData,3);
TX_Buffer[1]= 0x05;//寄存器地址和数据的组合长度
u08Result |= I2C_WriteReg (BQ769X2_SUBCMD_DATA_CHECKSUM、TX_Buffer、2);//写入校验和及长度
SystemTickDelay (2);
中断;
情形2://2字节数据长度
TX_RegData[3]=(reg_data >> 8)和0xff;
u08Result = I2C_WriteReg (BQ769X2_CMD_SUBCMD_LOWER、TX_RegData、4);
SystemTickDelay (2);
TX_Buffer[0]=校验和(TX_RegData,4);
TX_Buffer[1]= 0x06;//寄存器地址和数据的组合长度
u08Result |= I2C_WriteReg (BQ769X2_SUBCMD_DATA_CHECKSUM、TX_Buffer、2);//写入校验和及长度
SystemTickDelay (2);
中断;
情形4://4字节数据长度、仅用于 CCGain 和容量增益
TX_RegData[3]=(reg_data >> 8)和0xff;
TX_RegData[4]=(reg_data >> 16)和0xff;
TX_RegData[5]=(reg_data >> 24)和0xff;
u08Result = I2C_WriteReg (BQ769X2_CMD_SUBCMD_LOWER、TX_RegData、6);
SystemTickDelay (2);
TX_Buffer[0]=校验和(TX_RegData,6);
TX_Buffer[1]= 0x08;//寄存器地址和数据的组合长度
u08Result |= I2C_WriteReg (BQ769X2_SUBCMD_DATA_CHECKSUM、TX_Buffer、2);//写入校验和及长度
SystemTickDelay (2);
中断;

返回 u08Result;

使用内部温度读数指令0x68读取的温度值是32、而使用 TS1引脚温度读数指令0x70读取的值是127。
请帮助检查它。
谢谢
星形
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的明星:

    您的设置看起来是 正确的。 这可能是硬件问题。

    您能否提供原理图供您审阅?

    此致、

    马克斯·韦博肯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Max

    感谢您的答复。

    附上了原理图供您参考。

    谢谢

    星形

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的明星:

    您的原理图看起来没有问题。 为了确认这是 ADC 计算问题还是实际硬件问题、您能否在器件表现出此行为时提供原始 ADC 测量值?

    您可以找到用于获取这些值的寄存器 第 4.6节:子命令0x0075–0x0077 DASTATUS5–7 ()、其他测量值  TRM

    此致、

    马克斯·韦博肯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Max

    感谢你的帮助。

    当 TS1温度值为128时、读出的原始值为1522,282,1523628或1509391或1510016...

    TS1 ADC 原始数据的代码如下:

    U08 BQ769x2_ReadTS1AdcRaw (S32 *值)
    {
      返回 BQ769x2_SubCmdResponseInt4 (BQ769X2_SUBCMD_DASTATUS6、24、值);// TS1 ADC 数据

    U08 BQ769x2_SubCmdResponseInt4 (U16命令、U08偏移、S32 *值)
    {
    U08 TX_Reg[2]={0x00、0x00};
    U08 buf[4];
    U08 u08Result = 0;

    //TX_Reg 采用小端字节序格式
    TX_Reg[0]=命令& 0xff;
    TX_Reg[1]=(命令>> 8)& 0xff;

    u08Result |= I2C_WriteReg (BQ769X2_CMD_SUBCMD_LOWER、TX_Reg、2);
    SystemTickDelay (2);
    u08Result |= I2C_ReadReg (BQ769X2_SUBCMD_DATA_START + OFFSET、buf、4);
    if (u08Result)
    {
    *value =(S32)(buf[0]| buf[1]<< 8 | buf[2]<< 16 | buf[3]<< 24 );//小端字节序

    返回 u08Result;

    请帮助检查它。

    谢谢

    星形

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的明星:

    ADC 的读数似乎为~0.545V、假设采用理想的18k 上拉电阻器、该值转换为热敏电阻的~7.8k Ω。 ~31ºC 温度为30k Ω 的热敏电阻曲线、我们可以确信这不是硬件问题。

    我建议查看 BQ76952产品页面中提供的示例代码、然后查看使用这些函数是否对读数有任何差异。

    此致、

    马克斯·韦博肯