【雕爷学编程】Arduino动手做(87)---ULN2003步进电机模组2

news2024/10/9 18:23:49

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验八十七:步进电机+ULN2003驱动板 4相 5线 5V步进电机模组

在这里插入图片描述
在这里插入图片描述
知识点:ULN2003芯片
ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成,每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行,采用DIP—16 或SOP—16 塑料封装。

在这里插入图片描述
ULN2003 是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。
ULN2003内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTL COMS,由达林顿管组成驱动电路。 ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。用户输出口的外接负载可根据以上参数估算。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达350mA,9脚可以悬空。比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。

特点如下:
ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。
ULN2003 采用DIP—16 或SOP—16 塑料封装。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
模块电原理图

在这里插入图片描述

在这里插入图片描述
步进电机
是将电脉冲信号转变为角位移或线位移的开环控制电机,是现代数字程序控制系统中的主要执行元件,应用极为广泛。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机是一种感应电机,它的工作原理是利用电子电路,将直流电变成分时供电的,多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的,多相时序控制器。虽然步进电机已被广泛地应用,但步进电机并不能像普通的直流电机,交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。

在这里插入图片描述
Arduino实验接线示意图

在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)

实验八十七:步进电机+ULN2003驱动板 4相 5线 5V步进电机模组

项目二:顺时针旋转1圈,逆时针旋转1/4圈,串口监控

连接引脚:分别将28BYJ-48驱动器的IN1 IN2 IN3 IN4连接到

Arduino UNO R3 8,9,10,11引脚

Arduino实验开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
   实验九十:步进电机+ULN2003驱动板 4相 5线 5V步进电机模组
   项目二:顺时针旋转1圈,逆时针旋转1/4圈,串口监控
   连接引脚:分别将28BYJ-48驱动器的IN1 IN2 IN3 IN4连接到
           Arduino UNO R3 8,9,10,11引脚
*/

//使用arduino IDE自带的Stepper.h库文件
#include <Stepper.h>

// 这里设置步进电机旋转一圈是多少步,依据步距角计算,及走一圈需要多少脉冲
#define STEPS 64

//设置步进电机的步数和引脚(就是驱动板上IN1~IN4连接的四个数字口)。
Stepper stepper(STEPS, 8, 9, 10, 11);

void setup()
{
  // 设置电机的转速:每分钟为90步
  stepper.setSpeed(290);
  // 初始化串口,用于调试输出信息
  Serial.begin(9600);
}

void loop()
{
  // 顺时针旋转
  Serial.println("顺时针旋转1圈");
  stepper.step(2048);
  delay(500);

  // 逆时针旋转
  Serial.println("逆时针旋转1/4圈");
  stepper.step(-512);
  delay(500);
}

实验串口返回情况

在这里插入图片描述

Stepper库函数
是Arduino 自带的第三方库,用于步进电机运行用,并支持两相和四相两种类型的步进电机。主要包括:

Stepper(steps, pin1, pin2)
Stepper(steps, pin1, pin2, pin3, pin4)
setSpeed(rpm)
step(steps)

1、Stepper
两种调用形式,Stepper(steps, pin1, pin2)与Stepper(steps, pin1, pin2, pin3, pin4),主要是看电机是两相还是四相,该函数作用是创建Stepper类的实例,参数steps应该是所使用的的电机转一周需要的步数(脉冲数),通过电机步距角计算。后面的pin1,2,3,4,依据实际情况填写。注意这个函数需要写在程序开始,即在void setup()之上。

说明
本语句用于建立一个新的步进电机对象。请在setup() and loop()前面使用本语句。stepper语句的参数根据连接在Arduino开发板上的步进电机实际情况而定。

参数
steps: 电机旋转一周的步数(整数型)
pin1, pin2: 连接电机的引脚编号(整数型)
pin3, pin4: (可选参数)连接电机的引脚编号(整数型)

返回值
A new instance of the Stepper motor class.
步进电机对象

示例

Stepper myStepper = Stepper(100, 5, 6);
Stepper myStepper = Stepper(100, 8, 9,10,11);

2、setSpeed
调用形式setSpeed(rpms),这个是控制转速的函数,实际是脉冲频率,参数为每分钟电机转的步数。数值为正整数。该函数不会使电机旋转。

说明
设置步进电机运行速度(每分钟转数)。此函数无法让电机旋转,只用于设置转速。如要让电机旋转,需要使用step函数。

