Multiple Pole Resolver

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Multiple Pole Resolver

1,877件の閲覧回数
derekcook
Senior Contributor I

Since my last post Using a Multiple Pole Resolver  was answered, I did not know if I needed to make a new post for a new question. 

I receive my 3 pole resolver for the 3 pole pair motor next week. My 4 pole pair motor with the 1 pole resolver is working just fine, and has been for about 6 months.

 

Currently my 4 pole pair motor with my 1 pole resolver I have this to convert the mechanical angle to electrical and handle the wrap around - same as QEI block does. The resolver position is 0-4095. The number of pole pairs is 4. 

 

// Do the same conversions and such as the QEI module to convert the resolver
// position value into the format used by the KMS modules.
_lq tempLQ;

// Shift the position to get a 0 angle output at desired point.
resolverPos += resolver->internal.encoderZeroOffset ;
resolverPos %= resolver->internal.encoderMaxCount ;

/* convert raw count into mechanical rotor angle */
tempLQ = _LQmpyLQX((_lq)resolverPos, 0, resolver->internal.angleScalar, GLOBAL_LQ);

/* convert mechanical rotor angle into electrical rotor angle */
tempLQ = tempLQ * resolver->internal.polePairs;

/* wrap electrical rotor angle around _LQ(2.0) */
tempLQ = tempLQ & 0x0001FFFFFF;

/* wrap electrical rotor angle between _LQ(-1.0) and _LQ(1.0) */
return UTIL_angleWrapAround(tempLQ);

 

For the 3 pole resolver with 3 pole pair motor, my mechanical angle will be equal to the electrical angle, so I would think don't need to multiply the mechanical angle by the number of pole pairs now so that it does not look like I am taking 3 revolutions in 1 revolution? From your answer in my previous post it sounds like I still need to do this so I don't think I am making 3 revolutions in 1 revolution, so does the above function stay the same or does it change to the below?

 

// Do the same conversions and such as the QEI module to convert the resolver
// position value into the format used by the KMS modules.
_lq tempLQ;

// Shift the position to get a 0 angle output at desired point.
resolverPos += resolver->internal.encoderZeroOffset ;
resolverPos %= resolver->internal.encoderMaxCount ;

/* convert raw count into mechanical rotor angle */
tempLQ = _LQmpyLQX((_lq)resolverPos, 0, resolver->internal.angleScalar, GLOBAL_LQ);

/* convert mechanical rotor angle into electrical rotor angle */
tempLQ = tempLQ;

/* wrap electrical rotor angle around _LQ(2.0) */
tempLQ = tempLQ & 0x0001FFFFFF;

/* wrap electrical rotor angle between _LQ(-1.0) and _LQ(1.0) */
return UTIL_angleWrapAround(tempLQ);

ラベル(1)
0 件の賞賛
2 返答(返信)

1,538件の閲覧回数
linestream-adam
Senior Contributor I

Derek,

With the 3 pp resolver attached to the 3 pp motor, your resolver will now have an electrical angle that is equal to your motor electrical angle. Because they are the same, you should not need to do any conversion between the resolver angle and the motor electrical angle. 

I should have clarified my language in the previous post. Your 1 pp resolver has an electrical angle, it just so happens that it is equal to the mechanical angle of the resolver as well (due to a single pole pair). You need to scale the resolver electrical angle with the ratio of motor pole pairs to resolver pole pairs in order to translate into motor electrical angle.

Hope that helps clear things up.

1,538件の閲覧回数
derekcook
Senior Contributor I

Thanks Adam. I was just wanting to clarify that! Very helpful!

0 件の賞賛