TI中文支持网
TI专业的中文技术问题搜集分享网站

TI源码eQEP我问题!!!!急急急!!!

首先说一下TI源码:在svpwm控制pmsm里面带传感器的,TI源码如下:利用epwm1周期中断进行主中断控制,其中有一个就是eqep每次都进行检测(这个没问题)问题是计算机械角度的时候每次进中断都加上Z脉冲和A相得偏差。程序如下:

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; \

v.MechTheta = __qmpy32by16(v.MechScaler,(int16)v.RawTheta,31); /* Q15 = Q30*Q0 */ \
v.MechTheta &= 0x7FFF; /* Wrap around 0x07FFF*/ \
v.MechTheta <<= 9; /* Q15 -> Q24 */

这是为什么呢。我分析应该是到z脉冲的时候才加上这个偏差啊,因为z脉冲的时候将计数清0 了。所以加上这个啊。请问是不是这样?

还有就是TI源码这样检测Z脉冲与A相之间的偏差的,程序如下:

if (lsw==0) {EQep1Regs.QPOSCNT=0; EQep1Regs.QCLR.bit.IEL = 1;} // Reset position cnt.

if ((EQep1Regs.QFLG.bit.IEL==1) && Init_IFlag==0) // Check the first index occurrence {qep1.CalibratedAngle= EQep1Regs.QPOSILAT; Init_IFlag++;} // Keep the latched position

if (lsw!=0) QEP_MACRO(1,qep1);

就是说将转子定位好之后,进入中断然后正好此时z脉冲出现了,那此时计数值将锁到EQep1Regs.QPOSILAT这个里面,那这个值是不是就是以后用的偏差??

eassion yin:

同问,不知道楼主搞明白没有,如果搞明白了能不能指点一下

首先说一下TI源码:在svpwm控制pmsm里面带传感器的,TI源码如下:利用epwm1周期中断进行主中断控制,其中有一个就是eqep每次都进行检测(这个没问题)问题是计算机械角度的时候每次进中断都加上Z脉冲和A相得偏差。程序如下:

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; \

v.MechTheta = __qmpy32by16(v.MechScaler,(int16)v.RawTheta,31); /* Q15 = Q30*Q0 */ \
v.MechTheta &= 0x7FFF; /* Wrap around 0x07FFF*/ \
v.MechTheta <<= 9; /* Q15 -> Q24 */

这是为什么呢。我分析应该是到z脉冲的时候才加上这个偏差啊,因为z脉冲的时候将计数清0 了。所以加上这个啊。请问是不是这样?

还有就是TI源码这样检测Z脉冲与A相之间的偏差的,程序如下:

if (lsw==0) {EQep1Regs.QPOSCNT=0; EQep1Regs.QCLR.bit.IEL = 1;} // Reset position cnt.

if ((EQep1Regs.QFLG.bit.IEL==1) && Init_IFlag==0) // Check the first index occurrence {qep1.CalibratedAngle= EQep1Regs.QPOSILAT; Init_IFlag++;} // Keep the latched position

if (lsw!=0) QEP_MACRO(1,qep1);

就是说将转子定位好之后,进入中断然后正好此时z脉冲出现了,那此时计数值将锁到EQep1Regs.QPOSILAT这个里面,那这个值是不是就是以后用的偏差??

robin lin1:

楼主 哪里可以下载到 PMSM带传感器的例程 能否分享下 ?谢谢!

首先说一下TI源码:在svpwm控制pmsm里面带传感器的,TI源码如下:利用epwm1周期中断进行主中断控制,其中有一个就是eqep每次都进行检测(这个没问题)问题是计算机械角度的时候每次进中断都加上Z脉冲和A相得偏差。程序如下:

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; \

v.MechTheta = __qmpy32by16(v.MechScaler,(int16)v.RawTheta,31); /* Q15 = Q30*Q0 */ \
v.MechTheta &= 0x7FFF; /* Wrap around 0x07FFF*/ \
v.MechTheta <<= 9; /* Q15 -> Q24 */

这是为什么呢。我分析应该是到z脉冲的时候才加上这个偏差啊,因为z脉冲的时候将计数清0 了。所以加上这个啊。请问是不是这样?

还有就是TI源码这样检测Z脉冲与A相之间的偏差的,程序如下:

if (lsw==0) {EQep1Regs.QPOSCNT=0; EQep1Regs.QCLR.bit.IEL = 1;} // Reset position cnt.

if ((EQep1Regs.QFLG.bit.IEL==1) && Init_IFlag==0) // Check the first index occurrence {qep1.CalibratedAngle= EQep1Regs.QPOSILAT; Init_IFlag++;} // Keep the latched position

if (lsw!=0) QEP_MACRO(1,qep1);

就是说将转子定位好之后,进入中断然后正好此时z脉冲出现了,那此时计数值将锁到EQep1Regs.QPOSILAT这个里面,那这个值是不是就是以后用的偏差??

Eric Ma:

回复 robin lin1:

可以借鉴ControlSUITE中C:\ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.0\HVPM_Sensored 的例程。

Eric

首先说一下TI源码:在svpwm控制pmsm里面带传感器的,TI源码如下:利用epwm1周期中断进行主中断控制,其中有一个就是eqep每次都进行检测(这个没问题)问题是计算机械角度的时候每次进中断都加上Z脉冲和A相得偏差。程序如下:

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; \

v.MechTheta = __qmpy32by16(v.MechScaler,(int16)v.RawTheta,31); /* Q15 = Q30*Q0 */ \
v.MechTheta &= 0x7FFF; /* Wrap around 0x07FFF*/ \
v.MechTheta <<= 9; /* Q15 -> Q24 */

这是为什么呢。我分析应该是到z脉冲的时候才加上这个偏差啊,因为z脉冲的时候将计数清0 了。所以加上这个啊。请问是不是这样?

还有就是TI源码这样检测Z脉冲与A相之间的偏差的,程序如下:

if (lsw==0) {EQep1Regs.QPOSCNT=0; EQep1Regs.QCLR.bit.IEL = 1;} // Reset position cnt.

if ((EQep1Regs.QFLG.bit.IEL==1) && Init_IFlag==0) // Check the first index occurrence {qep1.CalibratedAngle= EQep1Regs.QPOSILAT; Init_IFlag++;} // Keep the latched position

if (lsw!=0) QEP_MACRO(1,qep1);

就是说将转子定位好之后,进入中断然后正好此时z脉冲出现了,那此时计数值将锁到EQep1Regs.QPOSILAT这个里面,那这个值是不是就是以后用的偏差??

qiang wang4:

应该是以后的偏差。

赞(0)
未经允许不得转载:TI中文支持网 » TI源码eQEP我问题!!!!急急急!!!
分享到: 更多 (0)