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.

BQ27542-G1 20Ah 计量的问题



Hi:, 首先感谢大家对问题的关注,

      我们的产品中使用了 BQ27542-G1,按照参考原理图设计的, BQ27542-G1 设计的最大计量是 14.5 Ah , 我们是 20Ah,  我在网上看到要做校准 ,第一次搞,很多术语都不懂,我需要的是:  充电标识以及放电时,剩余电量百分数 ,现在是容量不够,我想修改 Design Energy Scale ,能满足我的要求吗?

(1) 我在技术参考手册上看到 6.1.1.7 Design Energy Scale  , 

For battery capacities larger than 6 Ahr, Design Energy Scale = 10
is recommended.  。  如 20Ah , 需要设置成 10 吗?

(2)一定需要EV2300+PC 侧电池管理软件才行吗? 我能否通过 I2C 直接写 flash的数据,行吗?

(3)我看到数据手册上有 Autocalibration, 是否还需要一个充放电的学习过程?

  • 1. 可以设置成10, 这样方便计算

    2. 可以用单片机写值

    3. Autocalibration 是在sleep mode进行

  • 1. 我理解  Design Energy Scale  就是一个刻度,缺省1, 支持 14.5Ah, 如果设置成 2,就可以支持 29Ah,这样理解对吗?

    2.  正确设置 Design Energy Scale 后,还需要做下面两项吗(这是我在论坛上找到的)?

        (1)     将所有mAh单位的配置,都配置成1/10,

        (2). 校准电流的时候,实际用1A电流,校准的时候写100mA,这样电量计显示的电流,和容量值都为1/10. 

       参考链接:http://www.deyisupport.com/question_answer/analog/battery_management/f/35/t/92987.aspx

  • (1),Design Energy Scale只是把5个容量相关的参数进行scale。

    (2),EV2300+PC可以很方便调试。通过 I2C 直接写 flash的数据也可以,只是比较少这样做。

    (3),Autocalibration和充放电的学习没有关系。

  • Design Energy Scale只能是1或者10,不能是其他数

  • 我用单片机 STM32 通过I2C 操作 data flash,. 代码是按 TI 的 MSP430 的exsample 来写的 .  写入的数据和

    读取的数据比较,是一致的。但重新上电,Block A 还是初始值 00, 是有什么命令没有送吗? 程序如下:

    // Write & read back 32 bytes of data in Manufacturer Info Block A
    for (i = 0; i < 32; i++)
    {
    TxData[i] = i; // Initialize data to be written
    }
    IIC_Write_One_Byte(bq27541CMD_DFDCNTL, 0);// BlockDataControl() = 0x00
    IIC_Write_One_Byte(bq27541CMD_DFCLS, 58);// Write the subclass value
    IIC_Write_One_Byte(bq27541CMD_DFBLK, 0);// Select offset within the flash
    for (i = 0; i < 32; i++) // Compute the checksum of the block
    {
    sum += TxData[i]; // Calculate the sum of the values
    }
    checksum = (0xFF - (sum & 0x00FF)); // Compute checksum based on the sum
    IIC_Write_One_Byte(bq27541CMD_DFDCKS, checksum); // Write checksum value
    for (i = 0; i < 32; i++) // Write 32 bytes to Info Block A
    {
    IIC_Write_One_Byte((bq27541CMD_ADF+i), TxData[i]);
    }
    IIC_Read_Bytes(bq27541CMD_ADF,&RxData[0], 32); // Read the contents of the block
    for (i = 0; i < 32; i++) // Check if writes were successful
    {
    if (TxData[i] != RxData[i]) // Tx & Rx data values match?
    {
    sum=0 ;//error
    }
    }