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.

[参考译文] C2000WARE-MOTORCONTROL-SDK:通用 MotorControl 实验中基于霍尔传感器的 BLDC 控制问题

Guru**** 2695575 points

Other Parts Discussed in Thread: BOOSTXL-DRV8323RH

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1593342/c2000ware-motorcontrol-sdk-issue-with-hall-sensor-based-bldc-control-in-universal-motorcontrol-lab

器件型号: C2000WARE-MOTORCONTROL-SDK
Thread 中讨论的其他器件: BOOSTXL-DRV8323RH

您好:
我目前正在使用 TI 的 Universal MotorControl Lab 测试我们的定制 BLDC 电机、但我遇到了基于霍尔传感器的控制问题。

使用的硬件如所示 LAUNCHXL-F280039 BOOSTXL-DRV8323RH
AT 构建级别 4 、当使用霍尔传感器驱动 BLDC 时、电机在达到上述速度后间歇性停止 50Hz

此外、在发出时 0Hz 速度命令 、则控制器变得不稳定并发散。

电机调谐已完成、并且在完全相同的条件下(使用时) 快速 没有任何问题。
霍尔传感器信号也已照常进行验证、与其他基于霍尔传感器的解决方案(例如 ST) 配合)配合使用时、运行过程中不会出现问题。

霍尔传感器 A、B 和 C 连接到 LaunchPad 引脚 2I、2B 和 2A 分别。
经证实、B 相和 C 相相对于 A 相延迟了 120°和 240°

我还尝试使用进行霍尔传感器校准 HALL_CAL 但它没有什么区别。

您是否恰好知道导致此问题的原因?
以下是 电机和控制器的主要参数、以及霍尔传感器调优结果。

// in user_mtr1.h
...
#elif (USER_MOTOR1 == my_pm_motor_1)
// Custom BLDC motor definition
#define USER_MOTOR1_TYPE                   MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS         (10)
#define USER_MOTOR1_Rr_Ohm                 (0.0f)
#define USER_MOTOR1_Rs_Ohm                 (0.152819753f)
#define USER_MOTOR1_Ls_d_H                 (0.000289398682f)
#define USER_MOTOR1_Ls_q_H                 (0.000289398682f)
#define USER_MOTOR1_RATED_FLUX_VpHz        (0.041582156f)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A  (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A      (2.0f)
#define USER_MOTOR1_IND_EST_CURRENT_A      (-1.5f)
#define USER_MOTOR1_MAX_CURRENT_A          (6.72f)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (40.0f)

// Number of lines on the motor's quadrature encoder
#define USER_MOTOR1_NUM_ENC_SLOTS          (NULL)

#define USER_MOTOR1_INERTIA_Kgm2           (240e-07)

// Ls compensation coefficient
#define USER_MOTOR1_Ls_d_COMP_COEF         (0.15f)          // 0.0f~0.5f
#define USER_MOTOR1_Ls_q_COMP_COEF         (0.35f)          // 0.0f~0.5f
#define USER_MOTOR1_Ls_MIN_NUM_COEF        (0.55f)          // 0.5f~1.0f

#define USER_MOTOR1_FREQ_NEARZEROLIMIT_Hz  (0.1f)          // Hz

#define USER_MOTOR1_RATED_VOLTAGE_V        (24.0f)
#define USER_MOTOR1_FREQ_MIN_Hz            (1.0f)          // Hz
#define USER_MOTOR1_FREQ_MAX_Hz            (200.0f)         // Hz

#define USER_MOTOR1_FREQ_LOW_Hz            (5.0f)            // Hz
#define USER_MOTOR1_FREQ_HIGH_Hz           (200.0f)            // Hz
#define USER_MOTOR1_VOLT_MIN_V             (1.0f)            // Volt
#define USER_MOTOR1_VOLT_MAX_V             (24.0f)           // Volt

#define USER_MOTOR1_FORCE_DELTA_A          (0.1f)          // A
#define USER_MOTOR1_ALIGN_DELTA_A          (0.1f)          // A
#define USER_MOTOR1_FLUX_CURRENT_A         (0.5f)           // A
#define USER_MOTOR1_ALIGN_CURRENT_A        (5.5f)           // A
#define USER_MOTOR1_STARTUP_CURRENT_A      (5.5f)           // A, 3.5A default
#define USER_MOTOR1_TORQUE_CURRENT_A       (5.5f)           // A
#define USER_MOTOR1_OVER_CURRENT_A         (10.0f)          // A

#define USER_MOTOR1_BRAKE_CURRENT_A        (1.0f)           // A
#define USER_MOTOR1_BRAKE_TIME_DELAY       (12000U)        // 60s/5ms

#define USER_MOTOR1_SPEED_START_Hz         (80.0f)
#define USER_MOTOR1_SPEED_FORCE_Hz         (80.0f)
#define USER_MOTOR1_ACCEL_START_Hzps       (60.0f)
#define USER_MOTOR1_ACCEL_MAX_Hzps         (60.0f)

