This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Debugging problem of Position-free algorithm for sliding mode observer

Genius 3095 points


#define SMO_MACRO(v) \
\
/* Sliding mode current observer */ \
v.EstIalpha = _IQmpy(v.Fsmopos,v.EstIalpha) + _IQmpy(v.Gsmopos,(v.Valpha-v.Ealpha-v.Zalpha)); \
v.EstIbeta = _IQmpy(v.Fsmopos,v.EstIbeta) + _IQmpy(v.Gsmopos,(v.Vbeta -v.Ebeta -v.Zbeta )); \
\
/* Current errors */ \
v.IalphaError = v.EstIalpha - v.Ialpha; \
v.IbetaError = v.EstIbeta - v.Ibeta; \
\
/* Sliding control calculator */ \
/* v.Zalpha=v.IalphaError*v.Kslide/v.E0) where E0=0.5 here*/ \
v.Zalpha = _IQmpy(_IQsat(v.IalphaError,v.E0,-v.E0),_IQmpy2(v.Kslide)); \
v.Zbeta = _IQmpy(_IQsat(v.IbetaError ,v.E0,-v.E0),_IQmpy2(v.Kslide)); \
\
/* Sliding control filter -> back EMF calculator */ \
v.Ealpha = v.Ealpha + _IQmpy(v.Kslf,(v.Zalpha-v.Ealpha)); \
v.Ebeta = v.Ebeta + _IQmpy(v.Kslf,(v.Zbeta -v.Ebeta)); \
\
/* Rotor angle calculator -> Theta = atan(-Ealpha,Ebeta) */ \
v.Theta = _IQatan2PU(-v.Ealpha,v.Ebeta);

#endif

TI's source code as above, I want to know:

1, Is v. Zalpha, v. Zbeta the actual value of back EMF?

2, How to determine v.Zalpha and v.Zbeta for different motors. Also how to find the appropriate parameters of v.Kslide and E0?

3, When the motor parameters are determined, Does the accuracy of position estimation depend on the parameters of v. Kslide and E0?

4, Gsmopos,Fsmopos is calculated by the actual parameters of the motor, Can it be calculated without actual motor parameters? (Documents show that sliding mode is insensitive to motor parameters.)

  • 1. Estimated back emf, not the actual one. There will be phase shift between these two. Use Enhanced sliding mode observer for better angle compensation than this one. The eSMO is available as a library, and the actual source code is available on request through proper regional TI sales.

    2. Zalpha and Zbeta are the direct outputs from sliding control, they are more chattering in nature. So the back emf is represented as a combo of both filtered and unfiltered slider output. You can combine Kslide and E0 into a single constant, but the value will have to be based on trial and error. We don't have a straight math model for that. The value given in the example is a good starting point. You can tweak it to fit your test setup.

    3. The accuracy is determined by all of them.

    4. If the slider gain is very high, then it can be parameter insensitive in theory, but it will lead to heavy chattering of slider output that the operation can be noisy. If you can get the current estimate as reasonably close to the actual one, it will make the performance better.

    With the assumption that your query is answered, am clicking it resolved. If you have further queries, you can reply back or else pls click resolved to close the thread.