arduino中驱动 步进电机
参考:https://www.arduino.cn/thread-75936-1-1.html
知识点:
步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)
正文:
本文用Arduino 驱动步进电机28BYJ48,没有使用库文件,编写的程序简捷高效。注意,连接成组,在端口4 5 6 7,之后就可以测试了。程序测试通过,没有问题,供学习Arduino和步进电机用。
[kenrobot_code]/*********************************
功能:驱动28BYJ-48步进电机
设计:凌晨七點半
日期:2018.3.25
连接引脚:分别将28BYJ-48驱动器的IN1 IN2 IN3 IN4连接到
Arduino Uno R3 4 5 6 7引脚 也就是PORTD 4 5 6 7
*********************************/
//定义连接为PD4 PD5 PD6 PD7
#define ROTATE(x) {PORTD|=x; PORTD&=(x|0x0F);}
//四相单四拍
const char SinBeat[4]={0x80,0x40,0x20,0x10};
//四相双四拍
const char DulBeat1[4]={0xc0,0x60,0x30,0x90};
//四相双八拍
const char DulBeat2[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};
//节拍模式选择
#define MODE DulBeat2
void setup() {
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
Serial.begin(9600);
}
//逆时针旋转
void Anti_Clockwise(int Speed)
{
for(int i=0;i<sizeof(MODE);i++)
{
ROTATE(MODE);
delay(Speed);
}
}
//顺时针旋转
void Clockwise(int Speed)
{
for(int i=sizeof(MODE);i>=0;i--)
{
ROTATE(MODE);
delay(Speed);
}
}
void loop() {
Clockwise(50);
delay(500);
//Serial.println("OK...");
}[/kenrobot_code]
-
IMG_20180325_173728.jpg (399.76 KB, 下载次数: 208)
2018-3-25 17:39 上传


<ignore_js_op>