参数
rpms: 转速参数(每分钟电机转数)(长整型)

返回值

3、step
step(steps),这个函数是使电机转过固定的步数,只有当电机转过指定步数之后才会执行该语句的下一条语句。参数应该是整数,正负号控制旋转方向。

说明
通过step函数您可以让步进电机旋转相应的步数。具体旋转的步数由stepper函数的参数决定。旋转速度则由 setSpeed函数决定。

注意:此函为“blocking”类型函数,即Arduino在运行此函数时,将会等待电机执行完运行要求以后才会执行下一条语句。举例说明,假如您通过setSpped函数设置电机的运行速度为1。然后通过调用step(100)指令让电机运转100步。这一操作的执行时间可能要一分多钟才能完成。为了让程序可以更好的运行,建议每一次调用step函数时尽量让电机少执行步数,同时提高电机的运行速度。

参数
steps: 电机运行的步数(整数型)

返回值

Arduino实验接线示意图

在这里插入图片描述
在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)

实验八十七:步进电机+ULN2003驱动板 4相 5线 5V步进电机模组

项目三:极慢转动4步用于观察ULN2003电机驱动板LED变化,

慢速顺时针旋转一圈,快速逆时针旋转一圈,间隔0.5秒

连接引脚:分别将28BYJ-48驱动器的IN1 IN2 IN3 IN4连接到

Arduino UNO R3 8,9,10,11引脚

Arduino实验开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
   实验九十:步进电机+ULN2003驱动板 4相 5线 5V步进电机模组
   项目三:极慢转动4步用于观察ULN2003电机驱动板LED变化,
   慢速顺时针旋转一圈,快速逆时针旋转一圈,间隔0.5秒
   连接引脚:分别将28BYJ-48驱动器的IN1 IN2 IN3 IN4连接到
           Arduino UNO R3  8,10,9,11引脚
*/

//本实验程序使用Stepper库
#include <Stepper.h>

// 定义电机控制用常量

// 电机内部输出轴旋转一周步数
const int STEPS_PER_ROTOR_REV = 32;

//  减速比
const int GEAR_REDUCTION = 64;

/*
   转子旋转一周需要走32步。转子每旋转一周,电机输出轴只旋转1/64周。
   (电机内部配有多个减速齿轮,这些齿轮会的作用是让转子每旋转一周,
   输出轴只旋转1/64周。)
   因此电机输出轴旋转一周则需要转子走32X64=2048步,即以下常量定义。
*/

// 电机外部输出轴旋转一周步数 (2048)
const float STEPS_PER_OUT_REV = STEPS_PER_ROTOR_REV * GEAR_REDUCTION;

// 定义电机控制用变量

// 电机旋转步数
int StepsRequired;

// 建立步进电机对象
// 定义电机控制引脚以及电机基本信息。
// 电机控制引脚为 8,9,10,11
// 以上引脚依次连接在ULN2003 驱动板 In1, In2, In3, In4

Stepper steppermotor(STEPS_PER_ROTOR_REV, 8, 9, 10, 11);

void setup()
{
  //setup函数内无内容
}

void loop()
{
  // 极慢转动4步用于观察ULN2003电机驱动板LED变化
  steppermotor.setSpeed(1);
  StepsRequired  =  4;
  steppermotor.step(StepsRequired);
  delay(500);

  // 慢速顺时针旋转一圈
  StepsRequired  =  STEPS_PER_OUT_REV;
  steppermotor.setSpeed(500);
  steppermotor.step(StepsRequired);
  delay(500);

  // 快速逆时针旋转一圈
  StepsRequired  =  - STEPS_PER_OUT_REV;
  steppermotor.setSpeed(800);
  steppermotor.step(StepsRequired);
  delay(500);
}

补充实验场景图

在这里插入图片描述

实验说明
1、关于接脚,程序设为“Stepper steppermotor(STEPS_PER_ROTOR_REV, 8, 9, 10, 11);”,实际接脚需要把9和10脚对调一下即可。

2、通过以上实验示例中将看到,首先步进电机将以非常慢的速度旋转,这么做的目的是为了便于观察UNL2003驱动板上LED变化与电机运动之间的关系。接下来电机将以较为缓慢的速度顺时针旋转一圈然后会以较快的速度逆时针旋转一圈。这里可以通过调整“setSpeed” 的参数来改变电机的旋转速度。

