1481浏览
楼主: 驴友花雕

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

[复制链接]

驴友花雕  中级技神
 楼主|

发表于 2024-7-21 19:17:42

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

步进电机也可以使用电位器进行控制。这里使用了一个 10K 电位器模块并将其连接到 Arduino Uno 板的 A0 模拟引脚。馈送到Arduino模拟引脚的电压可用作参考电压来控制步进电机的速度。连接示意图如下所示。

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


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-21 19:19:44

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

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
  4.   项目实验之五:使用10K电位器模块控制42步进电机的速度
  5. */
  6. //定义引脚编号
  7. const int stepPin = 2;
  8. const int dirPin = 3;
  9. int customDelay, customDelayMapped; //定义变量
  10. void setup() {
  11.   //将两个引脚设置为输出
  12.   pinMode(stepPin, OUTPUT);
  13.   pinMode(dirPin, OUTPUT);
  14.   //使电机能够沿特定方向移动
  15.   digitalWrite(dirPin, HIGH);
  16. }
  17. void loop() {
  18.   //从自定义加速函数获取自定义延迟值
  19.   customDelayMapped = speedUp();
  20.   //根据电位器数值的不同,可以定制延迟脉冲,电机的速度取决于电位器
  21.   digitalWrite(stepPin, HIGH);
  22.   delayMicroseconds(customDelayMapped);
  23.   digitalWrite(stepPin, LOW);
  24.   delayMicroseconds(customDelayMapped);
  25. }
  26. //读取电位计的功能
  27. int speedUp() {
  28.   //通过A0读取电位计
  29.   int customDelay = analogRead(A0);
  30.   //将电位计的读取值从0到1023转换为所需的延迟值(300到4000)
  31.   int newCustom = map(customDelay, 0, 1023, 300, 4000);
  32.   return newCustom;
  33. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-21 19:23:17

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

实验记录视频

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

https://www.bilibili.com/video/BV18t81ejEyo/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987








回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-22 09:05:23

【花雕学编程】项目实验之六:步进电机循环转动200步...

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

   实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
  4.   项目实验之六:步进电机循环转动200步暂停一秒
  5. */
  6. int x;
  7. void setup() {
  8.   //定义引脚,设为输出
  9.   Serial.begin(9600);
  10.   Serial.println("步进电机准备就绪");
  11.   // Enable
  12.   pinMode(6, OUTPUT);
  13.   // Step
  14.   pinMode(5, OUTPUT);
  15.   // Dir
  16.   pinMode(4, OUTPUT);
  17.   digitalWrite(6, LOW);
  18. }
  19. void loop() {
  20.   // Set Enable low
  21.   digitalWrite(6, LOW);
  22.   // Set Dir high
  23.   digitalWrite(4, HIGH);
  24.   Serial.println("循环200步(1转)");
  25.   for (x = 0; x < 200; x++) // //循环200次
  26.   {
  27.     digitalWrite(5, HIGH); // 输出高
  28.     delay(10); // Wait
  29.     digitalWrite(5, LOW); // 输出低
  30.     delay(100); // Wait
  31.   }
  32.   Serial.println("暂停");
  33.   delay(1000); //暂停一秒钟
  34. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-22 09:07:47

【花雕学编程】实验之六:步进电机循环转动200步暂停...

实验串口返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-22 09:30:01

【花雕学编程】项目实验之七:步进电机速度、位置和...

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
  项目实验之七:步进电机速度、位置和加速度的随机变化

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
  4.   项目实验之七:步进电机速度、位置和加速度的随机变化
  5. */
  6. //包含AccelStepper库
  7. #include <AccelStepper.h>
  8. AccelStepper stepper(1, 5, 4);
  9. //为双线板初始化加速踏板
  10. void setup() {
  11.   Serial.begin(9600);
  12.   pinMode(6, OUTPUT); // 输出
  13.   digitalWrite(6, LOW); // 设置为低
  14. }
  15. void loop() {
  16.   digitalWrite(6, LOW); // 设置为低
  17.   if (stepper.distanceToGo() == 0)
  18.   {
  19.     //速度、位置和加速度的随机变化
  20.     //确保我们没有零速度或加速度
  21.     delay(1000);
  22.     stepper.moveTo(rand() % 400);
  23.     stepper.setMaxSpeed((rand() % 400) + 200);
  24.     stepper.setAcceleration((rand() % 200) + 100);
  25.   }
  26.   Serial.println(stepper.distanceToGo());
  27.   stepper.run();  //实际上使步进器移动
  28. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-7-22 09:34:46

【花雕学编程】项目实验之七:步进电机速度、位置和...

实验串口返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 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:15:17

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

实验记录视频

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

https://www.bilibili.com/video/BV1dD8XeCEjg/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987




回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 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-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:58:11

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

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

代码说明:
到 loop() 部分的代码的第一部分与前面的案例完全相同。

在循环中,将 while 循环与函数结合使用。首先,将步进电机的当前位置设置为零 currentPosition()stepper.setCurrentPosition(0)。
  1.   //将位置重置为0
  2.   stepper.setCurrentPosition(0);
复制代码


接下来,利用 while 循环。while 循环将连续且无限循环,直到括号内的表达式 () 变为 false。所以,在这种情况下,检查步进电机的当前位置是否不等于 400 步(!= means: 不等于)。虽然情况并非如此,但以设定的恒定速度运行步进电机 setSpeed()。

  1.   //以200步/秒的速度向前运行电机,直到电机达到400步(2转)
  2.   while (stepper.currentPosition() != 400)
  3.   {
  4.     stepper.setSpeed(200);
  5.     stepper.runSpeed();
  6.   }
复制代码



在循环的其余部分,做完全相同的事情,只是速度和目标位置不同。


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

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

实验二百二十三:42步进电机二相四线+A4988驱动模块+...

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

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

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail