ZHCUBM2 December   2023

 

  1.   1
  2.   说明
  3.   资源
  4.   特性
  5.   应用
  6.   6
  7. 1系统说明
    1. 1.1 术语
    2. 1.2 关键系统规格
  8. 2系统概述
    1. 2.1 方框图
    2. 2.2 设计注意事项
    3. 2.3 重点产品
      1. 2.3.1 TMS320F2800137
      2. 2.3.2 MSPM0G1507
      3. 2.3.3 TMP6131
      4. 2.3.4 UCC28881
      5. 2.3.5 TPS54202
      6. 2.3.6 TLV9062
      7. 2.3.7 TLV74033
    4. 2.4 系统设计原理
      1. 2.4.1 硬件设计
        1. 2.4.1.1 模块化设计
        2. 2.4.1.2 高压降压辅助电源
        3. 2.4.1.3 直流链路电压检测
        4. 2.4.1.4 电机相电压检测
        5. 2.4.1.5 电机相电流检测
        6. 2.4.1.6 外部过流保护
        7. 2.4.1.7 TMS320F2800F137 的内部过流保护
      2. 2.4.2 三相 PMSM 驱动器
        1. 2.4.2.1 PM 同步电机的场定向控制
          1. 2.4.2.1.1 空间矢量定义和投影
            1. 2.4.2.1.1.1 ( a ,   b ) ⇒ ( α , β ) Clarke 变换
            2. 2.4.2.1.1.2 α , β ⇒ ( d ,   q ) Park 变换
          2. 2.4.2.1.2 交流电机 FOC 基本配置方案
          3. 2.4.2.1.3 转子磁通位置
        2. 2.4.2.2 PM 同步电机的无传感器控制
          1. 2.4.2.2.1 具有锁相环的增强型滑模观测器
            1. 2.4.2.2.1.1 IPMSM 的数学模型和 FOC 结构
            2. 2.4.2.2.1.2 IPMSM 的 ESMO 设计
            3. 2.4.2.2.1.3 使用 PLL 的转子位置和转速估算
        3. 2.4.2.3 弱磁 (FW) 和每安培最大扭矩 (MTPA) 控制
        4. 2.4.2.4 电机驱动器的硬件必要条件
          1. 2.4.2.4.1 电机电流反馈
            1. 2.4.2.4.1.1 三分流器电流检测
            2. 2.4.2.4.1.2 单分流器电流检测
          2. 2.4.2.4.2 电机电压反馈
  9. 3硬件、软件、测试要求和测试结果
    1. 3.1 入门硬件
      1. 3.1.1 硬件板概述
      2. 3.1.2 测试条件
      3. 3.1.3 电路板验证所需的测试设备
    2. 3.2 入门 GUI
      1. 3.2.1 测试设置
      2. 3.2.2 GUI 软件概述
      3. 3.2.3 设置串行端口
      4. 3.2.4 电机识别
      5. 3.2.5 旋转电机
      6. 3.2.6 电机故障状态
      7. 3.2.7 调整控制参数
      8. 3.2.8 虚拟示波器
    3. 3.3 C2000 固件入门
      1. 3.3.1 下载并安装电路板测试所需的软件
      2. 3.3.2 在 CCS 内打开工程
      3. 3.3.3 工程结构
      4. 3.3.4 测试步骤
        1. 3.3.4.1 构建级别 1:CPU 和电路板设置
          1. 3.3.4.1.1 启动 CCS 并打开工程
          2. 3.3.4.1.2 构建和加载工程
          3. 3.3.4.1.3 设置调试环境窗口
          4. 3.3.4.1.4 运行代码
        2. 3.3.4.2 构建级别 2:带 ADC 反馈的开环检查
          1. 3.3.4.2.1 启动 CCS 并打开工程
          2. 3.3.4.2.2 构建和加载工程
          3. 3.3.4.2.3 设置调试环境窗口
          4. 3.3.4.2.4 运行代码
        3. 3.3.4.3 构建级别 3:闭合电流环路检查
          1. 3.3.4.3.1 启动 CCS 并打开工程
          2. 3.3.4.3.2 构建和加载工程
          3. 3.3.4.3.3 设置调试环境窗口
          4. 3.3.4.3.4 运行代码
        4. 3.3.4.4 版本级别 4:完整电机驱动控制
          1. 3.3.4.4.1 启动 CCS 并打开工程
          2. 3.3.4.4.2 构建和加载工程
          3. 3.3.4.4.3 设置调试环境窗口
          4. 3.3.4.4.4 运行代码
          5. 3.3.4.4.5 调整电机驱动 FOC 参数
          6. 3.3.4.4.6 调整弱磁和 MTPA 控制参数
          7. 3.3.4.4.7 调整电流检测参数
    4. 3.4 测试结果
      1. 3.4.1 负载和热力测试
      2. 3.4.2 通过外部比较器进行过流保护
      3. 3.4.3 通过内部 CMPSS 进行过流保护
    5. 3.5 将固件迁移至新的硬件板
      1. 3.5.1 配置 PWM、CMPSS 和 ADC 模块
      2. 3.5.2 设置硬件板参数
      3. 3.5.3 配置故障保护参数
      4. 3.5.4 设置电机电气参数
    6. 3.6 MSPM0 固件入门
  10. 4设计和文档支持
    1. 4.1 设计文件
      1. 4.1.1 原理图
      2. 4.1.2 物料清单
      3. 4.1.3 PCB 布局建议
      4. 4.1.4 Altium 工程
      5. 4.1.5 Gerber 文件
    2. 4.2 软件文件
    3. 4.3 文档支持
    4. 4.4 支持资源
    5. 4.5 商标
  11. 5作者简介

