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:DRV8711 DRV8711步进驱动稳压器读取问题连续性

Guru**** 1788580 points
Other Parts Discussed in Thread: DRV8711, TM4C1294NCPDT
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1193699/drv8711-drv8711-drv8711-stepper-drive-reg-read-issue-continuity

器件型号:DRV8711
主题中讨论的其他器件: TM4C1294NCPDT

先生,

很抱歉,我的回复太迟了。 该查询涉及  DRV8711:DRV8711步进驱动器寄存器读取问题的连续性。

 

您问的最后一个问题是, 每个设备都有自己的专用片选(CS)信号。 是否使用正确的 CS 信号读取所需的驱动器?

是的、每个器件都有自己的专用 CS 信号。 但读取将仅在第5次尝试时完成。 请尽快解决此问题。  

 

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

    您好、Tom、

    让我看看你的问题,我会在24小时内回复你。

    此致、

    巴勃罗·阿梅特

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

    请花点时间做必要的事。

    谢谢你

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

    您好、Tom、

    仅当尝试读取一个器件时。 仅正确使用了一个 CS 信号。 这意味着与被读取的芯片相对应的 CS 芯片将被置位/取消置位5次、直到更新后的值被正确读取?

    此致、

    巴勃罗·阿梅特

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

    你(们)好。

    感谢您的及时响应。 我们将使用4个步进电机和4个 DRV 8711驱动器 IC。 在下图中、我解释了每个电机有一个芯片选择(CS)引脚、这个单独的 CS 引脚连接到微控制器。

    供您参考

     SPI_LSU_SuctionArm_Motor_CS_High GPIOPinWrite (GPIO_PORTC_BASE、GPIO_PIN_6、GPIO_PIN_6);
     SPI_LSU_Economizer_Motor_CS_High GPIOPinWrite (GPIO_PORTM_BASE、GPIO_PIN_4、GPIO_PIN_4);
     SPI_RSU_SuctionArm_Motor_CS_High GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、GPIO_PIN_0);
     SPI_RSU_Economizer_Motor_CS_High GPIOPinWrite (GPIO_PORTL_BASE、GPIO_PIN_0、GPIO_PIN_0);

    我已连接各个 CS 引脚。请告诉我如何一次尝试读取数据。 提前感谢。

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

    您好、Tom、

    感谢您提供的信息。 我会在每个 SPI 写入和读取函数之间添加一些延迟。 稳定时间从~5us 开始。  

    此致、

    巴勃罗·阿梅特

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

    你(们)好。

    感谢您的答复。 我尝试根据你的上述想法,但我没有看到任何变化。 请确保我的代码用于在首次尝试时读取数据。

    写入序列:

    void SPI_DRV8711_Write (unsigned char dataHi、unsigned char dataLO)

    开关(Stepper_Motor_Nodeid)

    情形1:
    G_Write_Data01[0]= dataHi;
    G_Write_Data01[1]= dataLO;
    SPI_Motor1_CS_High;

     SysCtlDelay (500);//5us
    SSIDataPut (SSI2_base、dataHi);
    while (SSIBusy (SSI2_base));
    SSIDataPut (SSI2_base、dataLo);
    while (SSIBusy (SSI2_base));
    MOTOR1_CS_Low;
    中断;

    案例2至案例4剩余的 电机序列(电机1、电机2、电机3)与案例1相同。

    读取序列:

    unsigned int SPI_DRV8711_read (unsigned char dataHi、unsigned char dataLo)

    READ_Data = 0;
    SPIMotor1_CS_High;  

    SysCtlDelay (500);//5us

    SSIDataPut (SSI2_base、dataHi);
    while (SSIBusy (SSI2_base));
    SSIDataGet (SSI2_base、&RxdataHi);
    SSIDataPut (SSI2_base、dataLo);
    while (SSIBusy (SSI2_base));
    SSIDataGet (SSI2_base、&RxdataLo);
    G_READ_Data01[0]= 0x80 ^ RxdataLO;
    G_READ_DATA01[1]= RxdataHi;
    MOTOR1_CS_Low;
    中断;

    案例2至案例4剩余的电机序列(电机1、电机2、电机3)与案例1相同。

    如果您需要任何信息、请告诉我。

    谢谢你

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

    请尽快回复  

    谢谢你

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

    Tom、

    巴勃罗今天不在办公室。  让我在这里向团队中可以提供帮助的其他人进行核实。

    此致、

    Ryan

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

    您好、Tom、

    这似乎是外部控制器 SPI 配置的问题。 也许时钟极性或相位与器件要求不匹配? 您是否碰巧有 SPI 信号波形显示所有五个数据包的读取操作。 以及、您是否使用 Saleae 等逻辑分析仪来探测 SPI 数据包? 谢谢。

    此致、Murugavel  

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

    您好、Tom、

    还请确认已在 SDATO 引脚上配置了适当的上拉电阻器、如数据表中所述、这是一个开漏输出引脚。 是否可以与我们分享到 MCU SPI 连接的多个驱动器的原理图? 谢谢。

    此致、Murugavel

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

    您好、Murugavel。

    感谢您的立即响应。 我在这里附上了 DRV8711的原理图。  是否正确连接。 d 还包括时钟和数据的示波器结果。

    4个时钟脉冲在第4次尝试读取数据后将生成数据。请解决此问题。

    谢谢你

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

    您好、Tom、

    感谢您提供信息。 在原理图中、我在 DRV8711的 SDATO 引脚上未看到上拉电阻器。 您能否确认在该引脚上提供了上拉电阻器? 该电阻器的值是多少?

    我希望看到所有失败的数据包以及第4次尝试时成功读取的数据包。 我还需要全部四个信号 SCS、SDATI、SDATO 和 SCLK 进行诊断。 谢谢你。

    此致、Murugavel

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

    尊敬的 Murugavel:

    谢谢你。

    我附加了原理图以供您参考。这款 TM4C1294NCPDT 控制器。 我们将微控制器中的1k 上拉电阻器(中的 SPI 数据)连接到 drv8711中的 SDATAO 引脚。我确信我们没有将任何上拉输入(SPI 数据输出)连接到 drv8711中的 SDATAIN 引脚。  

    SCS、SDATI、SDATO 和 SCLK 示波器图我将很快发布。

    谢谢你

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

    您好、Tom、

    感谢您提供的信息。 您还可以确认 VREFA+是否位于相同的3.3V 域中? 我想是这样。 仅 DRV8711 SPI 电路的 SDATAO 引脚需要上拉电阻。 在获得示波器图时、我想知道您是否碰巧有 SPI 诊断工具、例如 Saleae? 如果您拥有它、则可以保存.sal 文件、进行压缩并与我共享。 这将有助于诊断。  

    此致、Murugavel   

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

    您好、Murugavel。

    是的、我确信  VREF+是3.3V。 我附加了 SCLK、CS、SdataIn、SdataOut 的示波器图像以供参考。

      STEPPER Motor_Torque_Register.Torque  = 0xF0;

    请帮助我阅读第四次尝试的神秘背后的原因是什么。

    谢谢你

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

    您好、Tom、

    根据这些波形、似乎 MCU SSI 配置与 DRV8711 SPI 格式不匹配。  请确认您的示波器截图是否用于写入操作。 在写入操作期间(MSB 逻辑低电平)、SDATAO 将保持高电平。 我不确定这是否是您观察到的情况。 示波器捕获显示了 SDATAO 上的一些活动。 我不确定这是在写入还是读取操作期间发生的。 请澄清。

    我设置了 DRV8711 EVM、并尝试复制与测试用例相同的写入操作、扭矩寄存器= 0xF0、来自其默认值0xFF。  

    这是对扭矩寄存器的首次读取、以确认默认设置确实为0xFF。

    在这次读取之后、我对 SDATAI 值= 0xF0的该寄存器进行了写操作。 请参阅以下代码片段。 请注意、通道的序列与信号标签的上一个片段相同。 另请注意、在写入操作期间 SDATA0为高电平。

    我立即对扭矩寄存器进行了单次读取。 请参阅以下代码片段。 首次尝试时、读取并正确显示新写入的值。 这确认了写操作和读操作均按预期执行。

    我无法重现您在系统中使用 MCU 时遇到的情况。 请验证 MCU 的 SPI (SSI)配置。 该问题指向系统中 MCU 的 SSI 配置问题。  

    为了清楚起见、我将在单独的回复中说明我对您发送的 MCU 数据包示波器截图的观察结果。  

    此致、Murugavel

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

    您好、Tom、

    根据其中一个示波器捕获的以下片段-请参阅下面的片段- SDATAO 行在基于您的另一个捕获的时钟和 SCS 之后一段时间内未变为高电平。 诊断时、SCS 与这两个通道一起使用会很有用。 如果无法实现、则仅限 SCS 和 SDATAO。 无论如何、这都指向 MCU SPI 外设的 SSI 配置问题。

    理想情况下、我希望分别针对写入和读取操作获得四通道捕获。 您遇到的问题 似乎与 MCU 配置有关。 如果您找不到正确的配置、可能需要联系 MCU 支持 E2E。 同时、我很乐意回答您关于 DRV8711器件及其 SPI 通信的任何问题。 谢谢。

    请确保配置与数据表要求匹配,请参阅的第27页。  https://www.ti.com/lit/ds/symlink/drv8711.pdf 。  

    此致、Murugavel

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

    尊敬的 Murugavel:

    感谢您的宝贵答复。我们针对您的上述说明进行了实验。我附上了读写值供您参考。

    还要确保下面的读取/写入代码正确吗?

    SysCtlPeripheralEnable (SYSCTL_Periph_SSI2);
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
    GPIOPinConfigure (GPIO_PD3_SSI2CLK);
    //GPIOPinConfigure (GPIO_PD2_SSI2FSS);
    GPIOPinConfigure (GPIO_PD1_SSI2XDAT0);
    GPIOPinConfigure (GPIO_PD0_SSI2XDAT1);
    GPIOPinTypeSSI (GPIO_PORTD_BASE、GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3);
    SSIConfigSetExpClk (SSI2_base、g_ui32SysClkFreq、SSI_FRF_MOTO_MODE_0、SSI_MODE_MASTER、500000、8);

    SSIEnable (SSI2_base);

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

    您好、Tom、

    谢谢你。  我不确定我是否遵循您发布的表格。 扭矩寄存器的前两行似乎是 SDATAI。 第三行是什么?  假设在第2行所示的读取操作期间是 SDATAO、那么显然该写入操作没有正确完成。 这就是我在上一次答复中提到的,似乎存在协议问题。 同时查看四个通道以验证协议的唯一方法。 是否可以为表中的每行提供此信息?  

    很遗憾、我不熟悉您的代码的宏函数。 我将尽力理解它、并向您提供反馈。 如需深入了解您的宏代码、您必须在微控制器论坛中寻求 E2E 支持。   

    在配置宏中、我确实注意到您正在将 SSI 配置为  SSI_FRF_MOTO_MODE_0。 根据用户指南(UG)中的器件说明"当 SPH 相位控制位清零时、在第一个时钟边沿转换时捕获数据。 如果 SPH 位为1、则在第二个时钟边沿转换时捕获数据。"。  MODE_0看起来不是与 DRV8711连接的正确模式。 您应该使用设置了 SPH 位的模式、以便 在第二个时钟边沿捕获数据。 我无法100%确定 该值是否在此 MCU 的宏中被调用为 SSI_FRF_MOTO_MODE_1。 请验证。 本质上、您应该使用 SPO = 0和 SPH = 1的模式。 " SPO = 0、SPH = 1时的飞思卡尔 SPI 帧格式。" 请尝试使用此设置。 它应该能解决您的问题。 请告诉我们它是否起作用。 谢谢。

    此致、Murugavel

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

    您好、Tom、

    我希望您能够使用 MCU SSI 配置进行此固件更改并解决问题。 如果是、请将此主题帖的状态更新为"已关闭"。 谢谢你。

    此致、Murugavel

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

    感谢您的支持。

    实际上、我们无法在一个示波器中显示全部4个引脚。 我尝试了所有你说在上述查询,仍然不知道什么 drv 参数调整为单读.

    我为您提供了第一个意见、我在此附上了应用逻辑中的写入和读取顺序。请确保此供我参考。

    情形0://电机电流
    if (((Motor.Stall=1)&(Motor.Fault==1))   

    if (Start=1)

    STEPPER Motor_Nodeid = 1;
    Motor_Torque_Register.Torque = 0xF0;
    Motor.Write_Cmplt = 0;                          //当写入完成时
    Motor.Write = 1;        
    while (!(g_cal_lsu_SuctionArm_Motor.Write_Cmplt)  //如果写入未完成  

    G_Stepper_Motor_Nodeid = 1;
    如果(READ_DATA01[01]==Motor_Torque_Register.Torque) //写入数据和扭矩将相同

    Motor.Write_Cmplt=1;                            //写入数据已完成
    }
    方案

    motor_current_WriteSequenece ();                  //写入序列已上传
    }

    }
    Motor.Write_Cmplt_Fault = 0;
    STEPPER Motor_Nodeid = 0;
    MOTOR.HOLD_Sequnece =停止;
    motor.setspeed =速度;
    SetPluses = MotorDegree;
    Motor_pulse_calculation();
    Motor.Sequnece_No = 1;
    }
    }
    方案

    ....}
    中断;

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

    您好、Tom、

    感谢您的更新。 我的确了解了您获得全部四个通道的限制条件、非常感谢您提供所有所需的捕获。 我试图从您发送的捕获中找出问题的根本原因。 DRV8711旨在响应单个正确的 SPI 写入或读取操作。 SPI 时序不需要进行调优、只需匹配发布的时序要求即可。 我在设置中尝试了这种情况、并验证确实如此。 我们在 EVM 中使用 的 MSP430、它是与您使用的 TM4C1294NCPDT MCU 不同的 MCU。 我不熟悉它的 SSI SPI 模式设置、因此我建议与微控制器团队建立一个 E2E 支持主题。 我能想到的最后一件事是将 SPI 时钟频率降至1MHz 或500kHz、然后查看一次写入和读取是否成功。   

    如果我理解正确、您已经针对代码问题实施了权变措施、该权变措施将进行多次 写入序列尝试、直到读取值与写入值匹配。 假设您能够在几个写入和始终读取的周期内成功写入/读取验证值、这可能是一个逻辑问题。 我的问题是、如果在温度和电源电压变化等不同的工作条件下卡在 while 环路中、会发生什么情况。 我希望您有 一个解决方案、可以通过 SPI 写入或读取操作成功写入和读取 DRV8711寄存器。 如果不是、对于此权变措施、也许可以在写入/读取尝试次数超过固定尝试次数时实现从循环退出、假设为5、并标记错误情况。  

    此致、Murugavel  。  

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

    我需要微控制器专家。 非常感谢您的宝贵支持 Murugavel

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

    谢谢 Tom。 我在 TI 专攻步进电机驱动器。 我们拥有 微控制器专用支持组、并且在该组中有特定的工程师为 TM4C1294NCPDT MCU 提供支持...我希望您能够解决这个问题。

    此致、Murugavel