1297浏览
楼主: 驴友花雕

[项目] 【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机

[复制链接]

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 16:34:04

【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
  4.   项目实验之六:使步进电机以200 RPM 顺时针旋转然后逆时针旋转的简单程序
  5. */
  6. //包含Arduino步进电机库
  7. #include <Stepper.h>
  8. //每次输出旋转一圈的步数
  9. const int stepsPerRevolution = 300;
  10. //创建Stepper库实例
  11. Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
  12. void setup() {
  13.   //将速度设置为200 rpm
  14.   myStepper.setSpeed(200);
  15.   //初始化串行端口
  16.   Serial.begin(9600);
  17.   Serial.println("步进电机准备就绪!");
  18. }
  19. void loop() {
  20.   //朝着一个方向迈出一步(正向)
  21.   Serial.println("顺时针");
  22.   myStepper.step(stepsPerRevolution);
  23.   delay(600);
  24.   //朝着另一个方向迈出一步(反向)
  25.   Serial.println("逆时针");
  26.   myStepper.step(-stepsPerRevolution);
  27.   delay(600);
  28. }
复制代码


回复

举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 16:36:12

【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机

实验串口返回情况

【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机图1
回复

举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 16:42:58

【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机

本帖最后由 驴友花雕 于 2024-8-26 16:47 编辑

代码说明:
1、该程序首先包括 Arduino Stepper 库。步进库与 Arduino IDE 打包在一起,负责对发送到电机的脉冲进行排序。
  1. //包含Arduino步进电机库
  2. #include <Stepper.h>
复制代码

2、包含库后,我们定义一个名为 stepsPerRevolution 的变量。顾名思义,它是您的电机额定每转的步数。在我们的例子中是 300。

  1. //每次输出旋转一圈的步数
  2. const int stepsPerRevolution = 300;
复制代码


3、接下来,我们创建 Stepper 库的对象。Stepper 类的构造函数将电机和 Arduino 引脚连接的每转步数作为参数。

  1. //创建Stepper库实例
  2. Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
复制代码

4、在代码的设置部分,我们通过调用 setSpeed() 函数来设置步进电机的速度,并初始化串行通信。

  1. void setup() {
  2.   //将速度设置为200 rpm
  3.   myStepper.setSpeed(200);
  4.   //初始化串行端口
  5.   Serial.begin(9600);
  6.   Serial.println("步进电机准备就绪!");
  7. }
复制代码


5、最后,在代码的循环部分,我们只需调用 step() 函数,该函数使电机以 setSpeed() 函数设置的速度转动特定数量的步数。将负数传递给此函数将反转电动机的旋转方向。

  1. void loop() {
  2.   //朝着一个方向迈出一步(正向)
  3.   Serial.println("顺时针");
  4.   myStepper.step(stepsPerRevolution);
  5.   delay(600);
  6.   //朝着另一个方向迈出一步(反向)
  7.   Serial.println("逆时针");
  8.   myStepper.step(-stepsPerRevolution);
  9.   delay(600);
  10. }
复制代码


6、请注意,step() 是一个阻塞函数。这意味着它将等到电机完成移动后,将控制权传递给程序中的下一行。例如,如果您将速度设置为 1 RPM 并在 100 步电机上调用 step(100),则此功能将需要整整一分钟才能完成。


回复

举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 17:03:48

【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
  项目实验之七:最简九行驱动程序

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
  4.   项目实验之七:最简九行驱动程序
  5. */
  6. #include <Stepper.h>
  7. Stepper myStepper = Stepper(200, 8, 9, 10, 11);
  8. void setup() {
  9.   myStepper.setSpeed(200);
  10. }
  11. void loop() {
  12.   myStepper.step(200);
  13.   delay(1000);
  14.   myStepper.step(-200);
  15.   delay(1000);
  16. }
复制代码



回复

举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 17:05:31

【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机

上述代码的工作原理。
首先包括 Stepper.h 库,其中包含步进电机速度和方向控制所需的函数。
然后定义电机旋转一圈所需的步数。在这种情况下,我在全步模式下使用电机,步进电机类型移动 200 步以旋转 360 度。该值根据您使用的步进电机类型而变化,例如,如果它是 28BYJ-48 步进电机,则该值将为 48。
接下来,您需要创建 Stepper 类的新实例,该实例将电机和 Arduino 引脚连接的每转步数作为参数。

在 setup() 部分中,我们使用 setSpeed() 函数以 rpm 为单位设置电机的旋转速度。
在 loop() 部分中,首先使用 step() 方法顺时针旋转电机,并将每转的步数解析为其中的参数。因此,电机将以每转 200 次的步长旋转。为了逆时针旋转电机,我们将在 step() 方法中解析每转的步数,并带有负号。在两种类型的旋转之间,我们将有一个延迟。

回复

举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 17:33:29

【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
  项目实验之八:使用 AccelStepper 库控制步进电机的速度、方向以及
  步数和转数

安装AccelStepper 库

【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机图1

回复

举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 17:36:15

【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
  4.   项目实验之八:使用 AccelStepper 库控制步进电机的速度、方向以及
  5.   步数和转数
  6. */
  7. #include <AccelStepper.h>  // 引入AccelStepper库
  8. #define MotorInterfaceType 4  // 定义电机接口类型为4线步进电机
  9. // 创建一个AccelStepper对象,参数为接口类型和电机引脚
  10. AccelStepper stepper = AccelStepper(MotorInterfaceType, 8, 9, 10, 11);
  11. void setup() {
  12.   stepper.setMaxSpeed(1000);  // 设置步进电机的最大速度
  13. }
  14. void loop() {
  15.   stepper.setCurrentPosition(0);  // 将当前位置设为0
  16.   while (stepper.currentPosition() != 400) {  // 当当前位置不等于400时
  17.     stepper.setSpeed(200);  // 设置电机速度为200
  18.     stepper.runSpeed();  // 运行电机
  19.   }
  20.   delay(1000);  // 延迟1秒
  21.   stepper.setCurrentPosition(0);  // 将当前位置设为0
  22.   while (stepper.currentPosition() != -200) {  // 当当前位置不等于-200时
  23.     stepper.setSpeed(-600);  // 设置电机速度为-600
  24.     stepper.runSpeed();  // 运行电机
  25.   }
  26.   delay(1000);  // 延迟1秒
  27. }
复制代码


回复

举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 17:39:26

【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机

代码说明
首先包括 AccelStepper.h 库,然后定义电机接口类型。电机接口类型设置为 4,因为我们在全步模式下使用 4 线步进电机。

接下来,创建一个 AccelStepper 类的新实例,该实例具有适当的电机接口类型和与 Arduino 的连接。

在 setup() 部分中,定义最大速度(以每秒步数为单位)。

在 loop 部分,首先使用 setCurrentPosition(0) 方法将步进电机的当前位置设置为零。

while 循环会持续运行,直到循环内的条件变为 false。因此,在这种情况下,我们检查步进电机的当前位置是否不等于 400 步。虽然情况并非如此,但我们以 setSpeed() 方法设置的每秒 200 步的恒定速度运行步进电机,直到电机达到 400 步,即 2 转。runSpeed() 方法以 setSpeed() 方法设置的速度移动电机。

2 转后,电机延迟 1 秒,然后将电机的当前位置设置为零,并使用另一个 while 回路以每秒 600 步的速度向后运行电机,直到电机达到 -200 步或 1 转。

【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机图1

回复

举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-27 09:20:41

【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机

【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机图1

回复

举报

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

本版积分规则

上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

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

mail