Part Number:TMS320F28027Other 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中断程序可以运行?
谢谢!
Green Deng:
你好,还请说明一下是根据C:\ti\c2000\C2000Ware_DigitalPower_SDK_3_03_00_00\solutions\tidm_hv_1ph_dcac中的哪个例程进行测试的?对例程做过哪些修改?
,
jun liu:
您好!我是参考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
,
Green Deng:
抱歉误触了“TI认为已解答”。
浮点数的处理确实是一个代码迁移的难题,因为F280049是带FPU浮点运算单元的,而F28027不带FPU,所以所有牵扯到浮点运算的地方都要用IQmath来处理,定点芯片处理浮点数最直接的就是调用IQmath函数库
,
jun liu:
谢谢您的解答 正在考虑采用IQmath来处理 但现在有个疑问,例如我程序中用到三种范围的float数据,数据情况如下:
1.第一种浮点数范围为3122.66~5333.33
2.第二种浮点数范围为3.03~6.06
3.第三种浮点数范围为-1.999~2.0
"IQmathLib.h"文件中GLOBAL_Q为19 那么这个时候我怎么处理后面两种数据,这样才能保持数据结果的精度,谢谢!
,
Green Deng:
这个问题已经分配其他工程师了,会尽快回复的。
,
jun liu:
收到 谢谢