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.

[参考译文] TMS320F28379D:eQEP

Guru**** 2524550 points
Other Parts Discussed in Thread: TMS320F28379D, C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/924116/tms320f28379d-eqep

器件型号:TMS320F28379D
主题中讨论的其他器件: C2000WARE

您好,  
我将 tms320f28379D DSP 微控制器用于 eQEP (正交编码器)。
在此示例中、我的使用是279dxEqep_pos_speed.c


tmp =(long)((long) pos16bval*(long) p->mech_scaler);// q0*Q26 = Q26
tmp &= 0x03FFF000;
tmp =(int)(Tmp>>11);// Q26 -> Q15


问题1. 为什么 mech_scalar 被视为2^26/4000 (在(1/4000)中)。
问题2. 为什么温度为&、带0x03FFF000;
问题3. 为什么温度>>(右移)与11;
问题4. 为什么使用0x7FFF;
问题5. newp=_IQ15toIq (tmp)的含义是什么;其中_IQ15toIq (tmp)是什么? 如果它等于 tmp/2^9,那么为什么我们将 tmp2^9重新分配?


如果(p->DirectionQep=0)// POSCNT 正在递减计数

如果(newp>oldp)
Tmp1 =-(_IQ (1)- newp + oldp);// x2-x1应该为负
其他
Tmp1 = newp -oldp;

问题7. 为什么从_IQ(1)=> Tmp1 =-(_IQ(1)- newp + oldp)中减去 newp - oldp? 为什么在该语句中使用_IQ (1)?

请尽早指导我们解决上述问题

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我们的一位专家将很快就此与您联系。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Vasanth、

    这是因为该示例使用 IQMath。 我建议您查看 C2000Ware_3_02_00_00\libraries\math\IQmath\c28\docs

    要回答您的一些问题、请执行以下操作:

    问题1. 为什么 mech_scalar 被视为2^26/4000 (在(1/4000)中)。

    这是为了将浮点数转换为 IQ26格式。

    问题3. 为什么温度>>(右移)与11;

    这是为了将 IQ26数字转换为 IQ15

    问题5. newp=_IQ15toIq (tmp)的含义是什么;其中_IQ15toIq (tmp)是什么? 如果它等于 tmp/2^9,那么为什么我们将 tmp2^9重新分配?

    这取决于全局 Q 是什么。 如果全局 Q 为24、则 IQ15toIQ 会将 IQ15数字转换为 IQ24、即乘以2^9。

    问题7. 为什么从_IQ(1)=> Tmp1 =-(_IQ(1)- newp + oldp)中减去 newp - oldp? 为什么在该语句中使用_IQ (1)?

    我假设所需的操作是1 - newp + oldp。 但是、由于使用的是 IQMath、因此您将使用_IQ (1)而不是1.0。 假设 newp 和 oldp 已采用 IQ 格式。

    谢谢、

    Sira