-
2018-4-13 21:03 上传
点击文件名下载附件
参考:
/*********************************
功能:驱动28BYJ-48步进电机
设计:凌晨七點半
日期:2018.3.25
连接引脚:分别将28BYJ-48驱动器的IN1 IN2 IN3 IN4连接到
Arduino Uno R3 4 5 6 7引脚 也就是PORTD 4 5 6 7
*********************************/
//定义连接为PD4 PD5 PD6 PD7#define ROTATE(x) {PORTD|=x;PORTD&=(x|0x0F);}
unsigned long Time;
unsigned long End;//四相单四拍
const char SinBeat[4]={0x80,0x40,0x20,0x10};
//四相双四拍
const char DulBeat1[4]={0xc0,0x60,0x30,0x90};
//四相双八拍
const char DulBeat2[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};//节拍模式选择
#define MODE SinBeat//DulBeat1
void setup() {
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
Serial.begin(9600);
}
////逆时针旋转
//void Anti_Clockwise(int Speed)
//{
//for(int i=0;i<sizeof(MODE);i++)
//{
// ROTATE(MODE[i]);//{PORTD|=MODE[i];PORTD&=(MODE[i]|0x0F);}
//delay(Speed);
//}
//}
//顺时针旋转
void Clockwise(int Speed)
{
for(int i=sizeof(MODE);i>=0;i--)
{
ROTATE(MODE[i]);
delay(Speed);
}
}
void loop() {
Time = millis();
do
{
Clockwise(2);
End = millis() - Time;
} while(End < 6000);delay(25920000); // 一天86400000 三天25920000
//Serial.println("OK...");}
arduino中驱动 步进电机的更多相关文章
- Arduino ULN2009驱动步进电机
一.实物图 二.例子代码 注:代码来自老外 http://www.4tronix.co.uk/arduino/Stepper-Motors.php 功能:控制电机正反转 // This Arduino ...
- FPGA驱动步进电机
步进电机 步进电机是将电脉冲信号转变为角位移或线位移的开环控制电机,是现代数字程序控制系统中的主要执行元件,应用极为广泛.在非超载的情况下,电机的转速.停止的位置只取决于脉冲信号的频率和脉冲数,而不受 ...
- python代码实现树莓派3b+驱动步进电机
python代码实现树莓派3b+驱动步进电机 之前买了个树莓派,刚买回来那会儿热情高涨,折腾了一段时间,然后就放那吃灰了.前几天忽然想起来这个东西了,决定再玩玩儿,于是就从某宝上购买了一套步进电机.驱 ...
- 使用Arduino Nano驱动Lora模块
使用Arduino Nano驱动Lora模块 为什么选用Lora 射频通信芯片有很多种,但是一般在同样功耗下,距离没有Lora远;同等范围下,没有Lora节能. Lora通信只适用于低速率,高延时的场 ...
- arduino中SCoop库的简单应用案例
转载:https://www.csdn.net/gather_27/MtTaggzsMDExMS1ibG9n.html arduino中SCoop库的简单应用案例首先这篇文章来在视频https://v ...
- Arduino中的setup()和loop()函数
今天看arduino的源代码,对于arduino中的setup和loop有了新的理解,可能你以前对于这俩个函数就是知道arduino是初始化,而loop是死循环,但是托若你看了Arduino的主函数你 ...
- Arduino中hex文件的保存及应用(转)
源:Arduino中hex文件的保存及应用 arduino在编译.链接.下载之后,hex文件自动删除了,造成软件仿真(如用proteus仿真)及其他单片机板应用的不便.以下是自己实践的小结,与大家分享 ...
- 在使用Arduino中遇到的问题(无法使用中文注释、程序无法下载)
在使用Arduino中遇到的问题: 在用arduino给蓝牙模块供电时,下载程序是下不进去的.即使显示下进去了,其实也是没下进去. 解决方法:拔掉蓝牙模块再下程序,或给蓝牙供电的线上加上一个开关. 在 ...
- Arduino中数据类型转换 float/double转换为char 亲测好使,dtostrf()函数
如何轻松玩转Arduino单片机,当我在进行数据转换的时候,遇到了问题,尝试了C语言和C++中的好多函数,都没有达到将float型数据转换为char型的目的.苦苦查阅资料后,终于找到了一个大神级函数! ...
随机推荐
- wxWidgets教程
https://www.wxwidgets.org/docs/tutorials/ http://zetcode.com/gui/wxwidgets/ https://docs.wxwidgets.o ...
- java初探(1)之静态页面化——客户端缓存
利用服务端缓存技术,将页面和对象缓存在redis中,可以减少时间浪费,内存开销.但在每次请求的过程中,仍然会有大量静态资源的请求和返回. 使用静态页面技术,页面不必要使用页面交互技术,比如thymel ...
- 让document.write的广告无阻塞的加载
广告代码分析 很多第三方的广告系统都是使用document.write来加载广告,如下面的一个javascript的广告链接. 1 <script type="text/javascr ...
- PHP对象传值 - 引用传值
对象传值本质上是引用传值,将一个对象变量($a)赋值给另个变量($b),实际上是将$a存储的对象内存引用地址赋值$b,此时两个变量指向的就是一个对象.其中一个变量发送改变,另一个也会跟着改变.和引用变 ...
- 【高并发】Redis如何助力高并发秒杀系统,看完这篇我彻底懂了!!
写在前面 之前,我们在<[高并发]高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!>一文中,详细讲解了高并发秒杀系统的架构设计,其中,我们介绍了可以使用Redis存储秒杀商品的库存数量.很 ...
- 别再眼高手低了! 这些Linq方法都清楚地掌握了吗?
不要再眼高手低了,这些Enumerable之常见Linq扩展方法都清楚掌握了吗?其实这是对我自己来说的! 例如:一个人这个技术掌握了一点那个技术也懂一点,其他的好像也了解一些,感觉自己啥都会一点,又觉 ...
- yum安装软件包提示Error Downloading Packages解决方法
在执行yum upgrade时报错 解决方法: 方法一: 1.清理本地yum缓存 执行:yum clean all 2.查看软件包列表 执行:yum list 注意:如果查询不到软件包列表,查看yum ...
- pytest封神之路第三步 精通fixture
首先放一句"狠话". 如果你不会fixture,那么你最好别说自己会pytest. (只是为了烘托主题哈,手上的砖头可以放下了,手动滑稽) fixture是什么 看看源码 def ...
- spring framework源码之AnnotationConfigApplicationContext
AnnotationConfigApplicationContext 内部使用了AnnotatedBeanDefinitionReader:ClassPathBeanDefinitionScanner ...
- 解决vue版本不匹配的问题 Vue packages version mismatch:
解决方式:重新单独安装提示冲突的模块 比如如上的冲突,我重新下载了 npm i vue-template-compiler@2.6.7 --save 再重新启动就可以了 npm run dev