微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI电源管理交流 > BQ27542-G1 20Ah 计量的问题

BQ27542-G1 20Ah 计量的问题

时间:10-02 整理:3721RD 点击:

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
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top