TMC5160驱动问题请教,SPI能修改参数,但电机无法转动。
调了一晚上,实在调不通,请使用过TMC系列芯片的朋友帮我看看。现象:SPI能控制电机保持电流,且电机具备保持力矩。设定目标后点击无动作,保持静止状态!
硬件:淘宝的模块
SPI 部分程序:
void SPI_SendByte(char data)
{
cmd = data;
if(HAL_SPI_Transmit(&hspi1,cmd,1,1000) == HAL_OK)
{
if(HAL_SPI_Receive(&hspi1,cmd,1,1000) == HAL_OK)
{
ReceiveData =cmd;
}
else;
}
else;
}
char SPI_ReceiveByte(void)
{
cmd = 0;
if(HAL_SPI_Transmit(&hspi1,cmd,1,1000) == HAL_OK)
{
if(HAL_SPI_Receive(&hspi1,cmd,1,1000) == HAL_OK)
{
//return cmd;
}
else;
}
else;
return cmd;
}
//TMC5160 takes 40 bit data: 8 address and 32 data
void sendData(unsigned long address,long datagram)
{
unsigned char i;
cmd=address | 0x80;
cmd=(datagram >> 24) & 0xff;
cmd=(datagram >> 16) & 0xff;
cmd=(datagram >> 8) & 0xff;
cmd=datagram & 0xff;
SPI_CS_ON(); //SPI_CS片选拉低
// SPI_SendByte(address);
// SPI_SendByte((datagram >> 24) & 0xff);
// SPI_SendByte((datagram >> 16) & 0xff);
// SPI_SendByte((datagram >> 8) & 0xff);
// SPI_SendByte(datagram & 0xff);
for(i=0;i<5;i++)
{
if(HAL_SPI_Transmit(&hspi1,&cmd,1,100) == HAL_OK)
{
}
else;
}
SPI_CS_OFF(); //SPI_CS片选拉高
}
unsigned long ReadData(long address)
{
char data = {0, 0, 0, 0};
unsigned long datagram = 0;
SPI_CS_ON(); //SPI_CS片选拉低
SPI_SendByte(address);
data = SPI_ReceiveByte();//SPI_ReceiveByte((datagram >> 24) & 0xff);
data = SPI_ReceiveByte();//SPI_ReceiveByte((datagram >> 16) & 0xff);
data = SPI_ReceiveByte();//SPI_ReceiveByte((datagram >> 8) & 0xff);
data = SPI_ReceiveByte();//SPI_ReceiveByte(datagram & 0xff);
SPI_CS_OFF(); //SPI_CS片选拉高
datagram = (data << 24) | (data << 16) | (data << 8) | data;
return datagram;
}
TMC初始化部分代码
// MULTISTEP_FILT=1, EN_PWM_MODE=1 enables stealthChop?
//sendData(TMC5160_GCONF, 0x0000000C);
// TOFF=3, HSTRT=4, HEND=1, TBL=2, CHM=0 (spreadCycle?)
sendData(TMC5160_CHOPCONF, 0x000100C3);
// IHOLD=8, IRUN=15 (max. current), IHOLDDELAY=6
data = 6;
data <<=4;
data |= 16;
data <<=5;
data |= 5;
sendData(TMC5160_IHOLD_IRUN, data);
//sendData(TMC5160_IHOLD_IRUN, 0x00080F0A);
// TPOWERDOWN=10: Delay before power down in stand still
sendData(TMC5160_TPOWERDOWN, 0x0000000A);
// TPWMTHRS=500
sendData(TMC5160_TPWMTHRS, 0x000001F4);
// Values for speed and acceleration
sendData(TMC5160_VSTART, 1);
sendData(TMC5160_A1, 1000);
sendData(TMC5160_V1, 50000);
sendData(TMC5160_AMAX, 500);
sendData(TMC5160_VMAX, 200000);
sendData(TMC5160_DMAX, 700);
sendData(TMC5160_D1, 1400);
sendData(TMC5160_VSTOP, 10);
sendData(TMC5160_RAMPMODE, 0);
运行指令代码:
sendData(TMC5160_XTARGET, pos); 设置的电流是多少,电源的输出电流够大吗?我遇到过是电源功率不够导致电机不转,也是能保持但就是不转。 icherry 发表于 2021-3-5 08:35
设置的电流是多少,电源的输出电流够大吗?我遇到过是电源功率不够导致电机不转,也是能保持但就是不转。 ...
电源功率足够的。24V5A供电。实际电流0.3A 有大神帮忙看下吗?还没解决{:cry:} 我以前 测试过 TCM2950 好像很简单啊通电 初始化后,发脉冲 就能转 。 你看看 手册 是不是 使能位 和 模式 设置问题 BOERLBH 发表于 2021-3-9 11:04
你看看 手册 是不是 使能位 和 模式 设置问题
发现问题了。虽然SPI可以读写,但运转还是PWM在作用{:lol:}
页:
[1]