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.

[参考译文] BQ27411-G1:充电时未正确测量电流

Guru**** 2614265 points
Other Parts Discussed in Thread: BQSTUDIO, EV2400

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/760762/bq27411-g1-current-not-measured-correctly-when-charging

器件型号:BQ27411-G1
主题中讨论的其他器件:BQSTUDIOEV2400

您好!

我们使用 BQ27411-G1A 来监控电池的 SOC。 我们将手动设置 ROM 中的所有值。 除了电量监测计在为电池充电时测量的电流外、一切都正常。

放电时、fuell 电池可非常精确地测量流经10m Ω 电阻器的电流。 然而、当电池正在充电时、fuell 电池报告的电流大约是流经电阻器的电流的两倍。 我们测量了电阻器两端的压降、还测量了流经电阻器的电流、并将其与电量监测计报告的值进行比较、从而得到下表:

我们尝试了两种不同的器件、结果相同、分别为"Equipo A"和"Equipo B"。 V Bat 测试仪是测试仪报告的电池电压、V Bat FG 是电量监测计(FG)报告的电压。 V R14是使用测试仪测量的10m Ω 电阻器中的压降。

如您所见、FG 报告的正电流值不正确(电池正在充电)。 我们还确保它读取的电流不正确、因为在为电量监测计报告的剩余电量充电时、电量监测计会增加到设计容量的大约两倍。 在文件"serial_20181222_144052_carga.txt"中、我们监控了 FG 在完全放电充电时的行为。

e2e.ti.com/.../serial_5F00_20181222_5F00_144052_5F00_carga.txt

我们使用两节并联的锂离子3.7V 680mAh 电池。 以下是我们有关电量监测计的设计原理图:

此外、使用此函数、我们将写入 ROM 中配置的值:

