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型的目的.苦苦查阅资料后,终于找到了一个大神级函数! ...
随机推荐
- AndroidStudio修改程序的包名,可以修改com.example.xxx之类的详解
转载请说明出处.原创作品. 首先说明一下,当时公司需要修改androidStudio 项目的包名 于是上网查了一下,只看到了修改后面的包名,而不可以修改 前缀的com.example.xxx.所以很无 ...
- 【web系统UI自动化】关于UI自动化的总结
实施过了web系统的UI自动化,回顾梳理下,想到什么写什么,随时补充. 首先,自动化测试不是手动测试的替代品,是比较好的补充,而且不是占大比重的补充. 70%的测试工作集中在底层接口测试和单元测试,2 ...
- Currency Exchange(SPFA判负环)
Several currency exchange points are working in our city. Let us suppose that each point specializes ...
- tokitsukaze and RPG(暴力优化)
链接:https://ac.nowcoder.com/acm/contest/308/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- java初探(1)之登录补充
在登录之后,可能服务器是分布式的,因此不能通过一个本地的session来管理登录信息,导致登录的信息不能传递,即在这台服务器上可以得到用户登录信息,但在那台就得不到.因此,需要设置分布式的sessio ...
- 8svg 自定义全局组件
0.https://www.npmjs.com/package/vue2-svg-icon 直接使用vue2-svg-icon插件 .如果不使用,就使用下面用法 注意:用阿里图标时候,最好都选择#ff ...
- leetcode刷题-67二进制求和
题目 给你两个二进制字符串,返回它们的和(用二进制表示). 输入为 非空 字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" ...
- flutter vscode 安卓打包apk文件
配置 VSCode默认是没有使用密钥签名的,往往我们在正式项目中是需要签名的.那就创建好了...所以需要自己创建并使用密钥签名 步骤一 创建密钥库 执行以下命令: keytool -genkey -v ...
- tsconfig.json无法写入webpack.config.js 因为它会覆盖输入文件。
这个错误是什么意思?为什么要写入这个文件?即使我将该文件从项目中排除,该错误仍然存在.我该如何纠正这一点? 我将webpack.config.js文件删除,问题仍然存在. 解决方法: 如果未指定e ...
- oracle之二检查点
检查点(checkpoint) 8.1 什么是checkpointcheckpoint是数据库的一个内部事件,检查点激活时会触发数据库写进程(DBWR),将数据缓冲区里的脏数据块写到数据文件中. 8. ...