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

配置 ADC 模块

与前面的 PWM 部分类似,对于通用电机控制实验不支持的定制电路板、TI 电机控制套件或 C2000 MCU 也可以更改 ADC 连接。HAL 模块会配置 ADC 通道,使其与电机驱动器板正确对应。例如,LAUNCHXL-F280025C 和 BOOSTXL-DRV8323RS 组合的连接图如图 4-3 所示。以下步骤介绍了 ADC 模块配置,电路板特定的潜在更改以粗体突出显示。步骤 1 和步骤 2 对于配置新的电机驱动器板或不同的 C2000 MCU 以运行电机至关重要。

 ADC 连接图图 4-3 ADC 连接图

以下代码取自位于 solutions\universal_motorcontrol_lab\f28002x\drivers\include and \source 文件夹中的 hal.hhal.c 文件。

  1. 以下代码演示了 hal.h 文件中 ADC 模块的基地址、分配的通道和 SOC 的定义。请注意,对于 SOC 编号,多个 ADC 可以与同一 SOC 编号相关联,只要它们属于不同的 ADC 模块(在以下用例中,是模块 A 和模块 C)。尽量尝试对所有电流和所有电压进行采样时使其尽可能靠近,因此在配置 SOC 编号时应注意这一点。
    #define MTR1_IU_ADC_BASE        ADCA_BASE               // ADCA-A11*/C0
    #define MTR1_IV_ADC_BASE        ADCC_BASE               // ADCC-A14/C4*
    #define MTR1_IW_ADC_BASE        ADCC_BASE               // ADCC-A15/C7*
    #define MTR1_VU_ADC_BASE        ADCA_BASE               // ADCA-A6*
    #define MTR1_VV_ADC_BASE        ADCA_BASE               // ADCC-A3*/C5
    #define MTR1_VW_ADC_BASE        ADCC_BASE               // ADCA-A2/C9*
    #define MTR1_VDC_ADC_BASE       ADCC_BASE               // ADCC-C6*
    #define MTR1_POT_ADC_BASE       ADCA_BASE               // ADCA-A12*/C1
    
    #define MTR1_IU_ADCRES_BASE     ADCARESULT_BASE         // ADCA-A11*/C0
    #define MTR1_IV_ADCRES_BASE     ADCCRESULT_BASE         // ADCC-A14/C4*
    #define MTR1_IW_ADCRES_BASE     ADCCRESULT_BASE         // ADCC-A15/C7*
    #define MTR1_VU_ADCRES_BASE     ADCARESULT_BASE         // ADCA-A6*
    #define MTR1_VV_ADCRES_BASE     ADCARESULT_BASE         // ADCC-A3*/C5
    #define MTR1_VW_ADCRES_BASE     ADCCRESULT_BASE         // ADCA-A2/C9*
    #define MTR1_VDC_ADCRES_BASE    ADCCRESULT_BASE         // ADCC-C6*
    #define MTR1_POT_ADCRES_BASE    ADCARESULT_BASE         // ADCA-A12*/C1
    
    #define MTR1_IU_ADC_CH_NUM      ADC_CH_ADCIN11          // ADCA-A11*/C0
    #define MTR1_IV_ADC_CH_NUM      ADC_CH_ADCIN4           // ADCC-A14/C4*
    #define MTR1_IW_ADC_CH_NUM      ADC_CH_ADCIN7           // ADCC-A15/C7*
    #define MTR1_VU_ADC_CH_NUM      ADC_CH_ADCIN6           // ADCA-A6*
    #define MTR1_VV_ADC_CH_NUM      ADC_CH_ADCIN3           // ADCC-A3*/C5
    #define MTR1_VW_ADC_CH_NUM      ADC_CH_ADCIN9           // ADCA-A2/C9*
    #define MTR1_VDC_ADC_CH_NUM     ADC_CH_ADCIN6           // ADCC-C6*
    #define MTR1_POT_ADC_CH_NUM     ADC_CH_ADCIN12          // ADCA-A12*/C1
    
    #define MTR1_IU_ADC_SOC_NUM     ADC_SOC_NUMBER1         // ADCA-A11*/C10-SOC1-PPB1
    #define MTR1_IV_ADC_SOC_NUM     ADC_SOC_NUMBER1         // ADCC-A14/C4* -SOC1-PPB1
    #define MTR1_IW_ADC_SOC_NUM     ADC_SOC_NUMBER2         // ADCC-A15/C7* -SOC2-PPB2
    #define MTR1_VU_ADC_SOC_NUM     ADC_SOC_NUMBER4         // ADCA-A6*     -SOC4
    #define MTR1_VV_ADC_SOC_NUM     ADC_SOC_NUMBER5         // ADCC-A3*/C5  -SOC5
    #define MTR1_VW_ADC_SOC_NUM     ADC_SOC_NUMBER5         // ADCA-A2/C9*  -SOC5
    #define MTR1_VDC_ADC_SOC_NUM    ADC_SOC_NUMBER6         // ADCC-C6*     -SOC6
    #define MTR1_POT_ADC_SOC_NUM    ADC_SOC_NUMBER6         // ADCA-A12*/C1 -SOC6
    
    #define MTR1_IU_ADC_PPB_NUM     ADC_PPB_NUMBER1         // ADCA-A11*/C10-SOC1-PPB1
    #define MTR1_IV_ADC_PPB_NUM     ADC_PPB_NUMBER1         // ADCC-A14/C4* -SOC1-PPB1
    #define MTR1_IW_ADC_PPB_NUM     ADC_PPB_NUMBER2         // ADCC-A15/C7*- SOC2-PPB2
  2. 下面的代码展示了 hal.h 文件中 ISR 中断源的定义。
    // interrupt
    #define MTR1_PWM_INT_BASE       MTR1_PWM_U_BASE         // EPWM1
    
    #define MTR1_ADC_INT_BASE       ADCA_BASE               // ADCA-A14 -SOC4
    #define MTR1_ADC_INT_NUM        ADC_INT_NUMBER1         // ADCA_INT1-SOC4
    #define MTR1_ADC_INT_SOC        ADC_SOC_NUMBER4         // ADCA_INT1-SOC4
    
    #define MTR1_PIE_INT_NUM        INT_ADCA1               // ADCA_INT1-SOC4
    #define MTR1_INT_ACK_GROUP      INTERRUPT_ACK_GROUP1    // ADCA_INT1-CPU_INT1
  3. ADC 模块在位于 hal.c 文件中的 HAL_setupADCs() 函数中设置。下面显示了用于对电位器进行采样的 ADC 设置示例。如果用户希望使用额外的 ADC 通道来对额外的信号进行采样,则需要使用与以下代码类似的方式设置 ADC 通道。
    // POT_M1 ADC_setupSOC(MTR1_POT_ADC_BASE, MTR1_POT_ADC_SOC_NUM, MTR1_ADC_TRIGGER_SOC, MTR1_POT_ADC_CH_NUM, MTR1_ADC_V_SAMPLEWINDOW);
  4. ADC 结果在 hal.h 文件中的 HAL_readMtr1ADCData() 函数中读取。POT 输入读取 ADC 结果的示例如下所示。如果用户添加了额外的 ADC 通道以进行额外的信号采样,则需要添加与下面所示内容类似的代码,以读取所添加 ADC 通道的结果。这还需要修改 HAL_ADCData_t 结构以存储数据。
    // read POT adc value
    pADCData->potAdc = ADC_readResult(MTR1_POT_ADCRES_BASE, MTR1_POT_ADC_SOC_NUM);