配置 PWM、CMPSS 和 ADC 模块

用于控制电机的应用参数写为 #define,可根据硬件,在 hal.h 中配置 PWM、CMPSS 和 ADC 模块基地址。压缩机电机定义的 PWM、CMPSS 和 ADC 如以下代码所示。

为电机驱动配置 PWM 和 CMPSS 基地址:

// EPWM
#define MTR1_PWM_U_BASE         EPWM2_BASE
#define MTR1_PWM_V_BASE         EPWM3_BASE
#define MTR1_PWM_W_BASE         EPWM4_BASE

// CMPSS->Iu/Iv/Iw
#define MTR1_CMPSS_U_BASE       CMPSSLITE4_BASE
#define MTR1_CMPSS_V_BASE       CMPSSLITE2_BASE
#define MTR1_CMPSS_W_BASE       CMPSSLITE3_BASE

为电机驱动配置 ADC 基地址和通道:

// Three shunts
// Using ADCA/ADCC for current sensing
#define MTR1_ADC_TRIGGER_SOC     ADC_TRIGGER_EPWM2_SOCA  // EPWM2_SOCA

#define MTR1_ADC_I_SAMPLEWINDOW     14
#define MTR1_ADC_V_SAMPLEWINDOW     20

#define MTR1_IU_ADC_BASE    ADCC_BASE       // ADCC-A7/C3*/CMP4  -SOC1
#define MTR1_IV_ADC_BASE    ADCA_BASE       // ADCA-A4*/C14/CMP2 -SOC2
#define MTR1_IW_ADC_BASE    ADCA_BASE       // ADCA-A0*/C15/CMP3 -SOC1

#define MTR1_IU_ADCRES_BASE     ADCCRESULT_BASE         // ADCC-A7/C3*
#define MTR1_IV_ADCRES_BASE     ADCARESULT_BASE         // ADCA-A4*/C14
#define MTR1_IW_ADCRES_BASE     ADCARESULT_BASE         // ADCA-A0*/C15

#define MTR1_IU_ADC_CH_NUM      ADC_CH_ADCIN3           // ADCC-A7/C3*
#define MTR1_IV_ADC_CH_NUM      ADC_CH_ADCIN4           // ADCA-A4*/C14
#define MTR1_IW_ADC_CH_NUM      ADC_CH_ADCIN0           // ADCA-A0*/C15

