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.

[参考译文] DRV8711EVM:TMS320F280025C 通信问题

Guru**** 2394305 points
Other Parts Discussed in Thread: DRV8711, TMS320F280025C

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1446995/drv8711evm-tms320f280025c-communication-problem

器件型号:DRV8711EVM
主题中讨论的其他器件:DRV8711TMS320F280025C

工具与软件:

尊敬的支持团队:

我正在使用 DRV8711 EVM 板控制步进电机。 为了测试电路板是否有任何硬件问题、我首先使用了 Arduino UNO 并获得了以下逻辑分析仪信号。 使用此设置、我能够根据需要控制电机。

Arduino Uno 逻辑捕获

DRV8711写入时序图

下一步、我将尝试使用 TMS320F280025C LAUNCHXL 使用相同的 DRV8711 EVM 板来控制同一个电机。 下面是 DRV8711数据表中的 SPI 写入时序图、我将它用作初始化的参考。 我的初始化代码如下:( SPI_BIT_RATE 24的 SPI 波特率1 MHz)

void SPI_init (void)

EALLOW;

GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 3;
GpioCtrlRegs.GPAGMUX1.bit.GPIO8 = 1;

GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 3;
GpioCtrlRegs.GPAGMUX1.bit.GPIO9 = 1;

GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 3;
GpioCtrlRegs.GPAGMUX1.bit.GPIO10 = 1;

GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 0;
GpioCtrlRegs.GPAGMUX2.bit.GPIO23 = 0;

GpioCtrlRegs.GPAPUD.bit.GPIO23 = 1;
GpioCtrlRegs.GPAINV.bit.GPIO23 = 0;
GpioCtrlRegs.GPAODR.bit.GPIO23 = 0;
GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO23 = 1;

GpioCtrlRegs.GPAQSEL1.bit.GPIO8 = 3;//异步输入(SPISIMOA)
GpioCtrlRegs.GPAQSEL1.bit.GPIO10 = 3;//异步输入(SPISOMIA)
GpioCtrlRegs.GPAQSEL1.bit.GPIO9 = 3;//异步输入(SPICLKA)

EDIS;

SpiaRegs.SPICCR.bit.SPISWRESET = 0;
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;
SpiaRegs.SPICCR.bit.SPICHAR =(8 - 1);
SpiaRegs.SPICCR.bit.SPILBK = 0;

SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;
SpiaRegs.SPICTL.bit.talk = 0;
SpiaRegs.SPICTL.bit.CLK_PHASE = 1;
SpiaRegs.SPICTL.bit.SPIINTENA = 0;

SpiaRegs.SPIPRI.bit.TRIWIRE = 0;

SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = 24;
SpiaRegs.SPIPRI.bit.free = 1;

SpiaRegs.SPICCR.bit.SPISWRESET = 1;

SpiaRegs.SPIFFTX.bit.TXFIFO=1;
SpiaRegs.SPIFFTX.bit.SPIRST = 1;
SpiaRegs.SPIFFTX.bit.SPIFFENA = 1;
SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;
}

此初始化设计符合数据表说明:"要完成读取或写入事务、SCS 必须设置为逻辑0。" 我的传输函数如下:

uint16 spi_txmit (Uint16数据)

INT ret = SPI_SUCCESS;
uint16 datain = 0;

SpiaRegs.SPIFFTX.bit.TXFIFO = 1;

if (ret)

uint16超时= 1000;
IF (SpiaRegs.SPIFFRX.bit.RXFFST)

DATAIN = SpiaRegs。 SPIRXBUF;
}

while (SpiaRegs.SPISTS.bit.BUFFULL_flag!= 0且超时)
--超时;

if (!timeout)
RET = SPI_FAILURE;

if (ret)

超时= 1000;

while (SpiaRegs.SPIFFTX.bit.TXFFST!= 0);

SpiaRegs。 SPITXBUF =(SpiaRegs.SPICCR.bit.SPICHAR < 8)? ((data <<8)& 0xFF00):data;

SpiaRegs.SPICTL.bit.talk = 1;

while (!SpiaRegs.SPIFFRX.bit.RXFFST &&超时)
--超时;

if (!timeout)
RET = SPI_FAILURE;

if (ret){
SpiaRegs.SPICTL.bit.talk = 0;
}
}

}
RETURN ret == SPI_SUCCESS? (int)(datain & 0xFF):ret;
}

void drv8711_transmit (uint8_t 地址、uint16_t 数据)

uint8_t DATA_HIGH_BYTE =((DATA >> 8)& 0x1F)|((ADDRESS 和0x07)<< 5);

uint8_t DATA_LOW_BYTE = DATA & 0xFF;
SPI_chipselect (1);

SPI_txmit (data_high_byte);
SPI_txmit (data_low_byte);

DELAY_US (2);

SPI_chipselect (0);
}

尽管采用了这种设置、但我在执行代码后获得的逻辑分析仪示例显示步进电机无法正常运行。 下面是我捕获的信号:

F28002x CPOL 1逻辑捕获

目前、CPOL 设为0、CPHASE 设为1。 但是、我在逻辑分析仪上观察到的数据不正确;我看到的是0x07和0x63、而不是预期数据(0x03和0x31)。 逻辑分析仪设置为 CPOL 0、CPHASE 1、使能线路设置为高电平有效。 当我在逻辑分析仪上将 CPHASE 更改为0时、将得到以下信号:数据显示正确、但信号不符合预期。

F28002x CPOL 0逻辑捕捉  

Arduino 和 TMS320生成的信号之间的主要区别在于两个时钟周期之间的时间:Arduino 的1.875 µs 和 TMS 的3.5 µs。 如我的代码所示、传输之间不存在有意的延迟。 此外、为了在传输期间使 MOSI 线路保持高电平、我在数据传输期间启用 TMS 上的 TALK 位、并在 FIFO 为空时将其禁用。

F28002x 技术参考手册按如下所示介绍数据传输过程、但此行为与 DRV8711的要求相冲突、因此我在代码中进行了相应调整:

F28002x 写入时序图

此时、我不确定 SPI 实现是否正确、而且我一直在控制步进电机。 您能帮我解决这个问题吗?

提前感谢您的支持。

此致、

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

    您好、Esra:

    感谢您在论坛中发帖。  放弃文本后、将重新发送信息。

    此致、Murugavel  

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

    您好 Murugavel、

    我无法访问该链接。  

    此致、  

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

    您好、Esra:

    抱歉、请放弃该消息。 我将在几个月内通过这个 E2E 向您发送详细信息。 谢谢。

    此致、Murugavel  

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

    您好、Esra:

    请检查以下各项。

    1. 从睡眠模式唤醒后、等待>唤醒延迟时间1ms、然后再启动 SPI 事务。 如果在此之前执行此操作、器件将不会响应。

     DRV8711中的 SDATO (SDO)引脚是开漏输出、需要使用外部上拉电阻。 使用的上拉电阻的阻值是多少?

    3. 确保严格遵循数据表中所述的 SPI 时序。 当 SCS 启用为0到1时、SCLK 必须为低电平、并且 SDATAI 必须由 MCU 设置。 SDATAI 输入数据由 DRV8711在 SCLK 的上升沿锁存。 通常情况下、仅当 SCLK 在未激活时设置为高电平时才可以实现这一点-这取决于使用的 MCU。 请检查时间安排。  

    3. SCS 必须在每个读写操作(16位)结束时为低电平。

    此致、Murugavel