关于BQ4050通过IIC通信实现数据读取说明

一、关于BQ4050

       BQ4050器件是一款基于电池组的单芯片全集成解决方案,针对1、2、3、4节串联锂离子或者锂聚合物电池组提供电量监测、保护认证等一系列丰富的功能。
       TI电池管理芯片BQ40Z50,通信协议是SMBUS,类似IIC,速率要求10-100KHz。

二、BQ4050接线

在这里插入图片描述
       
其中:
黑色:GND
红色:SCL
白色:SDA

三、BQ4050登录

       正常接线后,打开电池管理软件
       1、选择设备类型

在这里插入图片描述
       2、选择设备地址,默认是0x16

在这里插入图片描述

四、BQ4050界面及操作

       以下为BQ4050的主界面,在这个界面里,我们可以看到电池相关信息。

在这里插入图片描述
       主要就是电池电压、电流、剩余电量等信息

在这里插入图片描述

五、BQ4050操作

       进入bq4050的指令数据读取界面,这里,我们除了可以通过界面直观查看电池信息,还可以通过指令来读取电池的信息

在这里插入图片描述
       这里简单罗列下主要一些指令命令

#define BQ4050_REG_TEMP		  0x08		//Temperature   U2
#define BQ4050_REG_VOLT		  0x09		//Voltage   U2#define BQ4050_REG_CURRENT	  0x0A		//CURRENT   I2
#define BQ4050_REG_RSOC		  0x0D		//RelativeStateOfCharge U1
#define BQ4050_REG_FCC		  0x10		//FullChargeCapacity    U2
#define BQ4050_REG_TTE		  0x12		//TimeToEmpty   U2
#define BQ4050_REG_TTF		  0x13		//TimeToFull    U2
#define BQ4050_REG_RMC		  0x0F		///* Remaining Capacity */

       接下来我们简单示范下操作,比如命令0x09是读取电池电压

在这里插入图片描述
       发送0x09命令后,电池返回值为0x2BBF,转换后值为11199,即电压为11.199V
可以通过界面查看,验证数据正确性

在这里插入图片描述
       最后,贴上部分电池读取的代码
       记住:IIC电池读取的时候,指令与指令间延时多一点,保证能够正常稳定读取数据。

       数据发送

void Bat_IIC_Send_Byte(uint8_t txd)
{                        
    uint8_t t;   
	BAT_SDA_OUT(); 	    
    BAT_IIC_SCL(0);									//À­µÍʱÖÓ¿ªÊ¼Êý¾Ý´«Êä
    for(t=0;t<8;t++)
    {              
        BAT_IIC_SDA((txd&0x80)>>7);
        txd<<=1; 	  
		delay_us(BAT_DELAY_TIME);   					//¶ÔTEA5767ÕâÈý¸öÑÓʱ¶¼ÊDZØÐëµÄ
		BAT_IIC_SCL(1);
		delay_us(BAT_DELAY_TIME); 
		BAT_IIC_SCL(0);	
		delay_us(BAT_DELAY_TIME);
    }	 
} 

       数据读取

uint8_t Bat_IIC_Read_Byte(uint8_t ack)
{
	uint8_t i,receive=0;
	BAT_SDA_IN();									/*SDAÉèÖÃΪÊäÈë*/
    for(i=0;i<8;i++ )
	{
        BAT_IIC_SCL(0); 
        delay_us(BAT_DELAY_TIME);
		BAT_IIC_SCL(1);
        receive<<=1;
        if(BAT_READ_SDA)receive++;   
		delay_us(BAT_DELAY_TIME); 
    }					 
    if (!ack)
        Bat_IIC_NAck();								/*·¢ËÍnACK*/
    else
        Bat_IIC_Ack();								/*·¢ËÍACK*/   
    return receive;
}

       电池信息读取

void Bq4050_Get_Cmd_Info(uint8_t slaveAddr,uint8_t cmd,uint8_t *data,uint8_t len)
{
	uint8_t t=0;
	int ret = 0;
	Bat_IIc_Start();  
	Bat_IIC_Send_Byte(slaveAddr);
	ret = Bat_IIC_Wait_Ack();
	if(ret==1)
		printf("ack slaveAddr %d failed \r\n",slaveAddr);
	else
		printf("ack slaveAddr %d success \r\n",slaveAddr);
	delay_us(100);
	
	Bat_IIC_Send_Byte(cmd);
	ret = Bat_IIC_Wait_Ack();
	if(ret==1)
		printf("ack cmd %d failed \r\n",cmd);
	else
		printf("ack cmd %d success \r\n",cmd);
	delay_us(100);
	delay_us(750);												/*±ØÐëÒªÓÐ*/
	
	Bat_IIc_Start(); 
	Bat_IIC_Send_Byte(slaveAddr+1);
	ret = Bat_IIC_Wait_Ack();
	if(ret==1)
		printf("ack slaveAddr+1 %d failed \r\n",slaveAddr+1);
	else
		printf("ack slaveAddr+1 %d success \r\n",slaveAddr+1);
	delay_us(100);
	delay_us(50);
	
	for(t=0;t<len;t++)
	{
		data[t] = Bat_IIC_Read_Byte(1);	
		delay_us(250);
	}
	Bat_IIC_Stop();
}
  • 14
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值