打印

灵动MM32SPIN0230板子里面的电机驱动代码解释

[复制链接]
1217|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
微凉4232|  楼主 | 2023-8-20 11:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
static inline void MCFLIB_InvPark_S16(const MCFLIB_2_DQ_T_S16 *psIn,
                                          const sAngle_Trig *psAnglePos,
                                          MCFLIB_2_ALBE_T_S16 *psOut)
{
    register Q31_t s16D;register Q31_t s16Q;register Q31_t s16Sin;register Q31_t s16Cos;register Q31_t s32Temp;
    /* Store values for calculation */
    s16D    = (psIn->s16D);
    s16Q    = (psIn->s16Q);
    s16Sin  = (psAnglePos->s16Sin);
    s16Cos  = (psAnglePos->s16Cos);   
    /* Calculate beta  = d * sin(theta) + q * cos(theta) */
    s32Temp = (s16Cos * s16Q + s16Sin * s16D) >> 15;
    psOut->s16Beta = (Q15_t)s32Temp ;
    /* Calculate alpha = d * cos(theta) - q * sin(theta) */   
    s32Temp = ((s16Cos * s16D) - (s16Sin * s16Q)) >> 15;
    psOut->s16Alpha = (Q15_t) s32Temp ;   
}
这里的 s32Temp = (s16Cos * s16Q + s16Sin * s16D) >> 15;代码为什么要进行右移十五位的操作呀?如果是匹配Q15_t数据类型的话,下面不就有个强转嘛,这里的>>15操作,有什么含义呀?初学,想请教各位大佬一下!!感谢!!

使用特权

评论回复
评论
微凉4232 2023-8-20 11:56 回复TA
理解了:这样理解应该是对的!!因为s16Sin的数据类型是Q15_t的类型的,并不是-1~1,这里实际操作的s16Sin数据就是-1~1的数据并不是-32768~32767的数据,所以这里需要一个右移15位的操作!! 如有不对!还请大家指正! 

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

粉丝