第二十二篇、基于Arduino uno,控制五线四相步进电机实现正转和反转——结果导向

news2025/5/20 3:04:40

0、结果

说明:步进电机可以旋转指定角度,例如转了九十度就停止,如果想一直转也是可以的,程序里面已写,而且也有正反转。如果是你想要的,可以接着往下看。

1、外观

说明:五线四相步进电机如下,需要对应的驱动电路,ULN2003驱动板如下。


2、连线

 说明:只需要连接六根线。
uno————五线四相步进电机

GND-------------GND
  5V-------------VCC
   2---------------IN1
   3---------------IN2
   4---------------IN3
   5---------------IN4

3、源程序

说明:采用非阻塞方式编写,一定时间驱动一次步进电机,执行的时候不会影响别的程序,而且可以转动指定角度,也可以一直转动,并将对应功能进行函数化,方便移植。

/****************************************step54 part****************************************/
/*
  接线:
  GND----------GND
  5V----------VCC
  2------------IN1
  3------------IN2
  4------------IN3
  5------------IN4
*/
#define step54TimeInterval 10                                                 //检测一次的时间间隔                   
unsigned long step54Times = 0;                                                //记录设备运行时间
int runStepCount = 0;
#define step54TimeInterval1 10                                                //检测一次的时间间隔                   
unsigned long step54Times1 = 0;                                               //记录设备运行时间
int runStepCount1 = 0;
/****************************************set up and loop part*********************************/
void setup() {
  Serial.begin(9600);                                                         //设置串口波特率为9600
  for (int i = 2; i < 6; i++) {
    pinMode(i, OUTPUT);                                                       //初始化四个引脚为输出模式
  }
  Serial.println("设备上线!");
}
void loop() {
  clockwise(512);                                                             //顺时针旋转512步为一圈
  //anticlockwise(512);                                                       //逆时针旋转512步为一圈
}
/****************************************step54 part****************************************/
/*顺时针旋转512步为一圈*/
void clockwise(int num) {
  //只转一次指定的角度
  if (runStepCount < num) {
    if (millis() - step54Times >= step54TimeInterval) {                       //一定时间执行一次
      step54Times = millis();
      runStepCount++;                                                         //计数
      for (int i = 2; i < 6; i++) {
        digitalWrite(i, HIGH);
        delay(2);                                                             //可以控制速度,建议不要小于2
        digitalWrite(i, LOW);
      }
    }
  }
  //不注释下面的if会一直转
  if (runStepCount >= num) {                                                  //重复转,一直转
    runStepCount = 0;
  }
}
/*逆时针旋转512步为一圈*/
void anticlockwise(int num) {
  if (runStepCount1 < num) {
    if (millis() - step54Times1 >= step54TimeInterval1) {                     //一定时间执行一次
      step54Times1 = millis();
      runStepCount1++;
      for (int i = 5; i > 1; i--) {
        digitalWrite(i, HIGH);
        delay(2);                                                             //可以控制速度,建议不要小于2
        digitalWrite(i, LOW);
      }
    }
  }
  //不注释下面的if会一直转
  //    if (runStepCount1 >= num) {                                              //重复转,一直转
  //      runStepCount1 = 0;
  //    }
}

4、注意事项

说明:步进电机所需的驱动电路模块ULN2003驱动板,输入的电压范围5V~12V,电压越大,电机力气也越大。电机速度越快,力气越小,成反比。电机速度最快也不是很快,如果速度太快,电机来不及转动就会停止,一直卡在那里。

5、基本原理

        当给定一个脉冲信号时,电机控制器会将输入信号转换成相应的控制信号,从而激活电机内部的驱动电路。
        电机内部的驱动电路会依次驱动电机的四组线圈,使得电机按照特定的顺序执行步进运动。
        根据电机的型号和具体接线方式,电机的步进运动可能包括单步、半步或者微步等多种模式。
         在Arduino中,通过控制脉冲信号的频率和方向,可以控制电机的转速和转向。
        需要注意的是,五线四相步进电机的驱动方式有多种,其中最常见的是全(双)桥式步进电机驱动器。在使用过程中,需要注意电机的额定电压、电流和步进角度等参数,以及驱动电路的性能和稳定性,以保证电机可以正常工作并且不会因为过载或者其他因素而受损。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自然语言处理从入门到应用——文本的表示方法

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 若要利用计算机对自然语言进行处理&#xff0c;首先需要解决语言在计算机内部的存储和计算问题。字符串&#xff08;String&#xff09;是文本最自然&#xff0c;也是最常用的机内存储形式。所谓字符串&#xff0c;即字…

