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.

[参考译文] BQ25180:BQ25180未在按下按钮时退出运输模式

Guru**** 2512815 points
Other Parts Discussed in Thread: BQ25180

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1309467/bq25180-bq25180-not-exit-shipmode-with-button-press

器件型号:BQ25180

我使用 IC BQ25180开发了一个 PCB。

所用电路如下图所示。 (VBUS 由 USB 提供)

我通过 I2C 进行通信、并在电路板初始化时使用以下值设置寄存器:

static void BQ25180_SetDefaultConfiguration(void)
{  
    BQ25180_Register_VBAT_CTRL registerVBAT_CTRL;
    BQ25180_Register_ICHG_CTRL registerICHG_CTRL;
    BQ25180_Register_CHARGECTRL0 registerCHARGECTRL0;
    BQ25180_Register_CHARGECTRL1 registerCHARGECTRL1;
    BQ25180_Register_IC_CTRL registerIC_CTRL;
    BQ25180_Register_TMR_ILIM registerTMR_ILIM;
    BQ25180_Register_SHIP_RST registerSHIP_RST;
    BQ25180_Register_SYS_REG registerSYS_REG;
    BQ25180_Register_TS_CONTROL registerTS_CONTROL;
    BQ25180_Register_MASK_ID registerMASK_ID;  

    /* VBAT_CTRL Register */
    registerVBAT_CTRL.VBATREG = 0x46; //regulation in 4.2V | Battery Regulation Voltage VBATREG= 3.5V + VBATREG_CODE * 10mV
    BQ25180_WriteRegister(BQ25180_REGISTER_VBAT_CTRL, (uint8_t *)&registerVBAT_CTRL, sizeof(registerVBAT_CTRL));

    /* ICHG_CTRL Register */
    registerICHG_CTRL.CHG_DIS = 0b0; // Battery Charging Enabled
    registerICHG_CTRL.ICHG = 0x4D; // Battery Charging programmable current = 500mA
    BQ25180_WriteRegister(BQ25180_REGISTER_ICHG_CTRL, (uint8_t *)&registerICHG_CTRL, sizeof(registerICHG_CTRL));

    /* CHARGECTRL0 Register */    
    registerCHARGECTRL0.IPRECHG = 0b1; // Precharge is Term
    registerCHARGECTRL0.ITERM = 0b10; // Termination current = disable
    registerCHARGECTRL0.VINDPM = 0b11; // VINDPM Level Selection = Disable
    registerCHARGECTRL0.THERM_REG = 0b11; // Thermal Regulation Threshold = Disable
    BQ25180_WriteRegister(BQ25180_REGISTER_CHARGECTRL0, (uint8_t *)&registerCHARGECTRL0, sizeof(registerCHARGECTRL0));

    /* CHARGECTRL1 Register */
    registerCHARGECTRL1.IBAT_OCP = 0b11; // Battery Discharge Current Limit = Disable
    registerCHARGECTRL1.BUVLO = 0b011; // Battery Undervoltage LockOut Falling Threshold = 2.8V
    registerCHARGECTRL1.CHG_STATUS_INT_MASK = 0b1; // Disable Charging Status Interrupt
    registerCHARGECTRL1.ILIM_INT_MASK = 0b1; // Disable ILIM Fault Interrupt
    registerCHARGECTRL1.VDPM_INT_MASK = 0b1; // Disable VINDPM and VDPPM Interrupt
    BQ25180_WriteRegister(BQ25180_REGISTER_CHARGECTRL1, (uint8_t *)&registerCHARGECTRL1, sizeof(registerCHARGECTRL1));

    /* IC_CTRL Register */   
    registerIC_CTRL.TS_EN = 0b0; // TS Auto Function = Disable
    registerIC_CTRL.VLOWV_SEL = 0b0; // Precharge Voltage Threshold (VLOWV) = 3V
    registerIC_CTRL.VRCH_0 = 0b0; // Recharge Voltage Threshold = 100mV
    registerIC_CTRL.TMRSLW_EN = 0b0; // Timer Slow = The timer is not slowed at any time
    registerIC_CTRL.SAFETY_TIMER = 0b11; // Disable safety timer
    registerIC_CTRL.WATCHDOG_SEL = 0b11; // Disable watchdog function
    BQ25180_WriteRegister(BQ25180_REGISTER_IC_CTRL, (uint8_t *)&registerIC_CTRL, sizeof(registerIC_CTRL));

    /* TMR_ILIM Register */
    registerTMR_ILIM.MR_LPRESS = 0b00; // Push button Long Press duration timer 5s
    registerTMR_ILIM.MR_RESET_VIN = 0b0; // Hardware reset condition = Reset sent when long press duration is met
    registerTMR_ILIM.AUTOWAKE = 0b01; // Auto Wake Up Timer Restart = 1s
    registerTMR_ILIM.ILIM = 0b101; // Input Current Limit Setting = 500mA(max.)
    BQ25180_WriteRegister(BQ25180_REGISTER_TMR_ILIM, (uint8_t *)&registerTMR_ILIM, sizeof(registerTMR_ILIM));

    /* SHIP_RST Register */ 
    registerSHIP_RST.REG_RST = 0b0; // Software Reset = Do nothing
    registerSHIP_RST.EN_RST_SHIP = 0b00; // Shipmode Enable and Hardware Reset = Do nothing
    registerSHIP_RST.PB_LPRESS_ACTION = 0b00; // Pushbutton long press action = Do nothing
    registerSHIP_RST.WAKE1_TMR = 0b00; // Wake 1 Timer Set = 300ms
    registerSHIP_RST.WAKE2_TMR = 0b00; // Wake 2 Timer Set = 2s
    registerSHIP_RST.EN_PUSH = 0b1;
    BQ25180_WriteRegister(BQ25180_REGISTER_SHIP_RST, (uint8_t *)&registerSHIP_RST, sizeof(registerSHIP_RST));
    
    /* SYS_REG Register */ 
    registerSYS_REG.SYS_REG_CTRL = 0b111; // SYS Regulation Voltgage = Pass-Through (VSYS is VIN)
    registerSYS_REG.SYS_MODE = 0b00; // SYS powered from VIN if present or VBAT
    registerSYS_REG.WATCHDOG_15S_ENABLE = 0b00; // I2C Watchdog = Disable
    registerSYS_REG.VDPPM_DIS = 0b0; // Enable VDPPM
    BQ25180_WriteRegister(BQ25180_REGISTER_SYS_REG, (uint8_t *)&registerSYS_REG, sizeof(registerSYS_REG));

    /* TS_CONTROL Register */
    registerTS_CONTROL.TS_HOT = 0b00; // TS Hot threshold register = 60°C
    registerTS_CONTROL.TS_COLD = 0b00; // TS Cold threshold register = 0°C
    registerTS_CONTROL.TS_WARM = 0b1; // TS Warm threshold = Disabled
    registerTS_CONTROL.TS_COOL = 0b1; // TS Cool threshold register = Disabled
    registerTS_CONTROL.TS_ICHG = 0b0; // Fast charge current when decreased by TS function = 0.5*ICHG
    registerTS_CONTROL.TS_VRCG = 0b0; // Reduced target battery voltage during Warm = VBATREG -100mV
    BQ25180_WriteRegister(BQ25180_REGISTER_TS_CONTROL, (uint8_t *)&registerTS_CONTROL, sizeof(registerTS_CONTROL));

    /* MASK_ID Register */
    registerMASK_ID.TS_INT_MASK = 0b1; // Mask TS Interrupt
    registerMASK_ID.TREG_INT_MASK = 0b1; // Mask TREG Interrupt
    registerMASK_ID.BAT_INT_MASK = 0b1; // Mask BOCP and BUVLO Interrupt
    registerMASK_ID.PG_INT_MASK = 0b1; // Mask PG and VINOVP Interrupt
    BQ25180_WriteRegister(BQ25180_REGISTER_MASK_ID, (uint8_t *)&registerMASK_ID, sizeof(registerMASK_ID));

    ESP_LOGI(TAG, "Registers defined to custom configuration!");

}

