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.

[参考译文] DRV8711:寄存器读取安培;写入操作不能正常工作

Guru**** 2392905 points
Other Parts Discussed in Thread: DRV8711

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1468280/drv8711-registers-read-write-not-working-properly

器件型号:DRV8711

工具与软件:

团队成员、您好!

 我们将 DRV8711步进电机驱动器与 STM32F429IGT6控制器一起用于我们的应用。 当我们使用驱动程序时、它会 在运行几分钟后自动停止。 我们已根据驱动器的数据表配置了所有寄存器。 电机未运行时、驱动器中没有故障指示。 我们将使用示波器来查看驱动程序 SDATI 和 SCLK 线路中的数据。 我们可以看到所发送的数据。 然后、我们发送寄存器地址以读取已配置的数据、但 在 SDATO 行中、波形中无可用数据。 这里、我们添加了驱动器和波形的配置寄存器供您参考。

我们具有驱动器的 PCB 设计供您参考。

DRV8711寄存器中的配置、

// CTRL 寄存器(地址= 0x00)
CtrlN.DTIME = 0x11;//死区时间850ns
CtrlN.ISGAIN = 0x01;// GAIN 10
CtrlN.EXSTALL = 0x00;//内部失速检测
CtrlN.MODE = 0x0100;// 16步进
CtrlN.RSTEP = 0x00;//无操作
CtrlN.RDIR = 0x00;//方向由 DIR 引脚设置
CtrlN.ENBL = 0x01;//启用电机

//扭矩寄存器(地址= 0x01)
TORQUEn.扭 矩= 0xFF;//设置两个 H 桥的满量程输出电流
TORQUEn.SMPLTH = 0x001;//反电动势采样阈值100 µs

// off 寄存器(地址= 0x02)
offn.toff = 0x30;//根据数据表默认值
OFFN.PWMMODE = 0x00;//使用内部分度器

//空白寄存器(地址= 0x03)
BLANKn.TBLANK = 0x80;//根据数据表默认值
BLANKn.ABT = 0x00;//禁用自适应消隐时间

// DECAY 寄存器(地址= 0x04)
DECAYn.TDECAY = 0x10;//根据数据表默认值
DECAYn.DECMOD = 0x101;//始终使用自动混合衰减

// STALL 寄存器(地址= 0x05)
STALLn.SDTHR = 0x40;//根据数据表"默认值"
STALLn.SDCNT = 0x00;//默认值 STALLn 在第一步中被置为有效、反电动势低于 SDTHR
STALLn.VDIV = 0x00;//反电动势低于 SDTHR 时、默认 STALLn 在第一步中置为有效

// DRIVE 寄存器(地址= 0x06)
drived.OCPTH = 0x01;// OCP 阈值500mV
drived.OCPDEG = 0x11;// 8 - us
DRIVER.TDRIVEN = 0x01;//低侧栅极驱动时间为500ns
DRIVER.TDRIVEP = 0x01;//高侧栅极驱动时间为500ns
drived.IDRIVEN = 0x10;// 300 mA
drived.IDRIVEP = 0x10;// 150 mA
// STATUS 寄存器(地址= 0x07)
//全部都是正常操作
STATUSn.OTS = 0x00;
STATUSn.AOCP = 0x00;
STATUSn.BOCP = 0x00;
STATUSn.APDF = 0x00;
STATUSn.bpdf = 0x00;
STATUSn.UVLO = 0x01;
STATUSn.STD = 0x00;
STATUSn.STDLAT = 0x00;

我们发送命令0x8000来读取配置的寄存器值。 下面的波形是 SDATI 和 SCLK 线。 我们将 SPI 模式配置为 CPHA=0 & CPOL=0。 在传输一个字节后、我们接收到一个位为高电平。 此波形是否正确、请检查。

我们发送命令0x8000来读取配置的寄存器值。  下面的波形是 SDATI 和 SCLK 线。 我们将 SPI 模式配置为 CPHA=1和 CPOL=1。 传输一个字节后 、不存在高电平。 请检查。