#define MTR1_IU_ADC_SOC_NUM  ADC_SOC_NUMBER1  // ADCC-A7/C3*  -SOC1-PPB1
#define MTR1_IV_ADC_SOC_NUM  ADC_SOC_NUMBER2  // ADCA-A4*/C14 -SOC2-PPB2
#define MTR1_IW_ADC_SOC_NUM  ADC_SOC_NUMBER1  // ADCA-A0*/C15 -SOC1-PPB1

#define MTR1_IU_ADC_PPB_NUM  ADC_PPB_NUMBER1  // ADCC-A7/C3*  -SOC1-PPB1
#define MTR1_IV_ADC_PPB_NUM  ADC_PPB_NUMBER2  // ADCA-A4*/C14 -SOC2-PPB2
#define MTR1_IW_ADC_PPB_NUM  ADC_PPB_NUMBER1  // ADCA-A0*/C15 -SOC1-PPB1

为电机驱动控制配置外设中断:

// Interrupt
#define MTR1_PWM_INT_BASE  MTR1_PWM_U_BASE       // EPWM1
#define MTR1_ADC_INT_BASE  ADCC_BASE             // ADCC-A11/C0*-SOC4
#define MTR1_ADC_INT_NUM   ADC_INT_NUMBER1       // ADCC_INT1   -SOC4
#define MTR1_ADC_INT_SOC   ADC_SOC_NUMBER4       // ADCC_INT1   -SOC4

#define MTR1_PIE_INT_NUM   INT_ADCC1             // ADCC_INT1   -SOC4
#define MTR1_CPU_INT_NUM   INTERRUPT_CPU_INT1    // ADCC_INT1-CPU_INT1
#define MTR1_INT_ACK_GROUP INTERRUPT_ACK_GROUP1  // ADCC_INT1-CPU_INT1

根据硬件,在 hal.h 中配置 ADC 引脚与 CMPSS 模块之间的连接;有关详细信息,请参阅 TMS320F280013x 实时微控制器技术参考手册中的表“模拟引脚和内部连接”。

// CMPSS->Iu/Iv/Iw
#define MTR1_CMPSS_U_BASE       CMPSSLITE4_BASE
#define MTR1_CMPSS_V_BASE       CMPSSLITE2_BASE
#define MTR1_CMPSS_W_BASE       CMPSSLITE3_BASE

#define MTR1_IU_CMPHP_SEL  ASYSCTL_CMPHPMUX_SELECT_4  // CMPSS4H-A7/C3*
#define MTR1_IU_CMPLP_SEL  ASYSCTL_CMPLPMUX_SELECT_4  // CMPSS4L-A7/C3*
#define MTR1_IV_CMPHP_SEL  ASYSCTL_CMPHPMUX_SELECT_2  // CMPSS2H-A4*/C14
#define MTR1_IV_CMPLP_SEL  ASYSCTL_CMPLPMUX_SELECT_2  // CMPSS2L-A4*/C14

#define MTR1_IW_CMPHP_SEL  ASYSCTL_CMPHPMUX_SELECT_3  // CMPSS3H-A0*/C15
#define MTR1_IW_CMPLP_SEL  ASYSCTL_CMPLPMUX_SELECT_3  // CMPSS3L-A0*/C15

#define MTR1_IU_CMPHP_MUX       1                     // CMPSS4H-A7/C3*
#define MTR1_IU_CMPLP_MUX       1                     // CMPSS4L-A7/C3*

#define MTR1_IV_CMPHP_MUX       0                     // CMPSS2H-A4*/C14
#define MTR1_IV_CMPLP_MUX       0                     // CMPSS2L-A4*/C14

#define MTR1_IW_CMPHP_MUX       2                     // CMPSS3H-A0*/C15
#define MTR1_IW_CMPLP_MUX       2                     // CMPSS3L-A0*/C15

