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.

[参考译文] MSP430G2452:能量追踪,电流脉冲计数方法

Guru**** 2504465 points
Other Parts Discussed in Thread: MSP430G2452, MSP430F5528, ENERGYTRACE

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1101440/msp430g2452-energytrace-current-pulse-counting-method

部件号:MSP430G2452
主题中讨论的其他部件: ENERGYTRACEMSP430F5528

我正在尝试了解通电跟踪的脉冲计数方法,脉冲计数不是由MSP430G2452 (它完全负责DCDC操作)完成的, 而是由较大的MSP430F5528处理DCDC脉冲计数,目标VCC监控,时间戳和USB流。
此固件的源分散在MSPDebugStack_OS_Package_3_15_1_1\BIOS中,显然,一些与脉冲计数相关的操作是在hil目录中完成的,特别是在我可以看到的hil.c目录中

void hil_initTimerB0(void)
{
    // Setup timer_B0 for current pulse measurement
    TB0CTL = MC__STOP;
    TB0CTL = TBSSEL__TBCLK + MC__CONTINUOUS + TBIE;
}
// -----------------------------------------------------------------------------
void hil_initTimerA0(void)
{
    // Setup time_A0 for timestamping
    TA0CTL = MC__STOP;                                  // STOP Timer
    TA0CTL = ID__8 + TASSEL__SMCLK;                     // Timer_A0 source:SMCLK/8 = 20 / 8 = 2.500 MHz = 1/400ns
    TA0EX0 = 1;                                         // Timer_A0 set additional divider to /2
    TA0CTL |= TACLR + MC__CONTINOUS + TAIE;             // START the timer in free-running mode
}
这些是脉冲计数计时器和时间戳计时器的内侧。 我可以知道时间戳计时器是2.5MHz,但脉冲计时器的时间基准是多少?
 FetDcdc.c中有此校准功能,它使用TB0R
#ifdef MSP_FET
    #define PULSES TB0R
#else
    #define PULSES TA2R
#endif

    if(_fetType == eZ_FET_WITH_DCDC_NO_FLOWCTL || _fetType == eZ_FET_WITH_DCDC ||_fetType == MSP_FET_WITH_DCDC
       || _fetType == MSP_FET_WITH_DCDC_V2x ||  _fetType == eZ_FET_WITH_DCDC_V2x)
    {
        _DINT_FET();

        for(i = 0; i < count; ++i)
        {
            TA0CTL |= TACLR + MC__CONTINOUS + TAIE; // START the timer in free-running mode

            i0 = PULSES;
            t0 = TA0R;

            // Sample VCCout
            ADC12CTL0  &= ~ADC12ENC;              // Disable conversion, write controls
            ADC12MCTL0  = ADC12SREF_1 + 1;        // select Vref and analog channel Ax
            ADC12CTL0  |= ADC12ENC;               // Enable conversions

            ADC12IFG &= ~BIT0;
            ADC12CTL0  |= ADC12SC;                // Start conversions
            while ((ADC12IFG & BIT0) == 0);       // wait until conversion is done
            ADC12IFG &= ~BIT0;

            // Wait for some time
            for(volatile unsigned long j = 0; j < DELAYCOUNT; ++j);

            i1 = PULSES;
            t1 = TA0R;

            *time += (t1 - t0);
            *ticks += (i1 - i0);
        }
        _EINT_FET();
    }
}
另第194行:
        //Configure port mapper and P2 for current measuring
        P2DIR &= ~BIT0;
        P2SEL |= BIT0;
        _DINT_FET();
        PMAPKEYID = PMAPKEY;
        PMAPCTL |= PMAPRECFG;
        P2MAP0 = PM_TB0CLK;
        PMAPKEYID = 0;
        _EINT_FET();

        dcdc_SetVcc(3300);
STAM.c中有此项,不确定它是否是同一定时器B0
#pragma vector=TIMER2_A0_VECTOR
__interrupt void TIMER2_A0_ISR(void)
{
    if(STREAM_getSharedVariable(ID_SHARED_MEMORY_TYPE_TIMER_TICK, &TimerTick))
    {
        (*(unsigned short*)TimerTick)++;
    }
}
#pragma vector=TIMER0_B1_VECTOR
__interrupt void TIMER0_B1_ISR_(void)
{
    switch (__even_in_range(TB0IV, TB0IV_TB0IFG))
   {
       case TB0IV_TB0IFG:
           if(STREAM_getSharedVariable(ID_SHARED_MEMORY_TYPE_I_TICK, &ITick))
           {
               ++(*(unsigned short*)ITick);
           }
           break;
       default:
           break;
   }
}
所以,我想知道哪种方法用于测量脉冲,它是否在计算脉冲之间的时间?  
至于为什么,我将energytrace DCDC集成到测试板中,用于能源预算评估,因此我想从仪器MCU正确读取脉冲。
带有MSP430G2452的DCDC部件工作正常,我甚至添加了12位i2c DAC作为电压参考,以便我可以控制目标VCC,所有i2c命令都工作正常,DCDC性能正常。 所以现在我必须正确计算脉冲数并从这里提取数据。
如果任何人有线索,任何信息都将很有帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么2452那么,我想知道使用哪种方法来测量脉冲,它是否计算脉冲之间的时间?  [/引述]

    EnergyTrace中的描述 是否有帮助?