在这里、该波形是我们在读取寄存器0x8000时收到的波形。 始终在 SDATO 线路中接收相同的波形。  我们将 SPI 模式配置为 CPHA=1和 CPOL=1。

请查看我们附加的波形以及我们的错误、并帮助我解决问题。 在主器件配置中设置 SPI 模式所需的器件类型。 您能给我一个指导来解决这些问题吗? 我们的 SCLK、SDATI 和 SDATO 线处于下拉状态。

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

    尊敬的 Narasimman:

    感谢您在论坛中发布您的问题。  

    感谢您分享原理图。 RESET 引脚具有一个上拉电阻器和一个连接至 GND 的电容器。 它也由控制器的 GPIO 进行控制。 该引脚上的逻辑高电平将复位器件。 连接到 GND 的电容器没有任何用途、可以移除。 不需要 SDATAI 和 SCLK 上的20 kΩ 下拉、但只要 GPIO 可以通过正确的逻辑电平支持、就不会影响功能。 这似乎是可以的。 除了器件上拉电阻外、来自 V5引脚的+5V_OUT 不得用于为任何外部负载供电。 上拉20 kΩ  可能不够。 该引脚是开漏输出。 使用3.3 kΩ  或4.7 kΩ  是更好的选择。

    观察波形来回顾一下。 请参阅此 E2E 博文 并查看显示的正确波形。  

    我们发送命令0x8000来读取配置的寄存器值。 下面的波形是 SDATI 和 SCLK 线。 我们将 SPI 模式配置为 CPHA=0 & CPOL=0。 在传输一个字节后、我们接收到一个位为高电平。 此波形是否正确、请检查。

    我们发送命令0x8000来读取配置的寄存器值。  下面的波形是 SDATI 和 SCLK 线。 我们将 SPI 模式配置为 CPHA=1和 CPOL=1。 传输一个字节后 、不存在高电平。 请检查。

    在这里、该波形是我们在读取寄存器0x8000时收到的波形。 始终在 SDATO 线路中接收相同的波形。  我们将 SPI 模式配置为 CPHA=1和 CPOL=1。

    请查看我们附加的波形以及我们的错误、并帮助我解决问题。 在主器件配置中设置 SPI 模式所需的器件类型。 您能给我一个指导来解决这些问题吗? 我们的 SCLK、SDATI 和 SDATO 线处于下拉状态。

    [报价]

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

    在进行这些更改后、还请共享 SCS、SCLK 和 SDATA0波形。 谢谢你。

    此致、Murugavel  

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

    您好、团队:

       感谢您的快速响应。 我们更改了 DATA 和 CLK 电阻值上的3.3 kΩ 下拉电阻、而不是20 kΩ 下拉电阻。 并且 根据您的建议更改了 SPI 模式 CPHA=0 & CPOL=1。 然后我们  多次写入和读取 DRV8711寄存器的不同值,SDATO 线路始终为高状态。

    我们发送命令0x8000来读取配置的寄存器值。 下面的波形为 SCS、SDATI 和 SCLK 线。 我们将 SPI 模式配置为 CPHA=0 & CPOL=1。  

    这里的波形是我们在读取寄存器0x8000时收到的波形。 每当我们在 SDATO 线路中接收到相同的波形时、始终为高电平。  我们将 SPI 模式配置为 CPHA=0 & CPOL=1。

     当 我们配置 SPI 模式时、CPHA=0 & CPOL=0、这次我们只在 SDATO 线路上收到一些数据。 与 写入数据相比、读取数据有所不同。  

    请查找并为我提供实现我们的应用的指导

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

    尊敬的 Narasimman:

    感谢您的努力并获得该反馈。

    当 我们配置 SPI 模式时、CPHA=0 & CPOL=0、这次我们只在 SDATO 线路上收到一些数据。 与 写入数据相比、读取数据有所不同。  

    我认为这可能是您的 MCU 的正确模式。 在写入事务期间、SDO 上输出的数据始终是寄存器的前一个内容、而不是新的写入值。 如果您在此事务或第二次写入后执行读取、则会从先前的写入操作中获得新写入的值。 请您确认吗? 谢谢。

    此致、Murugavel