根据硬件,在 hal.h 中配置从 CMPSS 传递到 EPWM 和 GPIO 输出的跳闸信号,有关详细信息,请参阅 TMS320F280013x 实时微控制器技术参考手册中的“ePWM X-BAR 多路复用器配置表”和“输出 X-BAR 多路复用器配置表”。

// XBAR-EPWM
#define MTR1_XBAR_TRIP_ADDRL    XBAR_O_TRIP8MUX0TO15CFG
#define MTR1_XBAR_TRIP_ADDRH    XBAR_O_TRIP8MUX16TO31CFG

#define MTR1_XBAR_INPUT1        XBAR_INPUT1
#define MTR1_TZ_OSHT1           EPWM_TZ_SIGNAL_OSHT1

#define MTR1_XBAR_TRIP          XBAR_TRIP8
#define MTR1_DCTRIPIN           EPWM_DC_COMBINATIONAL_TRIPIN8y

// XBAR-EPWM->Iu/Iv/Iw
#define MTR1_IU_XBAR_EPWM_MUX   XBAR_EPWM_MUX06_CMPSS4_CTRIPH_OR_L      // CMPSS4-HP&LP, A7/C3*
#define MTR1_IV_XBAR_EPWM_MUX   XBAR_EPWM_MUX02_CMPSS2_CTRIPH_OR_L      // CMPSS2-HP&LP, A4*/C14
#define MTR1_IW_XBAR_EPWM_MUX   XBAR_EPWM_MUX04_CMPSS3_CTRIPH_OR_L      // CMPSS3-HP&LP, A0*/C15

#define MTR1_IU_XBAR_MUX        XBAR_MUX06     // CMPSS4-HP&LP, A7/C3*
#define MTR1_IV_XBAR_MUX        XBAR_MUX02     // CMPSS2-HP&LP, A4*/C14
#define MTR1_IW_XBAR_MUX        XBAR_MUX04     // CMPSS3-HP&LP, A0*/C15

相关的 ADC 通道用于电机电流检测哪些引脚在内部连接到比较器子系统 (CMPSS),在 hal.c 文件中的 HAL_setupCMPSSs() 函数中配置 CMPSS 寄存器,代码如下所示。三个 CMPSS 模块用于实现电机 U 相、V 相和 W 相的正负过流保护。

void HAL_setupCMPSSsMTR(HAL_MTR_Handle handle)
{
    HAL_MTR_Obj *obj = (HAL_MTR_Obj *)handle;

#if defined(DMCPFC_REV3P2) || defined(DMCPFC_REV3P1)
#if !defined(MOTOR1_DCLINKSS) || !defined(MOTOR2_DCLINKSS)
    uint16_t cmpsaDACH;
#endif  // !(MOTOR1_DCLINKSS || MOTOR2_DCLINKSS)
    uint16_t cmpsaDACL;
    ... ...
#else   // !MOTOR1_DCLINKSS, Three-shunt
        cmpsaDACH = MTR1_CMPSS_DACH_VALUE;
        cmpsaDACL = MTR1_CMPSS_DACL_VALUE;

        ASysCtl_selectCMPHPMux(MTR1_IU_CMPHP_SEL, MTR1_IU_CMPHP_MUX);

        ASysCtl_selectCMPHPMux(MTR1_IV_CMPHP_SEL, MTR1_IV_CMPHP_MUX);

        ASysCtl_selectCMPLPMux(MTR1_IW_CMPLP_SEL, MTR1_IW_CMPLP_MUX);
    ... ...
    return;
} // end of HAL_setupCMPSSs() function

