1TB6600驱动器 贵
Arduino控制TB6600驱动器+42步进电机
https://blog.csdn.net/dongyan3595/article/details/122388869


 







实际使用
1 接线




2调电流控制

3调步数精度

步数
细分
4 高电平有效
int PUL = 7; //定义脉冲引脚
int DIR = 6; //定义方向销
int ENA = 5; //定义启用引脚
int RESET = 4; //定义复位传感器
  
/**
* TB6600驱动器 . 42两相四线步进电机
*/
void setup() {
  pinMode (PUL, OUTPUT);
  pinMode (DIR, OUTPUT);
  pinMode (ENA, OUTPUT);
  pinMode (RESET,INPUT);
  Serial.begin(9600);
  // 初始化复位 - 转3圈
  for (int i = 0; i < 1600; i++) //前进4800步 SW1=OFF,SW2=ON,SW3=OFF(每圈1600脉冲)
  {
    digitalWrite(DIR, LOW); // 定义正转
    digitalWrite(ENA, HIGH);// 启动
    digitalWrite(PUL, HIGH);// 输出脉冲
    delayMicroseconds(2000);
    digitalWrite(PUL, LOW);
   
    delayMicroseconds(2000);
  }
  delay(5000);
}
  
void loop() {
  for (int i = 0; i < 1600; i++) //正转1圈
  {
    digitalWrite(DIR, LOW);
    digitalWrite(ENA, HIGH);
    digitalWrite(PUL, HIGH);
    delayMicroseconds(50);
    digitalWrite(PUL, LOW);
    delayMicroseconds(50);
  }
  delay(3000); // 暂停10秒
  for (int i = 0; i < 1600; i++) //倒转1圈
  {
    digitalWrite(DIR, HIGH);
    digitalWrite(ENA, HIGH);
    digitalWrite(PUL, HIGH);
    delayMicroseconds(50);
    digitalWrite(PUL, LOW);
    delayMicroseconds(50);
  }
   delay(3000); // 暂停10秒
}
双路控制
高电平有效
int PUL = 7; //定义脉冲引脚
int DIR = 6; //定义方向销
int ENA = 5; //定义启用引脚
int PUL2 = 8; //定义脉冲引脚
int DIR2 = 9; //定义方向销
int ENA2 = 10; //定义启用引脚
 void RunOne1(int Dtime)
 {
    digitalWrite(DIR, LOW); // 定义正转
    digitalWrite(ENA, HIGH);// 启动
    digitalWrite(PUL, HIGH);// 输出脉冲
    delayMicroseconds(2000);
    digitalWrite(PUL, LOW);
    delayMicroseconds(2000);
  }
// 
 void RunOneStepQian12(int Dtime,bool Fx)
 {
    digitalWrite(DIR, Fx); // 定义正转 low
    digitalWrite(ENA, HIGH);// 启动
    digitalWrite(PUL, HIGH);// 输出脉冲
    digitalWrite(DIR2, Fx); // 定义正转
    digitalWrite(ENA2, HIGH);// 启动
    digitalWrite(PUL2, HIGH);// 输出脉冲
    
    delayMicroseconds(Dtime);
    digitalWrite(PUL, LOW);
    digitalWrite(PUL2, LOW);
    delayMicroseconds(Dtime);
  }  
/**
* TB6600驱动器 . 42两相四线步进电机
*/
void setup() {
  pinMode (PUL, OUTPUT);
  pinMode (DIR, OUTPUT);
  pinMode (ENA, OUTPUT);
  pinMode (PUL2, OUTPUT);
  pinMode (DIR2, OUTPUT);
  pinMode (ENA2, OUTPUT);
  
  Serial.begin(9600);
  // 初始化复位 - 转1圈
  for (int i = 0; i < 1600; i++) //前进4800步 SW1=OFF,SW2=ON,SW3=OFF(每圈1600脉冲)
  {
     RunOneStepQian12(500,0);
  }
  delay(5000);
}
  
