1.开发环境:Arduino IDE

2.步进电机驱动器:雷赛DM860

3.单片机程序


//定义了板上的控制端DIR,8作为方向控制端
const int DIRPIN = 2;//定义了板上的步数端PUL,9作为步数控制端
const int STEPPIN = 5;//定义了限位开关引脚int key1 = 10;int key2 = 11;//存储限位开关状态的变量,取值HIGH、LOWint k1;int k2;
//定义串口接受数据的全局变量
String comdata = "";//定义输入指令接收变量,存储电机运动状态
int comflag=0;//定义控制PWM脉冲波宽度的变量,通过控制脉冲宽度可以控制步进电机转速
int stepperSpeed=10;//初始值为1,电机慢速转动//步进电机是否可以正转、反转
boolean is_control_stepper_right=false;
boolean is_control_stepper_left =false;//初始化
void setup()
{// put your setup code here, to run once:Serial.begin(9600); //设置串口比特率为9600//定义输出引脚pinMode(DIRPIN, OUTPUT);pinMode(STEPPIN, OUTPUT);//定义输入引脚pinMode(key1, INPUT_PULLUP);pinMode(key2, INPUT_PULLUP);
}//检测限位开关状态
void ChecKeyState()
{k1 = digitalRead(key1);//查询限位开关1的状态k2 = digitalRead(key2);//查询限位开关2的状态//如果两个限位开关有一个为低电平则电机停转if (k1==LOW){//analogWrite(STEPPIN, 0);//速度控制引脚9输出0,电机停止Serial.println("K1Pressed");is_control_stepper_right = false;//k1为低电平,电机不能正转is_control_stepper_left  = true;//comflag=0;//开关按下,存储电机运动状态的变量置0,即停止digitalWrite(DIRPIN, LOW);//电机方向控制引脚输出低电平,电机反转Serial.println("stop forward");delay(1000);}else if(k2==LOW){// analogWrite(STEPPIN, 0);//速度控制引脚9输出0Serial.println("K2Pressed");is_control_stepper_left  = false;//k2为低电平,电机不能反转is_control_stepper_right = true;// comflag=0;//开关按下,存储电机运动状态的变量置0,即停止digitalWrite(DIRPIN, HIGH);//电机方向控制引脚输出高电平,电机正转Serial.println("stop backward");delay(1000);}//两个限位开关均为高电平电机使能else {is_control_stepper_right = true;is_control_stepper_left  = true;Serial.println("can control the stepper.");//delay(1000);}
}//读串口发过来的数据
void RdmySerial()
{char val;//读串口的变量while (Serial.available() > 0)//读串口发过来的数据{//comdata += char(Serial.read());val = char(Serial.read());//读串口if ((val != '\r') && (val != '\n'))//把val的值附给comdata{comdata += val;}delay(2);}if (comdata.length() > 0){Serial.println(comdata + " rcv ok.");Serial.println(comdata);delay(2);//判断是否为正转指令if(comdata == "right") {comflag=1;Serial.println(comflag);}//判断是否为反转指令else if (comdata == "left") {comflag=2;Serial.println(comflag);}//判断是否为停止指令else if (comdata == "stop"){comflag=0;Serial.println(comflag);}//检测输入是否为调速指令else{//开始读取输入的数字boolean is_number = true;//逐个字符读入检查是否数字for (int i = 0; i < comdata.length(); i++){int inChar = comdata[i];if (!(isDigit(inChar))){is_number = false;Serial.println(comdata +" 未知指令");}}//检查是否为数字(速度值)if (is_number){//设置步进电机的速度0-255stepperSpeed = comdata.toInt(); //步进电机越大速度越快//开始控制电机analogWrite(STEPPIN, stepperSpeed);Serial.println("stepperSpeed:" + comdata + ".");}}}comdata="";
}
void loop()
{ChecKeyState();RdmySerial();if((comflag==1)&& (is_control_stepper_right==true)){//步进电机正转Serial.println("Forward Begins");digitalWrite(DIRPIN, HIGH);//电机方向控制引脚输出高电平,电机可以正转analogWrite(STEPPIN, stepperSpeed);}else if ((comflag==2) && (is_control_stepper_left == true)){//步进电机反转Serial.println("Backward Begins");digitalWrite(DIRPIN, LOW);//电机方向控制引脚输出低电平,电机反转analogWrite(STEPPIN,stepperSpeed);//控制电机转动}else if (comflag==0){//控制步进电机停止analogWrite(STEPPIN, 0);//速度控制引脚9输出0Serial.println("stop");delay(300);}else {Serial.println(comdata +" 未知指令");comdata="";}comdata="";
}

Arduino UNO步进电机控制相关推荐

  1. 【Proteus仿真】Arduino UNO+继电器控制照明设备

    [Proteus仿真]Arduino UNO+继电器控制照明设备 -基于 VSM Studio Proteus仿真演示 示例代码 /* Main.ino file generated by New P ...

  2. 【在线仿真】Arduino UNO PWM 控制直流电机转速

    [在线仿真]Arduino UNO PWM 控制直流电机转速 在线仿真 接线说明 通过三极管来驱动直流电机电池正极接电机的一端,电机的另一端接到NPN三极管的集电极,三极管的基极接Arduino 11 ...

  3. arduino uno+驱动器控制42步进电机

    1.步进电机工作原理 步进电机通过不停的变换通电线圈和线圈的通电方向进行旋转,每次变换使步进电机转子转动1.8°.如图所示,这里采用的是两相四线步进电机,所有的转动都由以下四个步骤构成 2.ardui ...

  4. 【arduino】arduino uno + A4988控制42步进电机

    http://blog.csdn.net/ling3ye/article/details/47001251 MS1 , MS2 , MS3 跳线说明:(例子里是低电平,悬空或接地线,使用全步进模式) ...

  5. 第六篇、基于Arduino uno,控制180度舵机(SG90)转动——结果导向

    0.结果 说明:让舵机转动,需要用PWM来控制,下面的程序是舵机从0度一直转到180度,然后又从180度转到0度的这样一个过程. 1.外观 说明:虽然舵机的型号有很多种,但是只要是180度的舵机,控制 ...

  6. arduino UNO蓝牙控制舵机

    前段时间我开始着手做一个项目,需要用到蓝牙模块来控制多个舵机,但是我搜索了很多网站.找了很多代码但是运行起来都有各种各样的问题,无法满足我的运行需求,最后我整理了一下我所知较简单的arduino蓝牙控 ...

  7. arduino uno r3 控制42不进电机+TB6600驱动

    1.接线图如下: 2.arduino和TB6600链接 arduino========TB6600 GND-----------------ENA- 空---------------------ENA ...

  8. 【Proteus仿真】Arduino UNO+uln2003驱动步进电机+按键启保停正反转控制

    [Proteus仿真]Arduino UNO+uln2003驱动步进电机+按键启保停正反转控制 Proteus仿真演示 功能说明 正反转采用2和3 引脚外部中断,3和4引脚调节加减速. 示例程序代码 ...

  9. TB5128 + Arduino UNO,更方便控制步进电机

    关于TB5128 步进驱动芯片: 1. 概述     TB5128 是一种采用 PWM 斩波的两相双极步进电机驱动器.内置时钟解码器.     本驱动器采用 BiCD 工艺制造,额定输出为 50 V/ ...

  10. blinker控制步进电机起保停,正反转(Arduino uno+esp8266+TB6600驱动器)

    blinker控制步进电机起保停,正反转(Arduino uno+esp8266+TB6600驱动器) 本文针对上一篇的<外部按键中断精准控制步进电机起保停,正反转(Arduino+TB6600 ...

最新文章

  1. C语言 字符串和字符串数组动态分配及赋值
  2. 科学家发现鱼会数学,5以内的加减法难不倒它,网友:要多吃鱼了
  3. API 分页设计与实现探讨
  4. batocera_手把手教你安装batocera系统,把旧电脑变成万能影音游戏主机
  5. 一般处理程序制作的验证码
  6. 第三次学JAVA再学不好就吃翔(part58)--String和StringBuffer分别作为参数传递
  7. [NOI2012]美食节
  8. 用GDB Server进行远程调试
  9. Android硬件抽象层(HAL)概要介绍和学习计划 1转
  10. “国家科学数据中心”联合专刊征稿
  11. 前魅族科技高级副总裁李楠:iPhone 11的工业设计完全崩盘
  12. mysql免安装_腾讯云Ubuntu18.04部置Django2系列(二):Ubuntu18.04 安装Mysql
  13. pycharm 中 pep8 检查开启.
  14. java怎么引入矢量图标库,阿里巴巴矢量图标库Iconfont的使用方法
  15. 什么是DNS服务器?
  16. android ibinder类接口编辑
  17. 在线教育,网校平台,线上平台,线上教育的一些个人理解!
  18. 远景能源 2021 嵌入式笔试题
  19. Unity 使用UnityWebRequest问题小结
  20. 滴滴公布自查进展:免去黄洁莉顺风车事业部总经理职务

热门文章

  1. mac上投屏android_简单实用的手机投屏Mac电脑
  2. win10常用快捷键合集
  3. 基于NNIE神经网络引擎_海思hi3516DV300方案硬件平台适合做哪些开发
  4. java实现短信通知、验证码
  5. java怎么画八卦图_八卦图怎么画 最正确的八卦图
  6. 无法访问 文件目录损坏且无法读取
  7. 学习笔记 Tianmao 篇 使用简单封装后的自定义OkHttp 获取json被GSON解析后的数据
  8. ​Debug如何引流(降龙十八掌)
  9. Arnold渲染用炫云云渲染让我动画制作更轻松了
  10. Android 游戏 - 聚合SDK