驴友花雕 发表于 2024-8-26 16:34:04

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

实验开源代码

/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之六:使步进电机以200 RPM 顺时针旋转然后逆时针旋转的简单程序
*/

//包含Arduino步进电机库
#include <Stepper.h>

//每次输出旋转一圈的步数
const int stepsPerRevolution = 300;

//创建Stepper库实例
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);


void setup() {
//将速度设置为200 rpm
myStepper.setSpeed(200);
//初始化串行端口
Serial.begin(9600);
Serial.println("步进电机准备就绪!");
}

void loop() {
//朝着一个方向迈出一步(正向)
Serial.println("顺时针");
myStepper.step(stepsPerRevolution);
delay(600);

//朝着另一个方向迈出一步(反向)
Serial.println("逆时针");
myStepper.step(-stepsPerRevolution);
delay(600);
}

驴友花雕 发表于 2024-8-26 16:36:12

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

实验串口返回情况


驴友花雕 发表于 2024-8-26 16:42:58

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

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

代码说明:
1、该程序首先包括 Arduino Stepper 库。步进库与 Arduino IDE 打包在一起,负责对发送到电机的脉冲进行排序。//包含Arduino步进电机库
#include <Stepper.h>
2、包含库后,我们定义一个名为 stepsPerRevolution 的变量。顾名思义,它是您的电机额定每转的步数。在我们的例子中是 300。

//每次输出旋转一圈的步数
const int stepsPerRevolution = 300;

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

//创建Stepper库实例
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
4、在代码的设置部分,我们通过调用 setSpeed() 函数来设置步进电机的速度,并初始化串行通信。

void setup() {
//将速度设置为200 rpm
myStepper.setSpeed(200);
//初始化串行端口
Serial.begin(9600);
Serial.println("步进电机准备就绪!");
}

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

void loop() {
//朝着一个方向迈出一步(正向)
Serial.println("顺时针");
myStepper.step(stepsPerRevolution);
delay(600);

//朝着另一个方向迈出一步(反向)
Serial.println("逆时针");
myStepper.step(-stepsPerRevolution);
delay(600);
}

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


驴友花雕 发表于 2024-8-26 17:03:48

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

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

实验开源代码

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

#include <Stepper.h>
Stepper myStepper = Stepper(200, 8, 9, 10, 11);

void setup() {
myStepper.setSpeed(200);
}

void loop() {
myStepper.step(200);
delay(1000);
myStepper.step(-200);
delay(1000);
}


驴友花雕 发表于 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 库



驴友花雕 发表于 2024-8-26 17:36:15

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

实验开源代码

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

#include <AccelStepper.h>// 引入AccelStepper库

#define MotorInterfaceType 4// 定义电机接口类型为4线步进电机

// 创建一个AccelStepper对象,参数为接口类型和电机引脚
AccelStepper stepper = AccelStepper(MotorInterfaceType, 8, 9, 10, 11);

void setup() {
stepper.setMaxSpeed(1000);// 设置步进电机的最大速度
}

void loop() {
stepper.setCurrentPosition(0);// 将当前位置设为0
while (stepper.currentPosition() != 400) {// 当当前位置不等于400时
    stepper.setSpeed(200);// 设置电机速度为200
    stepper.runSpeed();// 运行电机
}
delay(1000);// 延迟1秒

stepper.setCurrentPosition(0);// 将当前位置设为0
while (stepper.currentPosition() != -200) {// 当当前位置不等于-200时
    stepper.setSpeed(-600);// 设置电机速度为-600
    stepper.runSpeed();// 运行电机
}
delay(1000);// 延迟1秒
}

驴友花雕 发表于 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 转。



驴友花雕 发表于 2024-8-27 09:20:41

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



页: 1 [2]
查看完整版本: 【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机