精华内容
下载资源
问答
  • 中文版,中文版,中文版。以前经常下载别人说好的所谓“中文版”,我只会上传真正有用的东西,TMC260、TMC2660以及TMC261和TMC262的硬件基本是一样的,驱动代码和PCB布线基本都是一样的。
  • TMC260/TMC2660/TMC262步进电机驱动

    万次阅读 多人点赞 2018-05-08 00:14:12
    TMC260程序上兼容TMC2660、TMC262,其中TMC2660是比较新的型号,驱动电流也比TMC260要大;TMC262是外置mos管,可驱动大功率步进电机,如57步进电机等。在之前“用过的几款步进电机驱动IC”的文章中,有简单介绍过,...

    1.TMC260
      TCM260是德国TRINAMIC公司产的步进电机驱动芯片,综合性能应该是步进电机驱动芯片中排前列的,当然价格也是。TMC260程序上兼容TMC2660、TMC262,其中TMC2660是比较新的型号,驱动电流也比TMC260要大;TMC262是外置mos管,可驱动大功率步进电机,如57步进电机等。在之前“用过的几款步进电机驱动IC”的文章中,有简单介绍过,因此有坛友发私信或者留言询问该芯片的驱动程序,所以总结下自己的使用经验。

      其实集成步进电机驱动芯片,对于驱动电机来说是非常简易,通过脉冲方波或者总线(spi、i2c)发送指令即可驱动。TMC260也不例外,TMC260有两种驱动电机转动的方式,一是通过脉冲方波,二是通过spi接口发送指令。但是TMC260中有关参数的设置必须通过spi接口进行操作,如电流大小(力矩)、细分步矩角以及获取状态信息等。

      对于spi发送命令的控制方式,可能会存在延时,特别是一类总线为了便于用户层调用,对spi总线进行了多层封装的情况下,如在RTOS中。为提高电机速度,鄙人用的是第一种方式,通过脉冲方波控制电机转动,电机的相关参数则通过spi总线设置或者获取。对于转动控制则比较好理解和实现,通过定时器或者PWM输出控制“STEP”引脚即可,脉冲频率的高低控制转动速度的快慢;控制方向通过普通IO口控制“DIRECT”引脚高低电平切换,故这块不作赘述。下面重点介绍下spi配置参数方面,如果参数没有正确配置,也是无法控制电机转动或者出现转动噪音大的情况。

    2.TMC260 SPI总线实现
      spi总线依然是基于“spi抽象/硬件spi”中的spi封装函数。
    首先定义TMC260 spi总线指针设备和TMC260指针设备。
      源码中,命名是TMC2660,因为后面更换使用为TMC2660,但程序完全兼容。

    static struct spi_dev_device    tmc2660_spi_dev[1];//暂时只有一个电机
    static struct spi_bus_device    spi_bus0;

    第二步,实现spi 总线片选函数,即是普通IO口翻转。

    static void spi0_cs(unsigned char state)
    {
        if (state)
            GPIO_SetBits(TMC2660_PORTY_CS, TMC2660_GPIOY_CS);
        else
            GPIO_ResetBits(TMC2660_PORTY_CS, TMC2660_GPIOY_CS);
    }

    第三步,TMC260收发函数实现。

    static u32 tmc2660_spi_xfer(u8 spi_no,u32 write_data)
    {
        u8 send_buff[3],recv_buff[3];
        u32 recv_data= 0;
    
        send_buff[0] = (write_data>>16)&0xff;
        send_buff[1] = (write_data>>8)&0xff;
        send_buff[2] = (write_data&0xff);
        spi_send_recv(&tmc2660_spi_dev[spi_no],send_buff,recv_buff,3);
        recv_data = recv_buff[0]<<16 | recv_buff[1]<<8 | recv_buff[2];
    
        return (recv_data&0x0fffff);
    }

    其中:
    —TMC260 spi是非标spi,一帧完整的数据是20bit,可以通过硬件spi驱动,无效位会自动忽略,如下图,从手册中获悉,使用24bit(3字节)传输,高4bit会自动忽略。所以这里还是用硬件spi。
    这里写图片描述
    —20bit的数据,spi设置为8bit模式,所以最少需要3字节(24bit)的缓存。
    —返回值即是芯片的状态信息,每发一帧都会有相关信息返回。
    —输入参数,分别是spi端口号和待写的数据。
    —从时序图分析,用到的是spi封装函数中的“spi_send_recv”,即是发送完成同时也完成数据的接收,效率非常高。

    3.TMC260 寄存器配置
      TMC260严格来说没有标准寄存器,在一串20bit的串行数据流中,以高3位选择不同的功能,后面17位表示数据,包括写入或者返回的状态数据。
    这里写图片描述
      每一个寄存器都有详细的描述和使用方式,代码中进行宏定义。

    #define     REG_DRVCTRL         0X00000000
    #define     REG_CHOPCONF        0X00080000
    #define     REG_SMARTEN         0X000A0000
    #define     REG_SGCSCONF        0X000C0000
    #define     REG_DRVCONF         0X000E0000

    1)REG_DRVCTRL
      控制寄存器,如设置电流细分,其中细分数从1到256。

    #define     MICROSTEP_256       0X00
    #define     MICROSTEP_128       0X01
    #define     MICROSTEP_64        0X02
    #define     MICROSTEP_32        0X03
    #define     MICROSTEP_16        0X04
    #define     MICROSTEP_8         0X05
    #define     MICROSTEP_4         0X06
    #define     MICROSTEP_2         0X07
    #define     MICROSTEP_1         0X08

      函数如下:

    void tmc2660_set_subdivide(char mode,u8 motor_index)
    {
            u8  step = 0;
            u32 cmd = 0;
    
            switch(mode)
            {
                    case 0:
                            step = MICROSTEP_1;
                    break;
                    case 1:
                            step = MICROSTEP_2;
                    break;
                    case 2:
                            step = MICROSTEP_4;
                    break;
                    case 3:
                            step = MICROSTEP_8;
                    break;
                    case 4:
                            step = MICROSTEP_16;
                    break;
                    case 5:
                            step = MICROSTEP_32;
                    break;
                    case 6:
                            step = MICROSTEP_64;
                    break;
                    case 7:
                            step = MICROSTEP_128;
                    break;
                    case 8:
                            step = MICROSTEP_256;
                    break;
                    default:
                            step = MICROSTEP_16;
                    break;
            }
            cmd = REG_DRVCTRL | step;
            tmc2660_spi_xfer(motor_index,cmd);
    }

    2)REG_CHOPCONF 暂未用到。
    3)REG_SMARTEN 智能设置,默认自动模式,暂未用到。
    4)REG_SGCSCONF
      配置寄存器,如设定最大输出电流,即是电机力矩。

    void tmc2660_set_force(u8 force,u8 motor_index)
    {
            u8 temp;
            int cmd = 0;
    
            temp = force/8;
            cmd = REG_SGCSCONF | SCG_DEFAULT | temp;
            tmc2660_spi_xfer(motor_index,cmd);
    }

    5)REG_DRVCONF
    动力相关配置寄存器,如可以选择大电流模式,或者普通模式。
    大电流模式:

    tmc2660_spi_xfer(0,REG_DRVCONF | 0X0010); 

    普通模式:

    tmc2660_spi_xfer(0,REG_DRVCONF | 0X0050);


    4.TMC260初始化

    void tmc2660_init(u8 motor_index)
    {       
        GPIO_InitTypeDef GPIO_InitStructure;
    
        //spi io
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC,ENABLE);
        //spi cs PA4
        GPIO_InitStructure.GPIO_Pin = TMC2660_GPIOY_CS;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(TMC2660_PORTY_CS, &GPIO_InitStructure);
        //device init
        stm32f1xx_spi_init(&spi_bus0,8,0,0);
        tmc2660_spi_dev[0].spi_cs = spi0_cs;
        tmc2660_spi_dev[0].spi_bus = &spi_bus0;     
        //enable 
        GPIO_InitStructure.GPIO_Pin = TMC2660_GPIOY_EN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                    
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                   
        GPIO_Init(TMC2660_PORTY_EN,&GPIO_InitStructure);
        //step  
        GPIO_InitStructure.GPIO_Pin = TMC2660_GPIOY_STEP;                                       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                   
        GPIO_Init(TMC2660_PORTY_STEP,&GPIO_InitStructure);
        //dir  
        GPIO_InitStructure.GPIO_Pin = TMC2660_GPIOY_DIR;                                        
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                    
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                   
        GPIO_Init(TMC2660_PORTY_DIR,&GPIO_InitStructure);
    
        //原点光电开关 PB11
        GPIO_InitStructure.GPIO_Pin =  SenseY_GPIO;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;   //上拉输入
        GPIO_Init(SenseY_PORT, &GPIO_InitStructure);
    
        TMC2660_OUTY_CS     = 1;
        TMC2660_OUTY_EN     = 0;                                                                        //enable
        TMC2660_OUTY_DIR    = 0;                                                                        //正反转控制
    
        tmc2660_spi_xfer(YMOTOR,REG_DRVCONF | 0X0050); //0X0010->305mV  0X0050->165mV 与电机电流相关
        tmc2660_spi_xfer(YMOTOR,REG_DRVCTRL | MICROSTEP_16);
        tmc2660_spi_xfer(YMOTOR,0x901b4);   //0x94557
        tmc2660_spi_xfer(YMOTOR,0xa0202);   //0xa0202->1/2CS 0xa8202->1/4CS 
        tmc2660_spi_xfer(YMOTOR,REG_SGCSCONF | SCG_DEFAULT | 0x00); //后5位为电流大小
        tmc2660_set_force(0,YMOTOR);
        tmc2660_set_subdivide(0x04,YMOTOR);
    }

    主要功能包括:
    1)IO口初始化,步进控制、方向控制、使能控制、原点位置等IO口初始化。
    2)spi总线指针初始化。
    3)TMC2660控制芯片默认参数配置。

    5.源码
    [1] https://github.com/Prry/drivers-for-mcu

    展开全文
  • TMC260驱动代码

    2018-04-15 15:12:59
    这个代码实现了IO模拟SPI完成TMC260的寄存器配置,代码来自于一位硬件设计的前辈,我借鉴这完成了我自己的驱动代码,我试着百度了几遍还是没找到,所以大胆分享出来,希望好资源不埋没。 手动降低积分
  • TMC260的PCB布局方式, 用的STM32的驱动芯片。有TMC260的布局方式
  • TMC260 自带256细分可以实现在低速时候平滑控制,带有专利技术Coolstep可以根据电机的负载自动调节驱动芯片输出的电流,避免因为超载而丢步,也减少电机的发热量,和其他驱动芯片相比节省75%的能量
  • stm32,TMC260步进电机驱动程序,基于串口的上位机与驱动板的通信代码。驱动板的原理图,PCB见于本人的其他资源。
  • TMC260A-PA参数资料

    2019-05-17 09:54:48
    TMC260A-PA规格 电机类型 - 步进双极性 电机类型 - AC,DC- 功能驱动器 - 全集成,控制和功率级 输出配置半桥(4) 接口SPI,步进/方向 技术功率 MOSFET 步进分辨率1 ~ 1/256 应用通用 电流 - 输出2A(最大) 电压 -...

    TMC260A-PA规格
    电机类型 - 步进双极性
    电机类型 - AC,DC-
    功能驱动器 - 全集成,控制和功率级
    输出配置半桥(4)
    接口SPI,步进/方向
    技术功率 MOSFET
    步进分辨率1 ~ 1/256
    应用通用
    电流 - 输出2A(最大)
    电压 - 电源3V ~ 5.25V
    电压 - 负载9V ~ 39V
    工作温度-40°C ~ 125°C (TJ)
    安装类型表面贴装
    封装/外壳44-LQFP
    供应商器件封装44-PQFP(10x10)

    展开全文
  • 压缩文件了包含了TMC2660的原理图设计和四层板布线PCB,仅供学习交流,直接将接口连接到STM32或者其他单片机上既可直接使用(3V3的IO电平)
  • STM32控制TMC260/2660的原理图简单说明 逸璞丷昊2019-03-01 16:17:104690已收藏21 分类专栏:硬件设计嵌入式开发STM32文章标签:STM32最小系统原理图STM32F407STM32控制继电器STM32控制TMC26x 版权 STM32的...

    STM32控制TMC260/2660的原理图简单说明

    逸璞丷昊 2019-03-01 16:17:10  4690  已收藏 21

    分类专栏: 硬件设计 嵌入式开发 STM32 文章标签: STM32最小系统原理图 STM32F407 STM32控制继电器 STM32控制TMC26x

    版权

    STM32的最小系统原理图,如果除去OLED和TTL-RJ45(有人物联网公司-超级网口模块),忽略这里没有的电气接口,这幅图就是STM32的最小系统原理图。对应我分享的STM32驱动TMC26x的代码,请注意电机接线对应的引脚。

    TMC260和TMC2660的驱动电路如下所示,我采用的是SPI写入配置信息,采用S/D的控制模式。

    最后,贴一张控制继电器和几个传感器的电路图,左下角并排的是五个5V的继电器控制电路,右上角比较复杂的是一个传感器的稳频调理电路,也是整个工程最重要的部分,分享的代码中很多代码和算法都是针对这部分的,SystemTim.c和SystemTim.h的定时任务处理也是这部分的。

     

    到这里就结束了,我现在基本已经不设计电路,转向软件和算法,希望因为下载了代码而看到这篇博客的你,能够顺利完成你的任务,也希望所有坚持学习硬件的朋友能够学有所成!

    展开全文
  • 官网PDF 芯片介绍的很详细, 想用这款芯片的可以看一下
  • 电机TMC260是通过SPI接口进行寄存器的指令配置的,我使用的STM32作为MCU,使用库函数进行代码设计的,该怎么去配置寄存器?库函数的SPI发送函数是发送16位的short int的,寄存器是二十位,我该怎么写入数据?
  • TMC26x_CONFIG

    2014-03-11 15:33:56
    TMC260配置工具 与TMC429配合 驱动步进电机
  • TMC2226/TMC2209应用笔记

    千次阅读 2020-10-14 20:44:40
    260,262到5160再到2660,对TMC的步进驱动算是非常熟悉了,看到19年的新品TMC2226/TMC2209价格便宜(1/2),电流足够(Ipeak = 2.8A),相对5160而言功能也很足够,还能多一些“新奇”的设计,所以说非用不可了。...

    TMC2226/TMC2209应用笔记

    2020-10-12 13:01:05

    简述

    从260,262到5160再到2660,对TMC的步进驱动算是非常熟悉了,看到19年的新品TMC2226/TMC2209价格便宜(1/2),电流足够(Ipeak = 2.8A),相对5160而言功能也很足够,还能多一些“新奇”的设计,所以说非用不可了。

     

    一些特点:

    1. 配置接口使用单线UART
    2. 内部提供步进脉冲发生器,但是没有速度斜坡功能 = 无用
    3. 基于较稳定的附带温度补偿的低MOS管导通电阻,提供了免外部采样电阻功能
    4. 所谓的OTP - Configuration Memory,OTP_PROG 编程用寄存器,保存一些需要断电存储的信息。某些参数的缺省值取决于OTP的设置。
    5. 无外置mos提供2.8A峰值电流
    6. StallGuard4而不是StallGuard2
    7. 可uart配置最高256细分,但是硬件针脚的配置只能8,16,32,64四种
    8. SPREAD引脚选择斩波方式,并且只有两种斩波,去掉了恒定关断时间斩波
    9. STDBY24DI 低功耗切换引脚
    10. 提供额外的VREF参考电压输入,更灵活的电流配置
    11. 与5160一样的飞轮模式

    从哪里开始?

    第一章 操作原理 综述部分说明了以下3种操作模式:

    传统模式

    全部使用硬线作为控制或者交互,VREF用以调节电流

    OTP预配置的Step/Dir模式

    可以读写的断电保存的数据区大小是3个byte,共24个bit,单次写入操作只能操作一个bit位,并且推荐的写入时间是10ms!写入后,通过读出进行校验。

    详细的bit信息参见“OTP_READ只读寄存器”

    不过,参数的配置是有局限的,需要全功能的设置,必须使用uart接口。

    可以省去mcu一个uart,在PCB出厂时候单独烧写参数。使用1拖n可以提高烧写效率。并不实用,仅仅省一个uart确丢掉了很强的动态配置能力这不值当。不过,uart接口之外多一个额外EEPROM或许是有用的。

    使用uart动态配置的Step/Dir模式

    全功能

    所以说,就选择第三种模式,从做一个3轴步进驱动器开始

     

    UART节点的拓扑

     

     

     

     

     

     

    选择第一种即可

     

    UART通信协议

    波特率可以在9000-fCLK/16之间选择,内部自动侦测实际波特率。

    从机地址0-3

    主机地址%11111111

     

    each byte is LSB...MSB, highest byte transmitted first

    CRC代码参见手册

     

    寄存器说明

    打算公开所有可配置项

     

     

    静音斩波

     

    SpreadCycle斩波

     

    硬件设计

     

     

    其他思路

     

    上位机设计一个配置向导以降低配置难度

     

     

     

    展开全文
  • SET: 260 GET: 441 SET: 265 GET: 441 SET: 270 GET: 441 SET: 275 GET: 441 SET: 280 GET: 497 SET: 285 GET: 497 SET: 290 GET: 497 SET: 295 GET: 497 SET: 300 GET: 497 SET: 305 GET: 497 SET: 310 GET: 552 ...
  • max_temp: 260 max_extrude_only_distance: 200 [tmc2208 extruder] uart_pin: ar44 microsteps: 16 <h1>interpolate: True <p>run_current: .9 hold_current: .5 stealthchop_threshold: 500 </p><p>该提问来源于...
  • 该设计充分利用TMC260智能驱动芯片的优势,结合FPGA自由编程特点,设计了两相步进电机驱动电路。电路实现了电机在宽频内256细分的高精度步进,并具有电机过载检测、堵转报警等功能,作为血液分析仪的核心驱动部件在...
  • 采用步进电机驱动芯片TMC260和微控制器STC12C5A60S2结合的方式控制步进电机的转动。该控制系统整体结构紧凑,且一个微控制器可以控制多个步进电机。实验结果表明,利用该光开关可实现高于100 dB的消光比,并且可长时间...
  • <div><p>Hello everybody. I'm trying to get Klipper working on my SKR 1.4 Turbo mainboard. My goal would be to use the rPi UART0 @ 250000 Baud, but I've tried via USB-serial and rPi UART0 ...
  • <p>To convert my existing dual E3 config to work with one E3 and one RAMBo, I just had to swap out the second <code>board pins</code> block, remove the TMC2209 configs where relevant, and add the ...

空空如也

空空如也

1 2
收藏数 31
精华内容 12
关键字:

tmc260