基于STM32的BQ25713的充电功能开发


前言

本人使用BQ25713实现给电池充电的功能,这里大概讲解一下这个芯片的用法。


一、开发环境

mcu:stm32f072
软件:keil5
库:hal

二、BQ25713芯片

1.简介

这款芯片一般用来给电池充电,可给1S~4S的芯片充电,支持USB2.0,3.0,typec等输入设置。其他的电气属性我就不介绍了,有手册的看手册没有的可以在以下链接下载:

BQ25713中英文手册

2.开发

1.芯片读写

  首先需要将这个芯片的硬件电路设计为我们所需要的几S电池。这个芯片从实际的硬件电路来识别我们的电池的2S还是3S等。
  我这里使用的是2S的锂电池,一节电池电压约4.2V。

首先我们需要熟悉以下这款芯片的通讯协议以及I2C的地址是多少。

在这里插入图片描述
这里我们看到和正常的I2C协议差不多,这样我们直接可以使用
stm的官方的I2C库函数直接进行读写,并且地址分别是0xD6;0xD7。

BQ读函数:

#define BQ25713_ADDR_READ (0XD7)
u8 Read_BQ(u8 Reg)
{
	u8 *Reg_Read = read_buf;
	return HAL_I2C_Mem_Read(&hi2c2,BQ25713_ADDR_READ,(u16)Reg,I2C_MEMADD_SIZE_8BIT,Reg_Read,2,0x10);

}

BQ寄存器是8位的且地址为0xD7,所以在读取寄存器的时候设置为8bit读取,一次读取两个字节。可根据自己需求做更改。

BQ写函数:

#define BQ25713_ADDR_WRITE (0XD6)
u8 Write_BQ(u8 Reg, u16 Data)
{
	//data is big-endian
    write_buf[0] = Data & 0xFF;
    write_buf[1] = (Data>>8) & 0xFF;
	if(!HAL_I2C_Mem_Write(&hi2c2,BQ25713_ADDR_WRITE,(u16)Reg,I2C_MEMADD_SIZE_8BIT,write_buf,2,0x10))
	{
		HAL_Delay(1);
		return 0;
	}
	
	return 1;

}

BQ寄存器是8位的且地址为0xD6,所以在写寄存器的时候设置为8bit写,一次写两个字节。可根据自己需求做更改。

2.芯片初始化

芯片初始化需要先去看看自带的寄存器有哪些:
在这里插入图片描述
在这里插入图片描述
根据自己充电的需求去配置充电模式,实际中没用到可自行删减,这里我们给2S电池充电,主要配置了以下几个寄存器:(括号内为寄存器配置的值)

1、ChargeOption0(0x070E)
配置这个寄存器主要注意这一位PWM_FREQ,需要根据使用的 电感来设置开关频率,我这里设置的 0.8kHZ。
2、ChargeOption1(0xE210)
3、ChargeOption2(0x32BF)
4、ChargeOption3(0x0034)
5、ProchotOption0(0x4A65)
6、ProchotOption1(0x81FF)
7、MaxChargeVoltage(0x20D0)
这个寄存器设置最大的充电电压,我设置成了8.4V。
8、InputVoltage(0x1400)
9、MinSystemVoltage(0x1800)
2S最小系统电压为6144mV(文档中有)
10、IIN_HOST(0x4900)
配置输入电流为多少
11、ADCOption(0xA0FF)
配置ADC采集选项,如果需要读取电池电压和系统电压等需要配置

寄存器定义

