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步进驱动器 IC 时遇到问题。 自从我的应用程序以来、写入序列似乎工作正常。 我现在尝试从驱动程序读取寄存器、第一次尝试时无法从 DRV8711寄存器读取数据。 每次我只能在第5次尝试时读取数据。
/********* SPI_Initialize ******** /
void SPI_Initialize (void)
{
//必须启用 SSI0外设才能使用。
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_MOTO_0、SSI_MODE_MASTER、1000000、8);
SSIEnable (SSI2_base);
}
/********* SPI_DRV8711_Write_Sequnece ******** /
void SPI_DRV8711_Write (unsigned char dataHi、unsigned char dataLo)
{
unsigned int 数据;
G_Write_Data01[0]= dataHi;
G_Write_Data01[1]= dataLo;
SPI_Motor_CS_High;
SSIDataPut (SSI2_base、dataHi);
while (SSIBusy (SSI2_base));
SSIDataPut (SSI2_base、dataLo);
while (SSIBusy (SSI2_base));
SPI_Motor_CS_Low;
/********* SPI_DRV8711_READ_Sequnece ******** /
unsigned int SPI_DRV8711_read (unsigned char dataHi、unsigned char dataLo)
{
SPI_Motor_CS_High;
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;
SPI_Motor_CS_Low;
}
/********* MOTOR_POWERUP_RESET_Sequnece ******** /
void Motor_Powerup_Reset_Sequnece (void)
{
睡眠模式_输入_低电平;
RESET_INT_High;
SysCtlDelay (10000000);
SysCtlDelay (10000000);
SysCtlDelay (10000000);
SysCtlDelay (10000000);
RESET_INT_LOW;
睡眠模式_输入_高电平;
SysCtlDelay (10000000);
SysCtlDelay (10000000);
睡眠模式_输入_低电平;
}
/********* MOTOR_CURRENT_Write_Sequnece ******** /
void Motor_Current_WriteSequenece (void)
{
unsigned char dataHi = 0x00;
unsigned char dataLo = 0x00;
/
dataHi = RegWrite |(Motor_Torture_Register.Address << 4)|(Motor_Torture_Register.SIMPLTH);
dataLo = Motor_Tornure_Register.Torque;
SPI_DRV8711_Write (dataHi、dataLo);
}
}
/********* 主要方案 /
volatile uint8_t Write=0;
volatile uint8_t read_90=0;
volatile uint8_t curry=0x32;
void main (void)
{
SPI_Initialize();
Motor_Powerup_Reset_Sequnece ();
while (1)
{
if (Write==1)
{
MOTOR_Torque 寄存器.Torque =电流;
MOTOR_CURRENT_WriteSequenece ();
写入= 0;
}
if (read_90=1)
{
SPI_DRV8711_Read (0x90、0x00);
READ_90 = 0;
}
}
主 MCU - TM4C1294NCPDT
从器件1至4 - DRV8711
您好、Suresh、
[引用 userid="513583" URL"~/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1135763/drv8711-drv8711-stepper-drive-reg-read-issue ]Register at 1st Attempt。 每次我只能在第5次尝试时读取数据时。[/QUERP]您能详细介绍一下这项陈述。 这是否意味着您发送4条 SPI 读取命令 、而不会向控制器发回任何内容。 但是、在第5个读取命令之后、您读取了该值吗?
此致、
Pablo Armet
您好、Pablo Armet、
感谢您的支持、此处提到了 DRV8711扭矩寄存器写入和读取序列值以供参考。
电机扭矩寄存器写入和读取-扭矩-255 | ||
扭矩调节器写入数据 | 0x11 | 0xFF |
扭矩调节器读取数据-第一次尝试 | 0x05 | 0x81 |
扭矩调节器读取数据-2st 尝试 | 0x05 | 0x81 |
扭矩调节器读取数据-第3次尝试 | 0x05 | 0x81 |
扭矩调节器读取数据-第4次尝试 | 0x05 | 0xFF |
扭矩调节器读取数据-第5次尝试 | 0xFF | 0x81 |
电机扭矩寄存器写入和读取-扭矩-005 | ||
扭矩调节器写入数据 | 0x11 | 0x05 |
扭矩调节器读取数据-第一次尝试 | 0xFF | 0x81 |
扭矩调节器读取数据-2st 尝试 | 0xFF | 0x81 |
扭矩调节器读取数据-第3次尝试 | 0xFF | 0x81 |
扭矩调节器读取数据-第4次尝试 | 0xFF | 0xFF |
扭矩调节器读取数据-第5次尝试 | 0x05 | 0x81 |
每当我将电机转矩从255更改为5意味着、写入序列本身之后、我就可以感觉到电机扭矩更新。 但在读取序列期间、将从 DRV8711接收到第三次尝试的现有扭矩值。 仅在第5次尝试时接收上次写入扭矩值。
谢谢和升级、
Suresh
Suresh、
让我看一下寄存器值、看看序列是否有任何错误。 我将在一个工作日内回复您。
此致、
Pablo Armet
您好、Suresh、
很抱歉答复很晚。
每个器件都有自己的专用片选(CS)信号。 是否使用正确的 CS 信号读取所需的驱动器?
此致、
Pablo Armet