void FG_WRITE_DATA_memory2 (void){
unsigned char UC;
int cs;
FG_WRITE (0x00、0x00);//取消密封
FG_WRITE (0x01、 0x80);
FG_WRITE (0x00、0x00);
FG_WRITE (0x01、0x80);
FG_WRITE (0x00、0x13);// SET_CFGUPDATE
FG_WRITE (0x01、0x00);
uC = FG_READ_UNsigned_byte (0x06);

while ((uC & 0x10)==0){
_delay_ms (100);
uC = FG_READ_unsigned_byte (0x06);
}

FG_WRITE (FG_BLOCKDATACONTROL、0x00);// BlockDataControl
cs = 0;
FG_CLASS (2);// SAFG_BLOCK
(0);550_WORD
、FG_DATA = 550、FG_WRITE_WORD cs);
cs = FG_WRITE_DATA_WORD (2、0、cs);
cs = FG_WRITE_DATA_BYTE (4、 50、cs);
FG_CHECKSUM_WRITE (~cs);
//
FG_CLASS (36);//充电终止
FG_BLOCK (0);
cs = FG_WRITE_DATA_WORD (0、25、cs);
cs = FG_WRITE_DATA_BYTE (2、 40、cs);
cs = FG_WRITE_DATA_BYTE (3、99、cs);
cs = FG_WRITE_DATA_BYTE (4、95、cs);
cs = FG_WRITE_DATA_BYTE (5、-1、 cs);
cs = FG_WRITE_DATA_BYTE (6、98、cs);
cs = FG_WRITE_DATA_WORD (7、 50、cs);
FG_CHECKSUM_WRITE (~cs);
//
FG_CLASS (48);//数据
FG_BLOCK (0);
cs = FG_WRITE_DATA_BYTE_Dummy();
cs = FG_WRITE_DATA_BYTE (2、-13、cs);//非默认
值 cs = FG_WRITE_DATA_WORD (3、-500、cs);//非默认
FG_CHECKSUM_WRITE (~cs);
//
FG_CLASS (49);//放电
FG_BLOCK (0
、FG_WRITE_0、FG_DATA (byte); cs);
cs = FG_WRITE_DATA_BYTE (1、15、cs);
cs = FG_WRITE_DATA_BYTE (2、 2、cs);
cs = FG_WRITE_DATA_BYTE (3、5、cs);
FG_CHECKSUM_WRITE (~C);
//
FG_CLASS (64);//寄存
器 FG_BLOCK (0);
cs = FG_WRITE_DATA_WORD (0、0x25F8、 cs);
cs = FG_WRITE_DATA_BYTE (2、0x0F、cs);
cs = FG_WRITE_DATA_BYTE (3、 0x80、cs);
FG_CHECKSUM_WRITE (~cs);
//
FG_CLASS (68);//电源
FG_BLOCK (0);
cs = FG_WRITE_DATA_BYTE_Dummy();
cs = FG_WRITE_DATA_WORD (7、3、cs);
cs = FG_WRITE_DATA_WORD (9、 2800、cs);
cs = FG_WRITE_DATA_BYTE (11、1、cs);
FG_CHECKSUM_WRITE (~cs);
//
FG_CLASS (80);// IT cfg
FG_BLOCK (0);
cs = FG_WRITE_DATA_BYTE_Dummy_();
cs = FG_WRITE_DATA_WORD (4、30、cs);
cs = FG_WRITE_DATA_BYTE (10、8、cs);
cs = FG_WRITE_DATA_BYTE (17、70、 cs);
cs = FG_WRITE_DATA_BYTE (19、20、cs);
cs = FG_WRITE_DATA_BYTE (20、 5、cs);
cs = FG_WRITE_DATA_WORD (22、800、cs);
CS = FG_WRITE_DATA_BYTE (28、10、cs);
FG_CHECKSUM_WRITE (~C);
//
FG_BLOCK (1);
cs = FG_WRITE_DATA_BYTE_Dummy();
cs = FG_WRITE_DATA_BYTE (35、92、cs);
cs = FG_WRITE_DATA_BYTE (36、 96、cs);
cs = FG_WRITE_DATA_WORD (37、125、cs);
cs = FG_WRITE_DATA_WORD (39、4、cs);
cs = FG_WRITE_DATA_BYTE (41、3、 cs);
cs = FG_WRITE_DATA_BYTE (42、25、cs);
cs = FG_WRITE_DATA_BYTE (44、 15、cs);
cs = FG_WRITE_DATA_BYTE (45、20、cs);
cs = FG_WRITE_DATA_WORD (48、500、cs);
cs = FG_WRITE_DATA_WORD (52、0、 cs);
cs = FG_WRITE_DATA_WORD (54、0、cs);
cs = FG_WRITE_DATA_BYTE (59、 1、cs);
cs = FG_WRITE_DATA_BYTE (60、20、cs);
CS = FG_WRITE_DATA_WORD (61、11、cs);
FG_CHECKSUM_WRITE (~C);
//
FG_BLOCK (2);
cs = FG_WRITE_DATA_BYTE_Dummy();
cs = FG_WRITE_DATA_WORD (70、0、cs);
cs = FG_WRITE_DATA_WORD (72、 200、cs);
cs = FG_WRITE_DATA_WORD (74、100、cs);
CS = FG_WRITE_DATA_BYTE (76、2、cs);
FG_CHECKSUM_WRITE (~C);
//
FG_CLASS (81); //当前阈值
FG_BLOCK (0);
cs = FG_WRITE_DATA_WORD (0、167、cs);
cs = FG_WRITE_DATA_WORD (2、 100、cs);
cs = FG_WRITE_DATA_WORD (4、250、cs);
cs = FG_WRITE_DATA_WORD (6、60、cs);
cs = FG_WRITE_DATA_BYTE (8、60、 cs);
cs = FG_WRITE_DATA_BYTE (9、1、cs);
cs = FG_WRITE_DATA_BYTE (10、 179、cs);
cs = FG_WRITE_DATA_BYTE (11、179、cs);
CS = FG_WRITE_DATA_WORD (12、400、cs);
FG_CHECKSUM_WRITE (~C);
//
FG_CLASS (82); //状态
FG_BLOCK (0);
cs = FG_WRITE_DATA_BYTE_Dummy();
cs = FG_WRITE_DATA_WORD (0、16384、cs); //此处出现错误
cs = FG_WRITE_DATA_BYTE (2、0x00、cs);
cs = FG_WRITE_DATA_WORD (3、0、 CS);//?
CS = FG_WRITE_DATA_BYTE (5、0x81、cs);
CS = FG_WRITE_DATA_WORD (6、3803、 cs);
cs = FG_WRITE_DATA_WORD (8、3752、cs);
cs = FG_WRITE_DATA_WORD (10、 1360、cs);//设计容量680+680mAh
cs = FG_WRITE_DATA_WORD (12、5032、cs);//设计能量1360mAh * 3.7V
cs = FG_WRITE_DATA_WORD (14、1340、cs);
cs = FG_WRITE_DATA_WORD (16、3200、 CS);//终止电压3200mV
cs = FG_WRITE_DATA_BYTE (26、1、cs);
cs = FG_WRITE_DATA_WORD (27、25、 CS);// Tapper 速率= 10*1032/CHARGE_CURRENT
cs = FG_WRITE_DATA_WORD (29、4100、cs);
cs = FG_WRITE_DATA_BYTE (31、10、 cs);//睡眠电流
FG_CHECKSUM_WRITE (~cs);
//
FG_BLOCK (1);
cs = FG_WRITE_DATA_BYTE_Dummy_();
cs = FG_WRITE_DATA_WORD (33、4190、 cs);//错误?
cs = FG_WRITE_DATA_WORD (35、-50、cs);
cs = FG_WRITE_DATA_WORD (37、-50、 cs);
cs = FG_WRITE_DATA_WORD (39、1、cs);
FG_CHECKSUM_WRITE (~cs);
//
FG_CLASS (104);//数据
FG_BLOCK (0);
cs = FG_WRITE_DATA_BYTE_Dummy();
cs = FG_WRITE_DATA_BYTE (0、0、 cs);
cs = FG_WRITE_DATA_BYTE (1、0、cs);
cs = FG_WRITE_DATA_BYTE (2、 0、cs);
FG_CHECKSUM_WRITE (~C);


