1482浏览
查看: 1482|回复: 33

【花雕学编程】Arduino动手做(223)---二相四线42步进电机

[复制链接]
本帖最后由 驴友花雕 于 2024-7-21 16:27 编辑

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

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图2

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图3


驴友花雕  中级技神
 楼主|

发表于 2024-7-22 11:07:35

【花雕学编程】项目实验之八:驱动步进电机顺时针5圈

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
  项目实验之八:驱动步进电机顺时针5圈和逆时针5圈

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
  4.   项目实验之八:驱动步进电机顺时针5圈和逆时针5圈
  5. */
  6. //定义步进电机连接引脚和每转一圈的步数
  7. #define dirPin 2
  8. #define stepPin 3
  9. #define stepsPerRevolution 200
  10. void setup() {
  11.   //将引脚声明为输出
  12.   pinMode(stepPin, OUTPUT);
  13.   pinMode(dirPin, OUTPUT);
  14. }
  15. void loop() {
  16.   //顺时针设置旋转方向
  17.   digitalWrite(dirPin, HIGH);
  18.   //缓慢旋转步进电机1圈
  19.   for (int i = 0; i < stepsPerRevolution; i++) {
  20.     //这四行结果为1个步骤
  21.     digitalWrite(stepPin, HIGH);
  22.     delayMicroseconds(2000);
  23.     digitalWrite(stepPin, LOW);
  24.     delayMicroseconds(2000);
  25.   }
  26.   delay(1000);
  27.   //逆时针设置旋转方向
  28.   digitalWrite(dirPin, LOW);
  29.   //快速旋转步进电机1圈
  30.   for (int i = 0; i < stepsPerRevolution; i++) {
  31.     //这四行结果为1个步骤
  32.     digitalWrite(stepPin, HIGH);
  33.     delayMicroseconds(1000);
  34.     digitalWrite(stepPin, LOW);
  35.     delayMicroseconds(1000);
  36.   }
  37.   delay(1000);
  38.   //顺时针设置旋转方向
  39.   digitalWrite(dirPin, HIGH);
  40.   //快速旋转步进电机5圈
  41.   for (int i = 0; i < 5 * stepsPerRevolution; i++) {
  42.     //这四行结果为1个步骤
  43.     digitalWrite(stepPin, HIGH);
  44.     delayMicroseconds(500);
  45.     digitalWrite(stepPin, LOW);
  46.     delayMicroseconds(500);
  47.   }
  48.   delay(1000);
  49.   //逆时针设置旋转方向
  50.   digitalWrite(dirPin, LOW);
  51.   //快速旋转步进电机5圈
  52.   for (int i = 0; i < 5 * stepsPerRevolution; i++) {
  53.     //这四行结果为1个步骤
  54.     digitalWrite(stepPin, HIGH);
  55.     delayMicroseconds(500);
  56.     digitalWrite(stepPin, LOW);
  57.     delayMicroseconds(500);
  58.   }
  59.   delay(1000);
  60. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-22 11:51:17

【花雕学编程】项目实验之九:使用AccelStepper库控制步..

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
  项目实验之九:使用AccelStepper库控制步进电机的步数或转数

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
  4.   项目实验之九:使用AccelStepper库控制步进电机的步数或转数
  5. */
  6. //包括AccelStepper库
  7. #include "AccelStepper.h"
  8. //定义步进电机连接和电机接口类型。
  9. //使用驱动器时,电机接口类型必须设置为1
  10. #define dirPin 2
  11. #define stepPin 3
  12. #define motorInterfaceType 1
  13. //创建AccelStepper类的新实例
  14. AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
  15. void setup() {
  16.   //以每秒步数设置最大速度
  17.   stepper.setMaxSpeed(1000);
  18. }
  19. void loop() {
  20.   //将当前位置设置为0
  21.   stepper.setCurrentPosition(0);
  22.   //以200步/秒的速度向前运行电机,直到电机达到400步(2转)
  23.   while (stepper.currentPosition() != 400)
  24.   {
  25.     stepper.setSpeed(200);
  26.     stepper.runSpeed();
  27.   }
  28.   delay(1000);
  29.   //将位置重置为0
  30.   stepper.setCurrentPosition(0);
  31.   //以600步/秒的速度反向运行电机,直到电机达到-200步(1转)
  32.   while (stepper.currentPosition() != -200)
  33.   {
  34.     stepper.setSpeed(-600);
  35.     stepper.runSpeed();
  36.   }
  37.   delay(1000);
  38.   //将位置重置为0
  39.   stepper.setCurrentPosition(0);
  40.   //以400步/秒的速度向前运行电机,直到电机达到600步(3转)
  41.   while (stepper.currentPosition() != 600)
  42.   {
  43.     stepper.setSpeed(400);
  44.     stepper.runSpeed();
  45.   }
  46.   delay(1500);
  47. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-22 11:29:23

【花雕学编程】项目实验之八:驱动步进电机顺时针5圈

本帖最后由 驴友花雕 于 2024-7-22 11:32 编辑

代码的工作原理:
从定义步进和方向引脚开始,这里将它们连接到Arduino引脚3和2。

该语句用于为常量值命名。编译程序时,编译器会将对此常量的任何引用替换为定义的值。所以在你提到的任何地方,编译器都会在编译程序时将其替换为值 2。

  1. #definedirPin
复制代码


这里定义了一个常量。驱动器设置为全步模式,所以将其设置为每转 200 步。如果设置不同,请更改此值 stepsPerRevolution。
  1. #define dirPin 2
  2. #define stepPin 3
  3. #define stepsPerRevolution 200
复制代码


在代码部分中,所有电机控制引脚都声明为数字输出,其功能为  setup()pinMode() 。

  1. void setup() {
  2.   pinMode(stepPin, OUTPUT);
  3.   pinMode(dirPin, OUTPUT);
  4. }
复制代码



在代码部分,让电机在 CW 方向上缓慢旋转一圈,在 CCW 方向上快速旋转一圈。接下来,我们让电机高速向每个方向旋转 5 圈。那么如何控制速度、旋转方向和转数呢?

  1. loop()
  2.   digitalWrite(dirPin, HIGH);
  3.   for(int i = 0; i < stepsPerRevolution; i++)
  4.   {
  5.     digitalWrite(stepPin, HIGH);
  6.     delayMicroseconds(2000);
  7.     digitalWrite(stepPin, LOW);
  8.     delayMicroseconds(2000);
  9.   }
复制代码


控制旋转方向:
为了控制步进电机的旋转方向,我们将 DIR(方向)引脚设置为高电平或低电平。为此,我们使用函数,根据步进电机的连接方式,将 DIR 引脚设置为高电平将使电机转动 CW 或 CCW。

  1. digitalWrite()
复制代码


控制步数或转数:
在此示例中,for 环路控制步进电机将采取的步数。for 循环中的代码导致步进电机的 1 步进。由于循环中的代码执行了 200 次 (stepsPerRevolution),因此会导致 1 次旋转。在最后两个循环中,for 循环中的代码执行 1000 次,这导致 1000 步或 5 转。

请注意,可以将 for 循环中的第二个项更改为所需的任何步骤数。 将导致 100 步,或半圈。

  1. for(int i = 0; i < 100; i++)
复制代码


控制速度:
步进电机的速度由发送到STEP引脚的脉冲频率决定。频率越高,电机运行速度越快。可以通过更改代码来控制脉冲的频率。延迟越短,频率越高,电机运行速度越快。

  1. delayMicroseconds()
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-19 18:12:08

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

电机规格 :42 步进电机
电机厚度 :33.3 MM
电机轴径 :5 MM圆轴(没有扁位)
输出轴长度 :22 MM
线长 :大约 140 MM(线是送的)
电机重量 :224 克
电机内阻 :1.5 欧
5V 短路电流 :2.7 A

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-19 18:39:42

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

42步进电机驱动,使用A4988模块

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-19 18:40:59

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图2

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-19 18:42:23

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相..

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-19 18:46:52

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

42步进电机A4988驱动模块扩展板

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-19 18:47:58

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1
【花雕学编程】Arduino动手做(223)---二相四线42步进电机图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-19 18:49:30

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图2
【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-19 18:54:00

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

实验模块接线示意图

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-19 18:56:24

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十三:日本(Nidec)二相四线 KV4234 步进电机 步进角1.8 度 5MM圆轴
  项目程序之一:控制步进电机转动

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十三:42步进电机+A4988驱动器
  4.   项目程序之一:控制步进电机转动
  5.   /*
  6.   //包含AccelStepper库
  7.   #include <AccelStepper.h>
  8.   //定义引脚连接
  9.   const int dirPin = 4;
  10.   const int stepPin = 2;
  11.   int enPin = 8;
  12.   //定义电机接口类型
  13.   #define motorInterfaceType 1
  14.   //创建实例
  15.   AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);
  16.   void setup() {
  17.   //设置最大速度、加速度系数,
  18.   //初始速度和目标位置
  19.   pinMode( enPin , OUTPUT);
  20.   digitalWrite( enPin , LOW);
  21.   // myStepper.setCurrent(0);
  22.   // myStepper.setMaxSpeed(1000);
  23.   myStepper.setAcceleration(2000);
  24.   myStepper.setSpeed(1000);
  25.   myStepper.moveTo(1600);
  26.   }
  27.   void loop() {
  28.   //电机到达目标位置后改变方向
  29.   if (myStepper.distanceToGo() == 0)
  30.     myStepper.moveTo(-myStepper.currentPosition());
  31.   //将电机移动一步
  32.   myStepper.run();
  33.   }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-19 19:01:45

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

实验场景图

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-19 19:17:26

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

实验记录视频

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相四线 KV4234 步进电机 步进角1.8 度 5MM圆轴
https://www.bilibili.com/video/BV1Cy8we1E6u/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987





回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-20 17:10:56

【花雕学编程】42步进电机A4988驱动模块扩展板42步进电...

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十三:日本(Nidec)二相四线 KV4234 步进电机 步进角1.8 度 5MM圆轴
  项目实验之二:控制步进电机正向与反向转动
Linkboy仿真编程

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-20 18:27:57

【花雕学编程】实验之二:控制步进电机正向与反向转动

实验记录视频

【花雕学编程】实验之二:控制步进电机正向与反向转动】
https://www.bilibili.com/video/BV1yo8gezEjg/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987


  




回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-20 20:50:18

【花雕学编程】实验之二:控制步进电机正向与反向转动

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十三:42步进电机+A4988驱动器
  项目实验之三:正反向控制步进电机快慢转动
  实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十三:42步进电机+A4988驱动器
  4.   项目实验之三:正反向控制步进电机快慢转动
  5. */
  6. //定义引脚连接和电机每转的步数
  7. const int dirPin = 3;
  8. const int stepPin = 2;
  9. const int stepsPerRevolution = 200;
  10. void setup() {
  11.   //将引脚声明为输出
  12.   pinMode(stepPin, OUTPUT);
  13.   pinMode(dirPin, OUTPUT);
  14. }
  15. void loop() {
  16.   //顺时针设置电机方向
  17.   digitalWrite(dirPin, HIGH);
  18.   //缓慢旋转电机
  19.   for (int x = 0; x < stepsPerRevolution; x++)
  20.   {
  21.     digitalWrite(stepPin, HIGH);
  22.     delayMicroseconds(2000);
  23.     digitalWrite(stepPin, LOW);
  24.     delayMicroseconds(2000);
  25.   }
  26.   delay(1000); //等一下,延时1秒
  27.   //逆时针设置电机方向
  28.   digitalWrite(dirPin, LOW);
  29.   //快速旋转电机
  30.   for (int x = 0; x < stepsPerRevolution; x++)
  31.   {
  32.     digitalWrite(stepPin, HIGH);
  33.     delayMicroseconds(1000);
  34.     digitalWrite(stepPin, LOW);
  35.     delayMicroseconds(1000);
  36.   }
  37.   delay(1000); // 等一下,延时1秒
  38. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-20 20:52:25

【花雕学编程】实验之二:控制步进电机正向与反向转动

实验模块接线示意图

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-20 20:53:58

【花雕学编程】实验之二:控制步进电机正向与反向转动

本帖最后由 驴友花雕 于 2024-7-20 21:05 编辑

连接表

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1

代码说明
1、我们首先定义了连接到 A4988 引脚的 Arduino 引脚。然后,我们定义了内容stepsPerRevolution,它包含电机每转完成所需的整数步数。
2、在空置设置中,我们将电机的控制引脚声明为输出。
3、在空隙回路中,我们将 DIR 引脚设置为高电平以顺时针方向旋转电机(要逆时针旋转电机,可以将 DIR 设置为低电平)。由于我们发送到STEP引脚的脉冲频率决定了电机的速度,因此我们将该引脚设置为高,然后设置为低。当脉冲较高时,电机运行得更快。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-21 16:56:27

【花雕学编程】实验之四:42步进电机的加速和减速控制

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
  项目实验之四:步进电机的加速和减速控制
  实验说明:步进电机的运动加速和减速,电机将以每秒 200 步的速度和每秒 30 步的加速度来回运行。

  实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
  4.   项目实验之四:42步进电机的加速和减速控制
  5. */
  6. //包含AccelStepper库
  7. #include <AccelStepper.h>
  8. //定义引脚连接
  9. #define dirPin 2
  10. #define stepPin 3
  11. //定义电机接口类型
  12. #define motorInterfaceType 1
  13. //创建AccelStepper类的新实例
  14. AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
  15. void setup(){
  16.   //设置最大速度和加速度:
  17.   stepper.setMaxSpeed(200);
  18.   stepper.setAcceleration(30);
  19. }
  20. void loop() {
  21.   //设置目标位置
  22.   stepper.moveTo(600);
  23.   //以设定的速度和加速/减速运行到目标位置
  24.   stepper.runToPosition();
  25.   delay(1000);
  26.   // 移回零
  27.   stepper.moveTo(0);
  28.   stepper.runToPosition();
  29.   delay(1000);
  30. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-21 16:57:55

【花雕学编程】实验之四:42步进电机的加速和减速控制

实验场景图

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-21 17:40:10

【花雕学编程】实验之四:42步进电机的加速和减速控制

实验记录视频

【花雕学编程】实验之四:42步进电机的加速和减速控制】
https://www.bilibili.com/video/BV1Ua81eCEjo/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987






回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-21 18:22:59

【花雕学编程】实验之五:使用10K电位器模块控制42步...

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
  项目实验之五:使用10K电位器模块控制42步进电机的速度

10K电位器模块

【花雕学编程】Arduino动手做(223)---二相四线42步进电机图1

回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail