//本次实验电机驱动采用共阴极接线方式
//将步进电机的参数写到一个子函数中,并加入限位开关,触动限位开关可实现步进电机停转
//电机驱动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相关推荐

  1. STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序

    STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序 一.ULN2003驱动器 1.工作原理 2.步距角以及一圈所需步数的计算 二.硬件连接 三.STM32F103定时器中断 ...

  2. uln2003步进电机驱动程序

    ULN2003是一种常见的步进电机驱动芯片,可用于驱动4相.5线和6线步进电机.其驱动方式是通过输入高低电平来控制电机旋转的步进角度. 以下是一般的ULN2003步进电机驱动程序框架: 定义引脚:定义 ...

  3. 28BYJ-48步进电机驱动程序

    28BYJ-48步进电机驱动程序 这两天开始学调 28BYJ-48步进电机,但是淘宝卖家给的资料和网上搜到的都是51的程序,用的驱动板都是ULN2003. 以下是我自己写的STM32的程序.我用的板子 ...

  4. arduino步进电机程序库_Arduino基础入门篇27—步进电机驱动库的使用

    本篇介绍步进电机驱动库的使用,通过读取电位器输入,控制步进电机转动相应角度. Stepper库是官方提供的驱动库,我们启动Arduino IDE,点击「文件」-「示例」就能找到Stepper库,官方提 ...

  5. arduino步进电机程序库_【MM32 eMiniBoard测评报告】+驱动步进电机

    1. 引言 先简单聊一下我与MM32的故事.在去年,我开始做BLDC的项目,于是开始学习了解各家的mcu及其解决方案.有幸获得了灵动微电子的MM32 SPIN系列开发板,给我的感觉是开发板做工精良,开 ...

  6. arduino步进电机程序库_Arduino入门教程15(步进电机驱动库的使用):Arduino Uno R3+ULN2003+步进电机 使用Stepper驱动库,控制步进电机转动角度...

    本篇介绍步进电机驱动库的使用,通过读取电位器输入,控制步进电机转动相应角度. Stepper库是官方提供的驱动库,我们启动Arduino IDE,点击「文件」-「示例」就能找到Stepper库,官方提 ...

  7. c语言步进电机驱动程序不正常怎么办,步进电机【C语言驱动程序】

    步进电机C语言驱动程序 /*C语言代码:*/ #include #include #define uchar unsigned char #define uint unsigned int uchar ...

  8. 51单片机 驱动步进电机 C语言 lcd,基于51单片机的步进电机驱动程序

    一.步进电机分类 1.按构造分类 ①反应式: 由定子和转子构成,定子上有绕组,转子由软磁材料制成. ②永磁式: 转子由永磁体制成,转子极数与定子极数相等. ③混合式 定子有多相绕组,转子由永磁体构成, ...

  9. arduino设备驱动程序安装失败

    对于很多新手来说,从网上购买了开发板后,充满期待的插上USB线准备大干一场.结果如下图: 原因在哪里呢?其实是因为我们购买的arduino开发板的问题,如果我们购买的是正宗的板子,那么只要将ardui ...

  10. 关于Arduino 步进电机Stepper库的一些想法

    官方提供了一些库,使Arduino入门起来更加快速,我们连原理都不用懂,就能通过函数控制终端.但是,这样也带来了很多的缺陷,比如,库函数的功能有限,有些无法实现.然后还有库函数因为要考虑其他的情况,你 ...

最新文章

  1. java js css 压缩工具_javascript和css文件的压缩(YUI Compressor)
  2. Java之构造器和构造方法的使用和意义
  3. 深入浅出之函数的参数传递方式
  4. Bigtable:一个分布式的结构化数据存储系统(转)
  5. 学习swing鼠标点击事件心得体会_西门子COMOS软件开发定制学习8-查询列表间的数据交互...
  6. 传统存储做到极致也惊人!看宏杉科技发布的CloudSAN
  7. Flink WriteRedis
  8. 高并发秒杀系统--Service事务管理与继承测试
  9. VirtualBox配置
  10. 计算机一级上网题怎么创建桌面快捷方式,计算机一级上机操作题2016
  11. 实现二叉树各种遍历算法
  12. cmder 下载及安装
  13. BoundsChecker教程
  14. Ubuntu18.04安装TPLINK WDN5200H USB无线网卡驱动
  15. 幼儿抽象逻辑思维举例_【干货】教师资格《幼儿保教知识与能力》重点归纳一...
  16. uniapp:在HBuilderX里使用夜神模拟器
  17. 带你白嫖程序带宽限制命令Trickle
  18. 当下的个人站长都用哪些模板做网站呢?
  19. BOBO X SugarBlock AMA
  20. C++ 特殊成员函数

热门文章

  1. 适合APP的开发模式——敏捷开发
  2. 阿铭Linux_网站维护学习笔记20190304
  3. DCDC布局布线总结
  4. cdrx4自动排版步骤_教你用CorelDRAW X4轻松排出干净整齐段落
  5. 使用stack栈集合完成ABC全排列
  6. 大三,在软件工程学习上的感悟
  7. 【010Editor】010Editor使用技巧汇总(不断更新中)
  8. 双代号网络图快速计算时差法
  9. elementUi——select选择框的下拉框样式调整——基础积累
  10. 软件测试教务系统测试用例,教务管理系统测试用例.doc