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.

cc2541电池电量检测不正确

Other Parts Discussed in Thread: CC2541, TPS62730

Hi 各位:

    我使用cc2541加tps62730这块芯片做成了一个蓝牙遥控器,并使用函数battMeasure()这个函数去获取电压值,可是不论是新电池还是老电池获取出来的

值都是18或者19,如果加上串口调试的话,能获取出来的电压值跟真事值比较接近,请问各位这个问题怎么解决?是不是在读电池电量时需要做其他的什么

工作?谢谢您的回复

  • Function battMeasure() measure the ADC value of VDD/3. If you are using tps62730, the DC-DC will regulate the VDD. Thus, VDD will not changed much no matter it is new or old battery.

    Have you add the code to control the bypass mode for TPS62730 ?

     

    #if defined ( DC_DC_P0_7 )

     

      // Enable stack to toggle bypass control on TPS62730 (DC/DC converter)

      HCI_EXT_MapPmIoPortCmd( HCI_EXT_PM_IO_PORT_P0, HCI_EXT_PM_IO_PORT_PIN7 );

     

    #endif // defined ( DC_DC_P0_7 )

     

     

    You may need to disable it and bypass TPS62730 to measure the VDD.

    Or, a Hardware changed is needed for measuring the VDD before DC-DC.

  • Hi jerry:

         谢谢你的回复,因为硬件电路上我使用的是p1.2口控制tps,所以我使用的是函数:  HCI_EXT_MapPmIoPortCmd( HCI_EXT_PM_IO_PORT_P1, HCI_EXT_PM_IO_PORT_PIN2 );来控制tps的工作或者旁路状态,我尝试过在读取电压值之前使用:  HCI_EXT_MapPmIoPortCmd( HCI_EXT_PM_IO_PORT_P1, HCI_EXT_PM_IO_PORT_PIN2 );这个函数去让tps变成旁路模式,可是始终读取的数值都是19,之后我做了另外一种尝试,就是直接控制p1.2口的电压,即读取电压值之前将p1.2口变成低电平,读取电压值之后再变成高电平,这样可以读出电压的值,只是比准确的值略低5~6个百分点,不知道我的操作那个步骤有问题,请你指导,谢谢。

  • Before doing VDD measurement. You should:

    1)      disable PM IO port by:
    HCI_EXT_MapPmInOutPortCmd(HCI_EXT_PM_IO_PORT_NONE, HCI_EXT_PM_IO_PORT_PIN2)

    2)      Set P1.2 to low by P1DIR |= 0x04;P1 |= 0x04

    3)      Check battery with battMeasure()

    4)      Set P1.2 to high

    5)      Enable PM IO port by:
    HCI_EXT_MapPmInOutPortCmd(HCI_EXT_PM_IO_PORT_P1, HCI_EXT_PM_IO_PORT_PIN2)

    Pleaes have a look on the doc "TI BLE HCI Vendor Specific HCI Guide.pdf" on details of the command "HCI_EXT_MapPmInOutPortCmd"

  • Hi jerry:

       谢谢你的指导,调好了!呵呵

  • Hi jerry:

        你说的这个函数HCI_EXT_MapPmInOutPortCmd();我试了一下,怎么报出来的是没有定义,我用的是BLE-CC254x-1.3.2这个版本,请问是不是还需要添加头文件什么的?谢谢回复

  • Sorry, it should be HCI_EXT_MapPmIoPortCmd. Not HCI_EXT_MapPmInOutPortCmd();

     

  • 你好, 我按照你的说法 这么改了代码

    if ( events & KFD_BATTERY_CHECK_EVT )
    {
    // Disable stack to toggle bypass control on TPS62730 (DC/DC converter)

    HCI_EXT_MapPmIoPortCmd( HCI_EXT_PM_IO_PORT_NONE, HCI_EXT_PM_IO_PORT_PIN7 );

    //Set P0.7 to low
    P0 &= 0x7F;

    // Restart timer
    if ( BATTERY_CHECK_PERIOD )
    {
    osal_start_timerEx( keyfobapp_TaskID, KFD_BATTERY_CHECK_EVT, BATTERY_CHECK_PERIOD );
    }

    // perform battery level check
    Batt_MeasLevel( );

    //Set P0.7 to high
    P0 |= 0x80;

    // Enable stack to toggle bypass control on TPS62730 (DC/DC converter)

    HCI_EXT_MapPmIoPortCmd( HCI_EXT_PM_IO_PORT_P0, HCI_EXT_PM_IO_PORT_PIN7 );

    return (events ^ KFD_BATTERY_CHECK_EVT);
    }

    但是现在的问题是这样的, 不论我注不注释掉KeyFobApp_Init( uint8 task_id ) 中这段代码:

    #if defined ( DC_DC_P0_7 )

      // Enable stack to toggle bypass control on TPS62730 (DC/DC converter)

      HCI_EXT_MapPmIoPortCmd( HCI_EXT_PM_IO_PORT_P0, HCI_EXT_PM_IO_PORT_PIN7 );

    #endif // defined ( DC_DC_P0_7 )

    显示的电量还是固定的百分之二十多。

    但是只要注释掉上面这段代码 而其他地方不做任何修改 反而可以正常显示

    在原理上理解了为什么会是一直百分之二十多 但是代码又不是这样的

    不知道哪里出了问题

  • 我也在做CC2541获取电池电量,BATT这个例程怎么调用的,麻烦指教一下,