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

Q格式相乘问题

/* Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q*/ \
v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed);

v.BaseRpm为Q0格式v.Speed为Q15格式,他两个相乘为什么得到Q0格式的v.SpeedRpm。Q格式相乘不应该Q后面系数相加吗。

rookiecalf:

Q15*Q15生成Q15,Q0*Q15自然是Q0了。你可以参考.h里面的乘除法实现方式,其实乘完后是有降Q的动作的。

/* Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q*/ \
v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed);

v.BaseRpm为Q0格式v.Speed为Q15格式,他两个相乘为什么得到Q0格式的v.SpeedRpm。Q格式相乘不应该Q后面系数相加吗。

runpeng wang:

回复 rookiecalf:

 v.Speed = _IQdiv(v.SpeedScaler,v.EventPeriod);

我能再问你个问题吗,那为什么Q0除以Q0会生成Q15的格式那,我Q格式有点没学明白,

/* Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q*/ \
v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed);

v.BaseRpm为Q0格式v.Speed为Q15格式,他两个相乘为什么得到Q0格式的v.SpeedRpm。Q格式相乘不应该Q后面系数相加吗。

runpeng wang:

回复 囧:

您的意思是,乘除法得到的Q格式都是按照=号之前的格式取的吗?

v.Speed = _IQdiv(v.SpeedScaler,v.EventPeriod); \ \/* Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q*/ \ v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed);

这两个语句中v.SpeedScaler,v.EventPeriod为Q0格式除法得到v.Speed  Q_GLOBAL

v.SpeedRpm   v.BaseRpm为Q0格式他们的输出是不是都可以按照=号之前格式选取。而它们的值直接进行乘除

/* Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q*/ \
v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed);

v.BaseRpm为Q0格式v.Speed为Q15格式,他两个相乘为什么得到Q0格式的v.SpeedRpm。Q格式相乘不应该Q后面系数相加吗。

囧:

回复 runpeng wang:

跟等号前后无关,跟你用的指令有关,你用IQMPY,那就是默认QGLOBAL,如果你用IQ15MPY那就是IQ15的输出。你需要看一下SPRC990 的6,3节

/* Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q*/ \
v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed);

v.BaseRpm为Q0格式v.Speed为Q15格式,他两个相乘为什么得到Q0格式的v.SpeedRpm。Q格式相乘不应该Q后面系数相加吗。

runpeng wang:

回复 囧:

你好,真是麻烦你,我看了,他的乘除法Q格式和括号里面的Q格式都一样,但是我的括号里面和外面不一样格式,怎么计算那,比如我的除法内部两个都是Q0格式而除法是Q_GLOBAL具体我怎么计算那,

/* Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q*/ \
v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed);

v.BaseRpm为Q0格式v.Speed为Q15格式,他两个相乘为什么得到Q0格式的v.SpeedRpm。Q格式相乘不应该Q后面系数相加吗。

runpeng wang:

回复 囧:

v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed);那为什么我这个输出是Q0格式那_IQmpy是Q24格式

/* Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q*/ \
v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed);

v.BaseRpm为Q0格式v.Speed为Q15格式,他两个相乘为什么得到Q0格式的v.SpeedRpm。Q格式相乘不应该Q后面系数相加吗。

囧:

回复 runpeng wang:

不管你括号内是什么格式,结果之和IQ后面的N有关,你括号内是IQ0,但是用了IQmpy,那结果就会被转化成IQ24格式

/* Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q*/ \
v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed);

v.BaseRpm为Q0格式v.Speed为Q15格式,他两个相乘为什么得到Q0格式的v.SpeedRpm。Q格式相乘不应该Q后面系数相加吗。

runpeng wang:

回复 rookiecalf:

你的意思是v.Speed=_IQ(0.5)v.BaseRpm=1800  v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed)  的运算就是 _IQmpy(v.BaseRpm,v.Speed) =1800*0.5*2^24 /2^24  而  v.SpeedRpm=1800*0.5*2^24/2^24?  v.Speed = _IQdiv(v.SpeedScaler,v.EventPeriod) v.SpeedScaler=180 v.EventPeriod=1000  _IQdiv(v.SpeedScaler,v.EventPeriod) =

180/1000*2^24

赞(0)
未经允许不得转载:TI中文支持网 » Q格式相乘问题
分享到: 更多 (0)