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.

[参考译文] CCS/BQ24160:BQ24160未对电池充电、未达到控制/电池电压寄存器中设置的稳压电压

Guru**** 2518610 points
Other Parts Discussed in Thread: BQ24160, MSP430F5659

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/730770/ccs-bq24160-bq24160-not-charging-battery-to-regulation-voltage-set-in-control-battery-voltage-register

器件型号:BQ24160
主题中讨论的其他器件: MSP430F5659BQ2416

工具/软件:Code Composer Studio

我正在使用 BQ24160电池充电器为3.7锂聚合物电池充电、但看不到它达到控制/电池电压寄存器(03)中设置的全电压。  我使用 I2C 总线将该值设置为3.8V、然后每秒将看门狗计时器复位设置为状态/控制寄存器。  电池充电至默认的3.6V、但随后停止充电。

我可以使用 CV/CC 电源手动将电池充电至4.0V、而不会出现任何问题。

我将向从地址0x6B 发送一个寄存器字节和一个数据字节。  我已经用 示波器查看了 BQ24160的 I2C 命令、它们看起来是正确的、BQ24160 ACK 所有命令。

我安装了由 BGATE 控制的外部 FET。  SYS 电压为3.9V、BAT 电压通常约为3.58V~3.68V。

希望有人能够深入了解问题所在。  我不确定当电池电压低于稳压电压时应发生什么情况。  我假设电池充电器尝试维持3.8V。

下面是我 在 MSP430F5659上使用的代码:

unsigned int BQ2416_RESET[]   ={0x02、0x80};   //控制寄存器>将所有寄存器重置为默认值
unsigned int BQ2416_defaults[]={0x02、0x0D};   //控制寄存器>进入高阻态模式、默认值
unsigned int BQ2416_CURRENT[] ={0x02、0x2C};   //控制寄存器>保持高阻态模式、500mA 电流限制
unsigned int BQ2416_VOLT[] ={0x03、0x3C};   //电池电压寄存器>充电电压= 3.8V

// I2C 写入电池充电器
void I2C_write (int byteCount、unsigned int * data)

   B1_Tx_Data =数据;                             // TX 数据数组地址
   B1_ByteCtr =字节计数;                        //加载 TX 字节计数器
   UCB1IE |= UCTXIE;                              //启用 TX 中断
   UCB1CTL1 |= UCTR | UCTXSTT;                    // I2C TX,启动条件
   _delay_cycles (1500);                           //允许传输完成
   while (UCB1STAT 和 UCBBUSY);                    //等待传输完成


//电池初始化
空 initBattery (空)

   P8DIR |= BIT5 | BIT6;                          // P8.5到 UCB1SDA 和
   P8SEL |= BIT5 | BIT6;                          // P8.6至 UCB.S.

   UCB1CTL1 |= UCSWRST;                           //启用 SW 复位
   UCB1CTL0 = UCMST | UCMODE_3 | UCSYNC;          // I2C 主器件、同步模式
   UCB1CTL1 = UCSSEL_2 | UCSWRST;                 //使用 SMCLK、保持软件复位
   UCB1BR0 = 40;                                  // fSCL = SMCLK/40 =~100kHz
   UCB1BR1 = 0;                                   //字的高字节
   UCB1I2CSA = 0x6B;                              // BQ24160从地址为6Bh
   UCB1CTL1 &=~UCSWRST;                          //清除 SW 复位,恢复运行
   UCB1IE |= UCNACKIE | UCTXIE;                   //启用 TX 中断、NACK 中断
   UCB1IFG &=~UCTXIFG;                           //清除 USCI_B1 TX 中断标志

   //控制寄存器>将所有寄存器重置为默认值(0x02、0x80)
   I2C_WRITE (2、BQ2416_RESET);                    // I2C 将数据写入寄存器

   //控制寄存器>进入高阻态模式、默认值(0x02、0x0D)
   I2C_WRITE (2、BQ2416_DEFAULTS);                 // I2C 将数据写入寄存器

   //控制寄存器>离开高阻态模式、500mA 电流限制(0x02、0x2C)
   I2C_WRITE (2、BQ2416_Current);                  // I2C 将数据写入寄存器

   //电池电压寄存器>充电电压= 3.8V (0x03、0x3C)
   I2C_WRITE (2、BQ2416_VOLTAGE);                  // I2C 将数据写入寄存器


