TMS320F28335: TMS320F28335

Part Number: TMS320F28335

#define QEP_MACRO(m,v) \
\
/* Check the rotational direction */ \
v.DirectionQep = (*eQEP[m]).QEPSTS.bit.QDF; \
\
/* Check the position counter for EQEP1 */ \
v.RawTheta = (*eQEP[m]).QPOSCNT + v.CalibratedAngle; \
\
if (v.RawTheta < 0) \
v.RawTheta = v.RawTheta + (*eQEP[m]).QPOSMAX; \
else if (v.RawTheta > (*eQEP[m]).QPOSMAX) \
v.RawTheta = v.RawTheta - (*eQEP[m]).QPOSMAX; \
\
/* Compute the mechanical angle */ \
v.MechTheta= v.MechScaler*v.RawTheta; \
/* Compute the electrical angle */ \
v.ElecTheta = (v.PolePairs*v.MechTheta) -floor(v.PolePairs*v.MechTheta); /* Q24 = Q0*Q24 */ \

请问这段代码做floor向下取整运算

  • MechTheta机械角度应该是个[0,1]的值吧,计算电角度时乘电机极对数,如5对极,乘以后变成【0,5】,而我们需要的电角度仍然是【0,1】,即得到5个【0,1】

    所以要减去向下取整后的值,其实你也可以写啰嗦点, if(结果>1且<2) 则减1     else if(结果>2且<3) 则减2

    所以例程中的写法更简洁