Thread 中讨论的其他器件: BQ25790
工具与软件:
我目前正在执行一个项目、该项目使用 BQ25672通过太阳能电池板输入来为电池充电和监控电池。 不过、VBUS 和 VBAT 的 ADC 读数会出现一致的偏移。 下面是对设置和我所面临问题的总结:
-
电池规格:
- 标准容量:3600 mA 454.
- 标称电压:3.2V
- 充电截止电压:3.65±0.05V
- 最大充电电流:3.6A
-
太阳能电池板规格:
- 开路电压(VOC):6.1V±10%
- 短路电流(ISC):400 mA±5%
- 最大功率点时的电压:5V±10%
- 最大功率点时的电流:380 mA±5%
为了模拟充电和测试过程、我将为电池和太阳能电池板输入使用外部电源。
问题描述:
我观察到针对 VBUS 和 VBAT 的 ADC 读数中有一个大约600mV 的线性偏移。 具体而言:
- 当任一输入均未施加电压时、ADC 的正确读数为0V。
- 不过、当我施加已知电压时、ADC 读数始终比直接在引脚上测量的实际施加电压低600mV。


代码和配置:
对于驱动程序、我将遵循bq25790_charger库的示例并将其调整为 BQ25672。 我还将寄存器配置为 BQ25790示例的初始值、在自定义初始化功能中设置了特定的电荷限制。 以下是我用于读取 VBAT 的代码:
*/./...../......
*
*@简报读取 bq25672的 VBAT ADC 值、从而提供 BAT 电压。
*
*@param bq -指向 bq25672器件结构的指针。
*
二○○○年三月六日(星期一 /
int bq25672_READ_VBAT_ADC (结构 bq25672_DEVICE * bq){
uint8_t buffer[2]={0};
uint16_t data=0;
Int ret;
uint8_t ADC_ENABLE = 0x84;
RET = i2c_write_register (bq->address、REG2E_ADC_Control、&ADC_ENABLE);
如果(ret!= BQ25672_SUCCESS){
printf ("启用 ADC 失败。 错误:%d\n"、ret);
回流塔;
}
//读取 msb 和 lsb
RET = READ_MULTI_REGISTERS (bq->address、REG3B_VBAT_ADC_MSB、buffer、2);
HAL_DELAY (50);
如果(ret == BQ25672_SUCCESS){
DATA =(BUFFER[0]<< 8)| BUFFER[1];
其他{
printf ("读取电池电压失败\n");
}
返回数据* BQ25672_ADC_VOLT_STEP_mV;
}
此外、以下是主寄存器的初始配置:
结构 bq25672_st_reg BQ25672_regs[]={
{REG05_REG24 Input_Voltage_Limit、0x24}、
{REG06_REG05B Input_Current_Limit_、0x01}、
{REG07_LOSB, Input_Current_Limit_ 0x2C}、
{REG08_REG08_0xc3 Precharge_Control}、
{REG09_EVM Termination_Control、0x5}、
{REG0B_VOTG_regulation、0xdc}、
{REG0D_IOTG_regulation、0x4b}、
{REG0E_3D Timer_Control、0x3D}、
{REG0F_REG0 Charger_Control_、0xa2}、
{REG10_REG10_1 Charger_Control_、0x85}、
{REG11_0x40}、Charger_Control_ 2
{REG12_REG3 Charger_Control_、0x12}、
{REG14_REG5 Charger_Control_、0x16}、
{REG15_MPPT_Control、0xAA}、
{REG16_RE0、Temperature_Control}、
{REG17_NTC_Control_0、0x7a}、
{REG18_NTC_Control_1、0x54}、
{REG19_ICO_EVM Current_Limit、0x0}、
{REG1B_RE0 Charger_Status_、0x0}、
{REG1C_REDF1 Charger_Status_、0x0}、
{REG1D_REG0、Charger_Status_ 2、0x0}、
{REG1E_REG0 Charger_Status_ 3、0x0}、
{REG1F_REG0 Charger_Status_ 4、0x0}、
{REG20_FAULT_Status_0、0x0}、
{REG21_FAULT_Status_1、0x0}、
{REG22_RE0 Charger_Flag_、0x0}、
{REG23_DSP Charger_Flag_ 1、0x0}、
{REG24_REG2 Charger_Flag_、0x0}、
{REG25_DSP Charger_Flag_ 3、0x0}、
{REG26_FAULT_Flag_0、0x0}、
{REG27_FAULT_Flag_1、0x0}、
{REG28_RE0 Charger_Mask_、0x0}、
{REG29_DSP Charger_Mask_ 1、0x0}、
{REG2A_DSP Charger_Mask_ 2、0x0}、
{REG2B_RE0 3、Charger_Mask_}、
{REG2C_FAULT_MASK_0、0x0}、
{REG2D_FAULT_MASK_1、0x0}、
{REG2E_ADC_Control、0x40}、
{REG2F_ADC_ADC0 Function_Disable_、0x0}、
{REG30_ADC_0x0 1、Function_Disable_}、
{REG31_IBUS_ADC_MSB、0x0}、
{REG32_IBUS_ADC_LSB、0x0}、
{REG33_IBAT_ADC_MSB、0x0}、
{REG34_IBAT_ADC_LSB、0x0}、
{REG37_VAC1_ADC、0x0}、
{REG39_VAC2_ADC、0x0}、
{REG3B_VBAT_ADC_MSB、0x0}、
{REG3C_VBAT_ADC_LSB、0x0}、
{REG35_VBUS_ADC_MSB、0x0}、
{REG36_VBUS_ADC_LSB、0x0}、
{REG3F_TS_ADC、0x0}、
{REG41_TDIE_ADC、0x0}、
{REG43_ADC_DP、0x0}、
{REG45_ADC_DM、0x0}、
{REG47_DPDM_DRV、0x0}、
{REG48_RE0、Part_Information}、
};
故障排除尝试次数:
- 换算系数验证 :我已经确保使用了数据表中指定的正确 ADC 电压步长(1mV)。 不过、这看起来不会影响失调电压。
- ADC 稳定延迟 :我已经尝试增加稳定延迟启用 ADC 后,没有成功。
您能帮助我确定该失调电压的可能原因吗? ADC 中是否有可以校准或补偿的内部偏移? 或者是否有特定于 BQ25672的配置设置可能导致这种偏移?
提前感谢您提供任何指导。