void loop() {
  for (int i = 0; i < 1600; i++) //正转1圈
  {
     RunOneStepQian12(500,0);
  }
  delay(3000); // 暂停10秒
  for (int i = 0; i < 1600; i++) //倒转1圈
  {
     RunOneStepQian12(500,1);
  }
   delay(3000); // 暂停10秒
}
串口控制
4 高电平有效
#include <SoftwareSerial.h>
//实例化软串口
SoftwareSerial mySerial(2,3); // RX, TX
int PUL = 7; //定义脉冲引脚
int DIR = 6; //定义方向销
int ENA = 5; //定义启用引脚
 
int PUL2 = 8; //定义脉冲引脚
int DIR2 = 9; //定义方向销
int ENA2 = 10; //定义启用引脚
 
#define sleng 11 //数组大小
String split_result[sleng];//手动动态调整数组大小,保证数组可以满足容量
 /*字符串分割
输入参数
String zifuchuan,  输入字符串
String fengefu,    分隔符号-可以是多个
String result[]    输出结果
    
*/
void Split(String zifuchuan,String fengefu,String result[])
 {
  int weizhi; //找查的位置
  String temps;//临时字符串
  int i=0;
  do
  {
      weizhi = zifuchuan.indexOf(fengefu);//找到位置
      if(weizhi != -1)//如果位置不为空
      {
          temps=zifuchuan.substring(0,weizhi);//打印取第一个字符
          zifuchuan = zifuchuan.substring(weizhi+fengefu.length(), zifuchuan.length());
          //分隔后只取后面一段内容 以方便后面找查
      }
      else
      {  //上面实在找不到了就把最后的 一个分割值赋值出来以免遗漏
         if(zifuchuan.length() > 0)
          temps=zifuchuan;
      }
    
      result[i++]=temps;
      //Serial.println(result[i-1]);//在这里执行分割出来的字符下面不然又清空了
      temps="";
   }
   while(weizhi >=0);
  }
 
// 运行一步 
 void RunOneStep(int type_,int Dtime,bool Fx)
 {
    digitalWrite(DIR, Fx); // 定义正转 low
    digitalWrite(ENA, HIGH);// 启动
    digitalWrite(PUL, HIGH);// 输出脉冲
 
    digitalWrite(DIR2, Fx); // 定义正转
    digitalWrite(ENA2, HIGH);// 启动
    digitalWrite(PUL2, HIGH);// 输出脉冲
 
     
    delayMicroseconds(Dtime);
    if(type_==1){
       digitalWrite(PUL, LOW);
      }
    else if(type_==2){
       digitalWrite(PUL2, LOW);
      }
     else if(type_==3)
     {
       digitalWrite(PUL, LOW);
       digitalWrite(PUL2, LOW);
     }
     else{}
    delayMicroseconds(Dtime);
  } 
/*
int step_, 步数 1600步一周
int type_, 类型 1 -1号电机  2-2号电机 3- 1和2号电机 
int Dtime, 每一步延迟的时间 毫秒 速度控制
bool Fx    方向 1 前 0 后
*/
 void RunXStep(int step_,int type_,int Dtime,bool Fx){
    for (int i = 0; i < step_; i++) //正转1圈
    {
       RunOneStep(type_,Dtime,Fx);
    }
  }  
/**
* TB6600驱动器 . 42两相四线步进电机
*/
void setup() {
  pinMode (PUL, OUTPUT);
  pinMode (DIR, OUTPUT);
  pinMode (ENA, OUTPUT);
 
  pinMode (PUL2, OUTPUT);
  pinMode (DIR2, OUTPUT);
  pinMode (ENA2, OUTPUT);
 
  mySerial.begin(9600);
  Serial.begin(9600);
}
   
void loop() {
    //接收串口消息 mySerial
  if (Serial.available()){
      String split_input =Serial.readStringUntil(';');
      //Serial.println(split_input);
   
      //分割解析
      Split(split_input,"-",split_result);//分割调用
         
      Serial.println("----------------");
      //打印消息 检查是否为空
      /*
       for(int i=0;i<sleng;i++)
          {
            if(split_result[i]!="")
            {
             Serial.println(String(i)+"-"+split_result[i]);
            }
            else
            {
              split_result[i]="0";
             }
          }
        */ 
        if(split_result[0]=="motor"){
            int StepNum=split_result[1].toInt();
            int MotorId=split_result[2].toInt();
            int WaitStep_time=split_result[3].toInt();
            int zhengfan=split_result[4].toInt();
            RunXStep(StepNum,MotorId,WaitStep_time,zhengfan);
            
            delay(10);
            Serial.println("ok");
            // motor-1600-1-500-1-;
          }  
  }
          
//  RunXStep(1600,1,500,1);// 步数 电机 每一步后的延迟时间 方向
//  delay(3000); // 暂停10秒
//  RunXStep(1600,2,500,0);
//  delay(3000); // 暂停10秒
}
2简单控制器
3D打印机 A4988/DRV8825步进电机驱动控制板/扩展板模块
https://item.taobao.com/item.htm?spm=a1z09.2.0.0.23b02e8dInsQGy&id=613911068384&_u=91qf7bf51a8e

