【Arduino】步进电机驱动程序Stepper_Motor_TB6600
//本次实验电机驱动采用共阴极接线方式
//将步进电机的参数写到一个子函数中,并加入限位开关,触动限位开关可实现步进电机停转
//电机驱动A+,A-,B+,B-分别接电机的黑,绿,红,蓝线#include <Servo.h>
#include <SoftwareSerial.h>const int X_ENAPin = 7; // Define X axis Enable pin
const int X_DIRPin = 8; // Define X axis Direction pin
const int X_PULPin = 9; // Define X axis Pulse pinconst int Y_ENAPin = 4; // Define Y axis Enable pin
const int Y_DIRPin = 5; // Define Y axis Direction pin
const int Y_PULPin = 6; // Define Y axis Pulse pinconst int X_BUTTON = 11; // Define X axis Button pin
const int Y_BUTTON = 10; // Define Y axis Button pinconst int ServoPin = 12; // Define Servo pinSoftwareSerial mySerial(2,3); // Software SerialPort: RX=2, TX=3
Servo servo_12; // Define Servo pin
volatile char val; // Recive the data of the Hardware SerialPort
volatile char val_Soft; // Recive the data of the SoftWare SerialPortint number = 0; // Use variable make function execution oncevoid setup()
{pinMode (X_ENAPin, OUTPUT);pinMode (X_PULPin, OUTPUT);pinMode (X_DIRPin, OUTPUT);pinMode (Y_ENAPin, OUTPUT);pinMode (Y_PULPin, OUTPUT);pinMode (Y_DIRPin, OUTPUT);pinMode (X_BUTTON, INPUT_PULLUP);pinMode (Y_BUTTON, INPUT_PULLUP);val = ' ';val_Soft = ' ';Serial.begin(9600);mySerial.begin(9600);servo_12.attach(12);servo_12.write(180); // Define initial positiondelay(500);}void loop()
{if (number == 0){LocationZero(); // Bring the X and Y axes to the 0 positionLocationMovePositive(5, 15); // Move the horizontal and vertical axes to the (5,15) positionnumber = 1; // Change the value of the variable to stop the function}//if (Serial.available() > 0) // Print data from Hardware Serial//{// val = Serial.read();// mySerial.print(val);//}if (mySerial.available() > 0) // Print data from Software Serial{val_Soft = mySerial.read();Serial.print(val_Soft);}// Judge the value receivedswitch (val_Soft){case '0':LocationMoveNegative(5, 10); // Move the horizontal and vertical axes from (5,15) to the (0, 5) positionDumpingGarbage(); // Pour the garbageLocationMovePositive(5, 10); // Move the horizontal and vertical axes from (0, 5) to the (5,15) positionbreak;case '1':LocationMoveNegative(0, 10); // Move the vertical axis from (5,15) to the (5, 5) positionLocationMovePositive(3, 0); // Move the horizontal axis from (5, 5) to the (8, 5) positionDumpingGarbage(); // Pour the garbageLocationMoveNegative(3, 0); // Move the horizontal axis from (8, 5) to the (5, 5) positionLocationMovePositive(0, 10); // Move the vertical axis from (5, 5) to the (5,15) positonbreak;case '2':LocationMoveNegative(5, 15); DumpingGarbage(); LocationMovePositive(5, 15); break;case '3':LocationMoveNegative(0, 15);LocationMovePositive(3, 0);DumpingGarbage();LocationMoveNegative(3, 0);LocationMovePositive(0, 15);break;}Serial.flush(); // Clear Software Serial buffer datamySerial.flush(); // Clear Hardware Serial buffer dataval_Soft = ' '; // Make the value of Software Serial is emptydelay(500);
}/*
* X轴移动步进电机子函数
* 函数:X_StepperMotor
* 功能:控制步进电机是否脱机、方向、步数
* 参数:ENA---脱机状态,true为脱机
* DIR---方向控制
* steps---步进的步数,若steps为0,则电机上电电磁锁死,不转
* delayMicroseconds---可更改电机转动速度
* 返回值:Null
*/
void X_StepperMotor(boolean ENA, boolean DIR, int steps)
{digitalWrite(X_ENAPin, ENA);digitalWrite(X_DIRPin, DIR);for (int i = 0; i < steps; i++){digitalWrite(X_PULPin, HIGH);delayMicroseconds(100);digitalWrite(X_PULPin, LOW);delayMicroseconds(100);}
}/*
* Y轴移动步进电机子函数
* 函数:Y_StepperMotor
* 功能:控制步进电机是否脱机、方向、步数
* 参数:ENA---脱机状态,true为脱机
* DIR---方向控制
* steps---步进的步数,若steps为0,则电机上电电磁锁死,不转
* delayMicroseconds---可更改电机转动速度
* 返回值:Null
*/
void Y_StepperMotor(boolean ENA, boolean DIR, int steps)
{digitalWrite(Y_ENAPin, ENA);digitalWrite(Y_DIRPin, DIR);for (int i = 0; i < steps; i++) //Forward XXXX steps{digitalWrite(Y_PULPin, HIGH);delayMicroseconds(100);digitalWrite(Y_PULPin, LOW);delayMicroseconds(100);}
}/*
* 位置初始化函数
* 函数:LocationZero
* 功能:使整体移动到0点位置,也就是限位开关位置
* 参数:Null
* 返回值:Null
*/
void LocationZero()
{// X轴达到限位开关位置while (digitalRead(X_BUTTON) == 1) // 一直移动X轴直到限位开关被按下{X_StepperMotor(false, true, 10);}delay(500); // 等待500ms使电流消失X_StepperMotor(false, false, 500); //反向移动X轴500步,留出X轴后期移动的余量X_StepperMotor(false, true, 0); // 电机停转delay(500);// Y轴达到限位开关位置while (digitalRead(Y_BUTTON) == 1) // 一直移动Y轴直到限位开关被按下{Y_StepperMotor(false, true, 10);}delay(500); // 等待500ms使电流消失Y_StepperMotor(false, false, 500); // 反向移动Y轴500步,留出Y轴后期移动的余量Y_StepperMotor(false, true, 0); // 电机停转delay(500);
}/*
* 倾倒垃圾函数
* 函数:DumpingGarbage 功能:转动舵机,将垃圾倾倒进垃圾桶
* 参数:Null
* 返回值:Null
*/
void DumpingGarbage()
{servo_12.attach(12);servo_12.write(0); // 倾倒垃圾delay(1000); servo_12.attach(12);servo_12.write(180); // 回到初始位置delay(1000);
}/*
* 横纵坐标正向移动函数
* 函数:LocationMovePositive
* 功能:控制电机移动到固定坐标位置
* 参数:x---X轴增加的坐标增量
* y---Y轴增加的坐标增量
* 返回值:Null
*/
void LocationMovePositive(int x, int y)
{for (int x_step=0; x_step<x; x_step++){X_StepperMotor(false, false, 1000);//此时3200由于在这个循环中,只要不修改成0,则修改他的值没什么影响,转速不会改变}delay(500);for (int y_step=0; y_step<y; y_step++){Y_StepperMotor(false, false, 1000); //Y轴反向行走}delay(500);
}/*
* 横纵坐标负向移动函数
* 函数:LocationMoveNegative
* 功能:控制电机移动到固定坐标位置
* 参数:x---X轴减少的坐标增量
* y---Y轴减少的坐标增量
* 返回值:Null
*/
void LocationMoveNegative(int x, int y)
{for (int x_step=0; x_step<x; x_step++){X_StepperMotor(false, true, 1000);//此时3200由于在这个循环中,只要不修改成0,则修改他的值没什么影响,转速不会改变}delay(500);for (int y_step=0; y_step<y; y_step++){Y_StepperMotor(false, true, 1000); //Y轴反向行走}delay(500);
}
【Arduino】步进电机驱动程序Stepper_Motor_TB6600相关推荐
- STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序
STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序 一.ULN2003驱动器 1.工作原理 2.步距角以及一圈所需步数的计算 二.硬件连接 三.STM32F103定时器中断 ...
- uln2003步进电机驱动程序
ULN2003是一种常见的步进电机驱动芯片,可用于驱动4相.5线和6线步进电机.其驱动方式是通过输入高低电平来控制电机旋转的步进角度. 以下是一般的ULN2003步进电机驱动程序框架: 定义引脚:定义 ...
- 28BYJ-48步进电机驱动程序
28BYJ-48步进电机驱动程序 这两天开始学调 28BYJ-48步进电机,但是淘宝卖家给的资料和网上搜到的都是51的程序,用的驱动板都是ULN2003. 以下是我自己写的STM32的程序.我用的板子 ...
- arduino步进电机程序库_Arduino基础入门篇27—步进电机驱动库的使用
本篇介绍步进电机驱动库的使用,通过读取电位器输入,控制步进电机转动相应角度. Stepper库是官方提供的驱动库,我们启动Arduino IDE,点击「文件」-「示例」就能找到Stepper库,官方提 ...
- arduino步进电机程序库_【MM32 eMiniBoard测评报告】+驱动步进电机
1. 引言 先简单聊一下我与MM32的故事.在去年,我开始做BLDC的项目,于是开始学习了解各家的mcu及其解决方案.有幸获得了灵动微电子的MM32 SPIN系列开发板,给我的感觉是开发板做工精良,开 ...
- arduino步进电机程序库_Arduino入门教程15(步进电机驱动库的使用):Arduino Uno R3+ULN2003+步进电机 使用Stepper驱动库,控制步进电机转动角度...
本篇介绍步进电机驱动库的使用,通过读取电位器输入,控制步进电机转动相应角度. Stepper库是官方提供的驱动库,我们启动Arduino IDE,点击「文件」-「示例」就能找到Stepper库,官方提 ...
- c语言步进电机驱动程序不正常怎么办,步进电机【C语言驱动程序】
步进电机C语言驱动程序 /*C语言代码:*/ #include #include #define uchar unsigned char #define uint unsigned int uchar ...
- 51单片机 驱动步进电机 C语言 lcd,基于51单片机的步进电机驱动程序
一.步进电机分类 1.按构造分类 ①反应式: 由定子和转子构成,定子上有绕组,转子由软磁材料制成. ②永磁式: 转子由永磁体制成,转子极数与定子极数相等. ③混合式 定子有多相绕组,转子由永磁体构成, ...
- arduino设备驱动程序安装失败
对于很多新手来说,从网上购买了开发板后,充满期待的插上USB线准备大干一场.结果如下图: 原因在哪里呢?其实是因为我们购买的arduino开发板的问题,如果我们购买的是正宗的板子,那么只要将ardui ...
- 关于Arduino 步进电机Stepper库的一些想法
官方提供了一些库,使Arduino入门起来更加快速,我们连原理都不用懂,就能通过函数控制终端.但是,这样也带来了很多的缺陷,比如,库函数的功能有限,有些无法实现.然后还有库函数因为要考虑其他的情况,你 ...
最新文章
- java js css 压缩工具_javascript和css文件的压缩(YUI Compressor)
- Java之构造器和构造方法的使用和意义
- 深入浅出之函数的参数传递方式
- Bigtable:一个分布式的结构化数据存储系统(转)
- 学习swing鼠标点击事件心得体会_西门子COMOS软件开发定制学习8-查询列表间的数据交互...
- 传统存储做到极致也惊人!看宏杉科技发布的CloudSAN
- Flink WriteRedis
- 高并发秒杀系统--Service事务管理与继承测试
- VirtualBox配置
- 计算机一级上网题怎么创建桌面快捷方式,计算机一级上机操作题2016
- 实现二叉树各种遍历算法
- cmder 下载及安装
- BoundsChecker教程
- Ubuntu18.04安装TPLINK WDN5200H USB无线网卡驱动
- 幼儿抽象逻辑思维举例_【干货】教师资格《幼儿保教知识与能力》重点归纳一...
- uniapp:在HBuilderX里使用夜神模拟器
- 带你白嫖程序带宽限制命令Trickle
- 当下的个人站长都用哪些模板做网站呢?
- BOBO X SugarBlock AMA
- C++ 特殊成员函数