Arduino UNO步进电机控制
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步进电机控制相关推荐
- 【Proteus仿真】Arduino UNO+继电器控制照明设备
[Proteus仿真]Arduino UNO+继电器控制照明设备 -基于 VSM Studio Proteus仿真演示 示例代码 /* Main.ino file generated by New P ...
- 【在线仿真】Arduino UNO PWM 控制直流电机转速
[在线仿真]Arduino UNO PWM 控制直流电机转速 在线仿真 接线说明 通过三极管来驱动直流电机电池正极接电机的一端,电机的另一端接到NPN三极管的集电极,三极管的基极接Arduino 11 ...
- arduino uno+驱动器控制42步进电机
1.步进电机工作原理 步进电机通过不停的变换通电线圈和线圈的通电方向进行旋转,每次变换使步进电机转子转动1.8°.如图所示,这里采用的是两相四线步进电机,所有的转动都由以下四个步骤构成 2.ardui ...
- 【arduino】arduino uno + A4988控制42步进电机
http://blog.csdn.net/ling3ye/article/details/47001251 MS1 , MS2 , MS3 跳线说明:(例子里是低电平,悬空或接地线,使用全步进模式) ...
- 第六篇、基于Arduino uno,控制180度舵机(SG90)转动——结果导向
0.结果 说明:让舵机转动,需要用PWM来控制,下面的程序是舵机从0度一直转到180度,然后又从180度转到0度的这样一个过程. 1.外观 说明:虽然舵机的型号有很多种,但是只要是180度的舵机,控制 ...
- arduino UNO蓝牙控制舵机
前段时间我开始着手做一个项目,需要用到蓝牙模块来控制多个舵机,但是我搜索了很多网站.找了很多代码但是运行起来都有各种各样的问题,无法满足我的运行需求,最后我整理了一下我所知较简单的arduino蓝牙控 ...
- arduino uno r3 控制42不进电机+TB6600驱动
1.接线图如下: 2.arduino和TB6600链接 arduino========TB6600 GND-----------------ENA- 空---------------------ENA ...
- 【Proteus仿真】Arduino UNO+uln2003驱动步进电机+按键启保停正反转控制
[Proteus仿真]Arduino UNO+uln2003驱动步进电机+按键启保停正反转控制 Proteus仿真演示 功能说明 正反转采用2和3 引脚外部中断,3和4引脚调节加减速. 示例程序代码 ...
- TB5128 + Arduino UNO,更方便控制步进电机
关于TB5128 步进驱动芯片: 1. 概述 TB5128 是一种采用 PWM 斩波的两相双极步进电机驱动器.内置时钟解码器. 本驱动器采用 BiCD 工艺制造,额定输出为 50 V/ ...
- blinker控制步进电机起保停,正反转(Arduino uno+esp8266+TB6600驱动器)
blinker控制步进电机起保停,正反转(Arduino uno+esp8266+TB6600驱动器) 本文针对上一篇的<外部按键中断精准控制步进电机起保停,正反转(Arduino+TB6600 ...
最新文章
- C语言 字符串和字符串数组动态分配及赋值
- 科学家发现鱼会数学,5以内的加减法难不倒它,网友:要多吃鱼了
- API 分页设计与实现探讨
- batocera_手把手教你安装batocera系统,把旧电脑变成万能影音游戏主机
- 一般处理程序制作的验证码
- 第三次学JAVA再学不好就吃翔(part58)--String和StringBuffer分别作为参数传递
- [NOI2012]美食节
- 用GDB Server进行远程调试
- Android硬件抽象层(HAL)概要介绍和学习计划 1转
- “国家科学数据中心”联合专刊征稿
- 前魅族科技高级副总裁李楠:iPhone 11的工业设计完全崩盘
- mysql免安装_腾讯云Ubuntu18.04部置Django2系列(二):Ubuntu18.04 安装Mysql
- pycharm 中 pep8 检查开启.
- java怎么引入矢量图标库,阿里巴巴矢量图标库Iconfont的使用方法
- 什么是DNS服务器?
- android ibinder类接口编辑
- 在线教育,网校平台,线上平台,线上教育的一些个人理解!
- 远景能源 2021 嵌入式笔试题
- Unity 使用UnityWebRequest问题小结
- 滴滴公布自查进展:免去黄洁莉顺风车事业部总经理职务