lyping1987 发表于 2021-3-4 23:31:35

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:46

设置的电流是多少,电源的输出电流够大吗?我遇到过是电源功率不够导致电机不转,也是能保持但就是不转。

lyping1987 发表于 2021-3-5 09:42:31

icherry 发表于 2021-3-5 08:35
设置的电流是多少,电源的输出电流够大吗?我遇到过是电源功率不够导致电机不转,也是能保持但就是不转。 ...

电源功率足够的。24V5A供电。实际电流0.3A

lyping1987 发表于 2021-3-9 10:13:55

有大神帮忙看下吗?还没解决{:cry:}

BOERLBH 发表于 2021-3-9 10:51:31

我以前 测试过 TCM2950 好像很简单啊通电 初始化后,发脉冲 就能转 。

BOERLBH 发表于 2021-3-9 11:04:59

你看看 手册 是不是 使能位 和 模式 设置问题

lyping1987 发表于 2021-3-9 11:40:17

BOERLBH 发表于 2021-3-9 11:04
你看看 手册 是不是 使能位 和 模式 设置问题

发现问题了。虽然SPI可以读写,但运转还是PWM在作用{:lol:}
页: [1]
查看完整版本: TMC5160驱动问题请教,SPI能修改参数,但电机无法转动。