TI中文支持网
TI专业的中文技术问题搜集分享网站

IQmath计算

我的芯片是TMS320F28035,我需要计算一个占空比:

我要计算一个式子:dutybase=timbase*duty/100;

duty范围:10~50  (十进制)

timbase是固定值:4166(十进制)

然后我用Q格式计算,算式如下:

void Setduty(Uint8 duty)

{

Uint16 timbase,dutybase;

_iq q_base;

timbase=4166;

q_base=_IQ15div(_IQ14mpy(_IQ15toIQ(timbase),_IQ24toIQ(duty)),_IQ24toIQ(100));   //用Q格式计算

dutybase=_IQ15int(q_base);//把Q格式数据还原为寄存器数

}

当我传入duty=10的时候,这个时候dutybase的值为13(十进制) ,正常来说我得到的值应该是4166*10/100=416才对,如果我不用Q格式的话,如果这样写:

dutybase=timbase*duty/100;这样就得到的0,以前都是用arm开发,第一次用dsp,所以不是很理解这个Q值转换,如果不用Q值计算,用arm的习惯写出来的公式,得到的结果又不对,能帮我分析下我哪里有问题么?

Green Deng:

你好,建议你可以参考一下IQmath的使用说明文档,位置在:C:\ti\c2000\C2000Ware_3_02_00_00\libraries\math\IQmath\c28\docs

user6392471:

回复 Green Deng:

那些资料只是说明如何用而已,但是没有说明如何数据对齐啊,就是说我用的过程中,我怎么知道什么时候该用哪个_iqN呢?
q_base=_IQ15div(_IQ14mpy(_IQ15(timbase),_IQ25(duty)),_IQ24(100));比如这个算式中,我既可以定义duty为_IQ25也可以定义_IQ24如果用这两种定义的话,最后我dutybase=_IQ15int(q_base);这个得数是否一样?

Green Deng:

回复 user6392471:

你好,我为你的问题升级到英文E2E论坛了,你可以参考帖子中工程师的回复:
e2e.ti.com/…/933976

user6392471:

回复 Green Deng:

我用英文回了他的答复并继续提了一个问题,等待他的答复。

Green Deng:

回复 user6392471:

好的,因为对方是国外(大部分是美国)工程师,所以有时差,可能回复会比较慢。

赞(0)
未经允许不得转载:TI中文支持网 » IQmath计算
分享到: 更多 (0)