1 条线全在ON,这意味着16段(4988)或32段(8825)Jm连接电机
2 外接电源 12-24V
3 Jc E,S,D,G,分别对应于连接


低电

电机3D打印机配件单轴混合式42步进电机2相4线17HS8401s/17HS8401
https://item.taobao.com/item.htm?abbucket=14&id=556963852690&ns=1&pisk=gDGiE7xy3Ay_VyKLpXN6ednWZhpLB5NbCmCYDSE2LkrC6-rvCm2mDDwq653txoo-mrhtMjDCi4gj6FNv55g_GS-J2QFm5VNjyB0ATfXULruUuNzwpW-O8SAp2Qd--dz_M2--6yaz3P4RgSya3yrUArf47Po4L6zbY1zV_rSe-kZUu1y4gByUrPSNbmzNT9zTy1S47-WeTrZU0SPq0283kkrqLC14qjlITHRfYg-KGscUSRqr7lutWX-4LOggxgIStAea4_Ehgsl372L4M05kHuk7X8enYBCgi2zmXknya6VUEYgYocAG_5HEdfNt93b7ImqTUXwHTM4nt4HzR2vk-2c0j8laKZC8s24q0-DBq_Ug6v2osATfYVo8jYPskaxt-8D3FyyFoOPte4hbUfRGVke7ocEK4Q53T-Sy99WPbzfb8EhFhtwaRyq8yt01_5QaTj8H-T9_Qya92jLhLkyaRyXv-eX5ERzQWv5..&priceTId=2147807c17420585939827059e12fa&skuId=4005479905645&spm=a21n57.1.hoverItem.2&utparam=%7B%22aplus_abtest%22%3A%22e8953ae95fb59f2d228d66b62d746343%22%7D&xxc=taobaoSearch
低电平驱动
int PUL = 7; //定义脉冲引脚
int DIR = 6; //定义方向销
int ENA = 5; //定义启用引脚  低电平有效
int wait_time=2000;   
/**
* TB6600驱动器 . 42两相四线步进电机
*/
void setup() {
  pinMode (PUL, OUTPUT);
  pinMode (DIR, OUTPUT);
  pinMode (ENA, OUTPUT);
  Serial.begin(9600);
  // 初始化复位 - 转3圈
  for (int i = 0; i < 1600; i++) //前进4800步 SW1=OFF,SW2=ON,SW3=OFF(每圈1600脉冲)
  {
    digitalWrite(DIR, LOW); // 定义正转
    digitalWrite(ENA, 0);// 启动
    digitalWrite(PUL, HIGH);// 输出脉冲
    delayMicroseconds(wait_time);
    digitalWrite(PUL, LOW);
    
    delayMicroseconds(wait_time);
  }
  delay(2000);
  Serial.println("开始");
}
   
void loop() {
  Serial.println("前进");
  for (int i = 0; i < 1600; i++) //正转1圈
  {
    digitalWrite(DIR, LOW);
    digitalWrite(ENA, 0);
    digitalWrite(PUL, HIGH);
    delayMicroseconds(wait_time);
    digitalWrite(PUL, LOW);
    delayMicroseconds(wait_time);
  }
  delay(3000); // 暂停10秒
  Serial.println("后退");
  for (int i = 0; i < 1600; i++) //倒转1圈
  {
    digitalWrite(DIR, HIGH);
    digitalWrite(ENA, 0);
    digitalWrite(PUL, HIGH);
    delayMicroseconds(wait_time);
    digitalWrite(PUL, LOW);
    delayMicroseconds(wait_time);
  }
   delay(3000); // 暂停10秒
}
 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号