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.

TMS320F28027: 目前在编写关于单相UPS的程序,发现程序无法运行到main函数的while(1)的函数体里面

Part Number: TMS320F28027
Other Parts Discussed in Thread: C2000WARE, TIDM-HV-1PH-DCAC

目前在编写关于单相UPS的程序,发现程序无法运行到main函数的while(1)的函数体里面,我只是把 函数enablePWMCLKCounting();这条语句去掉就可以执行到while里面 这是为什么?

enablePWMCLKCounting函数的代码如下:

//TODO enablePWMCLKCounting
void enablePWMCLKCounting(void)
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC =1;
EDIS;
}

只要是在这个函数调用的后面语句都不会执行 这是怎么回事?但PWM中断程序可以运行?

谢谢!

  • 你好,还请说明一下是根据C:\ti\c2000\C2000Ware_DigitalPower_SDK_3_03_00_00\solutions\tidm_hv_1ph_dcac中的哪个例程进行测试的?对例程做过哪些修改?

  • 您好!我是参考POWERSUITE下的DC-AC单元部分Single Phase Inverter: Voltage Source TIDM-HV-1PH-DCAC项目的I点击mport F280049C Project后导入的工程文件代码

    我后来发现只要去掉这个函数  updateInverterPWM(INV_PWM1_BASE,INV_PWM2_BASE, invDutyPU);就可以运行好像是浮点数的影响?请问浮点数有什么好的办法?

    此外当#if SENSING_OPTION ==ADC_BASED_SENSING这个条件成立的时候,在这个PWM2的20KHZ中断是在CTR = PRD发生还是在

    在函数calibrateOffset中关于PWM中断好像是发生在CTR值递减为CMPB时发生的中断,个人认为PWM的中断应该发生在ZRO处才能保证SPWM波形正确,

    因为在CTR = CMPB的时候发生中断那么去执行中断函数那么就会更新CMPA的值 这样就会改变PWM引脚的动作,ADC模式的时候中断设置如下

    //
    // PWM1 INT is used to trigger the ISR
    // INT on Period event
    //
    EPWM_setInterruptSource(INV_ISR_TRIG_PWM_BASE,EPWM_INT_TBCTR_D_CMPB);

    CMPB值设置代码为

    //
    // set duty 0% initially
    //
    EPWM_setCounterCompareValue(INV_ISR_TRIG_PWM_BASE,EPWM_COUNTER_COMPARE_B,
    EPWM_getTimeBasePeriod(INV_ISR_TRIG_PWM_BASE)-(50/2));

    以上代码均在函数calibrateOffset(&invIiOffset, k1, k2);中,请问按照这个逆变方案PWM的中断发生在什么时候?

    谢谢!

    //
    // Offset Calibration Routine
    #if SENSING_OPTION ==ADC_BASED_SENSING
    calibrateOffset(&invIiOffset, k1, k2);
    #endif

  • 抱歉误触了“TI认为已解答”。

    浮点数的处理确实是一个代码迁移的难题,因为F280049是带FPU浮点运算单元的,而F28027不带FPU,所以所有牵扯到浮点运算的地方都要用IQmath来处理,定点芯片处理浮点数最直接的就是调用IQmath函数库

  • 谢谢您的解答 正在考虑采用IQmath来处理 但现在有个疑问,例如我程序中用到三种范围的float数据,数据情况如下:

    1.第一种浮点数范围为3122.66~5333.33

    2.第二种浮点数范围为3.03~6.06

    3.第三种浮点数范围为-1.999~2.0

    "IQmathLib.h"文件中GLOBAL_Q为19 那么这个时候我怎么处理后面两种数据,这样才能保持数据结果的精度,谢谢!

  • 这个问题已经分配其他工程师了,会尽快回复的。

  • 收到 谢谢