CMPSS 生成的信号进入 X-Bar,在此处这些信号能够以不同且独特的方式组合,以标记来自多个来源的独特跳闸事件(包括来自 IPM #Fault 的外部 TZ 信号),从而实现故障保护。故障包括来自 CMPSS 的过流信号和电源模块的故障指示灯输出。在 hal.c 文件中的 HAL_setupMtrFaults() 函数中配置 XBAR 寄存器,代码如下所示。

void HAL_setupMtrFaults(HAL_MTR_Handle handle)
{
    HAL_MTR_Obj *obj = (HAL_MTR_Obj *)handle;
    uint16_t cnt;

    // Configure TRIP 7 to OR the High and Low trips from both
    // comparator 5, 3 & 1, clear everything first
    EALLOW;
    HWREG(XBAR_EPWM_CFG_REG_BASE + MTR1_XBAR_TRIP_ADDRL) = 0;
    HWREG(XBAR_EPWM_CFG_REG_BASE + MTR1_XBAR_TRIP_ADDRH) = 0;
    EDIS;
    ... ...
        // What do we want the OST/CBC events to do?
        // TZA events can force EPWMxA
        // TZB events can force EPWMxB
        EPWM_setTripZoneAction(obj->pwmHandle[cnt],
                               EPWM_TZ_ACTION_EVENT_TZA,
                               EPWM_TZ_ACTION_LOW);

        EPWM_setTripZoneAction(obj->pwmHandle[cnt],
                               EPWM_TZ_ACTION_EVENT_TZB,
                               EPWM_TZ_ACTION_LOW);
    ... ...
    // Clear any spurious fault
    EPWM_clearTripZoneFlag(obj->pwmHandle[0], HAL_TZFLAG_INTERRUPT_ALL);
    EPWM_clearTripZoneFlag(obj->pwmHandle[1], HAL_TZFLAG_INTERRUPT_ALL);
    EPWM_clearTripZoneFlag(obj->pwmHandle[2], HAL_TZFLAG_INTERRUPT_ALL);

    return;
}

hal.c 文件中的 HAL_setupGPIOs() 中根据硬件配置 GPIO,代码如下所示。

void HAL_setupGPIOs(HAL_Handle handle)
{
    ... ...
    // GPIO2->EPWM2A->M1_UH
    GPIO_setPinConfig(GPIO_2_EPWM2_A);
    GPIO_writePin(2, 0);
    GPIO_setDirectionMode(2, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(2, GPIO_PIN_TYPE_STD);

    // GPIO3->EPWM2B->M1_UL
    GPIO_setPinConfig(GPIO_3_EPWM2_B);
    GPIO_writePin(3, 0);
    GPIO_setDirectionMode(3, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(3, GPIO_PIN_TYPE_STD);
    ... ...
    return;
}  // end of HAL_setupGPIOs() function

需要根据用于电机控制的 CMPSS,在 hal.h 文件中的 HAL_enableMtrPWM() 和 HAL_clearMtrFaultStatus() 中更改配置代码,如下面标记为粗体的代码所示。

static inline void HAL_enableMtrPWM(HAL_MTR_Handle handle)
{
    HAL_MTR_Obj *obj = (HAL_MTR_Obj *)handle;

    obj->flagEnablePWM = true;

#if defined(DMCPFC_REV3P2) || defined(DMCPFC_REV3P1)
    if(obj->motorNum == MTR_1)
    {
#if defined(MOTOR1_DCLINKSS)
        // Clear any comparator digital filter output latch
        CMPSS_clearFilterLatchLow(obj->cmpssHandle[0]);
#else   // !MOTOR1_DCLINKSS
        // Clear any comparator digital filter output latch
        CMPSS_clearFilterLatchHigh(obj->cmpssHandle[0]);

        CMPSS_clearFilterLatchHigh(obj->cmpssHandle[1]);

        CMPSS_clearFilterLatchLow(obj->cmpssHandle[2]);
    ... ...
    return;
} // end of HAL_enableMtrPWM() function
static inline void HAL_clearMtrFaultStatus(HAL_MTR_Handle handle)
{
    HAL_MTR_Obj *obj = (HAL_MTR_Obj *)handle;
    ... ...
#if defined(HVMTRPFC_REV1P1) || defined(WMINVBRD_REV1P0) || defined(TIDSMPFC_REV3P2)
    // Clear any comparator digital filter output latch
    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]);
    ... ...
    return;
} // end of HAL_clearMtrFaultStatus() function