#define BQ25713_REG_CHARGE_OPTION_0				0x00
#define BQ25713_REG_CHARGE_OPTION_1				0x30
#define BQ25713_REG_CHARGE_OPTION_2				0x32
#define BQ25713_REG_CHARGE_OPTION_3				0x34
#define BQ25713_REG_CHARGE_CURRENT				0x02
#define BQ25713_REG_MAX_CHARGE_VOLTAGE			0x04
#define BQ25713_REG_PROCHOT_OPTION_0			0x36
#define BQ25713_REG_PROCHOT_OPTION_1			0x38
#define BQ25713_REG_ADC_OPTION					0x3A
#define BQ25713_REG_CHARGER_STATUS				0x20
#define BQ25713_REG_PROCHOT_STATUS				0x22
#define BQ25713_REG_IIN_DPM						0x24
#define BQ25713_REG_ADC_VBUS_PSYS				0x26
#define BQ25713_REG_ADC_IBAT					0x28
#define BQ25713_REG_ADC_CMPIN_IIN				0x2A
#define BQ25713_REG_ADC_VSYS_VBAT				0x2C
#define BQ25713_REG_OTG_VOLTAGE					0x06
#define BQ25713_REG_OTG_CURRENT					0x08
#define BQ25713_REG_INPUT_VOLTAGE				0x0A
#define BQ25713_REG_MIN_SYSTEM_VOLTAGE			0x0C
#define BQ25713_REG_IIN_HOST					0x0E
#define BQ25713_REG_MANUFACTURER_ID				0x2E
#define BQ25713_REG_DEVICE_ADDRESS				0x2F

BQ初始化:

u8 BQ25713_Init(void)
{
    if(Write_BQ(BQ25713_REG_CHARGE_OPTION_0,0x070E)) return 1;
    if(Write_BQ(BQ25713_REG_MAX_CHARGE_VOLTAGE,0x20D0)) return 1;
    if(Write_BQ(BQ25713_REG_INPUT_VOLTAGE,0x1400)) return 1;
    if(Write_BQ(BQ25713_REG_MIN_SYSTEM_VOLTAGE,0x1800)) return 1;
	if(Write_BQ(BQ25713_REG_IIN_HOST,0x4900)) return 1;
	if(Write_BQ(BQ25713_REG_CHARGE_OPTION_1 ,0xE210)) return 1;
	if(Write_BQ(BQ25713_REG_CHARGE_OPTION_2,0x32BF)) return 1;
    if(Write_BQ(BQ25713_REG_CHARGE_OPTION_3,0x0034)) return 1;
	if(Write_BQ(BQ25713_REG_PROCHOT_OPTION_0,0x4A65)) return 1;
    if(Write_BQ(BQ25713_REG_PROCHOT_OPTION_1,0x81FF)) return 1;
    if(Write_BQ(BQ25713_REG_ADC_OPTION,0xA0FF)) return 1;
	return 0}

2.充电配置

这里我们给2S的电池充电,充电电压设置为8.4V,充电电流为1.5A左右。可根据自己的需求进行电压和电流的配置,切记功率不可调大了,否则充电可能会损坏。

充电电压设置:
在这里插入图片描述

u8 Set_Charge_Voltage(u16 Voltage_mV)
{
	u16 buff=0;
	if(Voltage_mV>12000) return 1;
	if((Voltage_mV%8)==0)
	{
		buff=Voltage_mV/8;
	}
	else
	{
		buff=(u16)(Voltage_mV/8)+1;
	}

	if(Write_BQ(BQ25713_REG_CHARGE_CURRENT,(buff<<3))) return 1;
	return 0;
}

根据寄存器每一位的电压宽度来进行计算,最后写入寄存器。

充电电流设置:

在这里插入图片描述

u8 Set_Charge_Current(u16 Current_mA)
{
	u16 buff=0;
	if(Current_mA>3000) return 1;
	if((Current_mA%64)==0)
	{
		buff=Current_mA/64;
	}
	else
	{
		buff=(u16)(Current_mA/64)+1;
	}

	if(Write_BQ(BQ25713_REG_CHARGE_CURRENT,(buff<<6))) return 1;
	return 0;
}

根据寄存器每一位的电流宽度来进行计算,最后写入寄存器。


总结

本节介绍的BQ芯片的初始化和寄存器的读写等配置,其他寄存器的使用暂时还没说明,有需要的小伙伴可私信我。

创作不易,请大佬们点个赞!
有问题请留言讨论!
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值