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/TMS320F28027F:TMS320F28027F 的最小功耗是多少

Guru**** 2350610 points
Other Parts Discussed in Thread: TMS320F28027F, TPS54061
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/587930/ccs-tms320f28027f-how-much-is-the-minimum-power-consumption-of-tms320f28027f

器件型号:TMS320F28027F

工具/软件:Code Composer Studio

  TMS320F28027F 的最低功耗是多少?   将 Example_F2802xHaltWake 下载到 TMS320F28027F 中; 测得的电流为5mA。

电源系统用的是TPS54061,该电源在24V供电下静态功耗在测得有256uA。(没有接任何负载)μ A

采用  TPS54061的电源系统、24V 电源供电、 电流消耗为256uA。(无负载)

使用最小系统焊接整个电路板、并下载电路。 Runnng Example_F2802xHaltWake,电流消耗为5mA,然后唤醒 电流消耗 为10mA。

 TMS320F28027F 的最低功耗是多少? 我可以将其减小得更多吗?

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

    器件级功耗信息位于器件数据表中。 www.ti.com/.../tms320f28027.pdf。 有关更多信息、请参阅第5.4节"功耗汇总"和6.1.15低功耗模式。

    HALT 模式是器件的最低功耗状态、基本上比断电高一步、因此您可以做的事情不多。 请验证闪存组已断电、并且您已在 HALT 模式期间禁用内部振荡器(CLKCTL.INTOSC1HALTI 和 CLKCTL.INTOSC2HALTI 均为0 -默认值)。 请注意、如果内部振荡器在 HALT 模式期间关闭、唤醒时间将增加。

    您使用的是什么板? 是定制板吗? 如果是、如何测量器件的功耗? 稳压器输出上是否有任何其他组件?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    源代码:我引用  Example_F2802xHaltWake 并删除 WAKEINT_ISR

    void main (void)

    cpu_handle myCpu;
    pll_handle myPll;
    PWR_Handle myPwr;
    WDOG_Handle myWDog;

    //初始化此应用程序所需的所有句柄
    myClk = CLK_init ((void *) CLK_base_ADDR、sizeof (CLK_Obj));
    myCpu = cpu_init ((void *) NULL、sizeof (cpu_Obj));
    myFlash = flash_init ((void *) flash_base_ADDR、sizeof (flash_Obj));
    myGpio = GPIO_init ((void *) GPIO_base_ADDR、sizeof (GPIO_Obj));
    myPie = PI_init ((void *) PIE_BASE_ADDR、sizeof (PIE_Obj));
    myPll = PLL_init ((void *) PLL_base_ADDR、sizeof (PLL_Obj));
    myPwr = PWR_init ((void *) PWR_BASE_ADDR、sizeof (PWR_Obj));
    myWdDog = WDOG_INIT ((void *) WDOG_BASE_ADDR、sizeof (WDOG_Obj));

    //选择内部振荡器1作为时钟源
    CLK_setOscSrc (myClk、CLK_OscSrc_Internal);

    //将 PLL 设置为 x10 /2、这将产生50MHz = 10MHz * 10/2
    PLL_setup (myPll、PLL_Multiplier_12、PLL_DivideSelect_CLKIN_BY_2);

    //禁用 PIE 和所有中断
    PIE_DISABLE (myPie);
    PI_DisableAllInts (myPie);
    CPU_disableGlobalInts (myCpu);
    CPU_clearIntFlags (myCpu);

    //如果从闪存运行,则只将 RAM 复制到 RAM
    #ifdef _flash
    memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);
    #endif

    //初始化 GPIO
    //启用上拉
    GPIO_setPullUp (myGpio、GPIO_Number_5、GPIO_PULLUP_Enable);

    //为 lpm 唤醒选择 GPIO0引脚
    GPIO_lpmSelect (myGpio、GPIO_Number_5);

    //仅在 PLL 不处于跛形模式时进入待机模式。
    if (PLL_getClkStatus (myPll)!= PLL_PLLSTS_MCLKSTS_BITS)

    // LPM 模式=待机
    PWR_setLowPowerMode (myPwr、PWR_LowPowerMode_Halt);


    clk_disableAdcClock (myClk);

    //强制设备进入待机状态
    IDLE;//器件在 IDLE 中等待直到 GPIO0/XNMI 引脚上的下降沿
    //将器件从待机模式中唤醒。
    for (;;){}//唤醒后在此处循环。


      我该怎么办?

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

    没有其他负载;只有电源和 TMS320F28027F 微控制器最小系统。

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

    代码看起来未修改、似乎正在将器件设置为 HALT 模式。 默认情况下、闪存看起来可能仍处于通电状态。 请参阅 F28027系统控制和中断用户指南第1.3节闪存
    和 OTP 功率模式的更多信息。 www.ti.com/.../sprufn3d.pdf

    您能否准确地分享测量器件功耗的位置和方式? 您是否在分流电阻器上测量压降、从而在 TPS 和 MCU 的输出端之间放置一个电流表? 我无法放大您的原理图图像。 请增大尺寸或使用附加功能、以便可以单击图像。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    void main()

    //警告:始终确保在从 RAM 运行任何函数之前调用 memcpy
    // InitSysCtrl 包括对基于 RAM 的函数的调用,而不调用
    // memcpy 首先,处理器将进入“杂草”

    memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);

    //步骤1. 初始化系统控制:
    // PLL、安全装置、启用外设时钟


    EALLOW;
    SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 0;
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL=0;// Clk src = INTOSC1
    SysCtrlRegs.CLKCTL.bit.XCLKINOFF=1;//关闭 XCLKIN
    SysCtrlRegs.CLKCTL.bit.XTALOSCOFF=1;//关闭 XTALOSC
    SysCtrlRegs.CLKCTL.bit.INTOSC2OFF=1;//关闭 INTOSC2


    EDIS;

    InitPll(6,3);

    //步骤2. 初始化 GPIO:
    //启用所有上拉
    EALLOW;
    GpioCtrlRegs.GPAPUD.bit.GPIO4=0;
    GpioIntRegs.GPIOLPMSEL.bit.GPIO4 = 1;//选择 GPIO4引脚进行唤醒

    //使 GPIO6成为输入
    GpioCtrlRegs.GPAMUX1.bit.GPIO5=0;// GPIO5=GPIO5
     GpioCtrlRegs.GPADIR.bit.GPIO5 = 0;// GPIO5 =输入


    SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 0;// ADC

    SysCtrlRegs.PCLKCR3.bit.COMP1ENCLK = 0;// COMP1
    SysCtrlRegs.PCLKCR3.bit.COMP2ENCLK = 0;// Comp2
    SysCtrlRegs.PCLKCR3.bit.CPUTIMER 0ENCLK = 0;// CPU Timer-0
    SysCtrlRegs.PCLKCR3.bit.CPUTIMER 1ENCLK = 0;// CPU 定时器-1
    SysCtrlRegs.PCLKCR3.bit.CPUTIME2ENCLK = 0;// CPU Timer-2
    SysCtrlRegs.PCLKCR3.bit.rsvd4 = 0;// COMP1

    SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 0;// eCAP1
    SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 0;// EPWM1
    SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 0;// EPWM2
    SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 0;// EPWM3
    SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 0;// EPWM4

    SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 0;// GPIO

    SysCtrlRegs.PCLKCR0.bit.HRPWMENCLK= 0;// HRPWM
    SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 0;// I2C
    SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 0;// SCI-A
    SysCtrlRegs.PCLKCR0.bit.SPIANCLK = 0;// SPI-A
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;//在 ePWM 内启用 TBCLK

    EDIS;

    //将 PIE 控制寄存器初始化为默认状态。
    //默认状态为禁用所有 PIE 中断和标志
    //被清除。
    //此函数位于 F2802x_PIECTRL.c 文件中。
    InitPieCtrl();

    //禁用 CPU 中断并清除所有 CPU 中断标志:
    IER = 0x0000;
    IFR = 0x0000;

    //使用指向 shell 中断的指针初始化 PIE 矢量表
    //服务例程(ISR)。
    //这将填充整个表,即使是中断也是如此
    //在本例中未使用。 这对于调试很有用。
    //可以在 F2802x_DefaultIsr.c 中找到 shell ISR 例程
    //此函数可在 F2802x_PieVect.c 中找到
    InitPieVectTable();

    //此示例中使用的中断被重新映射到
    //此文件中的 ISR 函数。
    EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
    PieVectTable.WAKEINT =&WAKE_ISR;
    EDIS;

    //步骤4. 初始化所有器件外设:
    //不适用于此示例。

    //步骤5. 特定于用户的代码、启用中断:

    //启用连接到 WAKEINT 的 CPU INT1:
    IER |= M_INT1;

    //在 PIE 中启用 WAKEINT:组1中断8
    PieCtrlRegs.PIEIER1.bit.INTx8 = 1;
    PieCtrlRegs.PIEACk.bit.ACK1=1;
    //启用全局中断:
    EINT;//启用全局中断 INTM

    //写入 LPM 代码值
    EALLOW;
    if (SysCtrlRegs.PLLSTS.bit.MCLKSTS!= 1)//仅在 PLL 不处于跛形模式时进入低功耗模式。

    //SysCtrlRegs.LPMCR0.bit.LPM = 0x0001;// LPM 模式=待机

    SysCtrlRegs.LPMCR0.bit.LPM = 0x0002;// LPM 模式=停止


    EDIS;

    //将器件从 HALT 模式中唤醒。
    for (;;)

    if (GpioDataRegs.GPADAT.bit.GPIO5==1)

    EALLOW;//这是写入 EALLOW 受保护寄存器所必需的

    _asm (" idle");

    EDIS;

    }//唤醒后在此环路。

    /*---------------------------- *
    用于 WAKEINT 的/* ISR -将在*/时执行
    GPIO0引脚上触发的/*低电平脉冲*
    /*------------------------------ *
    _interrupt void WAKE_ISR (void)

     LPWR_COUNT++;

     PieCtrlRegs.PIEACk.bit.ACK1=1;

    设置  LPM 模式=待机

    SysCtrlRegs.LPMCR0.bit.LPM = 0x0001;// LPM 模式=待机

    或  LPM 模式= HALT

    SysCtrlRegs.LPMCR0.bit.LPM = 0x0002;// LPM 模式=停止

    两 个 IDDIO 值都是30mA!!!!

    但在数据表中  、IDDIO 值仅为4-7mA。  您是如何测试的?  能不能给我一些建议。

    没有其他负载;只有电源和 TMS320F28027F 微控制 最小系统。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、很抱歉我迟到了。 我在工作台上重复了您的测试。 您尚未关闭闪存。 请添加以下代码行。 确保从 RAM 执行为闪存断电的代码、并且任何后续指令也从 RAM 运行、否则在器件进入 LPM 之前、闪存将被加电。

    EALLOW;
    FlashRegs.FPWR.bit.PWR = 0;
    EDIS;

    谢谢、
    标记