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步进驱动器寄存器读取问题的连续性。
您问的最后一个问题是, 每个设备都有自己的专用片选(CS)信号。 是否使用正确的 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 引脚。请告诉我如何一次尝试读取数据。 提前感谢。
你(们)好。
感谢您的答复。 我尝试根据你的上述想法,但我没有看到任何变化。 请确保我的代码用于在首次尝试时读取数据。
写入序列:
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