3、有一点需要特别注意。强烈建议在用Arduino驱动28BYJ-48步进电机时,为ULN电机驱动板单独配上一个电源。这一点正如上图所示,ULN2003驱动板的电源是由一个独立的+5V电源所提供的(这里使用USB口接入5V电源),如果用Arduino开发板的+5V电源直接为ULN2003驱动板供电的方法短时间测试是可以的,但是不要在长时间使用Arduino为ULN2003驱动板进行供电(实测总电流约为310mA)。

在这里插入图片描述

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

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

相关文章

openAI API使用教程、openai.Completion.create() 详细解释一下

openAI提供了几种不同场景的模型,主要有text completion、code completion、chat completion、image completion,例如chat completion,则调用方式为。而且请求的token和回复的token数会被加一起计费,例如说输入了10个token,openAI回复了20个token,那么最终收费是按照30个…

微信登录账户文件、聊天信息存储转移(存储空间足够、想保留历史聊天记录、文件)

1、打开电脑版微信、点击左下角的三根横线 2、点击左侧的“设置” 3、弹出层左侧点击“文件管理” 4、记录历史存储路径验证使用 历史默认存储位置“./我的文档/WeChat Files” 5、在其他存储空间充足盘符创建存储路径&#xff08;也可在 步骤7过程创建&#xff09; 具体位…

SpringBoot开发小技巧使用(DEBUG、启动图标修改、Lombok、devtools、Spring Initializr)

目录 1. 通过DEBUG查看自动配置的组件2. springboot启动图标修改3. Lombok4. devtools5. 通过IDEA的Spring Initializr快速创建新项目 1. 通过DEBUG查看自动配置的组件 在resources/application.properties中添加如下&#xff0c;开启DEBUG功能&#xff1a; debugtrue然后启动…

.Net Core 6.0依赖注入

.Net Core 6.0依赖注入 往期文章&#xff1a; .ner Core实现接口限流.net Core程序发布到IIS(Window Server 2019) 文章目录 .Net Core 6.0依赖注入前言一、ICO 和DI和DLICO [控制反转]DI [依赖注入]DL [依赖查找] 二、.net Core 中的依赖注入【Autofac】瞬时模式作用域模式单…

中文输入法开发-关键代码

续上篇介绍了嵌入式Linux下中文输入法&#xff0c; 嵌入式Linux下开发中文输入法_嵌入式输入法_小刚学長的博客-CSDN博客 本篇继续介绍核心关键功能 展现效果图如下&#xff1a; 1、如何跟应用关联起来&#xff0c;比如说&#xff0c;希望当LineEdit 输入状态激活后&#xff0…

怎么清空回收站?3个方法轻松搞定!

有没有大佬知道该怎么清空回收站呀&#xff1f;想把回收站清空了不知道该如何操作&#xff01;求一个清空方法&#xff01;感谢大家啦&#xff01; 电脑的回收站会为我们保存一些删除的数据&#xff0c;如果我们删除文件后意识到这些文件仍然是有用的&#xff0c;可以利用回收站…

报考CDGP一定要先有CDGA证书吗?

据DAMA中国官方网站消息&#xff0c;2023年度第三期DAMA中国CDGA和CDGP认证考试定于2023年9月23日举行&#xff0c;报名通道现已开启。 最近好多想报名CDGP认证考试的朋友都来咨询考试报名事宜&#xff0c;其中有一个重合度很高的问题“报考CDGP一定要先有CDGA证书吗&#xff…

【leetcode难题】2569. 更新数组后处理求和查询【线段树实现01翻转和区间求和模版】

题目截图 题目分析 关键就是记录每次操作2时&#xff0c;nums1中的1的个数这就需要实现线段树进行区间反转以及区间求和 ac code class Solution:def handleQuery(self, nums1: List[int], nums2: List[int], queries: List[List[int]]) -> List[int]:n len(nums1)m le…

校企合作谱新篇︱西藏农牧学院水土学院与鹏业软件签署校企合作协议

2023年7月17日&#xff0c;西藏农牧学院水利土木工程学院&#xff08;以下简称“水土学院”与成都鹏业软件股份有限公司&#xff08;以下简称“鹏业软件”&#xff09;在西藏林芝签署校企合作协议并揭牌。水土学院副书记、院长王培清、副院长孙海波、土木教研室主任宗永臣、土木…

【SpringBoot应用篇】SpringBoot+MybatisPlus集成国产DM8(达梦)数据库