FG_CLASS (107);// Current
FG_Block (0);
cs = FG_WRITE_DATA_BYTE_Dummy();
cs = FG_WRITE_DATA_BYTE (1、5、cs);
FG_CHECKSUM_WRITE (~cs);

FG_WRITE (0x00、0x42);// SOFT_RESET
FG_WRITE (0x01、0x00);
uC = FG_READ_UNsigned_byte (0x06);
serial_printf_P (PSTR ("标志%02x\n")、uC);
while ((uC & 0x10)!= 0){
_delay_ms (100);
uC = FG_READ_UNsigned_byte (0x06);
}
uC = FG_READ_UNsigned_byte (0x06);
serial_printf_p (PSTR
)(0x20、写入标志(0x20);uC //密封
FG_WRITE (0x01、0x00);
return;
} 

有什么想法?

谢谢、Tomás

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Tomas、
    您是否尝试过 EVM 用户指南中所示的电流测量校准?
    谢谢
    Onyx
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Tomas、
    您是否按照 EVM 用户指南中所示校准了电流?
    谢谢
    Onyx
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Onyx、

    我没有尝试过。 我将尝试使用此链接   、并将告知您。

    谢谢

    Tomás μ A

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

    您好、Onyx、

    如果不使用 bqStudio、我无法找到校准电流测量的位置或方法。 我只能通过使用 i2c 的微控制器访问电量监测计,是否有任何提示?

    谢谢、Tomàs

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Tomas、
    请参阅以下应用手册:
    www.ti.com/.../slua640b.pdf

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

    您好、Onyx、

    我遵循了这些指导原则、可以使用 ccGain  寄存器成功更改增益(跨导)、并完成了自动校准(电路板偏移和 CC 偏移)。 不过,我对失调电压仍有同样的问题。 这就是发生的情况:

    在更改增益之前:

    万用表:  电量监测计:

    +540mA      +1080 mA

    -1300mA      -1300mA

    之后(降低增益):

    万用表:  电量监测计:

    +540mA      +540mA

    -1300mA      -670 mA

    很明显、在零偏移方面存在问题、但我不知道燃油表中的问题可能是什么。 是否有可控制此操作的变量? 可能我设置了错误。

    谢谢、Tomàs

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tomas、
    如果没有电路板、就很难确定您的行为是错误的。 我建议您购买 EVM 和 ev2400、以帮助指导您完成整个过程、或使用更好的蓝色线进行电路板、以便通过 ev2400与 bqstudio 进行通信。

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

    您好、Onyx、

    我仍然无法解决问题。 无论如何、您提供的文档中存在错误:

    第16页:

    否则、如果(tmpVal <= 1.0){
    while (tmpVal >= 1.0){
    tmpVal = tmpVal / 2;
    exp++;
    }
    } 
    应为: 
    否则、如果(tmpVal >= 1.0){
    while (tmpVal >= 1.0){
    tmpVal = tmpVal / 2;
    exp++;
    }
    }