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.

继续 28335 EPWM 比较器更新,强制类型转换 问题

原问题如下:

DSP28335 在更新EPWM 比较寄存器的时候,要把算完的小数 乘以 PWM周期,然后送给 CMPA 这里 是不是要强类型转换成整数? 是用int16  还是 Uint16啊???

下面是更新EPWM 比较寄存器,这样写对不对啊???????

int32 Tmp_a;    

      Tmp_a=p->PeriodMax*(p->MfuncC1);

       EPwm1Regs.CMPA.half.CMPA = (int16)Tmp_a;    

       EPwm1Regs.CMPB=(int16)Tmp_a;

其中 MfuncC1 存得是调制信号,正常时应该是0-1之间的数,不过也不排除有些时候可能会在0-1之外一点点。

或者在更新CMPA比较值的时候是否可以直接写:

EPwm1Regs.CMPA.half.CMPA =p->PeriodMax*(p->MfuncC1);

它是否会自己自动进行数据类型转换啊?

怎样写好呢????

原答案如下:

sys.param.Mfunc_c1 = _IQmpyI32int(sys.param.DutyA, EPwm1Regs.TBPRD);

建议用这样的语句使用

IQ是定点,F28335不需要用IQ库,用的目的是各个芯片的版本兼容,你可以看一下IQmath,h中,对于F28335, IQmath type= float, 就是靠硬件直接算出来的,对于定点的芯片,需要IQ转换。所以你可以不包含此库。

 

按照前边两位高人所说,修改更新比较器语句如下:

EPwm1Regs.CMPA.half.CMPA = _IQmpyI32int(p->MfuncC1, EPwm1Regs.TBPRD);

修改后报如下错误:

undefined              first referenced                                                                                    
  symbol                  in file                                                                                         
 ---------                  ----------------                                                                                    
 __IQmpyI32int     D:\\tidcs\\c28\\DSP2833x\\v131\\zhengliu_by_380\\epwm_updown_aq\\Debug\\Example_2833xEPwmUpDownAQ.obj

试着在开头增加包含头文件“IQmathLib.h”之后还是不对,我的工程目录下没有“IQmath,h”

我的CMD文件里有这样的句子:

 FLASHC      : origin = 0x328000, length = 0x008000     /* on-chip FLASH */

 

 IQmath              : > FLASHC      PAGE = 0                  /* Math Code */
   IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD

想问下如何解决啊 ?还有 TI有没有 关于在28335 下 这种调用IQ 函数的说明文档啊 ?

  • __IQmpyI32int     D:\\tidcs\\c28\\DSP2833x\\v131\\zhengliu_by_380

    IQmpyI32int 这个是您自己定义的一个函数吧,您定义之后,需要包含此函数的.h文件。

    \\epwm_updown_aq\\Debug\\Example_2833xEPwmUpDownAQ.obj

    epwm_updown_aq这是TI的历程中的一个函数,如果您想使用的话,需要包含此函数的.h。或者找到此函数,将其copy到您现在的工程中。

    说白了,编译器,找不到以上两个函数。

  • 不是的啊,这就是您 在上一个问题中给我的答案,我放在我的程序中,报错误,上一个帖子的题目是“28335 EPWM 比较器更新,强制类型转换 问题”

    这里报的错误信息中确实是说了“__IQmpyI32int ”没有,但是这个函数是在IQmathLib.h中有定义的,但是我包含这个头文件一样报错。

    而且我不想只为了这一个EPWM更新 就多包含一个文件,只想知道更新的时候强制类型转换 如何写法合适

    谢谢