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

配置故障保护函数

当发生某些故障(例如电机驱动器跳闸引起的故障引脚或在 CMSS 模块上检测到过流事件)时,将采取措施来停止 MCU 的输出 PWM。为实现此目的,对 ePWM 多路复用器和 ePWM 跳闸区域进行配置以采取适当的操作。本节将介绍实现此目的的代码。在使用自定义电机驱动器板、使用通用电机控制实验尚不支持的 TI 电机驱动器 EVM 或为不同的 C2000 MCU 配置代码时,必须对此代码进行适当修改。可能需要的代码更改用粗体突出显示。有关 X-BAR 的更多详细信息,请参阅 TMS320F28002x 实时微控制器技术参考手册中的 ePWM X-BAR 多路复用器配置表和输出 X-BAR 多路复用器配置表。

  1. 以下代码定义了电机驱动器故障 GPIO 输入。此代码位于 hal.h 文件中。
    //! \brief Defines the gpio for the nFAULT of Power Module
    #define MTR1_PM_nFAULT_GPIO     34
  2. 下面的定义用于设置 X-BAR,以将来自 CMPSS 模块和故障 GPIO 的信号链接到 ePWM 跳闸区子模块。此代码位于 hal.h 文件中。请注意,在下面的代码中,相位 U 电流 X-BAR ePWM 多路复用器配置为 CTRIPL,而相位 W 电流 X-BAR ePWM 多路复用器配置为 CTRIPH,但相位 V 电流 X-BAR ePWM 多路复用器配置为 CTRIPH_OR_L。这是因为 W 相和 U 相电流输入共用同一个 CMPSS 模块(模块 1),而 V 相电流输入有其自己的专用 CMPSS 模块(模块 3),从而使其可以配置为在同一相电流输入上输出高电平或低电平。如果使用允许电流输入具有专用 CMPSS 模块的 C2000 MCU 或电机驱动板,则需要将 U 相和 W 相电流的 ePWM 多路复用器配置更改为 CTRIPH_OR_L,类似于 V 相的当前配置方式。
    #define MTR1_XBAR_TRIP_ADDRL    XBAR_O_TRIP7MUX0TO15CFG
    #define MTR1_XBAR_TRIP_ADDRH    XBAR_O_TRIP7MUX16TO31CFG 
    
    #define MTR1_IDC_XBAR_EPWM_MUX XBAR_EPWM_MUX05_CMPSS3_CTRIPL   // CMPSS3-LP, single shunt only
    #define MTR1_IDC_XBAR_MUX       XBAR_MUX05 // CMPSS3-LP, single shunt only 
    
    #define MTR1_IU_XBAR_EPWM_MUX XBAR_EPWM_MUX00_CMPSS1_CTRIPH // CMPSS1-HP 
    #define MTR1_IV_XBAR_EPWM_MUX XBAR_EPWM_MUX04_CMPSS3_CTRIPH_OR_L // CMPSS3-HP&LP 
    #define MTR1_IW_XBAR_EPWM_MUX XBAR_EPWM_MUX01_CMPSS1_CTRIPL       // CMPSS1-LP
    
    #define MTR1_IU_XBAR_MUX        XBAR_MUX00          // CMPSS1-HP
    #define MTR1_IV_XBAR_MUX        XBAR_MUX04          // CMPSS3-HP&LP
    #define MTR1_IW_XBAR_MUX        XBAR_MUX01 // CMPSS1-LP 
    
    #define MTR1_XBAR_INPUT1 XBAR_INPUT1 
    #define MTR1_TZ_OSHT1 EPWM_TZ_SIGNAL_OSHT1 
    #define MTR1_XBAR_TRIP XBAR_TRIP7 
    #define MTR1_DCTRIPIN EPWM_DC_COMBINATIONAL_TRIPIN7
  3. 以下代码为相电流和电机故障引脚配置 ePWM X-BAR 和跳闸信号。此操作在 hal.c 文件中的 HAL_setupMtrFaults() 函数内完成。在修改通用电机控制实验时,可能不需要修改以下代码,但务必确保正确配置上一步中的代码,以便设置正确的多路复用器和跳闸值。
    void HAL_setupMtrFaults(HAL_MTR_Handle handle) 
    { 
    	... ... 
        // Configure TRIP7 to be CTRIP5H and CTRIP5L using the ePWM X-BAR
        XBAR_setEPWMMuxConfig(MTR1_XBAR_TRIP, MTR1_IU_XBAR_EPWM_MUX);
    
        // Configure TRIP7 to be CTRIP1H and CTRIP1L using the ePWM X-BAR
        XBAR_setEPWMMuxConfig(MTR1_XBAR_TRIP, MTR1_IV_XBAR_EPWM_MUX);
    
        // Configure TRIP7 to be CTRIP3H and CTRIP3L using the ePWM X-BAR
        XBAR_setEPWMMuxConfig(MTR1_XBAR_TRIP, MTR1_IW_XBAR_EPWM_MUX);
    	
    	// Disable all the mux first 
    	XBAR_disableEPWMMux(MTR1_XBAR_TRIP, 0xFFFF); 
    	
    	// Enable Mux 0 OR Mux 4 to generate TRIP 
    	XBAR_enableEPWMMux(MTR1_XBAR_TRIP, MTR1_IU_XBAR_MUX | MTR1_IV_XBAR_MUX | MTR1_IW_XBAR_MUX); 
    	
    	... ... 
    	
    	// configure the input x bar for TZ2 to GPIO, where Over Current is connected 
    	XBAR_setInputPin(INPUTXBAR_BASE, MTR1_XBAR_INPUT1, MTR1_PM_nFAULT_GPIO); 
    	XBAR_lockInput(INPUTXBAR_BASE, MTR1_XBAR_INPUT1); 
    	
        for(cnt=0; cnt<3; cnt++)
        {
            EPWM_enableTripZoneSignals(obj->pwmHandle[cnt],
                                       EPWM_TZ_SIGNAL_CBC6);
    
            //enable DC TRIP combinational input
            EPWM_enableDigitalCompareTripCombinationInput(obj->pwmHandle[cnt],
                                                  MTR1_DCTRIPIN, EPWM_DC_TYPE_DCAH);
    
            EPWM_enableDigitalCompareTripCombinationInput(obj->pwmHandle[cnt],
                                                  MTR1_DCTRIPIN, EPWM_DC_TYPE_DCBH);
    
            // Trigger event when DCAH is High
            EPWM_setTripZoneDigitalCompareEventCondition(obj->pwmHandle[cnt],
                                                         EPWM_TZ_DC_OUTPUT_A1,
                                                         EPWM_TZ_EVENT_DCXH_HIGH);
    
            // Trigger event when DCBH is High
            EPWM_setTripZoneDigitalCompareEventCondition(obj->pwmHandle[cnt],
                                                         EPWM_TZ_DC_OUTPUT_B1,
                                                         EPWM_TZ_EVENT_DCXL_HIGH);
    
            // Configure the DCA path to be un-filtered and asynchronous
            EPWM_setDigitalCompareEventSource(obj->pwmHandle[cnt],
                                              EPWM_DC_MODULE_A,
                                              EPWM_DC_EVENT_1,
                                              EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);
    
            // Configure the DCB path to be un-filtered and asynchronous
            EPWM_setDigitalCompareEventSource(obj->pwmHandle[cnt],
                                              EPWM_DC_MODULE_B,
                                              EPWM_DC_EVENT_1,
                                              EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);
    
            EPWM_setDigitalCompareEventSyncMode(obj->pwmHandle[cnt],
                                                EPWM_DC_MODULE_A,
                                                EPWM_DC_EVENT_1,
                                                EPWM_DC_EVENT_INPUT_NOT_SYNCED);
    
            EPWM_setDigitalCompareEventSyncMode(obj->pwmHandle[cnt],
                                                EPWM_DC_MODULE_B,
                                                EPWM_DC_EVENT_1,
                                                EPWM_DC_EVENT_INPUT_NOT_SYNCED);
    
            // Enable DCA as OST
            EPWM_enableTripZoneSignals(obj->pwmHandle[cnt], EPWM_TZ_SIGNAL_DCAEVT1);
    
            // Enable DCB as OST
            EPWM_enableTripZoneSignals(obj->pwmHandle[cnt], EPWM_TZ_SIGNAL_DCBEVT1);
    
            // 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);
        }
    	... ... 
    	return; 
    } // end of HAL_setupMtrFaults() function