在某个点、我会调用以下函数将其置于 SHIPMODE

void BQ25180_SetShipMode(bool enable) {

    BQ25180_Register_SHIP_RST registerSHIP_RST;
      
    if(true == enable) {       
        registerSHIP_RST.PB_LPRESS_ACTION = 0b01; // Pushbutton long press action = Hardware Reset
        registerSHIP_RST.EN_RST_SHIP = 0b10; // Enable shipmode with wake on button press or adapter insert
        
        ESP_LOGW(TAG, "Ship mode will be set to ON!");
    }
    else {

        registerSHIP_RST.PB_LPRESS_ACTION = 0b00; // Pushbutton long press action = Do nothing       
        registerSHIP_RST.EN_RST_SHIP = 0b00; // Do nothing      

        ESP_LOGW(TAG, "Ship mode will be set to OFF!");
    }

    BQ25180_WriteRegister(BQ25180_REGISTER_SHIP_RST, (uint8_t *)&registerSHIP_RST, sizeof(registerSHIP_RST));   
}

进入 SHIPMODE 时、芯片的行为如预期、输出电压被切断、功耗保持预期状态、但连接 VIN 后只能退出 SHIPMODE 模式。

您能告诉我我哪里出了问题吗? 如果您有任何问题或必要的测试、我可以随时为您提供帮助。

