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.

[参考译文] TMS320F280049C:C2000 F280049C Instaspin 电机固件

Guru**** 2387080 points
Other Parts Discussed in Thread: LAUNCHXL-F280049C, DRV8301, UCC27211A, INA240, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware

器件型号:TMS320F280049C
主题中讨论的其他器件:LAUNCHXL-F280049CDRV8301UCC27211AINA240C2000WARE

您好,

我正在将 ti C2000系列(LAUNCHXL-F280049C) Insta-spin 电机固件用于我的无传感器驱动器、我正在使用 is06torquec_control.c

我需要澄清以下几点。

1.即使 我更改了 IQ 参考  IdqSet_A. Value[1] ,我也无法改变电机转速。

2.我觉得电机仍然处于强制角状态、如果是、如何从强制角状态中退出?

我们计算了定制电机参数、并在 User.h 中进行了更新 旋转电机是否足够?

4、根据 EST 或 FAST 估算器计算出的 θ 必须在 Pu 或 Rad 中标准化?

提前感谢  

Shiva

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 userid="482882" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware ]1. 即使 我更改了 IQ 参考  IdqSet_A.值[1] .[/quot]、我也无法改变电机速度。

    a.您是否使用 lab05识别电机参数、并使用识别的电机参数运行 lab06?  

    b.是否有任何负载添加到电机轴? 您应该设置足够的扭矩电流来克服电机的负载/摩擦。

    c.您可能会尝试使用正确的电机参数运行 lab07、以查看发生了什么情况。

    [引用 userid="482882" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware ]2. 我觉得电机仍然处于强制角状态、如果是、如何从强制角状态退出?

    您应该在项目主文件中找到以下代码、只需将  motorVars.flagEnableForceAngle 设置为"false"即可。 问题与 Q1中提到的强制角无关。

    EST_setFlag_enableForceAngle (estHandle、motorVars.flagEnableForceAngle);

    [引用 userid="482882" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware ]3. 我们计算了定制电机参数、并在 User.h 中进行了更新 旋转电机是否足够?[/引述]

    如 Q1中所述。 您使用的电机类型是什么? ACIM? 还是 PMSM? 请确保在 user.h 中正确设置了电机参数。

    [引用 userid="482882" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware ]4. 必须在 Pu 或 Rad?[/报价]中对根据 EST 或 FAST 估算器计算得出的 Theta 进行标准化

    答:角度以"rad"为单位。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    罗燕明、您好!

    我已使用实验05完成电机识别、并已更新 User.h 中的电机参数 我们为压缩机应用设计了自己的自定义逆变器板和电机、我们还运行后续实验以识别硬件参数。 逆变器、电机、控制器参数已在 user.h 中更新

    我们的设计不使用 DRV8301、而是将 UCC27211A 用于 H 桥三相逆变器。

    由于 FAST 在 ROM 中,所以我在无传感器模式下操作系统,因此很难理解为什么我无法使用实验06来控制电机转速。

     

    2.我正在使用实验06来运行 PMSM 电机。 尝试提高或降低电机速度并执行一些速度更改操作、但无法改变电机速度。

    3.我的电机转轴是自由的,  

    实验06电机以较低的 RPM 运行、但如果我改变 Idqset_A。value[1] 命令电机速度应该会有所不同、但我看不到速度的任何变化。

    实验07电机保持静止。

    6.我们需要在无负载的情况下调节系统,我需要检查电机速度,从较低的 RPM 到较高的 RPM。

    请告诉我需要深入研究实验06的哪个部分来执行电机控制操作?

    谢谢你

    Shiva

      

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果使用 lab07电机无法在无负载的情况下运行、您似乎没有成功识别电机参数。

    您可以参考实验室指南、使用 lab03和 lab04首先验证您的硬件板。

    请发布您使用的 user.h 和原理图。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我正在 LAUNCHXL-F280049C 上使用 InstaSPIN 无传感器 FOC 代码。

    我不理解这部分代码(请参阅随附的 snip)。

    测量的相电压(VA、Vb、VC)、而不是直接将其传递给 FAST 估算器。 执行以下公式

    VA = VA - offset*(直流总线电压)。

    需要将直流总线电压乘以偏移的原因。

    我对偏移的理解是、当输入为零时、它是传感器输出电压。

    请帮助我们更好地理解这一点。

    此致

    shivashankar  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它用于校准三相电压感应信号之间采样电路的增益误差。 三相的共模电压将在克拉克变换中消除。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好  

    我正在使用一个 eQEP_ex2_pos_speed 示例、以在480049C 控制器中测试速度和 Theta。

    我已按照 eQEP_ex2_pos_speed.c 文件中所述从 ePWM 模块环回 eQEP 模块

    我们能够绘制 θ 和速度(对于5kHz 的 PWM_CLK 速度为300rpm)

    但是、计算出 θ 的代码中很少有一部分仍然没有为我清除、您能给我解释一下下面提到的 c 语句吗  

    在 eQEP_ex2_calculation.c 中

    temp =(int32_t) p->thetaraw *(int32_t) p->mechscaler;

    temp &= 0x03FFF000;(为什么我们必须使用  此十六进制值执行"&"运算)。

    p->thetaMech =(int16_t)(温度>> 11);

    p->thetaMech &= 0x7FFF;

    p->thetaElec = p->polepairs * p->thetaMech;

    P->thetaElec &= 0x7FFF;

    如何将 p->thetaElec 中存储的值转换为 rad (0至6.283)

    请给我反馈一下。

    请告诉我是否有任何问题。

    谢谢你  

    Shiva

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    计算角度时使用的数据格式是什么? 单位? 还是浮点?

    您应该将正确的值设置为"mechscaler"、以便使用 PU 或浮点将编码器位置值转换为转子机械角。

    如果使用 PU 格式,只需直接使用多个2*PI()即可获得半径值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,罗燕明,早上好!

    • 我们使用的数据格式为 PER Unit。
    • 当 ISR 被触发时,p->thetaElec 提供 Count 值。 那么,我必须将什么值乘以 p->Electrical 才能将计数转换为弧度。
    • 可以将"mechscaler"设置为2*pi()并转换为浮点  

    请帮助我更好地理解  

    谢谢你

    Shiva

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以参阅以下代码、以获得带弧度的电角。

    obj->mechanicalscal=0.25f /obj->encLines;

    obj->thetaMech_pu = obj->mechanicalscaler*
    (float32_t) eQEP_getPositionLatch (obj->qepHandle);

    obj->thetaMech_rad = obj->thetaMech_pu * MATH_Two;

    float32_t thetaElec_pu = obj->thetaMech_pu * obj->polePairs;

    obj->thetaElec_rad =(thetaElec_pu -((int32_t) thetaElec_pu)* MATH_two_pi;

    if (obj->thetaElec_rad >= MATH_PI)

    obj->thetaElec_rad = obj->thetaElec_rad - MATH_two_PI;

    否则 if (obj->thetaElec_rad <=-Math_PI)

    obj->thetaElec_rad = obj->thetaElec_rad + Math_Two_PI;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Yanmig,晚上好!

    感谢您的宝贵支持。

    我正在与 InstaSPIN Labs 05合作进行电机识别、当我启用电机识别时、我会得到以下错误、即使在 Lab03中尝试将电机速度提高到750RPM 或50Hz 以上时、我也会遇到以下错误。

    读取寄存器 PC 时出现问题:
    (错误-1142 @ 0x0)
    器件阻止了调试访问、因为它当前正在执行不可调试的代码。 选择"粗鲁重试"以禁用礼貌模式并强制执行操作。
    (仿真包9.3.0.00042)

    请帮助我解决此错误。

    谢谢、此致

    shivashankar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    重新加载代码、不要启用器件实时调试。 并确保电源足以运行电机。

    您应该根据电机调整 user.h 文件中的识别变量。

    #define USER_MOTOR_RES_EST_CURRENT     (1.0)                              // A - 电机额定电流的10-30%

    #define USER_MOTOR_IND_EST_CURRENT     (-1.0)                            // A - 电机额定电流的10-30%、 足以实现旋转

    #define USER_MOTOR_MAX_CURRENT           (5.0)                              // A -  电机额定电流的30~150%

    #define USER_MOTOR_FLUX_EST_FREQ_Hz    (20.0)                           // Hz -电机额定频率为10~30%

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,罗燕明,早上好!

    我已根据上述建议更新了调试器设置并升级了电源、我能够旋转电机。

    我们在 lab06中观察到的几个点如下所示。 我随函附上了 user.h、敬请查看、并让我知道我们需要修改哪些变量才能顺利启动。

    //#############################################################################
    // $TI Release: MotorControl SDK v3.01.00.00 $
    // $Release Date: Mon Jan 11 11:23:03 CST 2021 $
    // $Copyright:
    // Copyright (C) 2017-2018 Texas Instruments Incorporated - http://www.ti.com/
    //
    // Redistribution and use in source and binary forms, with or without
    // modification, are permitted provided that the following conditions
    // are met:
    // 
    //   Redistributions of source code must retain the above copyright
    //   notice, this list of conditions and the following disclaimer.
    // 
    //   Redistributions in binary form must reproduce the above copyright
    //   notice, this list of conditions and the following disclaimer in the
    //   documentation and/or other materials provided with the
    //   distribution.
    // 
    //   Neither the name of Texas Instruments Incorporated nor the names of
    //   its contributors may be used to endorse or promote products derived
    //   from this software without specific prior written permission.
    // 
    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    // $
    //#############################################################################
    
    #ifndef USER_H
    #define USER_H
    
    //! \file   solutions/tmdshvmtrinspin/f28004x/drivers/user.h
    //! \brief  Contains the user related definitions
    //!
    
    
    // **************************************************************************
    // the includes
    
    // modules
    #include "userParams.h"
    
    //!
    //!
    //! \defgroup USER USER
    //!
    //@{
    
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    
    // **************************************************************************
    // the defines
    //! \brief Defines the nominal DC bus voltage, V
    //!UC1
    #define USER_NOMINAL_DC_BUS_VOLTAGE_V          ((float32_t)(48))//(48.06))
    
    
    //! \brief Defines the maximum voltage at the AD converter
    //! UC2
    #define USER_ADC_FULL_SCALE_VOLTAGE_V         ((float32_t)(73.512))         // Full scale voltage of AD converter, not the current voltage
    
    
    //! \brief Defines the maximum current at the AD converter
    //! UC3
    #define USER_ADC_FULL_SCALE_CURRENT_A         ((float32_t)(110))          // High Voltage motor control kit
    
    //! \brief Defines the analog voltage filter pole location, Hz
    //!
    #define USER_VOLTAGE_FILTER_POLE_Hz           ((float32_t)(1645))//((float32_t)(372.5))
    
    //UC4
    //! \brief ADC current offsets for A, B, and C phases
    #define   IA_OFFSET_A    (54.9097328)//(9.97279739)            // ~=0.5*USER_ADC_FULL_SCALE_CURRENT_A
    #define   IB_OFFSET_A    (54.8998909)//(9.95302963)            // ~=0.5*USER_ADC_FULL_SCALE_CURRENT_A
    #define   IC_OFFSET_A    (54.9354401)//(9.89870834)            // ~=0.5*USER_ADC_FULL_SCALE_CURRENT_A
    
    //UC5
    //! \brief ADC voltage offsets for A, B, and C phases
    #define   VA_OFFSET_V    (0.984116137)//(0.990514159)             // ~=1.0
    #define   VB_OFFSET_V    (0.988968074)//(0.986255884)             // ~=1.0
    #define   VC_OFFSET_V    (0.986530721)//(0.983381569)             // ~=1.0
    
    
    //! \brief Vbus used to calculate the voltage offsets A, B, and C
    #define   VBUS_OFFSET_V  (0.5*USER_ADC_FULL_SCALE_VOLTAGE_V)     // =0.5*USER_NOMINAL_DC_BUS_VOLTAGE_V
    
    
    //! \brief Defines the maximum negative current to be applied in Id reference
    //!
    #define USER_MAX_NEGATIVE_ID_REF_CURRENT_A    ((float32_t)(-2.0))
    
    
    //! \brief Defines the number of pwm clock ticks per isr clock tick
    //!        Note: Valid values are 1, 2 or 3 only
    #define USER_NUM_PWM_TICKS_PER_ISR_TICK        (2)
    
    //! \brief Defines the number of ISR clock ticks per current controller clock tick
    //!
    #define USER_NUM_ISR_TICKS_PER_CURRENT_TICK     (1)
    
    
    //! \brief Defines the number of ISR clock ticks per speed controller clock tick
    //!
    #define USER_NUM_ISR_TICKS_PER_SPEED_TICK     (10)
    
    
    //! \brief Defines the number of current sensors
    //!
    #define USER_NUM_CURRENT_SENSORS               (3)
    
    
    //! \brief Defines the number of voltage sensors
    //!
    #define USER_NUM_VOLTAGE_SENSORS               (3)
    
    //! \brief Defines the system maximum input frequency, MHz
    //!
    #define USER_MAXIMUM_SCALE_FREQ_Hz    ((float32_t)(1000.0))
    
    //! \brief Defines the system clock frequency, MHz
    //!
    #define USER_SYSTEM_FREQ_MHz       ((float32_t)(100.0))
    
    
    //! \brief Defines the Pulse Width Modulation (PWM) frequency, kHz
    //!
    //#define USER_PWM_FREQ_kHz          ((float32_t)(5.0))              //5KHz PWM frequency
    #define USER_PWM_FREQ_kHz          ((float32_t)(10.0))              //10KHz PWM frequency
    //#define USER_PWM_FREQ_kHz          ((float32_t)(12.0))              //12KHz PWM frequency
    //#define USER_PWM_FREQ_kHz          ((float32_t)(15.0))              //15KHz PWM frequency
    //#define USER_PWM_FREQ_kHz          ((float32_t)(20.0))            //20KHz PWM frequency
    
    //! \brief Defines the Pulse Width Modulation (PWM) period, usec
    //!
    #define USER_PWM_PERIOD_usec       ((float32_t)1000.0/USER_PWM_FREQ_kHz)
    
    
    //! \brief Defines the Interrupt Service Routine (ISR) frequency, Hz
    //!
    #define USER_ISR_FREQ_Hz           (USER_PWM_FREQ_kHz * (float32_t)1000.0 / (float32_t)USER_NUM_PWM_TICKS_PER_ISR_TICK)
    
    
    //! \brief Defines the Interrupt Service Routine (ISR) period, usec
    //!
    #define USER_ISR_PERIOD_usec       (USER_PWM_PERIOD_usec * (float32_t)USER_NUM_PWM_TICKS_PER_ISR_TICK)
    
    
    #ifdef _VSF_EN_
    //! \brief Defines the timer frequency for estimator, kHz
    //!
    #define USER_EST_FREQ_kHz       ((float32_t)(20.0))
    
    
    //! \brief Defines the timer frequency for estimator, Hz
    //!
    #define USER_EST_FREQ_Hz        (USER_EST_FREQ_kHz * (float32_t)1000.0)
    
    
    //! \brief Defines the Interrupt Service Routine (ISR) period, usec
    //!
    #define USER_EST_PERIOD_usec    ((float32_t)1000000.0/USER_EST_FREQ_Hz)
    
    
    //! \brief Defines the timer frequency for controller, Hz
    //!
    #define USER_CTRL_FREQ_Hz        (USER_EST_FREQ_Hz)
    
    
    //! \brief Defines the controller execution period, usec
    //!
    #define USER_CTRL_PERIOD_usec   (USER_EST_PERIOD_usec)
    
    
    //! \brief Defines the controller execution period, sec
    //!
    #define USER_CTRL_PERIOD_sec    ((float32_t)USER_CTRL_PERIOD_usec/(float32_t)1000000.0)
    
    
    //! \brief Defines the timer frequency for trajectory, Hz
    //!
    #define USER_TRAJ_FREQ_Hz       (USER_EST_FREQ_Hz)
    #else
    //! \brief Defines the timer frequency for estimator, kHz
    //!
    #define USER_EST_FREQ_Hz        (USER_ISR_FREQ_Hz)
    
    
    //! \brief Defines the Interrupt Service Routine (ISR) period, usec
    //!
    #define USER_EST_PERIOD_usec    (USER_ISR_PERIOD_usec)
    
    
    //! \brief Defines the timer frequency for controller, Hz
    //!
    #define USER_CTRL_FREQ_Hz        (USER_ISR_FREQ_Hz)
    
    
    //! \brief Defines the controller execution period, usec
    //!
    #define USER_CTRL_PERIOD_usec   (USER_ISR_PERIOD_usec)
    
    
    //! \brief Defines the controller execution period, sec
    //!
    #define USER_CTRL_PERIOD_sec    ((float32_t)USER_CTRL_PERIOD_usec/(float32_t)1000000.0)
    
    //! \brief Defines the timer frequency for trajectory, Hz
    //!
    #define USER_TRAJ_FREQ_Hz       (USER_ISR_FREQ_Hz)
    #endif  // _VPF_EN_
    
    
    //! \brief Defines the direct voltage (Vd) scale factor
    //!
    #define USER_VD_SF                 ((float32_t)(0.95))
    
    
    //! \brief Defines the voltage scale factor for the system
    //!
    #define USER_VOLTAGE_SF               (USER_ADC_FULL_SCALE_VOLTAGE_V / (float32_t)4096.0)            // 12 bit ADC, 2^12 = 4096
    #define USER_DCBUS_VOLTAGE_SF         (USER_ADC_FULL_SCALE_DCBUS_VOLTAGE_V / (float32_t)4096.0)      // 12 bit ADC, 2^12 = 4096
    
    //! \brief Defines the current scale factor for the system
    //!
    #define USER_CURRENT_SF               (USER_ADC_FULL_SCALE_CURRENT_A / (float32_t)4096.0)    // 12 bit ADC, 2^12 = 4096
    
    
    //! \brief Defines the pole location for the DC bus filter, rad/sec
    //!
    #define USER_DCBUS_POLE_rps            ((float32_t)(10335.96838))
    
    
    //! \brief Defines the pole location for the voltage and current offset estimation, rad/s
    //!
    #define USER_OFFSET_POLE_rps            ((float32_t)(20.0))
    
    
    //! \brief Defines the pole location for the speed control filter, rad/sec
    //!
    #define USER_SPEED_POLE_rps        ((float32_t)(100.0))
    
    
    //! \brief Defines the analog voltage filter pole location, rad/s
    //!
    #define USER_VOLTAGE_FILTER_POLE_rps  (MATH_TWO_PI * USER_VOLTAGE_FILTER_POLE_Hz)
    
    //! \brief Defines the maximum Vs magnitude in per units allowed
    //!        This value sets the maximum magnitude for the output of the Id and
    //!        Iq PI current controllers. The Id and Iq current controller outputs
    //!        are Vd and Vq. The relationship between Vs, Vd, and Vq is:
    //!        Vs = sqrt(Vd^2 + Vq^2).  In this FOC controller, the Vd value is set
    //!        equal to USER_MAX_VS_MAG*USER_VD_MAG_FACTOR.
    //!        so the Vq value is set equal to sqrt(USER_MAX_VS_MAG^2 - Vd^2).
    //!
    //!        Set USER_MAX_VS_MAG = 0.5 for a pure sinewave with a peak at
    //!        SQRT(3)/2 = 86.6% duty cycle.  No current reconstruction
    //!        is needed for this scenario.
    //!
    //!        Set USER_MAX_VS_MAG = 1/SQRT(3) = 0.5774 for a pure sinewave
    //!        with a peak at 100% duty cycle.  Current reconstruction
    //!        will be needed for this scenario (Lab08).
    //!
    //!        Set USER_MAX_VS_MAG = 2/3 = 0.6666 to create a trapezoidal
    //!        voltage waveform.  Current reconstruction will be needed
    //!        for this scenario (Lab08).
    //!
    //!        For space vector over-modulation, see lab08 for details on
    //!        system requirements that will allow the SVM generator to
    //!        go all the way to trapezoidal.
    //!
    //#define USER_MAX_VS_MAG_PU            (0.66)
    //#define USER_MAX_VS_MAG_PU            (0.57)
    #define USER_MAX_VS_MAG_PU              (0.5)
    
    
    //! \brief Defines the reference Vs magnitude in per units allowed
    //! \      Set the value equal from 0.5 to 0.95 of the maximum Vs magnitude
    #define USER_VS_REF_MAG_PU              ((float32_t)(0.8) * USER_MAX_VS_MAG_PU)
    
    
    //! \brief Defines the R/L excitation frequency, Hz
    //!
    #define USER_R_OVER_L_EXC_FREQ_Hz  ((float32_t)(300.0))
    
    
    //! \brief Defines the R/L Kp scale factor, pu
    //!        Kp used during R/L is USER_R_OVER_L_KP_SF * USER_NOMINAL_DC_BUS_VOLTAGE_V / USER_MOTOR_MAX_CURRENT_A;
    //!
    #define USER_R_OVER_L_KP_SF        ((float32_t)(0.102101761))
    
    
    //! \brief Defines maximum acceleration for the estimation speed profiles, Hz/sec
    //!
    #define USER_MAX_ACCEL_Hzps        ((float32_t)(2))
    
    
    //! \brief Defines the IdRated delta to use during estimation
    //!
    #define USER_IDRATED_DELTA_A       ((float32_t)(0.0001))
    
    
    //! \brief Defines the forced angle frequency, Hz
    //!
    #define USER_FORCE_ANGLE_FREQ_Hz            ((float32_t)(0.001))
    
    
    //! \brief Defines the fraction of IdRated to use during inductance estimation
    //!
    #define USER_IDRATED_FRACTION_FOR_L_IDENT    ((float32_t)(0.5))
    
    
    //! \brief Defines the fraction of SpeedMax to use during inductance estimation
    //!
    #define USER_SPEEDMAX_FRACTION_FOR_L_IDENT  ((float32_t)(1.0))
    
    
    //! \brief Defines the Power Warp gain for computing Id reference
    //!        If motor parameters are known, set this gain to:
    //!        USER_PW_GAIN = SQRT(1.0 + USER_MOTOR_Rr_Ohm / USER_MOTOR_Rs_Ohm)
    //!
    #define USER_PW_GAIN                        ((float32_t)(1.0))
    
    //! \brief Defines the scale factor for the flux estimation
    //! the default value is 1.0f, change the value between 0.1f and 1.25f
    //!
    #define USER_EST_FLUX_HF_SF                 ((float32_t)(0.12f))
    
    
    //! \brief Defines the scale factor for the frequency estimation
    //! the default value is 1.0f, change the value between 0.5f and 1.5f
    //!
    #define USER_EST_FREQ_HF_SF                 ((float32_t)(1.0f))
    
    
    //! \brief Defines the scale factor for the bemf estimation
    //! the default value is 1.0f, change the value between 0.50f and 1.25f
    //!
    #define USER_EST_BEMF_HF_SF                 ((float32_t)(1.0f))
    
    //! \brief A flag to bypass motor identification (1/0 : true/false)
    //!
    #define USER_BYPASS_MOTOR_ID       (1)          // No motor parameters identification
    //#define USER_BYPASS_MOTOR_ID        (0)           // Do motor parameters identification
    
    #define USER_ENABLE_MOTOR_ID        0
    #define USER_DISABLE_MOTOR_ID       1
    
    
    //! brief Define the Kp gain for Field Weakening Control
    #define USER_FWC_KP                 0.05
    
    //! brief Define the Ki gain for Field Weakening Control
    #define USER_FWC_KI                 0.0002
    
    //! brief Define the maximum current vector angle for Field Weakening Control
    #define USER_FWC_MAX_ANGLE          (float32_t)(-75.0)                              // degree
    #define USER_FWC_MAX_ANGLE_RAD      USER_FWC_MAX_ANGLE*MATH_PI/((float32_t)(180.0))   // rad
    
    //! brief Define the minimum current vector angle for Field Weakening Control
    #define USER_FWC_MIN_ANGLE          (float32_t)(0.0)                                // degree
    #define USER_FWC_MIN_ANGLE_RAD      USER_FWC_MIN_ANGLE*MATH_PI/((float32_t)(180.0))   // rad
    
    //============================================================================================
    // Motor defines
    
    //************** Motor Parameters **************
    
    // PMSM motors
    #define Estun_EMJ_04APB22_A         101
    #define Estun_EMJ_04APB22_B         102
    #define Marathon_N56PNRA10102       103
    #define Anaheim_BLWS235D_160V       104
    
    #define Teknic_M2310PLN04K          121
    #define Anaheim_BLY172S_24V         122
    #define Anaheim_BLY341S_48V         123
    #define Anaheim_BLY341S_24V         124
    
    #define Traxxas_Velineon_380        131
    #define Traxxas_Velineon_3500       132
    #define Pacific_Scientific          133
    #define Regal_Beloit_5SME39DL0756   134
    #define AutoRadiatorFan             135
    
    #define philips_respirator          141
    #define tekin_redline_4600KV        142
    
    // ACIM motors
    #define Marathon_5K33GN2A           201
    #define Marathon_56H17T2011A        202
    #define Dayton_3N352C               203
    
    #define my_motor_1                  301
    
    //#define USER_MOTOR Estun_EMJ_04APB22_A
    //#define USER_MOTOR Estun_EMJ_04APB22_B
    //#define USER_MOTOR Marathon_N56PNRA10102
    //#define USER_MOTOR Anaheim_BLWS235D_160V
    
    //#define USER_MOTOR Teknic_M2310PLN04K
    //#define USER_MOTOR Anaheim_BLY172S_24V
    //#define USER_MOTOR Anaheim_BLY341S_48V
    //#define USER_MOTOR Anaheim_BLY341S_24V
    
    //#define USER_MOTOR Traxxas_Velineon_380
    //#define USER_MOTOR Traxxas_Velineon_3500
    //#define USER_MOTOR Pacific_Scientific
    //#define USER_MOTOR Regal_Beloit_5SME39DL0756
    //#define USER_MOTOR AutoRadiatorFan
    
    //#define USER_MOTOR philips_respirator
    //#define USER_MOTOR tekin_redline_4600KV
    
    //#define USER_MOTOR Marathon_5K33GN2A
    //#define USER_MOTOR Marathon_56H17T2011A
    //#define USER_MOTOR Dayton_3N352C
    
    #define USER_MOTOR my_motor_1
    //#define USER_MOTOR my_motor_2
    
    #if (USER_MOTOR == Estun_EMJ_04APB22_A)
    #define USER_MOTOR_TYPE                    MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (4)
    #define USER_MOTOR_Rr_Ohm                 (0.0)
    #define USER_MOTOR_Rs_Ohm                 (2.26793718)
    #define USER_MOTOR_Ls_d_H                 (0.00808008015)
    #define USER_MOTOR_Ls_q_H                 (0.00808008015)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.387036026)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (1.0)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-1.0)
    #define USER_MOTOR_MAX_CURRENT_A          (3.82)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (20.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (2500.0)
    #define USER_MOTOR_INERTIA_Kgm2           (3.10002e-05)
    
    #define USER_MOTOR_FREQ_MIN_HZ             (5.0)           // Hz
    #define USER_MOTOR_FREQ_MAX_HZ            (400.0)         // Hz
    
    #define USER_MOTOR_FREQ_LOW_HZ            (10.0)          // Hz
    #define USER_MOTOR_FREQ_HIGH_HZ           (200.0)         // Hz
    #define USER_MOTOR_VOLT_MIN_V             (30.0)          // Volt
    #define USER_MOTOR_VOLT_MAX_V             (200.0)         // Volt
    
    #elif (USER_MOTOR == Estun_EMJ_04APB22_B)
    #define USER_MOTOR_TYPE                    MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (4)
    #define USER_MOTOR_Rr_Ohm                 (0.0)
    
    // HV Kit with external OPA
    #define USER_MOTOR_Rs_Ohm                 (2.98774099)
    #define USER_MOTOR_Ls_d_H                 (0.008926632)
    #define USER_MOTOR_Ls_q_H                 (0.008926632)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.445965141)
    
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (1.0)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-1.0)
    #define USER_MOTOR_MAX_CURRENT_A          (3.82)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (20.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (2500.0)
    #define USER_MOTOR_INERTIA_Kgm2           (3.10002e-05)
    
    #define USER_MOTOR_FREQ_MIN_HZ             (5.0)           // Hz
    #define USER_MOTOR_FREQ_MAX_HZ            (400.0)         // Hz
    
    #define USER_MOTOR_FREQ_LOW_HZ            (10.0)          // Hz
    #define USER_MOTOR_FREQ_HIGH_HZ           (200.0)         // Hz
    #define USER_MOTOR_VOLT_MIN_V             (20.0)          // Volt
    #define USER_MOTOR_VOLT_MAX_V             (200.0)         // Volt
    
    #elif (USER_MOTOR == Marathon_N56PNRA10102)
    #define USER_MOTOR_TYPE                    MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (3)
    #define USER_MOTOR_Rr_Ohm                 (0.0)
    
    // HV Kit with external OPA
    #define USER_MOTOR_Rs_Ohm                 (2.17462158)
    #define USER_MOTOR_Ls_H                   (0.0269199051)
    #define USER_MOTOR_Ls_d_H                 (0.0218)
    #define USER_MOTOR_Ls_q_H                 (0.0505)
    #define USER_MOTOR_RATED_FLUX_VpHz        (2.65306973)
    
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (3.0)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-2.0)
    #define USER_MOTOR_MAX_CURRENT_A          (6.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (20.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (2500.0)
    #define USER_MOTOR_INERTIA_Kgm2           (2.6981376e-03)
    
    #define USER_MOTOR_FREQ_MIN_HZ             (5.0)           // Hz
    #define USER_MOTOR_FREQ_MAX_HZ            (400.0)         // Hz
    
    #define USER_MOTOR_FREQ_LOW_HZ            (10.0)          // Hz
    #define USER_MOTOR_FREQ_HIGH_HZ           (200.0)         // Hz
    #define USER_MOTOR_VOLT_MIN_V             (20.0)          // Volt
    #define USER_MOTOR_VOLT_MAX_V             (200.0)         // Volt
    
    #elif (USER_MOTOR == Anaheim_BLWS235D_160V)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (2)
    #define USER_MOTOR_Rr_Ohm                 (NULL)
    #define USER_MOTOR_Rs_Ohm                 (5.3205986)
    #define USER_MOTOR_Ls_d_H                 (0.0221263766)
    #define USER_MOTOR_Ls_q_H                 (0.0221263766)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.557901621)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (1.5)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-1.0)
    #define USER_MOTOR_MAX_CURRENT_A          (5.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (20.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (NULL)
    #define USER_MOTOR_INERTIA_Kgm2           (3.99683e-05)     // 0.00566 oz-in-sec2
    
    #define USER_MOTOR_FREQ_MIN_HZ            (5.0)             // Hz
    #define USER_MOTOR_FREQ_MAX_HZ            (300.0)           // Hz
    
    #define USER_MOTOR_FREQ_LOW_HZ            (10.0)            // Hz
    #define USER_MOTOR_FREQ_HIGH_HZ           (200.0)           // Hz
    #define USER_MOTOR_VOLT_MIN_V             (30.0)            // Volt
    #define USER_MOTOR_VOLT_MAX_V             (200.0)           // Volt
    
    #elif (USER_MOTOR == Teknic_M2310PLN04K)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (4)
    #define USER_MOTOR_Rr_Ohm                 (NULL)
    #define USER_MOTOR_Rs_Ohm                 (0.381334811)
    #define USER_MOTOR_Ls_d_H                 (0.000169791776)
    #define USER_MOTOR_Ls_q_H                 (0.000169791776)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.0398557819)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (2.0)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-1.5)
    #define USER_MOTOR_MAX_CURRENT_A          (6.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (40.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (1000)
    #define USER_MOTOR_INERTIA_Kgm2           (7.06154e-06)
    
    #define USER_MOTOR_RATED_VOLTAGE_V        (24.0)
    #define USER_MOTOR_RATED_SPEED_KRPM       (3.0)
    
    #define USER_MOTOR_FREQ_MIN_HZ            (5.0)           // Hz
    #define USER_MOTOR_FREQ_MAX_HZ            (600.0)         // Hz
    
    #define USER_MOTOR_FREQ_LOW_HZ            (20.0)          // Hz
    #define USER_MOTOR_FREQ_HIGH_HZ           (400.0)         // Hz
    #define USER_MOTOR_VOLT_MIN_V             (4.0)           // Volt
    #define USER_MOTOR_VOLT_MAX_V             (24.0)          // Volt
    
    #elif (USER_MOTOR == Anaheim_BLY172S_24V)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (4)
    #define USER_MOTOR_Rr_Ohm                 (NULL)
    #define USER_MOTOR_Rs_Ohm                 (0.4)
    #define USER_MOTOR_Ls_d_H                 (0.0007190173)
    #define USER_MOTOR_Ls_q_H                 (0.0007190173)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.0327013217)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (1.5)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-1.5)
    #define USER_MOTOR_MAX_CURRENT_A          (5.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (20.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (NULL)
    #define USER_MOTOR_INERTIA_Kgm2           (3.96154e-06)
    
    #define USER_MOTOR_FREQ_MIN_HZ             (5.0)           // Hz
    #define USER_MOTOR_FREQ_MAX_HZ            (300.0)         // Hz
    
    #define USER_MOTOR_FREQ_LOW_HZ            (10.0)          // Hz
    #define USER_MOTOR_FREQ_HIGH_HZ           (400.0)         // Hz
    #define USER_MOTOR_VOLT_MIN_V             (4.0)           // Volt
    #define USER_MOTOR_VOLT_MAX_V             (24.0)          // Volt
    
    #elif (USER_MOTOR == Anaheim_BLY341S_48V)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (4)
    #define USER_MOTOR_Rr_Ohm                 (NULL)
    #define USER_MOTOR_Rs_Ohm                 (0.463800967)
    #define USER_MOTOR_Ls_d_H                 (0.00114538975)
    #define USER_MOTOR_Ls_q_H                 (0.00114538975)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.0978558362)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (2.5)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-2.0)
    #define USER_MOTOR_MAX_CURRENT_A          (20.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (20.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (NULL)
    
    #define USER_MOTOR_FREQ_MIN_HZ             (5.0)           // Hz
    #define USER_MOTOR_FREQ_MAX_HZ            (300.0)         // Hz
    
    #define USER_MOTOR_FREQ_LOW_HZ            (10.0)          // Hz
    #define USER_MOTOR_FREQ_HIGH_HZ           (200.0)         // Hz
    #define USER_MOTOR_VOLT_MIN_V             (4.0)           // Volt
    #define USER_MOTOR_VOLT_MAX_V             (24.0)          // Volt
    
    #elif (USER_MOTOR == Anaheim_BLY341S_24V)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (4)
    #define USER_MOTOR_Rr_Ohm                 (NULL)
    #define USER_MOTOR_Rs_Ohm                 (0.4110007)
    #define USER_MOTOR_Ls_d_H                 (0.0007092811)
    #define USER_MOTOR_Ls_q_H                 (0.0007092811)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.03279636)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (1.5)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-1.0)
    #define USER_MOTOR_MAX_CURRENT_A          (10.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (20.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (NULL)
    
    #define USER_MOTOR_FREQ_MIN_HZ             (5.0)           // Hz
    #define USER_MOTOR_FREQ_MAX_HZ            (300.0)         // Hz
    
    #define USER_MOTOR_FREQ_LOW_HZ            (10.0)          // Hz
    #define USER_MOTOR_FREQ_HIGH_HZ           (200.0)         // Hz
    #define USER_MOTOR_VOLT_MIN_V             (4.0)           // Volt
    #define USER_MOTOR_VOLT_MAX_V             (24.0)          // Volt
    
    #elif (USER_MOTOR == Traxxas_Velineon_380)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (1)
    #define USER_MOTOR_Rr_Ohm                 (NULL)
    #define USER_MOTOR_Rs_Ohm                 (TBD)
    #define USER_MOTOR_Ls_d_H                 (TBD)
    #define USER_MOTOR_Ls_q_H                 (TBD)
    #define USER_MOTOR_RATED_FLUX_VpHz        (TBD)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (4.0)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-0.5)
    #define USER_MOTOR_MAX_CURRENT_A          (10.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (20.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (NULL)
    
    #elif (USER_MOTOR == Traxxas_Velineon_3500)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (1)
    #define USER_MOTOR_Rr_Ohm                 (NULL)
    #define USER_MOTOR_Rs_Ohm                 (0.01822988)
    #define USER_MOTOR_Ls_d_H                 (8.322238e-06)
    #define USER_MOTOR_Ls_q_H                 (8.322238e-06)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.010249538)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (2.0)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-2.0)
    #define USER_MOTOR_MAX_CURRENT_A          (5.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (40.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (NULL)
    
    #elif (USER_MOTOR == Pacific_Scientific)
    #define USER_MOTOR_TYPE                    MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (4)
    #define USER_MOTOR_Rr_Ohm                 (0.0)
    #define USER_MOTOR_Rs_Ohm                 (0.9428042)
    #define USER_MOTOR_Ls_d_H                 (0.002196057)
    #define USER_MOTOR_Ls_q_H                 (0.002196057)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.3481677)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (1.0)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-1.0)
    #define USER_MOTOR_MAX_CURRENT_A          (8.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (20.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (NULL)
    
    #elif (USER_MOTOR == Regal_Beloit_5SME39DL0756)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (3)
    #define USER_MOTOR_Rr_Ohm                 (0.0)
    #define USER_MOTOR_Rs_Ohm                 (4.581007)
    #define USER_MOTOR_Ls_d_H                 (0.03727356)
    #define USER_MOTOR_Ls_q_H                 (0.03727356)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.6589699)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (1.0)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-1.0)
    #define USER_MOTOR_MAX_CURRENT_A          (2.6)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (20.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (NULL)
    
    #elif (USER_MOTOR == AutoRadiatorFan)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (4)
    #define USER_MOTOR_Rr_Ohm                 (0.0)
    #define USER_MOTOR_Rs_Ohm                 (0.0)
    #define USER_MOTOR_Ls_d_H                 (0.0)
    #define USER_MOTOR_Ls_q_H                 (0.0)
    #define USER_MOTOR_RATED_FLUX_VpHz        (TBD)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (1.0)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-1.0)
    #define USER_MOTOR_MAX_CURRENT_A          (10.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (50.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (NULL)
    
    #elif (USER_MOTOR == philips_respirator)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (1)
    #define USER_MOTOR_Rr_Ohm                 (NULL)
    #define USER_MOTOR_Rs_Ohm                 (0.1690236)
    #define USER_MOTOR_Ls_d_H                 (0.0001557156)
    #define USER_MOTOR_Ls_q_H                 (0.0001557156)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.011538831)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (1.0)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-1.0)
    #define USER_MOTOR_MAX_CURRENT_A          (5.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (40.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (NULL)
    
    #elif (USER_MOTOR == tekin_redline_4600KV)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (2)
    #define USER_MOTOR_Rr_Ohm                 (NULL)
    #define USER_MOTOR_Rs_Ohm                 (0.0181193)
    #define USER_MOTOR_Ls_d_H                 (8.180002e-06)
    #define USER_MOTOR_Ls_q_H                 (8.180002e-06)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.0041173688)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (3.0)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-3.0)
    #define USER_MOTOR_MAX_CURRENT_A          (5.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (60.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (NULL)
    
    #elif (USER_MOTOR == Marathon_5K33GN2A)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_INDUCTION
    #define USER_MOTOR_NUM_POLE_PAIRS         (2)
    #define USER_MOTOR_Rr_Ohm                 (5.508003)
    #define USER_MOTOR_Rs_Ohm                 (10.71121)
    #define USER_MOTOR_Ls_d_H                 (0.05296588)
    #define USER_MOTOR_Ls_q_H                 (0.05296588)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.8165*220.0/60.0)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (1.378)
    #define USER_MOTOR_RES_EST_CURRENT_A      (1.0)
    #define USER_MOTOR_IND_EST_CURRENT_A      (NULL)
    #define USER_MOTOR_MAX_CURRENT_A          (3.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (5.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (NULL)
    #define USER_MOTOR_INERTIA_Kgm2           (2.12002e-05)
    
    #define USER_MOTOR_FREQ_MIN_HZ            (5.0)           // Hz
    #define USER_MOTOR_FREQ_MAX_HZ            (400.0)         // Hz
    
    #define USER_MOTOR_FREQ_LOW_HZ            (10.0)          // Hz
    #define USER_MOTOR_FREQ_HIGH_HZ           (200.0)         // Hz
    #define USER_MOTOR_VOLT_MIN_V             (20.0)          // Volt
    #define USER_MOTOR_VOLT_MAX_V             (200.0)         // Volt
    
    
    #elif (USER_MOTOR == Marathon_56H17T2011A)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_INDUCTION
    #define USER_MOTOR_NUM_POLE_PAIRS         (2)
    #define USER_MOTOR_Rr_Ohm                 (5.159403)
    #define USER_MOTOR_Rs_Ohm                 (7.924815)
    #define USER_MOTOR_Ls_d_H                 (0.03904648)
    #define USER_MOTOR_Ls_q_H                 (0.03904648)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.8165*220.0/60.0)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (0.9941965)
    #define USER_MOTOR_RES_EST_CURRENT_A      (0.5)
    #define USER_MOTOR_IND_EST_CURRENT_A      (NULL)
    #define USER_MOTOR_MAX_CURRENT_A          (2.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (5.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (NULL)
    
    #elif (USER_MOTOR == Dayton_3N352C)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_INDUCTION
    #define USER_MOTOR_NUM_POLE_PAIRS         (2)
    #define USER_MOTOR_Rr_Ohm                 (2.428799)
    #define USER_MOTOR_Rs_Ohm                 (2.863202)
    #define USER_MOTOR_Ls_d_H                 (0.02391323)
    #define USER_MOTOR_Ls_q_H                 (0.02391323)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.8165*230.0/60.0)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (1.0)
    #define USER_MOTOR_IND_EST_CURRENT_A      (NULL)
    #define USER_MOTOR_MAX_CURRENT_A          (3.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (5.0)
    #define USER_MOTOR_NUM_ENC_SLOTS          (NULL)
    
    #elif (USER_MOTOR == my_motor_1)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR_NUM_POLE_PAIRS         (4)
    //#define USER_MOTOR_Rr_Ohm                 (0)
    //#define USER_MOTOR_Rs_Ohm                 (0.00100000005)
    //#define USER_MOTOR_Ls_d_H                 (0.000109549786)
    //#define USER_MOTOR_Ls_q_H                 (0.000109549786)
    //#define USER_MOTOR_RATED_FLUX_VpHz        (29.1709232)
    // 0.05
    //#define USER_MOTOR_Rr_Ohm                 (0)
    //#define USER_MOTOR_Rs_Ohm                 (51.9361992)
    //#define USER_MOTOR_Ls_d_H                 (9.99999997e-07)
    //#define USER_MOTOR_Ls_q_H                 (9.99999997e-07)
    //#define USER_MOTOR_RATED_FLUX_VpHz        (78.5390778)
    #define USER_MOTOR_Rr_Ohm                 (NULL)
    #define USER_MOTOR_Rs_Ohm                 (0.014)
    #define USER_MOTOR_Ls_d_H                 (0.000032)
    #define USER_MOTOR_Ls_q_H                 (0.000052)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.064371668)//(0.8165*230.0/60.0)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (2.0)
    #define USER_MOTOR_IND_EST_CURRENT_A      (-2.0)
    #define USER_MOTOR_MAX_CURRENT_A          (10)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (40.0)
    
    
    
    // Number of lines on the motor's quadrature encoder
    #define USER_MOTOR_NUM_ENC_SLOTS          (1000)
    
    #define USER_MOTOR_FREQ_MIN_HZ             (5.0)           // Hz
    #define USER_MOTOR_FREQ_MAX_HZ            (300.0)         // Hz
    
    #define USER_MOTOR_FREQ_LOW_HZ            (10.0)          // Hz
    #define USER_MOTOR_FREQ_HIGH_HZ           (400.0)         // Hz
    #define USER_MOTOR_VOLT_MIN_V             (24)           // Volt
    #define USER_MOTOR_VOLT_MAX_V             (48)          // Volt
    
    #elif (USER_MOTOR == my_motor_2)
    #define USER_MOTOR_TYPE                   MOTOR_TYPE_INDUCTION
    #define USER_MOTOR_NUM_POLE_PAIRS         (2)
    #define USER_MOTOR_Rr_Ohm                 (NULL)
    #define USER_MOTOR_Rs_Ohm                 (NULL)
    #define USER_MOTOR_Ls_d_H                 (NULL)
    #define USER_MOTOR_Ls_q_H                 (NULL)
    #define USER_MOTOR_RATED_FLUX_VpHz        (0.8165*230.0/60.0)
    #define USER_MOTOR_MAGNETIZING_CURRENT_A  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT_A      (0.5)
    #define USER_MOTOR_IND_EST_CURRENT_A      (NULL)
    #define USER_MOTOR_MAX_CURRENT_A          (5.0)
    #define USER_MOTOR_FLUX_EXC_FREQ_Hz       (5.0)
    
    // Number of lines on the motor's quadrature encoder
    #define USER_MOTOR_NUM_ENC_SLOTS          (1000)
    
    #define USER_MOTOR_FREQ_MIN_HZ             (5.0)           // Hz
    #define USER_MOTOR_FREQ_MAX_HZ            (300.0)         // Hz
    
    #define USER_MOTOR_FREQ_LOW_HZ            (10.0)          // Hz
    #define USER_MOTOR_FREQ_HIGH_HZ           (400.0)         // Hz
    #define USER_MOTOR_VOLT_MIN_V             (4.0)           // Volt
    #define USER_MOTOR_VOLT_MAX_V             (24.0)          // Volt
    
    #else
    #error No motor type specified
    #endif
    
    
    //! \brief Defines the maximum current slope for Id trajectory
    //!
    #define USER_MAX_CURRENT_DELTA_A        (USER_MOTOR_RES_EST_CURRENT_A / USER_ISR_FREQ_Hz)
    
    
    //! \brief Defines the maximum current slope for Id trajectory during power warp mode
    //!
    #define USER_MAX_CURRENT_DELTA_PW_A    (0.3 * USER_MOTOR_RES_EST_CURRENT_A / USER_ISR_FREQ_Hz)
    
    
    #ifndef USER_MOTOR
    #error Motor type is not defined in user.h
    #endif
    
    #ifndef USER_MOTOR_TYPE
    #error The motor type is not defined in user.h
    #endif
    
    #ifndef USER_MOTOR_NUM_POLE_PAIRS
    #error Number of motor pole pairs is not defined in user.h
    #endif
    
    #ifndef USER_MOTOR_Rr_Ohm
    #error The rotor resistance is not defined in user.h
    #endif
    
    #ifndef USER_MOTOR_Rs_Ohm
    #error The stator resistance is not defined in user.h
    #endif
    
    #ifndef USER_MOTOR_Ls_d_H
    #error The direct stator inductance is not defined in user.h
    #endif
    
    #ifndef USER_MOTOR_Ls_q_H
    #error The quadrature stator inductance is not defined in user.h
    #endif
    
    #ifndef USER_MOTOR_RATED_FLUX_VpHz
    #error The rated flux of motor is not defined in user.h
    #endif
    
    #ifndef USER_MOTOR_MAGNETIZING_CURRENT_A
    #error The magnetizing current is not defined in user.h
    #endif
    
    #ifndef USER_MOTOR_RES_EST_CURRENT_A
    #error The resistance estimation current is not defined in user.h
    #endif
    
    #ifndef USER_MOTOR_IND_EST_CURRENT_A
    #error The inductance estimation current is not defined in user.h
    #endif
    
    #ifndef USER_MOTOR_MAX_CURRENT_A
    #error The maximum current is not defined in user.h
    #endif
    
    #ifndef USER_MOTOR_FLUX_EXC_FREQ_Hz
    #error The flux excitation frequency is not defined in user.h
    #endif
    
    #if ((USER_NUM_CURRENT_SENSORS < 2) || (USER_NUM_CURRENT_SENSORS > 3))
    #error The number of current sensors must be 2 or 3
    #endif
    
    #if (USER_NUM_VOLTAGE_SENSORS != 3)
    #error The number of voltage sensors must be 3
    #endif
    
    
    // **************************************************************************
    // the typedefs
    
    
    // **************************************************************************
    // the globals
    
    
    // **************************************************************************
    // the functions
    
    //! \brief      Sets the user parameter values
    //! \param[in]  pUserParams  The pointer to the user param structure
    extern void USER_setParams(USER_Params *pUserParams);
    
    
    //! \brief      Sets the private user parameter values
    //! \param[in]  pUserParams  The pointer to the user param structure
    extern void USER_setParams_priv(USER_Params *pUserParams);
    
    
    //! \brief      Sets the private user parameter values
    //! \param[in]  pUserParams  The pointer to the user param structure
    extern void cla_USER_setParams_priv(USER_Params *pUserParams);
    
    
    #ifdef __cplusplus
    }
    #endif // extern "C"
    
    //@}  // ingroup
    #endif // end of USER_H definition
    
    

    我需要 一些建议、我们如何在扭矩控制模式下对 Lab06进行实验  

    1. 当我们启用实验06时、电机旋转、但在空载条件下消耗50Arms 至60Arms 的电机相电流(大于逆变器额定电流)。 我们如何确保电机在强制角后切换到 FOC (扭矩模式)。
    2. 如果我们使所有反馈电流为零、则电机平稳旋转、但速度会快速增加。 我怀疑这是力角的工作方式
    3. 我看到电机消耗了额定电流。 我们如何确保转子位置与 A 相反电动势或 VA 电压对齐。(如果电机旋转得非常平稳、我可以了解更多信息)。
    4. 在实验06中、我们如何控制 PWM 占空比、因此我可以直接在观察表达式窗口中控制占空比。
    5. 我们如何使用实验06和实验07在无传感器运行中平稳启动。
    6.  我需要深入了解 user.h 或 user.c 中的哪些变量或需要更好地了解哪些变量才能实现平稳启动和无噪声运行。
    7. idq_set_a[]是否为 pu? 如何设置电流基准(用于扭矩控制的 IQ)。
    8. User.h 中的所有变量均已按照实验室和用户指南中提到的步骤进行更新。
    9. 我们将 INA240用于电流感应、并将分压器与电压跟随器结合使用以监控相电压。  
    10. 请向我们提供平滑旋转的过程、以及如何限制电机电流以获得较低的 Iq 基准。

    请给我宝贵的反馈?

    谢谢你  

    Shiva  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好, 罗燕明!

    我已经实验了用于电机识别的 Lab05。 我已将48V 设置为直流输入、并将电流限制设置为15A rms  

    但每次我进行实验 lab05时 、它都会达到电流限制和电源跳闸。

    即使我再次从15A 增加到20A rms、也会发现同样的问题。

    您能帮助我们解决此问题吗?

    谢谢你

    Shiva  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否使用自己的电路板进行电机识别? 如果是、您是否运行 lab03和 lab04来验证硬件?  

    BTW、您需要在电机轴上没有任何负载的情况下识别电机参数。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Yanming!

    是的、我正在使用我自己的电机和逆变器。 请您就上述两个问题提供反馈吗?

    谢谢  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请使用 lab03和 lab04首先验证您的硬件、并确保电源逆变器、电流和电压感应适用于电机控制。

    [引用 userid="482882" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware/3690002 #3690002"]启用实验06时、电机会旋转、但在空载条件下消耗50Arms 至60Arms 的电机相电流(大于逆变器额定电流)。 我们如何确保电机在强制角后切换到 FOC (扭矩模式)。

    确保硬件正常。 强制角仅在极低速启动时使用、将从估算器自动切换到角度。

    [引用 userid="482882" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware/3690002 #3690002"]如果我们将所有反馈电流归零、则电机平稳旋转、但速度快速增加。 我怀疑这是强制角的工作方式。[/引述]

    答案如上。

    [引用 userid="482882" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware/3690002 #3690002"]我看到电机消耗了额定电流。 我们如何确保转子位置与 A 相反电动势或 VA 电压对齐。(如果电机旋转得非常平稳、我可以了解更多信息)。[/引述]

    电机参数是电流 、电流和电压感应适用于电机控制。

    [引用 userid="482882" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware/3690002 #3690002"] user.h 或 user.c 中的哪些变量 需要深入了解或需要更好地理解才能实现平稳启动和无噪声运行。

    Lab06是电流闭环控制、PWM 占空比由 FOC 算法调节。 您无法更改 PWM 占空比。

    [引用 userid="482882" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware/3690002 #3690002"] idq_set_a[]是否为 pu? 如何设置电流基准(用于扭矩控制的 IQ)。

    它是采用 Ampe 单元的 SI 格式。

    [引用 userid="482882" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware/3690002 #3690002"]
    • User.h 中的所有变量均已按照实验室和用户指南中提到的步骤进行更新。
    • 我们将 INA240用于电流感应、并将分压器与电压跟随器结合使用以监控相电压。  
    • 请向我们提供平滑旋转的过程、以及如何限制电机电流以获得较低的 Iq 基准。
    [/报价]

    在 user.h 中为 USER_MOTOR_MAX_CURRENT_A 设置正确的值、以限制最大扭矩电流。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,罗燕明,早上好!

    感谢宝贵的反馈、我同意对于 Instaspin 逆变器、电流和电压感应必须准确才能运行 FOC。

    我已经进行了实验03、我观察到以下几点  

    1) 1)如果我将 PWM 开关频率初始化为10K、则占空比在运行期间保持50%、并且通过提高电机速度(或电机频率)不会受到影响。

    2) 2) Theta 未与 VA 对齐? 从而从输入电源消耗更多电流。

    3) 3)如果电机的齿槽转矩稍高、则会影响无传感器启动。

    4) 4)我们注意到 ePWM 的 PWM 频率与电动机频率相同...? 例如:如果我们将电机频率 设置为20Hz、则 PWM 频率等于20Hz。

    5) 5)我们注意到、顶部开关的 PWM 脉冲在5ms 开启时、开关对于更高的开关频率是不可接受的。

    6) 6)我看到 Theta、VA 和 IA 电流波形失真、不像实验03中的图28、29、30、31、332、33所示那样平滑。

    请告诉我您的反馈!

    谢谢你

    Shiva

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Lab03不使用 FAST 估算器、它仅用于通过使用标量 v/f 控制运行电机来验证硬件。

    请参阅实验指南、按照以下方式调整 v/d 曲线、以旋转电机。

    #define USER_MOTOR_FREQ_LOW                                (10.0)                        // Hz -建议将电机额定频率设置为10%

    #define USER_MOTOR_FREQ_HIGH                                     (100.0)                        // Hz -建议将电机额定频率设置为100%

    #define USER_MOTOR_FREQ_MAX                                (120.0)                        // Hz -建议将电机额定频率设置为120%

    #define USER_MOTOR_VOLT_MIN                                (3.0)                        //电压-建议设置为额定电机电压的15%

    #define USER_MOTOR_VOLT_MAX                                (18.0)                        //伏特-建议设置为额定电机电压的100%

    [引用 userid="482882" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware/3692558 #3692558"]

    4) 4)我们注意到 ePWM 的 PWM 频率与电动机频率相同...? 例如:如果我们将电机频率 设置为20Hz、则 PWM 频率等于20Hz。

    5) 5)我们注意到、顶部开关的 PWM 脉冲在5ms 开启时、开关对于更高的开关频率是不可接受的。

    [/报价]

    PWM 频率应该是固定的并且不受电机和电路板的影响。 您可能会尝试更改示波器设置。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我已 通过实验02活动测试了我的逆变器。 我在下面发表的评论很少!

    1)在调试模式下,当我启用 motorVars.flagEnableSys =1时,我看到显示的 adcData (结构)  

    I_A_value[0]= 110.0

    I_A_value[1]= 110.0

    I_A_value[2]= 110.0

    这只是用户 ADC 满量程电流的一半。 然后、我从调试窗口复制了这些值、并 在 User .h 中更新了所有值(#define  IA_OFFSET_A、 #define  IB_OFFSET_A、 #define  IC_OFFSET_A)。

    我禁用 motorVars.flagEnableOffsetCalc = 0。

    我观察到所有 I_A 值[0]、= 0.0、 I_A 值[1]、= 0.0、 I_A 值[2]、 = 0.0、

    然后、我对相位电压执行的方法也是一样的。 由于 PWM 设置为0.0 = 50%占空比、因此如果我的 VDC = 48、我正在感应  

    V_V_V_Value[0]= 23.6  

    V_V_V_Value[1]= 23.6

    V_V_value_[2]= 23.6

    我已将这些值从调试窗口复制到 user.h offset。 因为我的 VDC 为48V。

    我在 (motorVars.flagEnableOffsetCalc = 0)期间观察到。

    V_V_V_Value[0]=-39.09

    V_V_V_Value[1]=-39.65

    V_V_value_[2]=-39.78

    我没有更清楚地了解 LAB02算法中的电压感应、您能不能建议在此基础上进行相电压感应的计算。  

    但在50%占空比下、我能够读取23.8V、这是相电压的平均值

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当以50%占空比输出运行偏移校准时、感测相位值应等于直流总线电压的一半、而感测电流等于刻度电流的一半。 但 VA/B/C_OFFSET_V 等于感应电压除以 dc_BUS 电压、等于0.5f。

    您的电路板上的电流和电压偏移似乎是正确的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yanming、

    我是 Shiva 的同事、您能解释一下您用于此计算的逻辑吗?

    p->thetaMech_pu = p->MechScaler * (float32_t)EQEP_getPositionLatch(p->qepHandle);
    
    p->thetaMech_rad = p->thetaMech_pu * MATH_TWO_PI;
    
    float32_t thetaElec_pu = p->thetaMech_pu * p->polePairs;
    
    p->thetaElec_rad = (thetaElec_pu - ((int32_t)thetaElec_pu)) * MATH_TWO_PI;
    
    if(p->thetaElec_rad >= MATH_PI)
    {
    p->thetaElec_rad = p->thetaElec_rad - MATH_TWO_PI;
    }
    else if(p->thetaElec_rad <= -MATH_PI)
    {
    p->thetaElec_rad = p->thetaElec_rad + MATH_TWO_PI;
    }

    此致、  

    Suraj

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它不在任何 InstaspIN-FOC 实验中使用。 这适用于基于 QEP 编码器的传感 FOC、用于将编码器的 QEP 计数器转换为转子电角。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    obj->mechanicalScaler = 0.25f / obj->encLines;
    
    obj->thetaMech_pu = obj->mechanicalScaler *
    (float32_t)EQEP_getPositionLatch(obj->qepHandle);
    
    obj->thetaMech_rad = obj->thetaMech_pu * MATH_TWO_PI;
    
    float32_t thetaElec_pu = obj->thetaMech_pu * obj->polePairs;
    
    obj->thetaElec_rad = (thetaElec_pu - ((int32_t)thetaElec_pu)) * MATH_TWO_PI;
    
    if(obj->thetaElec_rad >= MATH_PI)
    {
    obj->thetaElec_rad = obj->thetaElec_rad - MATH_TWO_PI;
    }
    else if(obj->thetaElec_rad <= -MATH_PI)
    {
    obj->thetaElec_rad = obj->thetaElec_rad + MATH_TWO_PI;
    }

    您好、Yanming、  

    您在1个月前针对 Shiva 的疑问提供了此代码。

    请解释以下几点

    • 请解释这里使用的0.25f 是什么?
    • 什么是 encLines?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="486908" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware/3713167 #3713167"]请说明此处使用的0.25f 是什么?

    每个线或脉冲都有4 个计数,因此刻度为1/(4个线)=0.25/线。

    [引用 userid="486908" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware/3713167 #3713167"]什么是 encLines?

    编码器每次旋转的线数或脉冲数

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yanming、

    我们发现了这种困惑。 我们实际上不会获得标么值。

    因此、我们将获得0-32、767范围内的 thetaElec 值。

    我们需要将其转换为0-2pi 范围。

    请帮助我们进行此转换。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shiva、

    [引用 userid="482882" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware/3690002 #3690002"]我看到电动机抽取了额定电流[/引用]

    INA 是内联还是底部位置? 电流偏移标志应反映同相差分放大器输入的位置和/或极性。 您的 user.h 电流偏移省略(-)符号,导致我怀疑 INA 具有内联位置并利用反相输入。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    INA240位于具有正反馈的底部(H 桥逆变器)。

    #define IA_OFFSET_A (9.97279739)  
    #define IB_OFFSET_A (9.95302963)  
    #define IC_OFFSET_A (9.89870834)

    根据用户指南的建议,如果是正反馈,我们可以使用(-9.97279739)。

    请建议我…

    谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如下所示:

    //! 简要介绍 A、B 和 C 相的 ADC 电流偏移
    #define IA_OFFSET_A (-9.97279739)  
    #define IB_OFFSET_A (-9.95302963)  
    #define IC_OFFSET_A (-9.89870834)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    已通过 hal.h 换算系数反相、但 user.h 电流偏移有(-)符号  

    静态内联空
    HAL_readADCDataWithOffsets (HAL_Handle handle、HAL_ADCData_t * pADCData)

    HAL_Obj * obj =(HAL_Obj *)句柄;

    float32_t CURRENT_SF;
    float32_t VOLTGE_SF;
    float32_t 值;

    Current_SF =-HAL_getCurrentScaleFactor (handle);//-HAL_
    VOLTAGE_SF = HAL_getVoltageScaleFactor (handle);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    当使用实验03进行 V/f 控制时、我观察到以下观察结果。

    设置为 #define USER_MOTOR_FREQ_HIGH_Hz 时       (800.0) 并且如果我以25Hz 的步长增加电机基准速度,当电机频率增加到400Hz 以上时,对于8极电机,我观察到 PWM 开关频率不是恒定的,它保持在2.5Khz 到10kHz 的范围内。

    请就此发表评论吗?

    我已确保正确设置了示波器的带宽和探头设置。

    谢谢  

    Shiva

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     PWM 开关频率应为固定值、除"is12_variable_pwm_frequency _coff "外、所有实验中的设置/运行速度都不会改变。 您在使用示波器时可能出错、您可以将 示波器的采样时间设置为"us"。

    BTW、lab03使用不带转子位置反馈的开环控制电机、因此电机高速运行可能不是很好。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  ,罗燕明欢迎!

    我正在使用实验04[这只是 FOC、其中 θ 由速度参考   motorVars.speedRef_Hz = 20.0生成;]

    示波器设置为采样时间。

    但是、当我连接了电机并尝试试验实验04时  

    •  电机尝试消耗高电流、即使 speedRef 是20或50Hz、它也会达到电源的电流限制。 [问题是当我们尝试深入实验时 ,我们发现 PWM 开关频率从 1.5Khz 变为15kHz ]。  速度参考与 PWM 开关频率之间是否有任何关系?? 正弦 PWM 开关频率发生变化电机消耗高电流时、相对于转子位置发生不正确的点火。

    • 如果 SpeedRef_Hz = 20.0 、这只是电机[电机相位&pwmData.Vabc_pu.value[0]; &pwmData.Vabc_pu.value[1]; &pwmData.Vabc_pu.value[2];。 当我们尝试在示波器上绘制 PWM 数据的频率和 PWM 开关频率时、pwmData 频率与 eSpeedRf 相同、但 PWM 开关持续 变化

    •  您能否在实验04中解决 PWM 开关频率在什么情况下发生变化 ?????????? 或导致 PWM 频率变化的原因。 我们已彻底查看了代码或实验04、但有一些因素会将 PWM 开关频率 wrt 更改为 Speed_Ref   

    • 如果不对实验04进行实验、 则很难继续进行实验。

    请告诉我您的意见

    此致

    shivashankar   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于您使用的是自己的电路板、   因此必须根据硬件电路板计算 user.h 中标记为红色的以下三个参数。

    //! \brief 定义 AD 转换器的最大电压

    #define USER_ADC_FULL_SCALE_VOLTGE_V        ((float32_t)(57.528f))

     

    //! \brief 定义 AD 转换器上的最大电流

    #define USER_ADC_FULL_SCALE_CURRENT_A        ((float32_t)(42.843f))

     

    //! \brief 定义模拟电压滤波器极点位置、Hz

    #define USER_VOLTGE_FILTER_POLE_Hz          ((float32_t)(338.357f))

     

         必须根据硬件板正确设置 hal.h 中标记为红色的电流感应值的符号。

    静态内联 void HAL_readADCDataWithOffsets (HAL_Handle handle、HAL_ADCData_t * pADCData)

       HAL_Obj * obj =(HAL_Obj *)句柄;

     

       float32_t 值;

     

       float32_t CURRENT_SF = -HAL_getCurrentScaleFactor (handle);

       float32_t VOLTAGE_SF = HAL_getVoltageScaleFactor (handle);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    罗燕明、大家好、今天的问候!

    我们的硬件板能够以高达6000RPM 的速度旋转。

    我们已经实验了实验04、实验06、实验07 !

    感谢您在电路板启动和 FOC 实现过程中的支持。  

    我将在完成逆变器的热性能后很快返回给您。

    谢谢、此致

    Shiva  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很高兴知道。 我想先结束这个话题、如果您有任何疑问、请告诉我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,罗燕明,早上好!

    我注意到、当我调用函数  HAL_disablePWM (halHandle)时;

    PWM 仍处于打开状态!

    我是否需要更改以下代码  

    静态内联 void HAL_enablePWM (HAL_Handle handle)

    HAL_Obj * obj =(HAL_Obj *)句柄;

    GPIO_writePin (13、0);

    ePWM_clearTripZoneFlag (obj->pwmHandle[0]、HAL_TZ_interrupt_all);
    ePWM_clearTripZoneFlag (obj->pwmHandle[1]、HAL_TZ_interrupt_all);
    ePWM_clearTripZoneFlag (obj->pwmHandle[2]、HAL_TZ_interrupt_all);

    obj->flagEnablePWM = true;

    GPIO_writePin (13、1);

    返回;

    请建议仅禁用 PWM。

    我们将用于安全应用的这些函数。

    此致

    Shiva

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shiva、

    很高兴看到您取得进展。 您上面发布的代码是清除 ePWM 跳闸区域中断、而不清除 CBC 或 OTC 跳闸标志。

    [引用 userid="482882" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware/3743554 #3743554"]我注意到、当我调用函数  HAL_disablePWM (halHandle)时;[/quot]

    直流逆变器1/2电桥有漏电、DMM +探针相对于接地进入电机相位。 无论 ePWM 输出处于高阻抗状态、甚至是处于低电平启用、都会发生这种情况。 由于 NFETS 漏源漏极泄漏电流的增加、施加的 BVds 会变得更糟。 然而、ePWM 栅极驱动器应该通过每个1/2电桥内的内部电阻器下拉。

    希望这种解释对您有所帮助   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="482882" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware/3743554 #3743554"] HAL_enablePWM (HAL_Handle handle)

    此函数用于清除触发区标志以启用 PWM 输出。 是否使用内部 比较器进行电流/电压保护? 如果是、您应按如下方式清除比较器数字滤波器输出锁存器。

    静态内联 void HAL_enablePWM (HAL_Handle handle)

    HAL_Obj * obj =(HAL_Obj *)句柄;

    //清除比较器数字滤波器输出锁存
    CMPSS_clearFilterLatchHigh (obj->cmpssHandle[0]);
    CMPSS_clearFilterLatchLow (obj->cmpssHandle[0]);

    CMPSS_clearFilterLatchHigh (obj->cmpssHandle[1]);
    CMPSS_clearFilterLatchLow (obj->cmpssHandle[1]);

    CMPSS_clearFilterLatchHigh (obj->cmpssHandle[2]);
    CMPSS_clearFilterLatchLow (obj->cmpssHandle[2]);

    ePWM_clearTripZoneFlag (obj->pwmHandle[0]、HAL_TZ_interrupt_all);
    ePWM_clearTripZoneFlag (obj->pwmHandle[1]、HAL_TZ_interrupt_all);
    ePWM_clearTripZoneFlag (obj->pwmHandle[2]、HAL_TZ_interrupt_all);

    obj->flagEnablePWM = true;

    返回;
    }// HAL_enablePWM()函数结束

    [引用 userid="482882" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware/3743554 #3743554"]

    我注意到、当我调用函数  HAL_disablePWM (halHandle)时;

    PWM 仍处于打开状态!

    [/报价]

    我想您应该 清除  项目中某个位置的跳闸区域标志。 如果您不更改示例项目、则如果您调用   HAL_disablePWM (halHandle)、则应强制所有 PWM 输出为低电平。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这种清除调用中的 CMPSS 故障以启用 PWM 的方法看起来很危险。 添加 OST、CBC、INT 故障锁存器以独立于启用真正的 ePWM 输出更安全。 授权人为干预或增加延迟时间以清除 OVC 条件、思考时间。 然后、当人类确认实际存在安全操作时、SW 可以启用 ePWM 输出。 其他方法对 AI 可能很好、但对简单 CPU 来说不太好。

    你看到一个男人被仓库地毯滚动机器捕捉的视频吗? 它不断在混凝土地面上折断他的腿、周围无人按下紧急停止按钮。  

    //! \brief      Clears Tripzone & CMPSSx latched devices
    //! \details    Clears A/B fault flags of the EPWM peripheral which will allow
    //!             the power switches to be controlled. Clears TzFlags and
    //!				CMPSS High/Low digital filter output latch/s
    //! \param[in]  handle  The hardware abstraction layer (HAL) handle
    static inline void HAL_clearPWMfaults(HAL_Handle handle)
    {
    	 HAL_Obj *obj = (HAL_Obj *)handle;
    
    	EPWM_clearTripZoneFlag(obj->pwmHandle[0], HAL_TZ_FLAGS_ALL); //HAL_TZ_INTERRUPT_ALL
    	EPWM_clearTripZoneFlag(obj->pwmHandle[1], HAL_TZ_FLAGS_ALL); //HAL_TZ_INTERRUPT_ALL
    	EPWM_clearTripZoneFlag(obj->pwmHandle[2], HAL_TZ_FLAGS_ALL); //HAL_TZ_INTERRUPT_ALL
    
        // SW clear high comparator digital filter output latch
        CMPSS_clearFilterLatchHigh(obj->cmpssHandle[0]);
        CMPSS_clearFilterLatchHigh(obj->cmpssHandle[1]);
        CMPSS_clearFilterLatchHigh(obj->cmpssHandle[2]);
        // SW clear low comparator digital filter output latch
        CMPSS_clearFilterLatchLow(obj->cmpssHandle[0]);
        CMPSS_clearFilterLatchLow(obj->cmpssHandle[1]);
        CMPSS_clearFilterLatchLow(obj->cmpssHandle[2]);
    
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shiva、

    只是想检查一下您是否有任何更新,我一周没有听到您的声音,因此我假设您能够解决您的问题。 如果您有任何疑问、请告诉我。 如果没有任何其他问题、我们将关闭此主题。 谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    罗燕明、您好!

    当天的问候语。

    无传感器运行正常、Luo、我非常自豪地在 instaspin 实验室工作、我们正在执行系统测试。

    是指我正在使用增量编码器(其中我们的一位客户需要对 EV 应用进行有传感器控制)。

    我们正在检查我们是否可以将相同的算法与编码器一起用于 θ 和速度。 我在下面分享的编码器数据表。

    https://www.kuebler.com/en/products/measurement/encoders/product-finder/product-details/KIH50#

    如前所述、以下用于 计算编码器 θ 的逻辑是相同的、但计算精确的机械标量时遇到问题  

    obj->mechanicalscal=0.25f /obj->encLines;

    obj->thetaMech_pu = obj->mechanicalscaler*
    (float32_t) eQEP_getPositionLatch (obj->qepHandle);

    obj->thetaMech_rad = obj->thetaMech_pu * MATH_Two;

    float32_t thetaElec_pu = obj->thetaMech_pu * obj->polePairs;

    obj->thetaElec_rad =(thetaElec_pu -((int32_t) thetaElec_pu)* MATH_two_pi;

    if (obj->thetaElec_rad >= MATH_PI)

    obj->thetaElec_rad = obj->thetaElec_rad - MATH_two_PI;

    否则 if (obj->thetaElec_rad <=-Math_PI)

    obj->thetaElec_rad = obj->thetaElec_rad + Math_Two_PI;

    obj->encLines 的值是什么 ?

    数据表显示它是5.000 PPR 增量

    obj->mechanicalscaler =(0.25f /5.000)  = 0.05  ---- >是否正确?

    或  

    请建议我计算 Obj->enclines

    我将等待您的积极回答。

    谢谢你

    Shiva  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="482882" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/991239/tms320f280049c-c2000-f280049c-instaspin-motor-firmware/3760597 #3760597"] obj->encLines 的值是什么 ?

    您应该在编码器或电机的数据表中找到飞地值、它指定编码器轮上的线路数。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,罗燕明,问候!

    我已经使用64 obj->enLines 测试了正交编码器,在 观察表达式窗口的调试模式中,我观察到 obj->thetaElec_rad 形式(-3.147至+3.147)与 angleEst_rad (-3.147至+3.147)相同。

    如果我将逆变器切换为20Khz、则 ISR 将为1/20Khz = 50usec。

    在 void initEQEP (void)中 、有一个单位计时器设置、如下所述  

    eQEP_enableUnitTimer (EQEP1_base、(DEVICE_SYSCLK_FREQ /100)//此函数定义为100Hz  

    当我调用 PosSpeed_calculate (&posSpeed)时;在 实验04的主 ISR 中, 单位计时器 eQEP_enableUnitTimer()的值应该是多少,这样我就可以在 DAC 中进行采样和绘制图, 并在示波器上绘制 θ。

     eQEP_enableUnitTimer()是否 为计时器中断? 如果是、如何在 之间设置优先级  

    _interrupt void mainISR (void)& eQEP_enableUnitTimer ()

    请向我们推荐?

    谢谢大家、此致

    Shiva

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    单元计时器用于低速和捕获模式、您可以参考 F28004x 的 TRM 或 C2000Ware 中的示例来配置此功能。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    默认情况下、电机顺时针旋转、在实验07中、要更改 CCW、我必须查看哪些参数?

    此致

    Shiva

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shiva、

    驱动套件上的 A 相和 C 相易于混响、使电机朝相反方向转动。 CCW 方向在 我的电机上产生了更好的峰值速度、但以不同的方式移动了相电流。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    我们如何通过软件来实现?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     为 CW 旋转设置"motorVars.speedRef_Hz"的正值。

     为 CCW 旋转设置"motorVars.speedRef_Hz"的负值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想知道如何在 SW 中实现这一点、但害怕在高电压下造成混乱。 因此、对于所有实验、默认方向是 CW、这很好。 感谢您的此提示:Yanming  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    罗燕明、您好!

    在无传感器(Lab_07)操作中、如果我在 频率中将速度基准设置为(100Hz)、这意味着在4个极点时、它应该以3000RPM 的转速旋转。

    但是、当我使用转速计电机测量它时、它能够以2400rpm 的转速旋转。  此外、电机相电流不是正弦波。

    我们已经测试了电机反电动势、如果它是纯正弦波。

    您能不能帮助我们解决上述问题。

    谢谢你

    Shiva