ZHCUBZ5A September   2021  – April 2024

 

  1.   1
  2.   摘要
  3.   商标
  4. 1引言
  5. 2电机控制理论
    1. 2.1 PMSM 的数学模型和 FOC 结构
    2. 2.2 PM 同步电机的磁场定向控制
    3. 2.3 PM 同步电机的无传感器控制
      1. 2.3.1 具有锁相环的增强型滑模观测器
        1. 2.3.1.1 PMSM 的 ESMO 设计
        2. 2.3.1.2 使用 PLL 的转子位置和转速估算
    4. 2.4 电机驱动器的硬件必要条件
      1. 2.4.1 电机相电压反馈
    5. 2.5 额外的控制特性
      1. 2.5.1 弱磁 (FW) 和每安培最大扭矩 (MTPA) 控制
      2. 2.5.2 快速启动
  6. 3在 TI 硬件套件上运行通用实验
    1. 3.1 受支持的 TI 电机评估套件
    2. 3.2 硬件电路板设置
      1. 3.2.1  LAUNCHXL-F280025C 设置
      2. 3.2.2  LAUNCHXL-F280039C 设置
      3. 3.2.3  LAUNCHXL-F2800137 设置
      4. 3.2.4  TMDSCNCD280025C 设置
      5. 3.2.5  TMDSCNCD280039C 设置
      6. 3.2.6  TMDSCNCD2800137 设置
      7. 3.2.7  TMDSADAP180TO100 设置
      8. 3.2.8  DRV8329AEVM 设置
      9. 3.2.9  BOOSTXL-DRV8323RH 设置
      10. 3.2.10 BOOSTXL-DRV8323RS 设置
      11. 3.2.11 DRV8353RS-EVM 设置
      12. 3.2.12 BOOSTXL-3PHGANINV 设置
      13. 3.2.13 DRV8316REVM 设置
      14. 3.2.14 TMDSHVMTRINSPIN 设置
      15.      34
      16.      35
    3. 3.3 实验软件实现
      1. 3.3.1 导入和配置工程
      2.      38
      3.      39
      4. 3.3.2 实验工程结构
      5. 3.3.3 实验软件概述
    4. 3.4 监控反馈或控制变量
      1. 3.4.1 使用 DATALOG 函数
      2. 3.4.2 使用 PWMDAC 函数
      3. 3.4.3 使用外部 DAC 板
    5. 3.5 使用不同的构建级别循序渐进地运行工程
      1. 3.5.1 级别 1 增量构建
        1. 3.5.1.1 构建和加载工程
        2. 3.5.1.2 设置调试环境窗口
        3. 3.5.1.3 运行代码
      2. 3.5.2 级别 2 增量构建
        1. 3.5.2.1 构建和加载工程
        2. 3.5.2.2 设置调试环境窗口
        3. 3.5.2.3 运行代码
      3. 3.5.3 级别 3 增量构建
        1. 3.5.3.1 构建和加载工程
        2. 3.5.3.2 设置调试环境窗口
        3. 3.5.3.3 运行代码
      4. 3.5.4 级别 4 增量构建
        1. 3.5.4.1 构建和加载工程
        2. 3.5.4.2 设置调试环境窗口
        3. 3.5.4.3 运行代码
  7. 4构建定制板
    1. 4.1 构建新的定制板
      1. 4.1.1 硬件设置
      2. 4.1.2 将参考代码迁移到定制电路板
        1. 4.1.2.1 设置硬件板参数
        2. 4.1.2.2 修改电机控制参数
        3. 4.1.2.3 更改引脚分配
        4. 4.1.2.4 配置 PWM 模块
        5. 4.1.2.5 配置 ADC 模块
        6. 4.1.2.6 配置 CMPSS 模块
        7. 4.1.2.7 配置故障保护函数
      3. 4.1.3 向电机控制工程中添加附加功能
        1. 4.1.3.1 添加按钮功能
        2. 4.1.3.2 添加电位器读取功能
        3. 4.1.3.3 添加 CAN 功能
    2. 4.2 支持新的 BLDC 电机驱动器板
    3. 4.3 将参考代码移植到新的 C2000 MCU
  8.   A 附录 A. 电机控制参数
  9.   参考资料
  10.   修订历史记录

