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.   修订历史记录

使用外部 DAC 板

DAC128S 模块可将最多 8 个软件变量转换为 12 位整数值,并通过 SPI 将数据传输至 DAC128S085EVM 上的数模转换器 (DAC),如图 3-27 所示。

 DAC128S 模块方框图图 3-27 DAC128S 模块方框图

DAC128S085EVM 可以连接到 LaunchPad,如图 3-12 所示。图 3-28 展示了 DAC128S 的主要连接。

 DAC128S085EVM 评估板图 3-28 DAC128S085EVM 评估板
表 3-8 使用 DAC128S085EVM 时需要进行硬件更改
LaunchPad 器件 所需硬件更改
F28002x、F28003x 跳线 C2000 SPI_STE (SCS) 引脚 JB-2 至 DAC128S085EVM 上的 SYNC 引脚 JA-2,如图 3-28 所示。
F280013x (1) 器件只有 1 个 SPI 模块,该模块在 BoosterPack 站点 1 和站点 2 之间共享。这需要在 LaunchPad 上填充 0Ω 电阻器来将 SPI 信号连接到 DAC128S085EVM 连接到的 BoosterPack 站点 2。有关特定的电阻器标识符,请参阅 LAUNCHXL-F2800137 原理图中的 SPI 路由 部分。
(2) 跳线将 C2000 SPI_STE (SCS) 引脚接至 DAC128S085EVM 上的 SYNC 引脚 JA-2。C2000 SPI_STE 引脚使用情况将取决于所使用的逆变器 BoosterPack:
  1. GPIO19 用于 DRV8323RS、DRV8353RS、DRV8316 和三相 GaN 逆变器 EVM。这将需要使用 F280013x 的内部振荡器并更改硬件。有关详细信息,请参阅 LAUNCHXL-F2800137 原理图振荡器 部分。
  2. GPIO37用于所有其他逆变器 EVM。

使用 DAC128S085EVM 时需要进行硬件更改。要启用 DAC128S 功能,必须在工程属性中添加预定义的符号 DAC_128S_ENABLE,如图 3-19 所示。

下面的代码演示了 DAC128S 对象的声明。此代码位于 sys_main.c 文件中。

DAC128S_Handle   dac128sHandle;        //!< the DAC128S interface handle
DAC128S_Obj      dac128s;              //!< the DAC128S interface object

DAC128S085 具有 8 通道 12 位数模转换器 (DAC),因此用户可以通过更改 dac128s085.h 文件中 DAC_EN_CH_NUM define 的值将输出数设置为 1 到 8 之间的值。尽管 sys_main.c 文件将 8 个 ptrData[] 模块输入初始化为 8 个不同的变量地址,但在代码执行期间实际发送和使用的模块输入数量将由 dac128s085.h 文件中定义的 DAC_EN_CH_NUM 常量的值决定(如下所示)。大多数示波器只有四个探针,因此使用 8 个 DAC128S085 输出中的 4 个是本示例中的默认设置。使用 4 个输出是本示例实验中的默认设置,因为大多数示波器只有四个探针。更多的输出将占用更多的 ISR 时间来转换和传输数据,这可能会对用于其他任务的时间产生负面影响,如果用户希望使用不止 4 个输出,必须考虑这一因素。

#define DAC_EN_CH_NUM                       (4)         // 1~8

下面的代码演示了 DAC128S 对象、句柄和参数的初始化和设置。代码会配置八个模块输入 ptrData[0] - ptrData[7],以指向八个不同软件变量的地址,但实际使用的模块输入数量由 dac128s085.h 文件中定义的 DAC_EN_CH_NUM 常量的值决定。dac128s 数据指向不同的系统变量,具体取决于构建级别和定义的控制算法。此代码可在 sys_main.c 文件中找到。

// initialize the DAC128S
dac128sHandle = DAC128S_init(&dac128s);

// setup SPI for DAC128S
DAC128S_setupSPI(dac128sHandle);
... ...
// Build_Level_2 or Level_3, verify the estimator
dac128s.ptrData[0] = &motorVars_M1.angleGen_rad;                // CH_A
dac128s.ptrData[1] = &motorVars_M1.angleEST_rad;                // CH_B
dac128s.ptrData[2] = &motorVars_M1.anglePLL_rad;                // CH_C
dac128s.ptrData[3] = &motorVars_M1.adcData.I_A.value[0];        // CH_D
dac128s.ptrData[4] = &motorVars_M1.adcData.V_V.value[0];        // CH_E, N/A
dac128s.ptrData[5] = &motorVars_M1.adcData.I_A.value[1];        // CH_F, N/A
dac128s.ptrData[6] = &motorVars_M1.adcData.I_A.value[2];        // CH_G, N/A
dac128s.ptrData[7] = &motorVars_M1.adcData.V_V.value[1];        // CH_H, N/A

dac128s.gain[0] = 4096.0f / MATH_TWO_PI;
dac128s.gain[1] = 4096.0f / MATH_TWO_PI;
dac128s.gain[2] = 4096.0f / MATH_TWO_PI;
dac128s.gain[3] = 2.0f * 4096.0f / USER_M1_ADC_FULL_SCALE_CURRENT_A;
dac128s.gain[4] = 2.0f * 4096.0f / USER_M1_ADC_FULL_SCALE_VOLTAGE_V;
dac128s.gain[5] = 2.0f * 4096.0f / USER_M1_ADC_FULL_SCALE_CURRENT_A;
dac128s.gain[6] = 2.0f * 4096.0f / USER_M1_ADC_FULL_SCALE_CURRENT_A;
dac128s.gain[7] = 2.0f * 4096.0f / USER_M1_ADC_FULL_SCALE_VOLTAGE_V;

dac128s.offset[0] = (uint16_t)(0.5f * 4096.0f);
dac128s.offset[1] = (uint16_t)(0.5f * 4096.0f);
dac128s.offset[2] = (uint16_t)(0.5f * 4096.0f);
dac128s.offset[3] = (uint16_t)(0.5f * 4096.0f);
dac128s.offset[4] = (uint16_t)(0.5f * 4096.0f);
dac128s.offset[5] = (uint16_t)(0.5f * 4096.0f);
dac128s.offset[6] = (uint16_t)(0.5f * 4096.0f);
dac128s.offset[7] = (uint16_t)(0.5f * 4096.0f);

下面的代码演示了在 motor1ctrlISR() 中断执行期间通过 SPI 定期使用新数据更新 DAC128S 电路板。此代码位于 motor1_drive.c 文件中。实际更新的 DAC 输出数量将取决于 DAC_EN_CH_NUM 常数的值。

// Write the variables data value to DAC128S085
DAC128S_writeData(dac128sHandle);