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.

New Enhanced Sliding Mode Observer (eSMO) and Rotor Initial Position Detection (IPD)

Part Number:

 Enhanced Sliding Mode Observer for sensorless field oriented control (FOC)
Texas Instruments
  Design sensorless synchronous three-phase motor controls with better dynamic performance and stability using new and updated modules in the controlSUITE Digital Motor Control (DMC) Library:  
  Enhanced Sliding Mode Observer (eSMO) Library gives better dynamic (variable speed/load) stability
  Lag compensation improves estimated rotor angle accuracy vs. existing SMO solution
  Supports forward or reverse operation
  Dead-band compensation improves current waveform for superior performance and efficiency
  Updated software modules and drivers include: pwm_dbc, angle_math, clarke, pi, pi_reg4, speed_est
controlSUITE Digital Motor Control (DMC)
Download controlSUITE™ software update now
  Ready to get started? An Example Project (HVPM_Sensorless) is included in the controlSUITE installer to run on the High Voltage Motor Control and PFC Developer’s Kit using Piccolo F2803x.
  • You can update controlSUITE from your Start menu --> Update controlSUITE, or it should appear as an update tomorrow and be on the website in full .zip download by end of week.

    To clarify a bit further, here is what has been added to the latest version of controlSUITE (3.2.2).

    This new sensorless functionality is demonstrated on TMDSHVMTRPFCKIT using the TMDSCNCD28035.

    The previous PM sensoless project:
    has been updated to
    (all other projects from 2.0 to 2.1 remain the same)

    We built offf of the previous project for SMO and simply added the new build levels to extend the functionality:
    #define LEVEL6  6           // Verify close speed loop sensorless SMO  (all builds through LEVEL6 are identical to v2.0)
    #define LEVEL7  7           // Verify close speed loop sensorless - eSMO; contact TI sales for eSMO source code
    #define LEVEL8  8           // Verify IPD + HFI; contact TI sales for HFI/IPD library
    #define LEVEL9  9           // Verify close speed loop sensorless - IPD + HFI + eSMO; contact TI sales for HFI/IPD library

    The documenation for these new build levels are at:
    C:\ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1\HVPM_Enhanced_Sensorless_2803x\~Docs\Sensorless FOC of PMSM.pdf

    The new components are documented at:
    eSMO: C:\ti\controlSUITE\libs\app_libs\motor_control\libs\eSMO\v100\~Docs\DMC MATH_eSMOlib.pdf
    Updated F2803x Drivers: C:\ti\controlSUITE\libs\app_libs\motor_control\drivers\f2803x_v2.1\~Docs\DMC2803x_DRV.pdf
    Updated F2803x Dead-Band PWM Driver: C:\ti\controlSUITE\libs\app_libs\motor_control\drivers\f2803x_v2.1\~Docs\DMC2803x_DRV_PWMwDBC.pdf

    The first post mentions updated motor modules, but this project uses the latest modules updated earlier this year from math_blocks\v4.2

    Note that the eSMO is provided as a closed - but interface documented - object library, to protect the proprietary enhancements. 

    Note that the High Frequency Injection (HFI) technique for rotor slow speed and Initial Position Detection (IPD) is also in object library form but the Library is NOT provided in the controlSUITE download.  A separate license is required for use of this library and is provided under approved business case.  You must discuss with a local TI sales, applications, or TI distribution partner to recieve.

    This eSMO + IPD solution is working quite well in applications that benefit from a start-up in a known direction with no or limited reversing of the motor (like compressors).  The slow speed tracking performance is also quite remarkable, but needs to be tested with your specific motor to understand limitations.

  • Hi Chris,

    Can you provide you, the libraries?


  • The eSMO library is included in the latest controlSUITE download.

    The HFI (IPD) library can be requested by you through your TI or distribution FAE, just tell them to contact me and I'll get the process started.


  • Hi Chris,

    can the eSMO and HFI libs be used as is on  the 8301-kit ?


  • Mojo,

    For the controlSUITE version we haven't provided a project that runs on the DRV8301 yet, just the HVKIT. But the libraries don't care about the hardware. If you know what you are doing it's not too dificult to port the HVKIT+F28035 project to DRV8301+F28035.  Or, the easier way is to start with the DRV8301 PM Sensorless project


    and note how we added in the additional build levels for eSMO and HFI/IPD.



    For the MotorWare / IntaSPIN versions of this the projects will work across the HW platforms as we do today.


  • Hello Chris,

    I want to buy the HFI library (if possible for F2812) I contact my distributor.

    But my distributor  knows from nothing he ask TI what that supposed to mean. answers: The software is limited.


    How to go on?

  • Steve,

    They are not for purchase. We will license to you if approved. Give your distributor my name and they should be able to send me an email.  We'll need to have a discussion regarding your application.


  • Hi Chris,

    Initially contacted the local support team on , they redirected me to contact at 

    Today I contacted my local distributor (Arrrow )  for HFI library and they are not aware of these lib file.Kindly help me to get this library.




  • RK,

    Sorry for the delay.

    Tell your arrow contact to send me an email with details about your company / opportunity. If approved by the local team I will send you a link to fill in the license request, then after approval you can download.

  • Dear; ChrisClearman

    i need to ask about:

    1- i need to use eSMO with ACI? will be included in the controlsuit?
    2- for the license of HFI library, must i buy it? or no?

    3- for online simulation (; you tolled me about the ability to select my motor with its parameters. when can i do that?



  • 1. eSMO is only for synchronous motors. For FOC of ACI motors your options are the ACI_FE from controlSUITE or FAST in MotorWare (and there is a new ACI update coming this quarter for enhanced ACI motor ID)

    2. There is no charge for the HFI library, both from controlSUITE (available now) or MotorWare (in the future)

    3. This was the original plan, but we recently decided not to add this feature after evaluating customer use of the simulation tool. Sorry!


  • thank you;

    1- can i work to apply eSMO for ACI? or it is difficult to work with it?

    2- Soory,  what is the license you and RK write about it?!!


  • 1. no, eSMO motor model is only for synchronous motors.

    2. there is a license to sign to apply for the controlSUITE HFI-IPD library. You need to go through your local TI sales / disti. They contact me, and if approved I send a link to the online form.  The MotorWare version will not require the on-line license, it will just be included in the download.


  • thank you ChrisClearman 

    i will try to edit the model for ACI!!

    will i need the HFI-IPD library? i canot understand it its function?




  • you can NOT edit the eSMO to work with ACI

    HFI-IPD is a solution to identify the initial position of the rotor before start-up (or also at very low speed) when the sensorless estimator doesn't work.  It can be used only for salient synchronous motors.


  • Hi Chris, I am looking to buy a salient pole Permanent Magnet Synchronous Motor (IPMSM) . Referred many manufacturers catalogs to find out Ld and Lq values of the motor . No manufacturers providing Ld and Lq information.

    Can you share me few manufacturer details of  IPMSMs at 1-2kW power level who specify Ld and Lq values.

    Or if you have worked with any salient pole Permanent Magnet Synchronous Motor , please share me the details of the motor.







  • ravi,

    yes, the salient IPM motors are typically custom and hard to find. You can open high efficiency compressors or purchase one of the latest high speed washing machines from someone like Bosch. This is what we did in the beginning to further our reseach on our HFI algorithms (and the contrlSUITE HFI project is based on the Bosch belt driven washing machine motor)

    We realized that customers would want to start with a known working solution - and we need our field to be able to demonstrate easily - so we should look for additional motors that are more readily available.  To that end we have found that the Teknic servo motors work very well for this purpose.

    We are continuing to develop the MotorWare InstaSPIN-FOC version of the HFI and all of our low voltage work is being done with the LVSERVOMTR (we also sell two of them in a kit with a shaft couple and frame mount as 2MTR-DYNO).  Teknic part number is: M-2310P-LN-04K

    Teknic makes a high voltage version of this exact same motor (same frame size and everything) that we are testing now for use with the TMDSHVMTRPFCKIT (for controlSUITE) and TMDSHVMTRINSPIN (for MotorWare).  If it works as expected we will sell this as TI part number: HVSERVOMTR.  The Teknic part number is: M-2310S-LN-04K

  • Hi Chris,

    Thank you very much for valuable information.

    But I still wonder are the motors from teknic are salient or non salient PMSM ?  I could not find any where they mentioned about it .



  • I have an email in to Teknic to see if they know the Ls-d, Ls-q for their motors...but I can confirm the motors are salient, they work well with our HFI techniques. We have tested this with the LV version and are working on the HV version (which should be the same).

    BTW - we are also having success with a different approach for non-salient machines :)  It is going to be a good year for zero speed rotor angle detection at TI!!!

  • Hi Chris,

    Thanks very much . Please let me know if you could know any Ld/Lq details about  teknic motors.

    Wavh. Thats great news . Would you use inductance satutration in to account to extract position information on non-salient machines ?



  • Saturation is a common technique for non-salient machines.

    We will communicate our method once we release later this year.

  • Teknic replied that while they don't measure or specifiy the saliency of these motors, they know by design that it will be quite high with very low cross coupling.


  • Hi Chris,

    Since the FAST identification cannot give values for Ld,Lq seperatly, How do you know these values for Teknic motors (Since you wrote you are working with them for MotorWare, I assume you have some info) ?

    By the way, do you have plans for ID of Ld,Lq seperatly ?


  • We do not know the values for the Teknic motors.  The techniques we are using probably could be used to find rather precise values to be used for FAST, but we aren't doing so today. The IPD techniques don't rely on a real value of Ls_d and Ls_q.

    I think eventually we will use this to do measurements of Ls_d and Ls_q for use with FAST.


  • Hi Chris,

    I have contacted my local distributor (Arrow )  for HFI/IPD library, but  now  they do not have these lib files. Could help me to get these libraries.

    If  Arrow sends an email to you with details about my company / opportunity,then I can get the library files?


    Gaoqiang Deng

  • Yes, have Arrow contact me directly and if approved you will get a URL for requesting the license.

    We will also be releasing some libraries through MotorWare for the InstaSPIN solutions later this year - no special license request required.


  • Hi Chris,

    Another problem.

    If I applied for HFI / IPD lib, you will provide library files, or a complete project(HVPM_Enhanced_Sensorless)?

    Including eSMO, HFI, IPD, documentation, etc.?



  • The IPD HFI .lib links into this project:


    Yes, extra documentation is included.

  • Hi Chris,

              I reviewed the previous post to look for some solution.I saw you have said  LVSERVOMTR is salient, but I find its Ls-d and Ls-q are the same in user.h .   I feel confused. Can you help me?


  • I Answered you here

  • Hello, where can I find information about "Dead-band compensation"?

  • C:\ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1\HVPM_Enhanced_Sensorless_2803x\~Docs\Sensorless FOC of PMSM.pdf




    this can be used to aci?
  • sure, it's just a PWM driver for 3-ph inverter


  • I'm very much obliged to you!

  • Chris,

    I have imported the eSMO.lib to the TMS320F28015 with CCS v.3.2 however, I am getting this warning message:

    ">> warning: creating output section $build.attributes without SECTIONS specification."

    Would this error prevent the code from compiling correctly? I can still load the .out file from the project. However, my esmo module is not giving me any outputs.  Can you help with this?


    Bill S.

  • Hi Chris,

    I was able to get the eSMO to work with the TMS320F28015 and CCSv3.2.  However, I am somewhat in the dark regarding what some of these parameters are suppose to be. For example, it does not clearly state what the following inputs and parameters are suppose to be:

    runSpeed, cmdSpeed, base_wTs, E0, Kslide, and Kslf? (bold items are of the most concern)

    (it appears the eSMO calculates something for Kslf based on base_wTs) base_wTs is stated to be: Incremental angle at base frequency. If the base frequency is 60hz and the isr frequency is 10000hz, would base_wTs be a fixed value of 60/10000=0.006?

    Where can I get more detailed information on the formulas for these parameters and the source code for eSMO?  Who do I need to contact in my TI sales channel to get this information?

    Here is my problem... We have an inside out (magnets on the outside) salient pole permanent magnet synchronous motor that we have developed a control for with the TMS320F28015.  We start the motor in an open loop mode (just apply a constant Iq reference and rotate the angle with a ramp generator) and then make a transition to closed loop mode once the SMO angle estimator is tracking (let the output of the SMO drive the angle).  Our issue is that given our customers application we need our closed loop mode to work down to a lower speed (15 rpm).  The motor is rated at 230v, 60Hz, 36-pole, 200 rpm.  We have been unsuccessful at getting the transition any lower than 13.5Hz (45 rpm). That means the estimator doesn't reliably track that low. I was hoping that changing the SMO to the eSMO would provide some improvements, but that does not seem to be the case.  Can you please help me find a solution for this?  Would you expect the eSMO to improve our issue?  Would the IPD + HFI improve this issue for us?   If you have any questions or would like additional information, please let me know.  I look forward to hearing back from you.


    Bill S.



  • bill,

    I've sent this over to one of the engineers who is more familiar with this project.

    Bill Szatkiewicz said:
    Our issue is that given our customers application we need our closed loop mode to work down to a lower speed (15 rpm).  The motor is rated at 230v, 60Hz, 36-pole, 200 rpm.  We have been unsuccessful at getting the transition any lower than 13.5Hz (45 rpm). That means the estimator doesn't reliably track that low. I was hoping that changing the SMO to the eSMO would provide some improvements, but that does not seem to be the case.  Can you please help me find a solution for this?  Would you expect the eSMO to improve our issue?  Would the IPD + HFI improve this issue for us?   If you have any questions or would like additional information, please let me know.

    This is about the low limit of eSMO for this type of motor.

    You have two options

    1. Use our FAST estimator from InstaSPIN-FOC. It will work lower, and 4 Hz (15 RPM) is achievable.

    2. Use a non observer technique like high frequency injection. These usually work to about 10 Hz though, so you still need to transition to an observer above this speed. Considering the eSMO is only getting to 15 Hz for you there will be a "gap" between the two most likely....AND that is assuming that the HFI works for your motor (it requires significant saliency)....I would use InstaSPIN-FOC and FAST

  • Hi Chris,

    Thanks for the reply. I am glad to hear that InstaSPIN-FOC and FAST will get us there. However, the problem is we don't have the hardware with the piccolo device developed and in production. So, our time to market would be much longer than the customer is willing to wait.

    Can I expect a reply from the other engineer in this forum?

    Appreciate your help.

    Thanks again,

    Bill S.

  • Chris,

    One other thought and question:

    If we add encoder feedback to the motor will that improve the performance of the eSMO or SMO at low speeds (below 15Hz/45rpm)?  Would that be an option to solve the issue we have? Any feedback on this would be greatly appreciated.

    Thanks again for all your help and support,

    Bill S.

  • Bill Szatkiewicz said:
    If we add encoder feedback to the motor will that improve the performance of the eSMO or SMO at low speeds (below 15Hz/45rpm)?  Would that be an option to solve the issue we have? Any feedback on this would be greatly appreciated

    If you use an encoder there is no need to use eSMO/SMO. The encoder will provide the angle and a speed into the FOC system.

    If your application can support an encoder it is typically much simpler than doing sensorless (though highspeed with an encoder still has challenges, but your motor is not high speed).

  • Hi Chris,

    Thanks for clarifying that. Do you have any literature that explains the relationship between the encoder pulses and the electrical angle? I was assuming that a hall device would also be necessary for an accurate and known angle. However, I can imagine that if we just force the rotor to a known position by applying dc to the q-axis, we can then reference the electrical angle accordingly from the encoder pulses, the machine parameters, and a 90 degree offset. Does TI offer a sofware example which does this on the TMS320F28015 device?


    Bill S.

  • Bill,

    This is in response to the earlier question about the $build.attributes section.  I believe this is an artifact of this library being compiled with a substantially newer version of a compiler than you are using.  The newer code generation tools add some tags to the object files to help them gather information on how the files were built.  The older linker you are using doesn't really know how to deal with these new sections in the object files and it would appears it is actually thinking these are part of the code and including them in the final output file.

    My advice would be to install a newer code generation tools version or upgrade to a newer version of CCS.  I checked on my installation of CCSv5.5 and it appears that the F28015 device is supported.


  • Trey,

    Thanks for the reply. Can you please provide me with a link, file, or directions on how to install a newer version of code generation tools on CCSv3.2 that will correct this error?


    Bill S.

  • Bill,

    Our compilers can be downloaded from here:

    I'm not familiar with CCSv3, but I did find these instructions for how to install a new compiler:

    Hope that helps!

  • Trey,

    That certainly helps, thanks! Are the latest Code Generation tools v6.2.8 backwards compatible with the older version of CCSv3.2? I currently have Code Generation Tools v4.1.3 which is from 2006. Can I update CCSv3.2 with the latest Code Generation Tools v6.2.8? How do I know if this is compatible?


  • 5050.ANGLE_TRANSIT macro on F28069.docx


    I am trying to study ANGLE_TRANSIT macro from HFI (Transition.h) on F28069.

    Running this macro on F28069 fail to generate .out file.

    Once again when this macro line is commented , I could generate .out file.

    Attached  shows the screen shots of the problem I mentioned above. Attached also shows the location where HFI.lib file is added. is this path correct ?

    Can F28069 be used to study HFI?



  • RK,

    The code is originally developed for 28035, but you can turn off FPU in 28069 in settings to enable you to run the project.



  • Thanks Mr Ramesh.

    It helps. Now I am trying to  build Level-8  and got few  more questions.

    1. Arguments are not matching from the Example shown in pdf document to the arguements shown in HFI.h file. Please see attached?
    2. Calling ZLSPD would serve HFI MACRO routine ?
    3.  It is not very clear to write a code from these .h files?