基于TMC5160的步进电机驱动|开发案例|嘉立创第三方服务平台
登录 注册
获得嘉立创几十万客户群体展示机会!
返回案例列表

基于TMC5160的步进电机驱动

步进电机 静音

服务商:青橙

方案售价

¥100

应用领域:医疗电子,工业自动化 技术分类:PCBLayout,嵌入式/单片机开发,自动化控制 人气:1156

青橙

客户等级:VIP客户
身份: 个人 所在地: 重庆市 重庆市
邀请竞标 购买服务 联系方式

方案描述


一、 【项目名称】


         步进电机驱动器

二、 【项目亮点】


         之前实现一个项目的过程中用了常用的DM系列雷赛驱动,因为有着较高的低抖动与静音等要求,测试后发现市面上中低成本的步进电机驱动器无法满足使用需求。

三、 【作品简介 】


   TMC5160 是带步进/方向接口和串行通信接口(SPI) 的高功率步进电机控制驱动芯片,将实现自动目标定位的灵活斜坡发生器和业界最先进的步进电机驱动器结合在一起。通过外置外部晶体管,实现高动态、高扭矩电机驱动。两相双极性步进电机的高电压通用控制器/驱动器。 stealthChop™控制电机安静运行。 外加 MOSFET 实现高达 20A 的电机线圈电流控制。
   PCB如下图所示:

  

 

四、【硬件部分的描述 】


     板卡为双层采用AD绘制,可12-36V供电,PIN对PIN替换雷赛驱动。使用STM8作为主控,TMC5160控制步进电机。源文件如下:pcb

 

五、【主要器件】




 

六、【软件部分的描述 】(选填)

部分主函数如下:
    /* Includes ------------------------------------*/
#include "STM8S003F3P.h"
#include "system.h"


/******主函数*******/
main()
{
    u8 dat1,dat2,dat3,dat4;
    u8 W_Register=0;
    u8 X=0,Y=0;
    u8 xifen=0,dianliu=0;
    

    
    
    _asm("sim"); //禁止中断
    Init_CLK();
    Init_GPIO();
    //Init_UART();   //
    Init_SPI();
    
    LED=1;
    
    Delay_MS(10);   //
    //读取硬件细分数信息
    xifen=0;
    if(SW4==0)
    {
        xifen|=0X04;
    }
    if(SW5==0)
    {
        xifen|=0X02;
    }
    if(SW6==0)
    {
        xifen|=0X01;
    }
    xifen=xifen+1;   //000,标示全速  ON ON ON
    //读取硬件电流信息
    dianliu=0;
    dat1=0;
    if(SW4==0)
    {
        dat1|=0X04;
    }
    if(SW5==0)
    {
        dat1|=0X02;
    }
    if(SW6==0)
    {
        dat1|=0X01;
    }   
    
    dianliu=4*dat1+3;
    
    M1_SPI_SET_CHOPCONF[1]=xifen|0X10; //细分数 +插入256微步

    M1_SPI_SET_IHOLD_IRUN[3]=dianliu; //电流与拨码有关

    Delay_MS(5);

    SPI_SEND_Oneoder(&M1_SPI_SET_CHOPCONF[0],5);
    SPI_SEND_Oneoder(&M1_SPI_SET_IHOLD_IRUN[0],5);
    SPI_SEND_Oneoder(&M1_SPI_SET_TPOWERDOWN[0],5);
    SPI_SEND_Oneoder(&M1_SPI_SET_EN_PWM_MODE[0],5);
    SPI_SEND_Oneoder(&M1_SPI_SET_TPWM_THRS[0],5);

    Delay_MS(5);
    //写入参数

    Delay_MS(5);


    while (1)
    {
            
            

    }       

}


/***************************************
           CRC8_2       X8+X2+X1+1           
****************************************/
u8 CRC8_2_Count(u8 *p_buffer, u8 buf_size)
{
    u8 crc=0;
  u8 i,j;
    u8 currentbyte=0;
    
    for(i=0;i<buf_size;i++)
    {
        currentbyte=p_buffer[i];
        for(j=0;j<8;j++)
        {
            if((crc>>7)^(currentbyte&0X01))
            {
                crc=(crc<<1)^0x07;
            }
            else
            {
                crc=(crc<<1);
            }
            currentbyte=currentbyte>>1;
        }
    }
  return crc;
}


/*******************************************************************************

*******************************************************************************/
void Motor_write(u8 M_ADDR,u8 M_Register_addr,u8 dat1,u8 dat2,u8 dat3,u8 dat4)
{
    u8 CRC_data=0;
    Motor_write_data[0]=0x05;
    Motor_write_data[1]=M_ADDR;
    Motor_write_data[2]=M_Register_addr;
    
    Motor_write_data[3]=dat1;
    Motor_write_data[4]=dat2;
    Motor_write_data[5]=dat3;
    Motor_write_data[6]=dat4;
    
    CRC_data=CRC8_2_Count(&Motor_write_data[0],7);

    Motor_write_data[7]=CRC_data;

    USART_SEND_DATS(&Motor_write_data[0],8);
}


 



注意:此留言仅作为嘉立创与客户日常交流之用,回复不是很及时,急切问题请联系我司工作人员处理!
您需要登录后才可以留言 请先登录
还可以输入 500 个字符
他的案例
1
查看更多案例