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.

[参考译文] DRV8263S-Q1EVM:DRV8263 — 从睡眠状态唤醒至待机状态

Guru**** 2779905 points

Other Parts Discussed in Thread: MSPM0G3519, SYSCONFIG

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1617379/drv8263s-q1evm-drv8263---wakeup-from-sleep-state-to-standby-state

器件型号: DRV8263S-Q1EVM
主题中讨论的其他器件: MSPM0G3519SysConfig

您好、

您好、Joshua、

我将 GUI 替换为 MSPM0G3519 SPI 主器件。 如上所建议、从 SPI 主器件生成 CLR Fault 命令(不连接 DRV8263S)。 总时钟计数为 16 个周期。

//引脚映射

SPI 主器件        SPI 从器件

SCS -------------------- > SCS

CLK ------------------------ > CLK

皮克------ > SDI

POCI -------- >SDO

 

验证 SDI 帧后、我已从 J4 断开跳线电容器。

在初始阶段、我仅验证 SPI 通信、因此将 IN1 和 IN2 接地。 nSLEEP 和 DRVOFF 由主器件控制(两者均为高电平)。

//SPI Master 

#include <ti/driverlib/m0p/dl_interrupt.h>
#include "ti_msp_dl_config.h"

/*Macros */
#define DRV8263S_FRAME_STANDARD (0U << 15)
#define DRV8263S_READ (1U << 14)
#define DRV8263S_WRITE (0U << 14)

#define DRV8263S_WAKEUP() DL_GPIO_setPins(DRV8263_GPIO_GRP_nSLEEP_PB12_PORT, DRV8263_GPIO_GRP_nSLEEP_PB12_PIN)
#define DRV8263S_DRVON() DL_GPIO_setPins(DRV8263_GPIO_GRP_DRVOFF_PB15_PORT, DRV8263_GPIO_GRP_DRVOFF_PB15_PIN)

//DRV8263 SPI Register ADDRESS
#define SPI_REG_DEVICE_ID (uint8_t)(0x00) // Device ID Register
#define SPI_REG_FAULT_SUMMARY (uint8_t)(0x01) // Fault Summary Register
#define SPI_REG_STATUS1 (uint8_t)(0x02) // STATUS1 Register
#define SPI_REG_STATUS2 (uint8_t)(0x03) // STATUS2 Register
#define SPI_REG_COMMAND (uint8_t)(0x08) // COMMAND Register
#define SPI_REG_SPI_IN (uint8_t)(0x09) // SPI Input control Register
#define SPI_REG_CONFIG1 (uint8_t)(0x0A) // CONFIG1 Register
#define SPI_REG_CONFIG2 (uint8_t)(0x0B) // CONFIG2 Register
#define SPI_REG_CONFIG3 (uint8_t)(0x0C) // CONFIG3 Register
#define SPI_REG_CONFIG4 (uint8_t)(0x0D) // CONFIG4 Register

#define CLR_FLT_MASK (0x80)

uint16_t rawTxframe=0;
uint8_t txFrame[2];
uint8_t rxFrame[2];
uint8_t deviceId;

uint8_t SPI_Transfer16(uint8_t *txBuf, uint8_t *rxBuf, uint8_t len)
{

int i=0;
uint16_t rxWord=0;
uint8_t regData=0;

while (DL_SPI_isBusy(SPI_0_INST));

/* Assert CS */
// DRV8263S_CS_LOW();

for (i = 0; i < len; i++) {
DL_SPI_transmitDataBlocking8(SPI_0_INST, txBuf[i]);
rxBuf[i] = DL_SPI_receiveDataBlocking8(SPI_0_INST);
}

while (DL_SPI_isBusy(SPI_0_INST));

/* Deassert CS */
// DRV8263S_CS_HIGH(); // CS HIGH

rxWord= ((uint16_t)rxBuf[0] << 8) | rxBuf[1];
regData = (uint8_t)(rxWord & 0xFF);

return regData;
}
int main(void)
{
SYSCFG_DL_init();

// DRV8263S_CS_HIGH();
DRV8263S_DRVON();
DRV8263S_WAKEUP();


//drvReset
rawTxframe=((SPI_REG_COMMAND<<8)|CLR_FLT_MASK); /* | R/W | A5 A4 A3 A2 A1 A0 | D7 D6 D5 D4 D3 D2 D1 D0 |
B14 B13–B8 B7–B0*/
txFrame[0]=((rawTxframe>>8)&0xFF);
txFrame[1]=((rawTxframe)&0xFF);
deviceId=SPI_Transfer16(txFrame,rxFrame,2); //2 Bytes
while (1) {
}
}

MSPM0G3519 - SysConfig

没有发生初始握手的 DRV8263、  

 

此致、
SaKhan

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

    尊敬的 SaKhan:

    您所附的图像未加载、请重新连接、尤其是其中一个是示波器捕获时。

    对于唤醒过程、在 nSLEEP 设置为高电平之后、MCU 应在发送 CLR_FLT 命令之前等待~1ms(tREADY 时间)、以便器件可以超过器件未为 SPI 通信做好准备的阶段。

    此致、

    Joshua

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

    您好、Joshua、

    在 DRV 8263S EVM 中、J4 接头有两个部分、一个用于 MCU Internal、另一个用于 DRV 8263S。 我在 MCU 部分而不是 DRV 部分连接了主器件引脚、 后来我发现原理图中存在这种差异并进行了更改。 现在、我可以与 DRV 进行通信。

    谢谢、

    SaKhan