运行代码

  1. 将交流电源输出设置为 0V (50/60Hz),打开交流电源,将输入电压从 0V 缓慢增加至 220V 交流。
  2. 必须在头文件 user_mtr1.h 中定义所需的电机参数,如以下示例代码所示。如果用户不太了解电机参数,那么在示例实验中使用 FAST 估算器的情况下,可以使用电机识别来获得电机参数。
    #define USER_MOTOR1_TYPE MOTOR_TYPE_PM
    #define USER_MOTOR1_NUM_POLE_PAIRS (4)
    #define USER_MOTOR1_Rr_Ohm (NULL)
    #define USER_MOTOR1_Rs_Ohm (0.38157931f)
    #define USER_MOTOR1_Ls_d_H (0.000188295482f)
    #define USER_MOTOR1_Ls_q_H (0.000188295482f)
    #define USER_MOTOR1_RATED_FLUX_VpHz (0.0396642499f)
  3. sys_main.c 文件中的 userParams.flag_bypassMotorId 值更改为“false”以启用电机识别并作为以下示例代码。
    // false->enable identification, true->disable identification
        userParams_M1.flag_bypassMotorId = false;
  4. 根据电机规格在 user_mtr1.h 文件中设置正确的识别值。
    #define USER_MOTOR1_RES_EST_CURRENT_A       (1.5f)      // A - 10~30% of rated current of the motor
    #define USER_MOTOR1_IND_EST_CURRENT_A       (-1.0f)     // A - 10~30% of rated current of the motor, just enough to enable rotation
    #define USER_MOTOR1_MAX_CURRENT_A           (4.5f)      // A - 30~150% of rated current of the motor
    #define USER_MOTOR1_FLUX_EXC_FREQ_Hz        (40.0f)     // Hz - 10~30% of rated frequency of the motor
  5. 重新构建工程并将代码加载到控制器中,通过点击按钮  来运行工程,或点击“Debug”选项卡中的 RunResume。经过固定的时长后,systemVars.flagEnableSystem 应设置为 1,这意味着偏移校准已完成并且浪涌电源继电器已开启。故障标志 motorVars_M1.faultMtrUse.all 应等于 0,否则用户应检查电流和电压检测电路,如节 3.5.1中所述。
  6. 在“Expressions”窗口中将变量 motorVars_M1.flagEnableRunAndIdentify 设置为 1(如图 3-46 所示),此时将执行电机识别,整个过程需要大约 150s。motorVars_M1.flagEnableRunAndIdentify 等于 0 并且电机停止后,电机参数即被识别。复制“watch”窗口中的变量值,替换 user_mtr1.h 文件中定义的电机参数,如下所示:
    • USER_MOTOR1_Rs_Ohm = motorSetVars_M1.Rs_Ohm 的值
    • USER_MOTOR1_Ls_d_H = motorSetVars_M1.Ls_d_H 的值
    • USER_MOTOR1_Ls_q_H = motorSetVars_M1.Ls_q_H 的值
    • USER_MOTOR1_RATED_FLUX_VpHz = motorSetVars_M1.flux_VpHz 的值
  7. 成功识别电机参数后,将 userParams_M1.flag_bypassMotorId 值设置为“true”以禁用识别,重新构建工程并将代码加载到控制器中。
  8. 按照以下步骤,该示例可以支持在线识别电机,而无需重新加载代码。
    1. motorVars_M1.flagEnableRunAndIdentify 设为 0 停止运行电机。
    2. motorVars_M1.flagEnableMotorIdentify 设置为“1”以启用识别。
    3. motorVars_M1.flagEnableRunAndIdentify 设为 1 开始识别电机参数。motorVars_M1.flagEnableMotorIdentify 将自动设为“0”,这意味着识别正在进行。
    4. 如上面的步骤 6 所述,将识别新的电机参数。
  9. 识别完整的电机参数或在 user_mtr1.h 文件中设置正确的电机参数后。要开始运行电机,请执行以下步骤。
    1. 再次将变量 motorVars_M1.flagEnableRunAndIdentify 设为 1 以开始运行电机。
    2. 将目标速度值设为变量 motorVars_M1.speedRef_Hz,并观察电机轴速度如何随设定速度改变。
    3. 要改变加速度,请在变量 motorVars_M1.accelerationMax_Hzps 中输入不同的加速度值。
    4. 节 3.4.2节 3.4.3 所述,使用 PWMDAC 或 DAC128S 模块显示监视变量。电机角度和电流波形如图 3-47 所示。
  10. FOC 系统电流控制器的默认比例增益 (Kp) 和积分增益 (Ki) 在函数 setupControllers() 中计算。调用 setupControllers() 后,全局变量 motorSetVars_M1.Kp_Id、motorSetVars_M1.Ki_Id、motorSetVars_M1.Kp_Iq 和 motorSetVars_M1.Ki_Iq 将使用新计算得出的 Kp 和 Ki 增益进行初始化。如图 3-46 中所示,调整“Expressions”窗口中这四个变量的 Kp 和 Ki 值,使电流控制器实现预期的电流控制带宽和响应。Kp 增益会产生一个零点,以抵消电机定子的极点,可以轻松地计算得出。Ki 增益可调整电流控制器-电机系统的带宽。如果需要一个速度控制系统来实现特定阻尼,电流控制器的 Kp 增益将与速度控制系统的时间常数相关。
  11. FOC 系统速度控制器的默认比例增益 (Kp) 和积分增益 (Ki) 也在函数 setupControllers() 中计算。调用 setupControllers() 后,全局变量 motorSetVars_M1.Kp_spd 和 motorSetVars_M1.Ki_spd 将使用新计算得出的 Kp 和 Ki 增益进行初始化。如图 3-46 中所示,调整“Expressions”监视窗口中这两个变量的 Kp 和 Ki 值,使速度控制器实现预期的电流控制带宽和响应。与调整电流控制器相比,调整速度控制器的未知情况更多,默认计算得出的 Kp 和 Ki 只是参考值作为起点。
  12. 将变量 motorVars_M1.flagEnableRunAndIdentify 设为“0”停止运行电机。
  13. 完成后,现在可以停止控制器,并终止调试连接。通过首先点击工具栏上的“Halt”按钮  或点击 TargetHalt 来完全停止控制器。最后,通过点击  或点击 RunReset 来重置控制器。
  14. 通过点击“Terminate Debug Session” 或点击 RunTerminate 来关闭 CCS 调试会话。
 构建级别 4:“Expressions”窗口中的变量图 3-46 构建级别 4:“Expressions”窗口中的变量

