1TB6600驱动器 贵
Arduino控制TB6600驱动器+42步进电机
https://blog.csdn.net/dongyan3595/article/details/122388869
实际使用
1 接线
2调电流控制
3调步数精度
步数
细分
4 高电平有效
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 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秒 } |
双路控制
高电平有效
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | 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 高电平有效
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | #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,分别对应于连接
Enable / Step / Dir / Gnd驱动信号输出
Enable 为低电平有效
低电
低电平驱动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 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 秒 } |
分类:
Arduino
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)