rtty移植到MTK OpenWRT平台

准备工具链 使用MTK Openwrt 相应平台工具链&#xff0c;不能使用buildroot的工具链&#xff0c;否则程序无法运行&#xff0c;本文MTK7621为例工具链官网下载地址 构建libev rtty依赖libev库&#xff0c;因此需要先构建libev git clone https://github.com/enki/libev.git …

C语言-外部关键字extern

extern 关键字 extern 用在全局变量或函数的声明前&#xff0c;用来说明“此变量/函数是在别处定义的&#xff0c;要在此处引用。 什么是定义&#xff0c;什么是声明? 什么是定义:所谓的定义就是为这个变量分配一块内存并给它取上一个名字&#xff0c;这个名字就是我们经…

《多传感器融合感知》一、构建自动驾驶多传感器系统

来自 &#xff1a; https://www.bilibili.com/video/BV1JY4y1R7Be/ 多传感器融合的需求多传感器硬件系统构建多传感器硬件系统的时序闭环 1. 多传感器融合的需求 自动驾驶用来解决的问题&#xff1a; 建图定位、感知问题&#xff08;路上有什么、堵不堵、好不好走…&#xff…

数据可视化系列指南之分布类图表大全

导语 随着数据在各行业中的应用越来越广泛&#xff0c;大家也逐渐认识到数据可视化在企业生产经营中的重要作用&#xff0c;在数据可视化过程中&#xff0c;图表是处理数据的重要组成部分&#xff0c;因为它们是一种将大量数据压缩为易于理解的格式的方法。数据可视化可以让受…

生态系统服务评估方法 | 人类活动影响、重大工程实施的生态成效评估(InVEST模型)

以InVEST模型结合实际项目进行由浅入深的实战技术&#xff0c;针对特点及需求进行分析&#xff0c;融合课程体系&#xff0c;对接工作实际项目及论文写作&#xff0c;解决参会者关注的重点及实际项目过程问题&#xff0c;采取逐步延伸的逻辑&#xff0c;不论您是小白亦或是已经…

数据库磁盘文件格式的设计原理内幕

引言 访问磁盘需通过系统调用来实现&#xff0c;因此通常我们需要指定目标文件的偏移量&#xff0c;然后把数据从磁盘上的形式解析成合适主存的形式。这意味着要想设计一个高效的磁盘数据结构&#xff0c;必须构造一种易于修改和解析的文件格式。在本文中&#xff0c;我们将讨论…

unicms 使用thinkphp8 重构版

unicms 有你存在 一切安好 2023年6月使用thinkphp8&#xff0c;重构了cms。php最低使用php8版。参考了多个cms结合10年的开发经验&#xff0c;打造了开箱机用&#xff0c;简单的cms系统。当然由于你能力和开发时间限制&#xff0c;肯定有bug。欢迎大家指正。我也会不定期的修改…

【线性规划模型】

线性规划模型&#xff1a;原理介绍和预测应用 引言 线性规划是运筹学中一种重要的数学优化方法&#xff0c;被广泛应用于各个领域&#xff0c;包括工业、经济、物流等。 线性规划模型的原理 线性规划模型的目标是在一组线性约束条件下&#xff0c;寻找一组变量的最优解&…

Emm_V4.2步进闭环驱动器说明书Rev1.1

一、产品介绍 1.1 产品简介&#xff1a; Emm42_V4.x步进闭环驱动器是张大头智控为满足广大用户需求而自主研发的一款稳定可靠的产品&#xff0c;它是基于上一代Emm42_V3.6版本升级而来&#xff0c;不仅延续了其优秀的FOC矢量闭环控制算法&#xff0c;更在其传统的Dir/Step控制模…

