请教一个表达式 W=Td*(Rec*3/4095)/(3*T)
其中
0<Td<500
0<Rec<4095
7000<T<8000
请问以下用Q格式表示是否正确:
_iq24 W, dta_u, dta_l;
dta_u = _IQ24mpy(_IQ16toIQ(Tdt),(_IQ24div(_IQ24mpy(_IQ16toIQ(RectfierVoltage ), _IQ16toIQ(3)), _IQ16toIQ(4095)) ));
dta_l = _IQ24mpy(_IQ24mpy(_IQ16toIQ(2),_IQ16toIQ(EvbRegs.T3PR)),_IQ24(3));
W= _IQ24div(dta_u, dta_l);
谢谢 !
Eric Ma:
dony,
q24的表达范围只是 – 128 ~ 127.999999999,不能使用上述表达范围,
你应该是用Q18及以下格式。
ERIC
请教一个表达式 W=Td*(Rec*3/4095)/(3*T)
其中
0<Td<500
0<Rec<4095
7000<T<8000
请问以下用Q格式表示是否正确:
_iq24 W, dta_u, dta_l;
dta_u = _IQ24mpy(_IQ16toIQ(Tdt),(_IQ24div(_IQ24mpy(_IQ16toIQ(RectfierVoltage ), _IQ16toIQ(3)), _IQ16toIQ(4095)) ));
dta_l = _IQ24mpy(_IQ24mpy(_IQ16toIQ(2),_IQ16toIQ(EvbRegs.T3PR)),_IQ24(3));
W= _IQ24div(dta_u, dta_l);
谢谢 !
dony chen:
回复 Eric Ma:
Eric:
但是最终结果W需要与其他IQ24的数据进行运算,该怎么处理?
dta_u = _IQ18toIQ24(_IQ18mpy(_IQ18(Tdt),(_IQ18div(_IQ18mpy(_IQ18(Rec), _IQ18(3)), _IQ18(4095)) )));dta_l = _IQ18toIQ24(_IQ18mpy(_IQ18mpy(_IQ18(2),_IQ18(T)),_IQ18(3)));
W=_IQ24mpy(dta_u, dta_l);
谢谢!
请教一个表达式 W=Td*(Rec*3/4095)/(3*T)
其中
0<Td<500
0<Rec<4095
7000<T<8000
请问以下用Q格式表示是否正确:
_iq24 W, dta_u, dta_l;
dta_u = _IQ24mpy(_IQ16toIQ(Tdt),(_IQ24div(_IQ24mpy(_IQ16toIQ(RectfierVoltage ), _IQ16toIQ(3)), _IQ16toIQ(4095)) ));
dta_l = _IQ24mpy(_IQ24mpy(_IQ16toIQ(2),_IQ16toIQ(EvbRegs.T3PR)),_IQ24(3));
W= _IQ24div(dta_u, dta_l);
谢谢 !
Eric Ma:
回复 dony chen:
dony,
我看你这些变量都是整数,为什么要使用IQ操作呢?
如果W是可以由IQ24表达的话,那就可以。 就把W从IQ18转换成IQ24就可以。
建议参照C:\ti\controlSUITE\libs\math\IQmath\v160\doc 文档说明。
Eric