在Example_2833xEqep_pos_speed实例中,转速计算中使用到一个IQ格式转换的运算,不是很清楚,请教各位大神。
在void POSSPEED_Calc(POSSPEED *p)函数中,有一段:
tmp = (long)((long)p->theta_raw*(long)p->mech_scaler); // Q0*Q26 = Q26
tmp &= 0x03FFF000; ————————这是要做什么事情?
p->theta_mech = (int)(tmp>>11); // Q26 -> Q15
p->theta_mech &= 0x7FFF; ————————这又是要干什么?
mangui zhang:
这些应该是与程序功能有关的屏蔽某些位而已 与IQ格式转换没关系吧
具体example没有看过
在Example_2833xEqep_pos_speed实例中,转速计算中使用到一个IQ格式转换的运算,不是很清楚,请教各位大神。
在void POSSPEED_Calc(POSSPEED *p)函数中,有一段:
tmp = (long)((long)p->theta_raw*(long)p->mech_scaler); // Q0*Q26 = Q26
tmp &= 0x03FFF000; ————————这是要做什么事情?
p->theta_mech = (int)(tmp>>11); // Q26 -> Q15
p->theta_mech &= 0x7FFF; ————————这又是要干什么?
user1503552:
回复 Eric Ma:
Eric,
你好,我借楼问一下,为什么F28335有浮点运算的能力,在TI出的编码器例程中,计算速度和位置时还要用IQ格式啊?
在Example_2833xEqep_pos_speed实例中,转速计算中使用到一个IQ格式转换的运算,不是很清楚,请教各位大神。
在void POSSPEED_Calc(POSSPEED *p)函数中,有一段:
tmp = (long)((long)p->theta_raw*(long)p->mech_scaler); // Q0*Q26 = Q26
tmp &= 0x03FFF000; ————————这是要做什么事情?
p->theta_mech = (int)(tmp>>11); // Q26 -> Q15
p->theta_mech &= 0x7FFF; ————————这又是要干什么?
user5956715:
回复 Eric Ma:
你好,能不能帮忙解答一下tmp&= 0x03FFF000; 这句话的意思吗
在Example_2833xEqep_pos_speed实例中,转速计算中使用到一个IQ格式转换的运算,不是很清楚,请教各位大神。
在void POSSPEED_Calc(POSSPEED *p)函数中,有一段:
tmp = (long)((long)p->theta_raw*(long)p->mech_scaler); // Q0*Q26 = Q26
tmp &= 0x03FFF000; ————————这是要做什么事情?
p->theta_mech = (int)(tmp>>11); // Q26 -> Q15
p->theta_mech &= 0x7FFF; ————————这又是要干什么?
user5956715:
回复 user5956715:
也没什么意思只不过就是把右移的11位清零,这里移动了12位,但是对于IQ15格式来说是最低一位,影响不大。