Java003——编写和运行第一个Java程序HelloWorld

一、使用记事本创建Java并运行 1.1、设置文件显示后缀名 目的是为了方便查看文件类型 1.2、创建一个HelloWorld.java文件 java程序文件都是以.java后缀结尾的 1.3、编写Java程序 编写一下程序&#xff0c;并保存 public class HelloWorld {public static void main(Strin…

100天精通Golang(基础入门篇)——第0天: 安装 Go 语言开发环境的基础教程,带你学习Golang之Hello Go !

文章目录 1. 下载 Go 语言的安装包&#xff1a;1. 安装 Go 编译器&#xff1a;- 双击 安装下一步:切换安装路径:下一步:安装等待安装完成安装完成 - 2. 测试安装是否成功&#xff1a;1. 开始学习 Go 语言&#xff1a;1. 创建项目2. 创建 类文件3. 输入类名4. 键入 下方代码块5.…

【C语言】让你不再害怕“指针”【c】【知识点整理】

目录 一.什么是指针&&为什么需要指针&#xff1f; 1.什么是指针&#xff1f; 2.为什么需要指针&#xff1f; 以一个代码为例观察地址&#xff1a;&#xff08;这里我们可以通过调试和打印两种方式观察&#xff09; 1.调试观察&#xff1a; 2.打印观察&#xff08;…

Vue.js 中的 v-if 和 v-show 有什么区别?

Vue.js 中的 v-if 和 v-show 有什么区别&#xff1f; 在 Vue.js 中&#xff0c;v-if 和 v-show 都是用来控制元素的显示和隐藏的指令。但是&#xff0c;它们之间有一些区别。本文将深入探讨 v-if 和 v-show 的区别&#xff0c;并给出一些相关的代码示例。 v-if v-if 是一种条…

python数据分析模块

python数据分析模块 Python与数据分析的关系数据分析常用模块Python数据分析常用类库1&#xff0e;数组计算的数学模块-Numpy2&#xff0e;Pandas——数据分析核心库3&#xff0e;Matplotlib——绘制数据图表的 Python 库4&#xff0e;批量处理Excel文件的模块-xlwings5&#x…

浮点型在内存中的存储,与整型存储方式竟然不同

对于整形的存储方式&#xff0c;大家可以看我的上一篇文章&#xff0c;这篇文章来介绍浮点型在内存中存储方式。 目录 1. 问题 2. 浮点型家族&#xff1a; 3. 存储方式: 4. 读取方式&#xff1a; 5. 解题 1. 问题 我们先来看一段代码&#xff1a; #include <stdio.h&…

人体姿态估计

预测人体关键点有什么作用&#xff1f; 还原人体姿态&#xff0c;输出脸部、手部的关键点坐标3D空间内&#xff0c;关键点变为3维坐标&#xff0c;可以在三维空间中还原人体姿态&#xff0c;可以实现一键换装恢复3D的人体模型实现下游任务–行为理解&#xff0c;根据姿态判断人…

rocketmq-client-go注册消费者组的问题

一、前言 test环境服务启动&#xff0c;通过代码新注册一个customer group进行消费&#xff0c;服务一直报错如下&#xff1a; levelerror msg"fetch offset of mq from broker error" MessageQueue"MessageQueue [topicxxx, brokerNamebroker-a, queueId1]&q…

字节跳动面试挂在2面,复盘后,决定二战.....

先说下我基本情况&#xff0c;本科不是计算机专业&#xff0c;现在是学通信&#xff0c;然后做图像处理&#xff0c;可能面试官看我不是科班出身没有问太多计算机相关的问题&#xff0c;因为第一次找工作&#xff0c;字节的游戏专场又是最早开始的&#xff0c;就投递了&#xf…

人体关键点检测

title: 人体关键点检测 date: 2023-06-02 21:28:46 tags: [MMPose,cv] 人体关键点检测 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9x4nhwLf-1685714024668)(https://fastly.jsdelivr.net/gh/weijia99/blog_imagemain/1685712470039%E4%BA%BA%E4…