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号