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

支持新的 BLDC 电机驱动器板

C2000 MCU 可与 BLDC 电机驱动器搭配使用,用于驱动三相 BLDC 或 PMSM 电机应用。此通用实验工程可支持各种预定义的 BLDC 电机驱动器。用户可以参考实验工程中的示例代码,并按照本节中所述的步骤来实现更新的或不受支持的 BLDC 电机驱动器。本节以带 SPI 的 DRV8323RS 为例。

  1. 设计适用于新 BLDC 电机驱动器 EVM 板的驱动器文件。

    如果 BLDC 电机驱动器支持 SPI,请参阅现有的 BLDC 电机驱动器文件(drv8323s.hdrv8323s.c),并根据需要在 drv8xxx.hdrv8xxx.c 文件中更改寄存器和 API 函数定义。BLDC 电机驱动器寄存器映射的详细说明可在 BLDC 电机驱动器器件的数据表中找到。

    为驱动程序文件创建一组新的文件夹,与 DRV8323 一样(“\libraries\drvic\drv8323\include”和“\libraries\drvic\drv8323\source”)。

  2. 将 BLDC 电机驱动器源文件添加到电机控制工程中。

    首先,将 BLDC 电机驱动器源文件添加到您正在处理的工程中。添加文件的方法有两种。

    使用编辑器打开 universal_motorcontrol_lab.projectspec projectspec 文件,按如下所示将文件添加到工程中。

    <file action="link" path="SDK_ROOT/libraries/drvic/drv8323/source/drv8323s.c" targetDirectory="src_board" applicableConfigurations="Flash_lib_DRV8323RS" />
    <file action="link" path="SDK_ROOT/libraries/drvic/drv8323/include/drv8323s.h" targetDirectory="src_board" applicableConfigurations="Flash_lib_DRV8323RS" />

    或者,右键点击 Project Explorer 窗口内的工程名称,并选择“Add Files”。接下来,导航至以下文件夹并从“\libraries\drvic\drv8323\source”中选择设计的驱动程序文件,然后选择“Link to Files”。

  3. 将头文件添加到 hal_obj.h 文件的 include 列表中。
    #include "drv8323s.h"

    为了确保可以正确找到头文件,请在“Project Properties”->“Build”->“C2000 Compiler”->“Include Options”->“Add dir to #include search path”中添加指向头文件的目录。

    或者,通过在 universal_motorcontrol_lab.projectspec projectspec 文件中添加以下内容,将目录添加到头文件中。

    -I${SDK_ROOT}/libraries/drvic/drv8323/include
  4. 编辑 HAL_Obj 以添加 drvic 接口句柄和 SPI 句柄。

    请参阅 DRV8323 文件,按如下所示添加支持代码。

    hal_obj.h 文件中添加定义。

    #define DRAdd the defines in hal_obj.h fileVIC_Obj               DRV8323_Obj
    #define DRVIC_VARS_t            DRV8323_VARS_t
    #define DRVIC_Handle            DRV8323_Handle
    #define DRVICVARS_Handle        DRV8323VARS_Handle
    
    #define DRVIC_init              DRV8323_init
    #define DRVIC_enable            DRV8323_enable
    #define DRVIC_writeData         DRV8323_writeData
    #define DRVIC_readData          DRV8323_readData
    
    #define DRVIC_setupSPI          DRV8323_setupSPI
    
    #define DRVIC_setSPIHandle      DRV8323_setSPIHandle
    #define DRVIC_setGPIOCSNumber   DRV8323_setGPIOCSNumber
    #define DRVIC_setGPIOENNumber   DRV8323_setGPIOENNumber

    将 drvic 接口句柄和 SPI 句柄添加到 HAL_Obj:

      uint32_t       spiHandle;          //!< the SPI handle
    
      DRVIC_Handle   drvicHandle;        //!< the drvic interface handle
      DRVIC_Obj      drvic;              //!< the drvic interface object
    
      uint32_t       gateEnableGPIO;
      // BSXL8353RS_REVA
  5. 配置 SPI 以与 BLDC 电机驱动器进行通信。

    将电机驱动器与 SPI 配合使用时,必须从 MCU 正确配置 SPI,以匹配与 BLDC 电机驱动器器件正确通信所需的格式。

    hal.c 文件的 HAL_setupGPIOs() 中为 SPI 函数配置相关 GPIO。确保查看 BLDC 电机驱动器数据表,以确定每个 SPI 引脚是否需要外部上拉或下拉电阻器,或者是否配置为推挽引脚。

        // GPIO5->Connect to GPIO5 using a jumper wire->M1_DRV_SCS
        GPIO_setPinConfig(GPIO_5_SPIA_STE);
        GPIO_setDirectionMode(5, GPIO_DIR_MODE_OUT);
        GPIO_setPadConfig(5, GPIO_PIN_TYPE_STD);
    
        // GPIO09->M1_DRV_SCLK*
        GPIO_setPinConfig(GPIO_9_SPIA_CLK);
        GPIO_setDirectionMode(9, GPIO_DIR_MODE_OUT);
        GPIO_setPadConfig(9, GPIO_PIN_TYPE_PULLUP);
    
        // GPIO10->SPIA_SOMI->M1_DRV_SDO*
        GPIO_setPinConfig(GPIO_10_SPIA_SOMI);
        GPIO_setDirectionMode(10, GPIO_DIR_MODE_IN);
        GPIO_setPadConfig(10, GPIO_PIN_TYPE_PULLUP);
    
        // GPIO11->SPIA_SIMO->M1_DRV_SDI*
        GPIO_setPinConfig(GPIO_11_SPIA_SIMO);
        GPIO_setDirectionMode(11, GPIO_DIR_MODE_OUT);
        GPIO_setPadConfig(11, GPIO_PIN_TYPE_PULLUP);

    hal.c 文件中的 HAL_setupSPI() 中为波特率、数据帧配置 SPI 控制寄存器:

        // Must put SPI into reset before configuring it
        SPI_disableModule(obj->spiHandle);
    
        // SPI configuration. Use a 500kHz SPICLK and 16-bit word size, 25MHz LSPCLK
        SPI_setConfig(obj->spiHandle, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA0,
                      SPI_MODE_MASTER, 400000, 16);
    
        SPI_disableLoopback(obj->spiHandle);
    
        SPI_setEmulationMode(obj->spiHandle, SPI_EMULATION_FREE_RUN);
    
        SPI_enableFIFO(obj->spiHandle);
        SPI_setTxFifoTransmitDelay(obj->spiHandle, 0x10);
    
        SPI_clearInterruptStatus(obj->spiHandle, SPI_INT_TXFF);
    
        // Configuration complete. Enable the module.
        SPI_enableModule(obj->spiHandle);
  6. 为其他输入和输出引脚配置 GPIO,例如 ENABLE、nFAULT。您可以参考 hal.c 文件的 HAL_setupGPIOs()、HAL_setupGate() 中的示例代码以及 hal.h 文件中的定义,如下所示:
    //! \brief Defines the gpio for enabling Power Module
    #define MTR1_GATE_EN_GPIO       29
    
    //! \brief Defines the gpio for the nFAULT of Power Module
    #define MTR1_PM_nFAULT_GPIO     34
  7. hal.c 文件的 HAL_MTR_setParams() 中调用 HAL_setupSPI() 和 HAL_setupGate() 函数:
        // setup the spi for drv8323/drv8353/drv8316
        HAL_setupSPI(handle);
    
        // setup the drv8323s/drv8353s/drv8316s interface
        HAL_setupGate(handle);
  8. 按如下所示调用 motor1_drive.c 文件中的驱动程序函数:
        // turn on the DRV8323/DRV8353/DRV8316 if present
        HAL_enableDRV(obj->halMtrHandle);
    
        // initialize the DRV8323/DRV8353/DRV8316 interface
        HAL_setupDRVSPI(obj->halMtrHandle, &drvicVars_M1);
  9. 如果需要,更改 BLDC 电机驱动器的默认设置值。
        drvicVars_M1.ctrlReg05.bit.VDS_LVL = DRV8323_VDS_LEVEL_1P700_V;
        drvicVars_M1.ctrlReg05.bit.OCP_MODE = DRV8323_AUTOMATIC_RETRY;
        drvicVars_M1.ctrlReg05.bit.DEAD_TIME = DRV8323_DEADTIME_100_NS;
        drvicVars_M1.ctrlReg06.bit.CSA_GAIN = DRV8323_Gain_10VpV;
    
        drvicVars_M1.ctrlReg06.bit.LS_REF = false;
        drvicVars_M1.ctrlReg06.bit.VREF_DIV = true;
        drvicVars_M1.ctrlReg06.bit.CSA_FET = false;
    
        drvicVars_M1.writeCmd = 1;
        HAL_writeDRVData(obj->halMtrHandle, &drvicVars_M1);