当电机正向旋转时,将 DAC128S085EVM 与示波器结合使用可监测来自 FAST 估算器的电机转子角度、电机的反馈速度以及电机的相电流,如图 3-47 所示,方法是将 motorVars_M1.speedRef_Hz 设置为正基准值。

 构建级别 4:采用 FAST 的转子角度,正向移动时的相电流波形图 3-47 构建级别 4:采用 FAST 的转子角度,正向移动时的相电流波形

节 3.3.2 所示,在示例实验中可以支持多种 FOC 算法。用户可以在实验工程中使用一个或两个算法进行电机控制,如表 3-7 所示。

用户可以通过在工程属性中添加预定义名称 MOTOR1_FASTMOTOR1_ESMO,在工程中同时实施 FAST 和 eSMO 估算器,如节 3.3.1 中所述。按照上述操作步骤重新构建、加载和运行工程。设置将如图 3-46 中所示。

  • systemVars.estType 值等于 EST_TYPE_FAST_ESMO,这意味着 FAST 和 eSMO 估算器在该工程中处于启用状态。
  • motorVars_M1.estimatorMode 等于 ESTIMATOR_MODE_FAST,这意味着 FAST 估算器正在用于无传感器 FOC;等于 ESTIMATOR_MODE_ESMO,这意味着 eSMO 估算器正在用于无传感器 FOC。
  • 图 3-48 显示了 FAST 和 eSMO 的估算转子角度。通过将 motorVars_M1.speedRef_Hz 设置为 值,电机在 FAST 正向 旋转的情况下运行。
  • 图 3-52 显示了 FAST 和 eSMO 的估算转子角度。通过将 motorVars_M1.speedRef_Hz 设置为 值,电机在 FAST 逆向 旋转的情况下运行。
  • 用户可以将值更改为 ESTIMATOR_MODE_ESMO 以选择无传感器 FOC 的 eSMO 估算器。用户还可以更改值以动态地使用估算器进行切换。

当电机正向旋转时,将 DAC128S085EVM 与示波器结合使用可监测来自 FAST 和 eSMO 估算器的电机转子角度、电机的相电流,如图 3-48 所示,方法是将 motorVars_M1.speedRef_Hz 设置为正基准值。

 构建级别 4:采用 FAST 和 eSMO 的转子角度,正向旋转时的相电流波形图 3-48 构建级别 4:采用 FAST 和 eSMO 的转子角度,正向旋转时的相电流波形

当电机逆向旋转时,将 DAC128S085EVM 与示波器结合使用可监测来自 FAST 和 eSMO 估算器的电机转子角度、电机的相电流,如图 3-49 所示,方法是将 motorVars_M1.speedRef_Hz 设置为负基准值。

 构建级别 4:采用 FAST 和 eSMO 的转子角度,逆向旋转时的相电流波形图 3-49 构建级别 4:采用 FAST 和 eSMO 的转子角度,逆向旋转时的相电流波形

用户可以通过在工程属性中添加预定义名称 MOTOR1_FASTMOTOR1_ENC,在工程中同时实施 FAST 和编码器估算器,如节 3.3.1 中所述。按照上述操作步骤重新构建、加载和运行工程。

  • systemVars.estType 值等于 EST_TYPE_FAST_ENC,这意味着 FAST 和编码器估算器在该工程中处于启用状态。
  • motorVars_M1.estimatorMode 等于 ESTIMATOR_MODE_FAST,这意味着 FAST 估算器正在用于无传感器 FOC;等于 ESTIMATOR_MODE_ENC,这意味着编码器估算器正在用于有传感器 FOC。
  • 图 3-50 展示了 FAST 和编码器的估算转子角度。通过将 motorVars_M1.speedRef_Hz 设置为正值,电机在 FAST 正向旋转的情况下运行。
  • 用户可以将值更改为 ESTIMATOR_MODE_ENC,以选择有传感器 FOC 的编码器估算器。用户还可以更改值以动态地使用估算器进行切换。