【SpringBoot应用篇】SpringBootMybatisPlus集成国产DM8&#xff08;达梦&#xff09;数据库 简介和安装基本概念介绍SpringBootMP整合DM8pomymlAddressAddressMapper启动类测试类增删改查 yml配置与实体类TableName表映射问题 简介和安装 DM8 是达梦数据库有限公司推出的新一…

AI加速游戏开发 亚马逊云科技适配3大场景,打造下一代游戏体验

随着疫情的消散&#xff0c;中国游戏产业正在快速前进。在伴随着游戏产业升级的同时&#xff0c;整个行业都在面临着新的挑战与新的诉求。亚马逊云科技游戏研发解决方案和服务&#xff0c;覆盖端到端3大场景&#xff0c;为游戏公司与游戏开发人员赋能。 场景1&#xff1a;AI辅助…

memcached最大的优势是什么?

在Java中使用Memcached的最大优势之一是它提供了高性能的分布式缓存解决方案。Memcached是一个简单、快速、开源的内存缓存系统&#xff0c;可以帮助加速应用程序的访问速度&#xff0c;减轻数据库的负担&#xff0c;提高应用的扩展性和吞吐量。它常用于缓存频繁读取的数据&…

仿微信开发

介绍 一款仿微信界面的即时通讯APP, 采用uniapp开发(uview1.x版本),后端采用java.(springbootwebsocket) ####功能支持 1:添加好友,单聊,群聊群组的发起 2:支持文字,表情,语音,图片,文件信息的收发,离线消息推送仅限安卓(ios没证书,安卓需要自行申请unipush) 3:支持发送红包…

高压开关柜无线测温系统设计与实现 安科瑞 许敏

摘要&#xff1a;文章提出了一种用于小车式开关柜的无线测温系统&#xff0c;包括设于小车动触头套管上的温度传感器、环绕设于小车动触头上的电流传感器&#xff0c;温度传感器及电流传感器均分别连接有数据接收处理器&#xff0c;数据接收处理器电连接有设于小车式开关柜上的…

04 - 慎重使用正则表达式

在讲 String 对象优化时&#xff0c;提到了 Split() 方法&#xff0c;该方法使用的正则表达式可能引起回溯问题&#xff0c;今天就来深入了解下&#xff0c;这究竟是怎么回事&#xff1f; 开始之前&#xff0c;我们先来看一个案例&#xff0c;可以帮助你更好地理解内容。 在一…

uniapp兼容微信小程序和支付宝小程序遇到的坑

1、支付宝不支持v-show 改为v-if。 2、v-html App端和H5端支持 v-html &#xff0c;微信小程序会被转为 rich-text&#xff0c;其他端不支持 v-html。 解决方法&#xff1a;去插件市场找一个支持跨端的富文本组件。 3、导航栏处有背景色延伸至导航栏外 兼容微信小程序和支…

【装饰器设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式。将对象放入到一个特殊封装的对象中&#xff0c;为这个对象绑定新的行为&#xff0c;具备新的能力&#xff0c;同时又不改变其原有结构。 如果你希望在无需修改代码的情况下即可使用对象&…

《水经注地图服务》发布的卫星影像数据在OpenLayers中调用

OpenLayers是一个用于开发WebGIS客户端的JavaScript包。 OpenLayers 支持的地图来源包括Google Maps、Yahoo、 Map、微软Virtual Earth 等&#xff0c;用户还可以用简单的图片地图作为背景图&#xff0c;与其他的图层在OpenLayers 中进行叠加&#xff0c;在这一方面OpenLayers…

Linux6.15 Docker 私有仓库(harbor)

文章目录 计算机系统5G云计算第四章 LINUX Docker 私有仓库&#xff08;harbor&#xff09;一、搭建本地私有仓库二、Docker--harbor私有仓库部署与管理1.Harbor 简介1&#xff09;什么是Harbor2&#xff09;Harbor的特性3&#xff09;Harbor的构成 2.Harbor 部署1&#xff09;…

〔扩〕C# 调用Python

C# 调用Python 一、安装类库 pythonnet 谨慎使用IronPython&#xff0c;好像默认是2.7&#xff0c;运行部分外部引入的第三方包会报错 二、创建pyd 文件供c#调用 2.1 安装cython pip install cython2.2 准备自己的python文件 HtmlToMD.py import sys import html2text as ht…