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/TMS320F28027: Low Power Mode

Part Number: TMS320F28027
Other Parts Discussed in Thread: DRV8305,

Tool/software: Code Composer Studio

Hello,

I've been trying to achieve current draw numbers (IDDIO) while on Standby mode, as mentioned on the datasheet. Unfortunately I can't seem to go below 40mA. The datasheet does mention it is possible to achieve 7mA.

I've tried running the Ipm_standbywake example to measure current draw and that too the minimum current draw was 43.8mA.

Can anyone explain how I can reduce the current draw further?

Thank you.

  • Hi Rezwan,

    It is important when measuring current to understand how/at what point you are measuring the current from.

    Are you using custom hardware? LaunchPad? ControlCard
    What supply are you measuring the current on?
    Are you using the internal VREG to supply the 1.8 V VDD Core voltage? are you supplying the 1.8 V separate from the 3.3 V VDDIO supply?

    The currents stated in the Datasheet were measured using dedicated hardware that measures the current of the MCU alone; no external hardware is involved. Our EVMs do not necessarily provide a dedicated point at which the MCU power consumption can be measured without modification. If you are supplying 5 V or 3.3 V to an EVM and measuring the current on your supply, you are also measureing the current consumed by other components on the EVM. naturally this will be higher than just the MCU current. depending on the HW, you may be able to modify or attach wires in order to measure just the MCU current, but I cannot give you this information without knowing the HW you are using.

    -Mark
  • Hi Mark,

    I'm using a custom board with DRV8305 for BLDC motor control with the help of InstaSPIN. I'm using the internal VREG to supply 1.8V and a linear 3.3V power supply.
    I've been measuring current at the VDDIO and VDDA pins to compare readings to the datasheet.

    I read on the datasheet that the baseline IDD current is likely to be 45mA when the core is executing a dummy loop with no peripherals enabled. Could you explain this operation? Is it possible to disable this dummy loop?

    Thank you,
    Rezwan
  • Rezwan,

    The dummy loop is what we typically refer to as a simple while(1) loop with nothing else operating. This would be programmed intentionally to see the estimated current in this situation, and not something you need to disable.

    Can you provide your method for entering LPM? You don't need to share any code, just walk me through the steps your application is following in the instructions leading up to LPM.

    -Mark
  • Hi Mark,

    Thank you for your input so far.

    Rezwan and I are working on the same project, and I'll try to answer some of your questions. To add to what Rezwan has said so far, our custom board closely follows the reference system design, similar to Launchpad XL with TMS320F28027F & DRV8305.

    We use HAL libraries + InstaSPIN for our development. To put the system into low power mode we follow these steps (In semi-pseudo code).

    // Turn off motor, this causes HAL_disablePwm() to be called in the main loop
    gMotorVars.Flag_enableSys = false;
    gMotorVars.Flag_Run_Identify = false;
    
    // Wait about 500 ms + do some other unrelated work
    
    // Disable ADC interrupts
    ADC_disableInt() // Probably overkill and not needed
    
    // Put drv8305 to sleep
    GPIO_setLow(drv8305 EN_GATE_PIN);
    GPIO_setLow(drv8305 WAKE_PIN);
    gDrvSpi8305Vars.WriteCmd = true;
    gDrvSpi8305Vars.Ctrl_Reg_09.SLEEP = true;
    HAL_writeDrvData(halHandle, &gDrvSpi8305Vars);
    gDrvSpi8305Vars.Ctrl_Reg_09.SLEEP = false;
    
    // Goto halt or sleep LPM, previously configured using PWR_setLowPowerMode()
    IDLE; // This is where we are expecting low current consumption
    
    // Wake up from halt/sleep, previously configured to be caused by a GPIO button press
    GPIO_setHigh(drv8305 WAKE);
    HAL_enableDrv(halHandle);
    
    // Enable ADC interrupts
    ADC_enableInt()

    With this, so far we have seen these numbers in our custom board,

    • 68mA - No sleep mode (infinite loop) + motor off
    • 42mA - Standby sleep mode + motor off
    • 37mA - Halt sleep mode + motor off

    As previously mentioned by Rezwan, we have also tested the lpm_standbywake example in the Launchpad and our custom board (very similar to the reference design), and saw same (+- 1mA) numbers.

    Hope this gives you more clarification as to what we are trying to do. And as always, I really appreciate any direction you can give us.

    Thanks,
    Abir

  • Abir, Rezwan,

    This really does sound like you are measuring more than just the device current. Please confirm that there is nothing else between your Ammeter and the MCU.
    Can you also power down the Analog Circuitry on the device as well as the flash?

    -Mark
  • Hi Mark,

    The only circuitry between the MCU, ammeter and Power Supply (12/24V DC) is a 3.3V Regulator (Part# AOZ1282CI) which has a quiescent current rating of 1.5mA.
    We've measured current draw on the input and output of the 3.3 Regulator and have found it to be identical (+/- 2mA).
  • Hi Mark,

    I thought the analog circuitry will be off in Halt LPM? Am I understanding that wrong?

    Thanks, Abir
  • Abir,

    Only the clocks are disabled, you can try to decrease power consumption further by using the ADC power down procedure. It would require a power up again after halt mode is released. Similarly for the flash bank.

    -Mark
  • Abir,

    I haven’t heard from you for more than a week, so I’m assuming you were able to resolve your issue. If this isn’t the case, please reject the suggested resolution and reply to this thread with more information or questions. If this thread locks, please click the "Ask a related question" button and in the new thread describe the current status of your issue and any additional details you may have to assist us in helping to solve your issues.

    Regards,
    Mark
  • Hi Mark,

    Sorry for the late update. We have been working based on your suggestions and found excellent results. As you said, disabling the ADC analog side + flash bank resulted in the desired power reductions. Right now, in sleep LMP we are observing ~2.8mA comsumption. Here is the code fragments I added,

    ADC_disableRefBuffers(obj->adcHandle);
    ADC_disableBandGap(obj->adcHandle);
    ADC_powerDown(obj->adcHandle);
    FLASH_setPowerMode(obj->flashHandle, FLASH_PowerMode_PumpAndBankSleep); // IDLE is inside this
    // Now re-enable the ADC again

    I had to modify the FLASH_setPowerMode() function by adding a IDLE command just before the return. Otherwise, if the IDLE is outside of this function, the device would just re-enable the flash bank before going to sleep.

    Now though, we are facing another issue, for which I have made this forum post, kindly take a look if you can.

    Thanks a lot for your help on this issue Mark.

    Abir

  • Abir,

    Glad that you have things running!

    Just a thought on why the flash wakes up if it is placed after the return. you likely have your calling function placed in the Flash. you can define this as a RAM func that gets moved into ram with memcopy().

    Looks like your new post got picked up by the proper expert. Thank you for following that procedure! it keeps each thread clean and on single topics.

    Good luck with your design and don't hesitate to post again in the future!

    -Mark