Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)
下面上一些代码,是没有用任何库的.
仅仅是将步进点击链接到arduino不同的8, 9, 10 , 11口上的
分类: 嵌入式
int Pin0 = 8;int Pin1 = 9;int Pin2 = 10;int Pin3 = 11;int _step = 0;boolean dir = true;//正反转的 flagint stepperSpeed = 1;//电机转速,1ms一步void setup(){pinMode(Pin0, OUTPUT);pinMode(Pin1, OUTPUT);pinMode(Pin2, OUTPUT);pinMode(Pin3, OUTPUT);}//用下面的代码仿照PWM输出,看看类不累..哈哈.._step 从0 加到7 再变成0, 就这样一直循环下去.void loop(){switch(_step){case 0:digitalWrite(Pin0, LOW);digitalWrite(Pin1, LOW);digitalWrite(Pin2, LOW);digitalWrite(Pin3, HIGH);break;case 1:digitalWrite(Pin0, LOW);digitalWrite(Pin1, LOW);digitalWrite(Pin2, HIGH);digitalWrite(Pin3, HIGH);break;case 2:digitalWrite(Pin0, LOW);digitalWrite(Pin1, LOW);digitalWrite(Pin2, HIGH);digitalWrite(Pin3, LOW);break;case 3:digitalWrite(Pin0, LOW);digitalWrite(Pin1, HIGH);digitalWrite(Pin2, HIGH);digitalWrite(Pin3, LOW);break;case 4:digitalWrite(Pin0, LOW);digitalWrite(Pin1, HIGH);digitalWrite(Pin2, LOW);digitalWrite(Pin3, LOW);break;case 5:digitalWrite(Pin0, HIGH);digitalWrite(Pin1, HIGH);digitalWrite(Pin2, LOW);digitalWrite(Pin3, LOW);break;case 6:digitalWrite(Pin0, HIGH);digitalWrite(Pin1, LOW);digitalWrite(Pin2, LOW);digitalWrite(Pin3, LOW);break;case 7:digitalWrite(Pin0, HIGH);digitalWrite(Pin1, LOW);digitalWrite(Pin2, LOW);digitalWrite(Pin3, HIGH);break;default:digitalWrite(Pin0, LOW);digitalWrite(Pin1, LOW);digitalWrite(Pin2, LOW);digitalWrite(Pin3, LOW);break;}if(dir){_step++;}else{_step--;}if(_step>7){ //请注意,这边_step> 7的时候,已经是在上面的那个判断里面从7加到8了.但是, 最后一次执行的时候,还是7 !!!_step=0; //所以这里变成0 是必须的. }if(_step<0){ //同理_step=7;}delay(stepperSpeed); //电机休息一下,用来调速用的.}
这里,还转了一些别人做过的一些实验. 对步进电机介绍的比较详细:
原帖地址:http://www.geek-workshop.com/forum.php?mod=viewthread&tid=101
步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的 方向转动一个固定的角度(及步进角)。你可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时你也可以通过控制脉冲频率来控制电机转动的速 度和加速度,从而达到调速的目的。
下面这个就是本次实验使用的步进电机
工业使用的步进电机与本次实验使用的不同,下面图式两种不同款式的工业用步进电机
使用步进电机前一定要仔细查看说明书,确认是四相还是两相,各个线怎样连接,本次实验使用的步进电机是四相的,不同颜色的线定义如下图:
下面是电机的端口结构图,1,3为一组,2,4为一组,5号是共用的VCC。
因本次使用的步进电机功率很小,所以可以直接使用一个ULN2003芯片进行驱动,如果是大功率的步进电机,是需要对应的驱动板的。
ULN2003 是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。可以用来驱动步进电机。
其结构图如下
硬件连接图如下
把代码下载到arduino控制板中看看效果
/** 步进电机跟随电位器旋转* (或者其他传感器)使用0号模拟口输入* 使用arduino IDE自带的Stepper.h库文件*/#include <Stepper.h>// 这里设置步进电机旋转一圈是多少步#define STEPS 100// attached to设置步进电机的步数和引脚Stepper stepper(STEPS, 8, 9, 10, 11);// 定义变量用来存储历史读数int previous = 0;void setup(){// 设置电机每分钟的转速为90步stepper.setSpeed(90);}void loop(){// 获取传感器读数int val = analogRead(0);// 移动步数为当前读数减去历史读数stepper.step(val - previous);// 保存历史读数previous = val;}
电流芯片文档下载地址:
http://www.ti.com/lit/ds/symlink/uln2003a.pdf
转载于:https://www.cnblogs.com/spaceship9/archive/2013/04/10/3012780.html
Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)相关推荐
- Arduino 各种模块篇 DHT11 温度湿度 数字模块 单总线
---恢复内容开始--- DHT11 以前用的是DS18B20也是但总线的,而且每个DS18B20都有一个特定的ROM,所以将许多单总线的温度计放在一根线上也行. 真是一个非常好的设计方案! 如果这里 ...
- arduino步进电机程序库_Arduino入门教程15(步进电机驱动库的使用):Arduino Uno R3+ULN2003+步进电机 使用Stepper驱动库,控制步进电机转动角度...
本篇介绍步进电机驱动库的使用,通过读取电位器输入,控制步进电机转动相应角度. Stepper库是官方提供的驱动库,我们启动Arduino IDE,点击「文件」-「示例」就能找到Stepper库,官方提 ...
- Arduino 各种模块篇 motor shield
根据arduino官方网站出的shield, 类似的情况有很多中motor shield 这里测试采用的是http://www.seeedstudio.com/wiki/Motor_Shield_V1 ...
- Arduino 各种模块篇 光敏感应器 简易光敏
这一款是非常简单的光敏感应器 简单到,只对一定光强度有信号感应,输出TTL电平. 此款也是用电位器来调节的. 都是这么简单. 过段时间我为大家奉上数字版的光敏传感器. ---------------- ...
- Arduino 各种模块篇 舵机 Modules - Servo
舵机 舵机是一种非常有意思的,多级齿轮增大扭力的widget.非常有用.在很多方面. Servo is very useful. Now Please check this out : What is ...
- Arduino 各种模块篇 震动模块 常开 震动传感器模块
以下是店家提供的一部分资料 一共就需要3根线 ------------------分割线------------------------ 用途: 用于各种震动触发作用,报盗报警,智能小车,电子积木等. ...
- 用MATLAB程序控制伺服电机,使用MATLAB和Arduino开发板进行步进电机控制
步进电机是一种无刷直流电机,可以分步旋转,是许多精密运动控制应用的最佳选择.此外,步进电机适用于定位.速度控制和低速需要大扭矩的应用. 在之前的MATLAB教程中,我们已经介绍了如何使用MATLAB来 ...
- arduino 步进电机驱动库_一文看懂arduino驱动uln2003操作步进电机的方法
arduino驱动uln2003操作步进电机的方法 1.网上买的步进电机,很多接线顺序都不对.经过不懈努力查资料,终于找到了能用的接线方式: 电机上的12345针脚,对应着接线端子的42135. 2. ...
- 织女星开发板RISC-V核通过SPI协议驱动ARDUINO LCD模块(触屏)
前言 之前写了一个通过SPI协议初始化LCD屏幕并显示字符串和图片的文章,这次再尝试一下触屏的功能. 准备工作 1,焊接织女星开发板J1,J2,J3,J4的双排母座,以便与LCD屏通信.前段时间免费申 ...
最新文章
- 小学计算机课计划,小学信息技术教学工作计划
- (LeetCode 92)Reverse Linked List II
- matlab硬接触,abaqus中的关于硬接触(Hard contact)、及其他接触
- 地方门户网站运营策略
- Python【每日一问】08
- JAVA语法基础 动手动脑及课后作业
- springboot listener_Springboot 全套面试提升宝典,为金三银四冲刺
- 博客园随笔添加自己的版权信息 [转]
- pandas计算时间的间隔天数
- 电视助手 Android,无屏助手TV版|无屏助手电视版 V4.0.3 安卓版 下载_当下软件园_软件下载...
- OpenCV 两张大小不同图片的叠加
- DateTime类型的12小时制与24小时制
- 递归算法删除某一链表指定节点为什么不会发生断链?(解析原因)
- windows下载安装配置Geany
- 基于java基于javaweb的管理系统设计与实现怎样选题思路分享
- 服装行业如何利用长尾关键词挖掘推广?
- 参加“灵狐公司”的技术年会,感受最新MS OFFICE 2007的应用价值!
- java学习之服务器第28天( --jsp--三个指令--六个动作标签--PageContext域--EL表达式--)
- 【Python-5】Conditionals Control Flow
- 201571030121《小学四则运算练习软件软件需求说明》结对项目报告
热门文章
- python去重复元素_python 去除单个list中的重复元素
- java与ios_JAVA和IOS区别是什么?
- 系统崩溃mysql怎么保存表_第09问:MySQL 莫名崩溃,如何保留现场?
- CentOS 6 rpm方式安装mysql
- JAVA复习5(集合——LinkedList)
- python全排列_全排列算法python实现
- c语言 读取一个文件 删除注释,C/C++ 源文件删除注释代码
- selenium java 断言_Java+Selenium+Testng自动化测试学习(三)— 断言
- midaspay能删除吗_midasPay返回90009错误
- 深度搜索问题c语言,C语言实现的图的深度搜索与广度搜索程序.doc