This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DRV8363-Q1EVM:查询 DRV8363-Q1EVM 与 MSPM0G3519 MCU 的兼容性

Guru**** 2756835 points

Other Parts Discussed in Thread: DRV8363, MSPM0G3519, DRV8363-Q1EVM, LAUNCHXL-F280049C, DRV8363-Q1

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1605519/drv8363-q1evm-query-on-drv8363-q1evm-compatibility-with-mspm0g3519-mcu

器件型号: DRV8363-Q1EVM
Thread 中讨论的其他器件: MSPM0G3519LAUNCHXL-F280049CDRV8363-Q1、DRV8363

您好、

 

我正在使用设计 BLDC 电机控制应用 MSPM0G3519 MCU 并采购了 DRV8363-Q1EVM 用于栅极驱动器评估。

在阅读 DRV8363-Q1EVM 快速入门指南时、我注意到以下注意事项:

image.png

 

目前、我没有 LAUNCHXL-F280049C 我打算将 DRV8363-Q1EVM 直接与连接 MSPM0G3519 代替。

我希望澄清以下几点:

  1. DRV8363-Q1EVM 在电气和功能上兼容 使用 MSPM0G3519 进行评估(SPI + 6-PWM 控制)?

  2. 注意事项是否表示 硬件限制 或主要与有关 官方软件支持和验证 问题?

  3. 有任何问题 特定约束、风险或建议的检查 将 DRV8363-Q1EVM 与非 C2000 MCU(例如 MSPM0?

  4. 有任何问题吗 参考文档、应用手册或推荐的验证过程 如何使用通用 MCU 启动 DRV8363-Q1EVM?

  5. 对于基本 BLDC 运行(6 步换向)、MSPM0 中基于软件的死区时间生成是否被视为可用于评估?

我的目标是安全验证 DRV8363-Q1 器件、并使用 MSPM0G3519 执行低功耗 BLDC 电机控制实验。

请您提供指导、说明这种方法是否可以接受以及您可能提出的任何建议。

感谢您的支持。

此致、

Sakhan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Sakhan、

    推荐使用 C2000 49C LaunchPad、因为它与 EVM 软件/GUI 兼容、以及我们测试可正常工作的功能。

    但是没有、如果您编写用于电机控制的固件、则没有什么东西可以阻止您跳过来自另一个 MCU 的信号。  
    我们没有通用 MCU 启动指南、但只要可使用 EVM 原理图将信号跳转到 MCU、我就不会有太大差异。  

    对于 6 步换向、您可以使用 MCU 死区时间、或依赖 DRV 死区时间(前提是不使用独立模式-无死区时间插入)。

    我可以将此主题交给 M0 团队、看看他们是否有任何使用 M0 进行电机控制的指南。

    此致、

    Akshay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sakhan:

    以下是一些有关使用 MSPM0 进行电机控制的文档:

    此外、我们的 SDK 还提供了一些电机控制示例:

    此致、

    Owen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Owen:

    我是否可以在不使用 SPI 的情况下通过生成 PWM 和基本 GPIO 信号(如 nSLEEP...等)来验证 DRV8363-Q1EVM、这是否足以验证驱动器的功能?

    此致、

    SaKhan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 SaKhan:

    根据 DRV6383-Q1 数据表、SPI 用于设置器件配置、工作参数和读取诊断信息。

    如果您需要这方面的进一步支持、我可以在此主题上向电机驱动团队汇报。

    此致、

    Owen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  Owen:

    如果您能将电机驱动团队添加到该主题、我将不胜感激。

    此致、

    Sakhan。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果能获得每种模式的 DRV8363S SPI 实现应用手册(包括寄存器配置)、那会很好。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sakhan:

    我刚刚新增了电机驱动团队。

    此致、

    Owen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Sakhan、

    通过使用默认寄存器配置、基本器件启动和功能可以在没有 SPI 的情况下完成。  

    我们没有不支持 SPI 配置的应用、但数据表 SPI 表中显示了其定义和默认配置。

    此致、
    Akshay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Akshay:

    感谢您的澄清。

    请解释一下 基本器件启动和功能 了解详情? 如果您能简要介绍所涉及的步骤、包括如何在没有 SPI 的情况下使用默认寄存器配置来初始化和运行、该软件会很有帮助。

    如何复位 DRV8363 以将所有寄存器设为默认值。

    此致、

    SaKhan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Akshay:

    我已将 MSPM0 SPI 控制器配置为发送 DRV8363 SPI 帧。

    IC_STAT1 寄存器  (偏移= 0h)[复位= 8080h]

    现在的地址  IC_STAT1 寄存器  为 0x00 (偏移= 0h)。

    RW 为 1

    数据为 0x0000  

    奇偶校验为 1

    1.按照 DRV SDI 帧格式(24 位)构成的帧。 在连接到 DRV8363 之前通过启用内部环路模式来验证 SPI Tx 和 Rx。

    2.代码段

    #include "SPI_Frames.h"
    #include "globalVariables.h"
    #include "ti_msp_dl_config.h"
    #include <ti/driverlib/m0p/dl_interrupt.h>
    
    #define SPI_PACKET_SIZE 8
    #define TIME_BETWEEN_EACH_FRAME 13 // 400ns is 13, 1us is 32 (as per DRV datasheet)
    
    SDI_Frame tx;
    SDO_Frame rxFrame;
    uint8_t gTxPacket[SPI_PACKET_SIZE] = {0x11, 0x22, 0x33, 0x44,
                                          0x55, 0x66, 0x77, 0x88};
    uint32_t sendBytes;
    uint8_t i;
    uint8_t sdi[3];
    uint8_t txBytes[3];
    uint8_t rxBytes[3];
    
    //func proto
    static SDO_Frame drv8363_spi_transfer_frame(SDI_Frame txFrame);
    
    int main(void) {
      SYSCFG_DL_init();
    
      //nSLEEP to "HIGH" (Enable the DRV)
      DL_GPIO_setPins(GPIO_GRP_0_PORT, GPIO_GRP_0_PIN_B12_PIN);
      drv8363_ReadFrame(&tx, 0x00);
      
    
        drv8363_spi_transfer_frame(tx);
    
        drv8363_ReadFrame(&tx, 0x00);
        
        drv8363_spi_transfer_frame(tx);
    
      while (1) {
      }
    }
    
    static SDO_Frame drv8363_spi_transfer_frame(SDI_Frame txFrame)
    {
    
    
    
        /* -------- Split SDI raw into 3 bytes (MSB first) -------- */
        txBytes[0] = (txFrame.raw >> 16) & 0xFF;
        txBytes[1] = (txFrame.raw >> 8)  & 0xFF;
        txBytes[2] = (txFrame.raw)       & 0xFF;
    
        /* -------- Start SPI frame -------- */
         for (int i = 0; i < 3; i++)
        {
            DL_SPI_transmitDataBlocking8(SPI_0_INST, txBytes[i]);
            rxBytes[i] = DL_SPI_receiveDataBlocking8(SPI_0_INST);
        }
    
        while (DL_SPI_isBusy(SPI_0_INST));
    
        /* -------- End SPI frame -------- */
    
    
        /* -------- Assemble received bytes into SDO raw -------- */
        rxFrame.raw =
            ((uint32_t)rxBytes[0] << 16) |
            ((uint32_t)rxBytes[1] << 8)  |
            ((uint32_t)rxBytes[2]);
    
        return rxFrame;
    }

          

    3.使用 Picoscope 示波器验证 Pico 针数据。 有 48 个上升沿(每个帧= 24 个时钟上升沿)  

    4.现在、使用正确的引脚映射连接 DRV8363。 [SPI CLK 至 DRV SCLK、SPI CS 至 nSCS、SPI PICO 至 SDI、 SPI POCI 至 SDO]

    此外、nSLEEP 设为高电平、以便在上电后清除故障引脚。 请参阅下面的 MSPM0 和 DRV 设置、

    当我将读取帧[0x810000]发送到 DRV 时、没有响应((Rx 寄存器中没有收到任何响应)为什么? 甚至我实现了发送到 MSPM0 到 DRV 的每一帧之间的延迟(请参阅 Picoscope 数据)。

    即使发送所需的帧后、我也没有从 DRV 获取数据?  

    请帮我解决这个问题。

    此致、

    SaKhan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Sakhan、

    绿色芯片选择吗? 它应该会在每个字变为高电平一次(24 位)。

    您是否已查看 DS 第 6.6 节编程 6.6.1 SPI?

    此致、

    Akshay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Akshay、

    1.我添加了设备设置、MSPM0 配置和使用 Picoscope 示波器进行的帧验证。 请查看我的回复上方、了解所有详细信息。

    2.在 MSPM0 上、我通过使用内部环回从 PICO 发送数据并在 POCI 中接收数据来验证 Tx 和 Rx 代码。 正如预期的那样、Tx 帧在 Rx 缓冲区中接收到。

    3.连接 DRV 时、无法获得 MSPM0 发送的 Tx 帧的响应。 请查看上面的所有帖子、告诉我我哪里出错、如引脚映射或 SPI 模式设置或任何内容。 请指导我解决这个问题。

    4.我问过基本功能 (BLDC/BDC) 测试,以证明 DRV 能按预期工作。 我来介绍一下使用 SPI 检查功能的方法。

    此致、

    SaKhan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    照片的缩放效果不好、但我想在 J1.2 上看不到任何与 PA14 (PICO) 引脚连接的东西。  

    或者:可能是导线连接到 J1.2、在这种情况下我看不到 3V3 连接。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Sakhan、

    这是 DRV8363 的 SPI 格式。

     

    默认值:无 CRC、24 位。

     

    0 000000 0 00000000

     

    奇偶校验位–1 或 0、具体取决于数据的其他 23 位+ r/w + addr。 我们希望 1s 总数是偶数。

     

    6 位地址–您要读取/写入的地址的 6 位。

     

    读取/写入位 — 0(对于写入)、1(对于读取命令)。

     

    16 位数据–要写入的数据。 可以保留 0 以进行 SPI 读取。

     

     

     

     8363 读取/写入函数的 EVM 代码:

     ....................................................................................................................

    Uint32 SPI_READ (Uint16 addr)

      Uint16 命令字= 0;

      uint32 p_addr = addr;

      uint16 p_data = 0;

      uint16 byte0_r;

      uint16 byte1_r;

      uint16 byte2_r;

      uint16 new_addr;

      uint16 temp;

      UINT16 温度 2;

      uint16 temp3;

      Uint32 回读;

     

      //创建完整字以计算奇偶校验位

      uint32 calc =((p_addr << 17)& 0x7E0000)|(0x10000)|(p_data & 0xFFFF);

      UINT16 奇偶校验= 0;

      while (calc)

      {

        奇偶校验^=(calc & 1);

        Calc >>>= 1;

      }

      //0 000000 0 0000000000000000、(8363 SPI:1B 奇偶校验-> 6B 地址-> 1b R/W -> 16b 数据)

      new_addr = addr << 1;

      byte0_r =(奇偶校验<< 7)|(new_addr 和 0x7E)|(0x01);

      byte1_r = 0x00;

      byte2_r = 0x00;

     

      commandword =(byte0_r << 8);

      SpiaRegs.SPITXBUF=命令字;//发送前 8 位

      Temp = SpiaRegs.SPIRXBUF;

     

      //

      commandword =(byte1_r << 8);

      SpiaRegs.SPITXBUF=命令字;//发送中 8 位

      Temp = SpiaRegs.SPIRXBUF;

     

      commandword =(byte2_r << 8);

      SpiaRegs.SPITXBUF=命令字;//发送低 8 位

      Temp = SpiaRegs.SPIRXBUF;

     

      while (SpiaRegs.SPIFFRX.bit.RXFFST!= 3);//等待 FIFO 中接收 3 个字

     

      Temp = SpiaRegs.SPIRXBUF;

      TEMP2 = SpiaRegs.SPIRXBUF;

      temp3 = SpiaRegs.SPIRXBUF;

     

      回读=(温度<< 16)|(temp2 << 8)|(temp3);

      

      返回回读;

    }

     

    Uint32 SPI_WRITE(Uint16 addr、Uint16 数据)

      Uint16 命令字= 0;

      uint16 byte0_j;

      uint16 byte1_j;

      uint16 byte2_j;

      uint32 temp;

      uint32 temp2;

      uint32 temp3;

      uint16 new_addr;

      uint32 p_addr = addr;

      Uint32 回读;

      //对于写入命令、R/W = 0b

     

      //创建完整字以计算奇偶校验位

      uint32 calc =((p_addr << 17)& 0x7E0000)|(data & 0xFFFF);

      UINT16 奇偶校验= 0;

      while (calc)

      {

        奇偶校验^=(calc 和 0x01);

        Calc >>>= 1;

      }

     

      new_addr = addr << 1;

      byte0_j =(奇偶校验<< 7)|(new_addr 和 0x7E);

      byte1_j =(DATA & 0xFF00)>> 8;

      byte2_j =(DATA 和 0x00FF);

     

      //发送前 8 位、移动 lef 8、因为 TX 缓冲区需要左对齐数据

      commandword =(byte0_j << 8);

      SpiaRegs.SPITXBUF =命令字;

      Temp = SpiaRegs.SPIRXBUF;

     

      //发送中 8 位、移位 8、因为 TX 缓冲区需要左对齐数据

      commandword =(byte1_j << 8);

      SpiaRegs.SPITXBUF =命令字;

      TEMP2 = SpiaRegs.SPIRXBUF;

     

      //发送低 8 位、移位 8、因为 TX 缓冲区需要左对齐数据

      commandword =(byte2_j << 8);

      SpiaRegs.SPITXBUF =命令字;

     

      while (SpiaRegs.SPIFFRX.bit.RXFFST!= 3);//等待 FIFO 中接收所有 3 个字

     

      temp3 = SpiaRegs.SPIRXBUF;

     

      回读=(温度<< 16)|(温度 2 << 8)|(温度 3);

      返回回读;

    }

     ………………
    确认 SPI 是否正常工作的理想方法是调整 IDRIVE 寄存器。 通过在较高和较低的 IDrive 设置之间切换并测量 SHX-GND 波形、您可以看到较快的栅极电流是否会影响压摆率。 t (RISE/FALL)= Qgd/I(拉电流/灌电流)


    除非 MOSFET QGD 非常大、否则不建议使用最快的 IDRIVE 设置。

    此致、

    Akshay