我尝试更改 registerSHIP_RST 的值。 en_push 但未成功。

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

    您好、Gustavo、

    欢迎使用 E2E!  

    有趣的是、`SetShipMode`的函数看起来是正确的。 您是否能够在 TS/MR 引脚上提供一些电压波形? 当您按下按钮时、它应该有一些脉冲并拉至0V。  

    我也对 TS/MR 引脚上的您的电路很好奇。 这是否用于向 ESP32指示按钮已被按下? 我怀疑这可能会影响 BQ25180的推送检测。  

    此致、

    安东尼·范

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

    我采取了所要求的措施。

    但是、要进行测量、我必须移除下拉电阻器、因为没有下拉电阻器就无法看到波形。

    可以注意到、当按下按钮时、信号变为"低电平"。

    使用两个二极管和一个按钮的想法是、它们可以将两个不同的信号接地、而不会影响另一个信号。 按下按钮时接地的信号是平台上使用的通用按钮。

    当器件处于运输模式时、"Button"处没有信号。 OUT0"、因为"+3V3"电源未通电。

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

    识别按钮被按下的阈值是多少?

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

    您好、Gustavo、  

    按钮按压的阈值为90mV。 当器件处于运输模式且未按下按钮时、TS/MR 引脚上是否有数据? 如果您可以使用 Salae (如果这是 Salae)进行测量、并将引脚配置为模拟输入、而不是数字输入、那会很好。 您还能将 SYS 电压作为模拟输入进行测量吗?

    我希望 TS/MR 引脚会像您在未按下按钮并且器件处于运输模式时那样脉动。  

    使用两个二极管和一个按钮的想法是它们可以接地两个不同的信号,而不会影响另一个信号。 按下按钮时接地的信号是平台上使用的通用按钮。

    是否用于为 ESP32提供 A 信号以便您可以根据按钮执行其他命令? 或者它是否已将 ESP32引脚配置为输出?

    完成上述测量后、如果您有能力、是否可以尝试以下方法:

    1. 将 ESP32.OUT0配置为无上拉的输入
    2. 拆下 D3、D4、R23
    3. 短接 D3、D4所在的焊盘、使 BQ25180_TSMR = ESP32.OUT0 = 电容器 C4上的电压

    TSMR 应钳制在3.3V、这样就不会损坏您的 ESP32 GPIO 引脚(如果您担心此问题、请将 C4替换为55k 电阻器)。  

    如果您可以查看代码是否现在正常运行、并且可以通过按下按钮退出运输模式、测量结果会很好。

    我怀疑 BQ25180上的按钮检测例程出现了不理想的电路行为。

    我知道这是很多所以让我知道是否有任何问题或是否需要图片.  

    此致、

    安东尼·范