#pragma vector = USCI_B1_Vector
_interrupt void USCI_B1_ISR (void)

 switch (__evo_in_range (UCB1IV、12))
 {
 情况 0:中断;                                      //向量 0:无中断
 情况 2:中断;                                      //向量 2:ALIFG
 情况 4:中断;                                      //向量 4:NACKIFG
 情况 6:中断;                                      //向量 6:STTIFG
 情况 8:中断;                                      //向量 8:STPIFG
 情况10:                                             //向量10:RXIFG
   if (UCB1STAT 和 UCNACKIFG)                          //如果从器件发送 NACK 则发送 STOP
   {
       UCB1CTL1 |= UCTXSTP;
       UCB1STAT &=~UCNACKIFG;
   }
   中断;
 情况12:                                             //向量12:TXIFG
     if (B1_ByteCtr)                                  //检查 TX 字节计数器
     {
       UCB1TXBUF =* B1_Tx_Data++;                     //加载 TX 缓冲区
       B1_ByteCtr -;                                  //减量 TX 字节计数器
     }
     其他
     {
       UCB1CTL1 |= UCTXSTP;                           // I2C 停止条件
       UCB1IFG &=~UCTXIFG;                           //清除 USCI_B1 TX 内部标志
     }
   默认值:break;
 }


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bill、

    充电器看起来处于默认模式。 您将输入电流设置为500mA、充电电流默认为1A。 在电池电压达到最小系统电压之前、充电器处于线性充电模式。 电池充电器应处于 Vin 动态电源管理(DPM)模式。 您能否使用不同的设置检查充电器终端的输入电压和电流大小? 您还可以在写入后读回寄存器吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Bill、

    要添加到 Eric 的评论:

    在您的代码中、我看不到充电器的看门狗计时器正在复位。 与 MSP430一样、充电器还具有内部看门狗计时器、可将充电参数重置为默认值。

    我只是添加一个周期(<30s)写入来通过寄存器00[7](TMR_RST 位)复位看门狗定时器。

    此致、

    Joel H

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉、我没有布置重置看门狗的主循环。 以下是电池的代码和 ISR:

    void main (void)

    WDTCTL = WDTPW + WDTHOLD; //禁用 WDT
    __bis_SR_register( GIE ); //启用全局中断

    //设置和初始化
    initGPIO();
    initClocks();
    initBatter();
    initClockTo16MHz();

    while (1)

    //为清晰起见,删除了代码
    BatteryWD();



    ####################
    外设.c
    ####################
    #include
    #include "peripherals.h"

    unsigned int BQ2416_RESET[]={0x02、0x80};//控制寄存器>将所有寄存器重置为默认值
    unsigned int BQ2416_defaults[]={0x02、0x0D};//控制寄存器>进入高阻态模式、默认值
    unsigned int BQ2416_CURRENT[]={0x02、0x2C};//控制寄存器>保持高阻态模式、500mA 电流限制
    unsigned int BQ2416_VOLT[]={0x03、0x3C};//电池电压寄存器>充电电压= 3.8V

    // I2C 写入电池充电器
    void I2C_write (int byteCount、unsigned int * data)

    B1_Tx_Data =数据; // TX 数据数组地址
    B1_ByteCtr =字节计数; //加载 TX 字节计数器
    UCB1IE |= UCTXIE; //启用 TX 中断
    UCB1CTL1 |= UCTR | UCTXSTT; // I2C TX、启动条件
    _delay_cycles (1500); //允许传输完成
    while (UCB1STAT 和 UCBBUSY); //等待传输完成


    //电池初始化
    空 initBattery (空)

    P8DIR |= BIT5 | BIT6; // P8.5到 UCB1SDA 和
    P8SEL |= BIT5 | BIT6; // P8.6至 UCB.S.

    UCB1CTL1 |= UCSWRST; //启用 SW 复位
    UCB1CTL0 = UCMST | UCMODE_3 | UCSYNC; // I2C 主设备,同步模式
    UCB1CTL1 = UCSSEL_2 | UCSWRST;//使用 SMCLK、保持软件复位
    UCB1BR0 = 40; // fSCL = SMCLK/40 =~100kHz
    UCB1BR1 = 0; //字的高字节
    UCB1I2CSA = 0x6B; // BQ24160从地址为6Bh
    UCB1CTL1 &=~UCSWRST; //清除 SW 复位,恢复操作
    UCB1IE |= UCNACKIE | UCTXIE; //启用 TX 中断、NACK 中断
    UCB1IFG &=~UCTXIFG; //清除 USCI_B1 TX 中断标志

    //控制寄存器>将所有寄存器重置为默认值(0x02、0x80)
    I2C_WRITE (2、BQ2416_RESET); // I2C 将数据写入寄存器

    //控制寄存器>进入高阻态模式、默认值(0x02、0x0D)
    I2C_WRITE (2、BQ2416_DEFAULTS); // I2C 将数据写入寄存器

    //控制寄存器>离开高阻态模式、500mA 电流限制(0x02、0x2C)
    I2C_WRITE (2、BQ2416_Current); // I2C 将数据写入寄存器

    //电池电压寄存器>充电电压= 3.8V (0x03、0x3C)
    I2C_WRITE (2、BQ2416_VOLTAGE); // I2C 将数据写入寄存器


    //电池看门狗
    空 BatteryWD (空)

    B1_Tx_Data[0]= 0x00; //电池电压寄存器
    B1_Tx_Data[1]= 0x80; //重置看门狗计时器
    B1_ByteCtr = 2; //加载 TX 字节计数器
    UCB1IE |= UCTXIE; //启用 TX 中断
    UCB1CTL1 |= UCTR | UCTXSTT; // I2C TX、启动条件
    _delay_cycles (2000); //允许传输完成


    ///----------------------------------
    // USCIB1_ISR 的结构使其可用于传输任何数据
    //预加载带有字节计数的 TXByteCtr 的字节数。
    ///----------------------------------
    #pragma vector = USCI_B1_Vector
    _interrupt void USCI_B1_ISR (void)

    switch (__evo_in_range (UCB1IV、12))

    情况0:中断; //向量0:无中断
    案例2:中断; //向量2:ALIFG
    案例4:中断; //向量4:NACKIFG
    案例6:中断; //向量6:STTIFG
    案例8:中断; //向量8:STPIFG
    案例10: //向量10:RXIFG
    IF (UCB1STAT 和 UCNACKIFG) //如果从器件发送 NACK,则发送 STOP

    UCB1CTL1 |= UCTXSTP;
    UCB1STAT &=~UCNACKIFG;

    中断;
    情况12: //向量12:TXIFG
    IF (B1_ByteCtr) //检查 TX 字节计数器

    UCB1TXBUF =* B1_Tx_Data++;//加载 TX 缓冲区
    B1_ByteCtr --; //测量 TX 字节计数器

    其他

    UCB1CTL1 |= UCTXSTP; // I2C 停止条件
    UCB1IFG &=~UCTXIFG; //清除 USCI_B1 TX int 标志

    默认值:break;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Eric、我用示波器查看了充电器 SW 输出、它似乎正在生成开关波形。 我假设它不处于线性调节模式。 我将进行更多测量并尽快发布。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bill、

    问题是否已解决?