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

配置 PWM 模块

HAL 模块用于配置 PWM 通道。hal.h 文件中定义了用于电机控制器 PWM 输入的 PWM 通道的基地址,并在 hal.c 文件中为 PWM 句柄分配了基地址。LAUNCHXL-F280025CBOOSTXL-DRV8323RS 之间 PWM 信号的连接图如图 4-2 所示。

 PWM 连接图图 4-2 PWM 连接图

用于配置 PWM 信号的代码如下所示,该代码取自位于 solutions\universal_motorcontrol_lab\f28002x\drivers\include 和 \source 文件夹的 hal.hhal.c 文件。与电机驱动器板相关的变化和与 MCU 相关的变化以粗体突出显示。

  1. PWM 模块的基地址在 hal.h 文件中定义,如下所示。
    //! \ Motor 1
    #define MTR1_PWM_U_BASE         EPWM1_BASE
    #define MTR1_PWM_V_BASE         EPWM2_BASE
    #define MTR1_PWM_W_BASE         EPWM6_BASE
  2. 在位于 hal.c 文件中的 HAL_setupGpios() 函数内将 GPIO 设置为 PWM 输出。
    // GPIO0->EPWM1A->M1_UH*
    GPIO_setPinConfig(GPIO_0_EPWM1_A);
    GPIO_setDirectionMode(0, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(0, GPIO_PIN_TYPE_STD);
    
    // GPIO1->EPWM1B->M1_UL*
    GPIO_setPinConfig(GPIO_1_EPWM1_B);
    GPIO_setDirectionMode(1, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(1, GPIO_PIN_TYPE_STD);
    
    // GPIO2->EPWM2A->M1_VH*
    GPIO_setPinConfig(GPIO_2_EPWM2_A);
    GPIO_setDirectionMode(2, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(2, GPIO_PIN_TYPE_STD);
    
    // GPIO3->EPWM2B->M1_VL*
    GPIO_setPinConfig(GPIO_3_EPWM2_B);
    GPIO_setDirectionMode(3, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(3, GPIO_PIN_TYPE_STD);
    
    // GPIO4->EPWM3A->M1_WH* 
    GPIO_setPinConfig(GPIO_4_EPWM3_A);
    GPIO_setDirectionMode(4, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(4, GPIO_PIN_TYPE_STD); 
    
    // GPIO15->EPWM3B->M1_WL* 
    GPIO_setPinConfig(GPIO_15_EPWM3_B);
    GPIO_setDirectionMode(15, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(15, GPIO_PIN_TYPE_STD); 
  3. 以下代码将 PWM 模块的相应基地址分配给 hal.c 文件中 HAL_MTR1_init() 函数的 PWM 句柄。在调整代码以适应新电路板或 C2000 MCU 时,不需要更改以下代码,这些代码仅演示了如何在代码中初始化 PWM 句柄。
    // initialize PWM handles for Motor 1
    obj->pwmHandle[0] = MTR1_PWM_U_BASE;        //!< the PWM handle
    obj->pwmHandle[1] = MTR1_PWM_V_BASE;        //!< the PWM handle
    obj->pwmHandle[2] = MTR1_PWM_W_BASE;        //!< the PWM handle
  4. 下面的代码演示了在位于 hal.c 文件中的 HAL_setupPWMs() 函数内发生的 PWM 配置。请注意,设置 PWM 频率所需的 PWM 周期 (USER_M1_PWM_TBPRD_NUM)、SOC 事件预分频数 (USER_M1_PWM_TBPRD_NUM) 和死区值(MTR1_PWM_DBRED_CNT、MTR1_PWM_DBFED_CNT)在 hal.h 文件中定义。可以根据硬件板和控制要求更改这些定义的值。PWM 计数器模式和 PWM 动作限定符输出需要根据硬件板进行设置。
    void HAL_setupPWMs(HAL_MTR_Handle handle) 
    { 
    	HAL_MTR_Obj *obj = (HAL_MTR_Obj *)handle; 
    	uint16_t cnt; 
    	uint16_t pwmPeriodCycles = (uint16_t)(USER_M1_PWM_TBPRD_NUM); 
    	uint16_t numPWMTicksPerISRTick = USER_M1_NUM_PWM_TICKS_PER_ISR_TICK; 
    	... ... 
    	for(cnt=0; cnt<3; cnt++) 
    	{ 
    		// setup the Time-Base Control Register (TBCTL) 
    		EPWM_setTimeBaseCounterMode(obj->pwmHandle[cnt], EPWM_COUNTER_MODE_UP_DOWN); 
    		... ... 
    		// setup the Action-Qualifier Output A Register (AQCTLA) 
    		EPWM_setActionQualifierAction(obj->pwmHandle[cnt], EPWM_AQ_OUTPUT_A,
    			EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA); 
    		EPWM_setActionQualifierAction(obj->pwmHandle[cnt], EPWM_AQ_OUTPUT_A, 
    			EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD); 
    		EPWM_setActionQualifierAction(obj->pwmHandle[cnt], EPWM_AQ_OUTPUT_A,
                EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA); 
    		EPWM_setActionQualifierAction(obj->pwmHandle[cnt], EPWM_AQ_OUTPUT_A,
                EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO); 
    		... ... 
    		// setup the Dead-Band Generator Control Register (DBCTL) 
    		EPWM_setDeadBandDelayMode(obj->pwmHandle[cnt], EPWM_DB_RED, true); 
    		EPWM_setDeadBandDelayMode(obj->pwmHandle[cnt], EPWM_DB_FED, true); 
    		
    		// select EPWMA as the input to the dead band generator 
    		EPWM_setRisingEdgeDeadBandDelayInput(obj->pwmHandle[cnt], EPWM_DB_INPUT_EPWMA); 
    		
    		// configure the right polarity for active high complementary config. 
    		EPWM_setDeadBandDelayPolarity(obj->pwmHandle[cnt], EPWM_DB_RED, EPWM_DB_POLARITY_ACTIVE_HIGH); 
    		EPWM_setDeadBandDelayPolarity(obj->pwmHandle[cnt], EPWM_DB_FED, EPWM_DB_POLARITY_ACTIVE_LOW); 
    		
    		// setup the Dead-Band Rising Edge Delay Register (DBRED) 
    		EPWM_setRisingEdgeDelayCount(obj->pwmHandle[cnt], MTR1_PWM_DBRED_CNT); 
    		
    		// setup the Dead-Band Falling Edge Delay Register (DBFED) 
    		EPWM_setFallingEdgeDelayCount(obj->pwmHandle[cnt], MTR1_PWM_DBFED_CNT); 
    		... ... 
    	} 
    	... ... 
    	// setup the Event Trigger Selection Register (ETSEL) 
    	EPWM_setInterruptSource(obj->pwmHandle[0], EPWM_INT_TBCTR_ZERO); 
    	EPWM_enableInterrupt(obj->pwmHandle[0]); 
    	EPWM_setADCTriggerSource(obj->pwmHandle[0], EPWM_SOC_A, EPWM_SOC_TBCTR_D_CMPC); 
    	EPWM_enableADCTrigger(obj->pwmHandle[0], EPWM_SOC_A);
    	... ...
    	
        return;
    }  // end of HAL_setupPWMs() function
  5. 以下代码位于 hal.h 文件中,定义了 ADC 转换启动触发源。此 ePWM SOC 触发器必须对应于第 4 步所示代码中启用的同一 ePWM SOC,以及与 pwmHandle[0] 相关联的同一 ePWM。这是因为在第 4 步中使用了这些引脚来设置触发源。在这种情况下,EPWM1 A 用作 ADC 的 SOC。
    // Three-shunt
    #define MTR1_ADC_TRIGGER_SOC     ADC_TRIGGER_EPWM1_SOCA // EPWM1_SOCA