#define USER_MOTOR1_SPEED_FS_Hz            (3.0f)

// only for encoder
#define USER_MOTOR1_ENC_POS_MAX            (USER_MOTOR1_NUM_ENC_SLOTS * 4 - 1)
#define USER_MOTOR1_ENC_POS_OFFSET         (668)

// Only for eSMO
#define USER_MOTOR1_KSLIDE_MAX             (0.75f)      //
#define USER_MOTOR1_KSLIDE_MIN             (0.15f)

#define USER_MOTOR1_PLL_KP_MAX             (6.75f)      //
#define USER_MOTOR1_PLL_KP_MIN             (0.75f)
#define USER_MOTOR1_PLL_KP_SF              (5.0f)
#define USER_MOTOR1_PLL_KI                 (2.8125E-06f)    // Not used, reserve

#define USER_MOTOR1_BEMF_THRESHOLD         (0.5f)
#define USER_MOTOR1_BEMF_KSLF_FC_SF        (1.0f)
#define USER_MOTOR1_THETA_OFFSET_SF        (1.0f)
#define USER_MOTOR1_SPEED_LPF_FC_Hz        (200.0f)

// for IS-BLDC
#define USER_MOTOR1_RAMP_START_Hz           (3.0f)
#define USER_MOTOR1_RAMP_END_Hz             (30.0f)
#define USER_MOTOR1_RAMP_DELAY              (5)

#define USER_MOTOR1_ISBLDC_INT_MAX          (0.015f)
#define USER_MOTOR1_ISBLDC_INT_MIN          (0.010f)

// for Rs online calibration
#define USER_MOTOR1_RSONLINE_WAIT_TIME      (60000U)    // 5min/300s at 5ms base
#define USER_MOTOR1_RSONLINE_WORK_TIME      (24000U)     //2min/120s at 5ms base

// Current and Speed PI Regulators Tuning Coefficient
#define USER_MOTOR1_GAIN_SPEED_LOW_Hz        (60.0f)
#define USER_MOTOR1_GAIN_SPEED_HIGH_Hz       (150.0f)

#define USER_MOTOR1_KP_SPD_START_SF          (1.5f)       // 0.1~100.0
#define USER_MOTOR1_KI_SPD_START_SF          (1.5f)       // 0.1~10.0

#define USER_MOTOR1_KP_SPD_LOW_SF            (2.0f)       // 0.1~100.0
#define USER_MOTOR1_KI_SPD_LOW_SF            (2.0f)       // 0.1~10.0

#define USER_MOTOR1_KP_SPD_HIGH_SF           (1.0f)       // 0.1~100.0
#define USER_MOTOR1_KI_SPD_HIGH_SF           (1.0f)       // 0.1~10.0

#define USER_MOTOR1_GAIN_IQ_LOW_A            (2.0f)
#define USER_MOTOR1_GAIN_IQ_HIGH_A           (6.0f)

#define USER_MOTOR1_KP_IQ_START_SF           (1.5f)       // 0.1~10.0
#define USER_MOTOR1_KI_IQ_START_SF           (1.5f)       // 0.1~10.0

#define USER_MOTOR1_KP_IQ_LOW_SF             (2.0f)       // 0.1~10.0
#define USER_MOTOR1_KI_IQ_LOW_SF             (2.0f)       // 0.1~10.0

#define USER_MOTOR1_KP_IQ_HIGH_SF            (1.0f)       // 0.1~10.0
#define USER_MOTOR1_KI_IQ_HIGH_SF            (1.0f)       // 0.1~10.0

#define USER_MOTOR1_KP_ID_SF                 (1.0f)       // 0.1~10.0
#define USER_MOTOR1_KI_ID_SF                 (1.0f)       // 0.1~10.0

#if defined(MOTOR1_HALL)
// Only for hall sensor
#define USER_MOTOR1_HALL_DELTA_rad          (MATH_TWO_PI / 36.0f)   // rad
#endif  // MOTOR1_HALL
...
// in motor1_drive.c
...
#elif (USER_MOTOR1 == my_pm_motor_1)
const float32_t hallAngleBuf[7] = { 1.69277406f,  -1.43675756f, 2.70116997f, \
                                    -2.49598646f, 0.615839601f , -0.410627186f,
                                    1.69277406f };
...

提前感谢!

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

    抱歉、当前实验不支持以零速平稳和稳定运行电机。 您必须添加一些额外的功能、才能使电机以零速或极低速运行。 我们正在努力解决这一问题、但仍然没有具体信息。

    如果要以极低的速度运行电机、您可以尝试使用编码器或旋转变压器等高分辨率位置传感器。

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

    感谢您提供宝贵的信息。
    您能告诉我什么速度被认为是低的吗?
    每秒转 1 转是低、非常低还是正常?

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

    <几 rpm、例如 30rpm 或 4Hz(电气)、具体取决于电机规格和负载。