当电机正向旋转时,将 DAC128S085EVM 与示波器结合使用可监测来自 FAST 估算器和编码器的电机转子角度、电机的相电流,如图 3-50 所示,方法是将 motorVars_M1.speedRef_Hz 设置为正基准值。

 构建级别 4:采用 FAST 和编码器的转子角度,正向旋转时的相电流波形图 3-50 构建级别 4:采用 FAST 和编码器的转子角度,正向旋转时的相电流波形

用户可以通过在工程属性中添加预定义名称 MOTOR1_FASTMOTOR1_HALL,在工程中同时实施 FAST 和霍尔传感器估算器,如节 3.3.1 中所述。按照上述操作步骤重新构建、加载和运行工程。

  • systemVars.estType 值等于 EST_TYPE_FAST_HALL,这意味着 FAST 和霍尔传感器估算器在该工程中处于启用状态。
  • motorVars_M1.estimatorMode 等于 ESTIMATOR_MODE_FAST,这意味着 FAST 估算器正在用于无传感器 FOC;等于 ESTIMATOR_MODE_HALL,这意味着霍尔传感器估算器正在用于有传感器 FOC。
  • 图 3-51 中显示了 FAST 和霍尔传感器的估算转子角度。通过将 motorVars_M1.speedRef_Hz 设置为正值,电机在 FAST 正向旋转的情况下运行。
  • 图 3-51 中显示了 FAST 和霍尔传感器的估算转子角度。通过将 motorVars_M1.speedRef_Hz 设置为负值,电机在霍尔传感器逆向旋转的情况下运行。
  • 用户可以将值更改为 ESTIMATOR_MODE_HALL 以选择有传感器 FOC 的霍尔传感器估算器。用户还可以更改值以动态地使用估算器进行切换。

当电机正向旋转时,将 DAC128S085EVM 与示波器结合使用可监测来自 FAST 估算器和霍尔传感器的电机转子角度、电机的相电流,如图 3-51 所示,方法是将 motorVars_M1.speedRef_Hz 设置为正基准值。

 构建级别 4:采用 FAST 和霍尔传感器的转子角度,正向旋转时的相电流波形图 3-51 构建级别 4:采用 FAST 和霍尔传感器的转子角度,正向旋转时的相电流波形

当电机逆向旋转时,将 DAC128S085EVM 与示波器结合使用可监测来自 FAST 估算器和霍尔传感器的电机转子角度、电机的相电流,如图 3-52 所示,方法是将 motorVars_M1.speedRef_Hz 设置为负基准值。

 构建级别 4:采用 FAST 和霍尔传感器的电机转子角度,逆向旋转时的相电流波形图 3-52 构建级别 4:采用 FAST 和霍尔传感器的电机转子角度,逆向旋转时的相电流波形

,用户可以通过在工程属性中添加预定义名称 MOTOR1_ESMOMOTOR1_ENC,在工程中同时实施 eSMO 和编码器估算器,如节 3.3.1 中所述。按照上述操作步骤重新构建、加载和运行工程。

  • systemVars.estType 值等于 EST_TYPE_ESMO_ENC,这意味着 eSMO 和编码器估算器在该工程中处于启用状态。
  • motorVars_M1.estimatorMode 等于 ESTIMATOR_MODE_ESMO,这意味着 eSMO 估算器正在用于无传感器 FOC;等于 ESTIMATOR_MODE_ENC,这意味着编码器估算器正在用于有传感器 FOC。
  • 来自 eSMO 和编码器的估算转子角度如图 3-53 所示。通过将 motorVars_M1.speedRef_Hz 设置为正值,电机在 eSMO 正向旋转的情况下运行。
  • 用户可以将值更改为 ESTIMATOR_MODE_ENC,以选择有传感器 FOC 的编码器估算器。用户还可以更改值以动态地使用估算器进行切换。

当电机正向旋转时,将 DAC128S085EVM 与示波器结合使用可监测来自 eSMO 估算器和编码器的电机转子角度、电机的相电流,如图 3-53 所示,方法是将 motorVars_M1.speedRef_Hz 设置为正基准值。

 构建级别 4:采用 eSMO 和编码器的转子角度,正向旋转时的相电流波形图 3-53 构建级别 4:采用 eSMO 和编码器的转子角度,正向旋转时的相电流波形