【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机
2024-08-252.2万
AI 快速预览详细
本文介绍了使用L298N模块驱动42步进电机的实验。通过正反转和PWM调速,实现了对步进电机的精确控制。适合初学者和有一定经验的爱好者,提供了详细的硬件连接和编程指导。
|
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验二百二十六:正反转PWM调速双H桥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 转。
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之八:使用 AccelStepper 库控制步进电机的速度、方向以及
步数和转数
*/
#include
#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秒
}[/code]
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之八:使用 AccelStepper 库控制步进电机的速度、方向以及
步数和转数
安装AccelStepper 库
[align=left][font=Poppins, sans-serif]在 setup() 部分中,我们使用 setSpeed() 函数以 rpm 为单位设置电机的旋转速度。[/font][/align][align=left][font=Poppins, sans-serif]在 loop() 部分中,首先使用 step() 方法顺时针旋转电机,并将每转的步数解析为其中的参数。因此,电机将以每转 200 次的步长旋转。为了逆时针旋转电机,我们将在 step() 方法中解析每转的步数,并带有负号。在两种类型的旋转之间,我们将有一个延迟。[/font][/align]
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之七:最简九行驱动程序
实验开源代码
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之七:最简九行驱动程序
*/
#include
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);
}[/code]
1、该程序首先包括 Arduino Stepper 库。步进库与 Arduino IDE 打包在一起,负责对发送到电机的脉冲进行排序。[code]//包含Arduino步进电机库
#include
2、包含库后,我们定义一个名为 stepsPerRevolution 的变量。顾名思义,它是您的电机额定每转的步数。在我们的例子中是 300。
[code]//每次输出旋转一圈的步数
const int stepsPerRevolution = 300;[/code]
3、接下来,我们创建 Stepper 库的对象。Stepper 类的构造函数将电机和 Arduino 引脚连接的每转步数作为参数。
[code]//创建Stepper库实例
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);[/code]
4、在代码的设置部分,我们通过调用 setSpeed() 函数来设置步进电机的速度,并初始化串行通信。
[code]void setup() {
//将速度设置为200 rpm
myStepper.setSpeed(200);
//初始化串行端口
Serial.begin(9600);
Serial.println("步进电机准备就绪!");
}[/code]
5、最后,在代码的循环部分,我们只需调用 step() 函数,该函数使电机以 setSpeed() 函数设置的速度转动特定数量的步数。将负数传递给此函数将反转电动机的旋转方向。
[code]void loop() {
//朝着一个方向迈出一步(正向)
Serial.println("顺时针");
myStepper.step(stepsPerRevolution);
delay(600);
//朝着另一个方向迈出一步(反向)
Serial.println("逆时针");
myStepper.step(-stepsPerRevolution);
delay(600);
}[/code]
6、请注意,step() 是一个阻塞函数。这意味着它将等到电机完成移动后,将控制权传递给程序中的下一行。例如,如果您将速度设置为 1 RPM 并在 100 步电机上调用 step(100),则此功能将需要整整一分钟才能完成。
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之六:使步进电机以200 RPM 顺时针旋转然后逆时针旋转的简单程序
*/
//包含Arduino步进电机库
#include
//每次输出旋转一圈的步数
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);
}[/code]
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之六:使步进电机以200 RPM 顺时针旋转然后逆时针旋转的简单程序
【花雕学编程】Arduino动手做(226)---L298N驱动42步进电机
https://www.bilibili.com/video/BV1KHsLe3EvY/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987
[media=x,500,375]https://www.bilibili.com/video/BV1KHsLe3EvY/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987[/media]
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之四:不使用库,直接改变电压值控制步进电机持续正转
实验开源代码
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之四:不使用库,直接改变电压值控制步进电机持续正转
*/
// 定义L298N模块的pin输出
int Pin_A = 8;
int Pin_AA = 9;
int Pin_B = 10;
int Pin_BB = 11;
int delayTime = 5; // 设定旋转速度,数值越小速度越快
void setup() {
pinMode(Pin_A, OUTPUT);
pinMode(Pin_AA, OUTPUT);
pinMode(Pin_B, OUTPUT);
pinMode(Pin_BB, OUTPUT);
}
// 持续正向转动
void loop() {
digitalWrite(Pin_A, LOW);
digitalWrite(Pin_AA,HIGH);
digitalWrite(Pin_B, HIGH);
digitalWrite(Pin_BB,LOW);
delay(delayTime);
digitalWrite(Pin_A, LOW);
digitalWrite(Pin_AA,HIGH);
digitalWrite(Pin_B, LOW);
digitalWrite(Pin_BB,HIGH);
delay(delayTime);
digitalWrite(Pin_A, HIGH);
digitalWrite(Pin_AA,LOW);
digitalWrite(Pin_B, LOW);
digitalWrite(Pin_BB,HIGH);
delay(delayTime);
digitalWrite(Pin_A, HIGH);
digitalWrite(Pin_AA,LOW);
digitalWrite(Pin_B, HIGH);
digitalWrite(Pin_BB,LOW);
delay(delayTime);
}[/code]
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之三:使用10K电位器控制步进电机转速
*/
//包含Arduino步进器库
#include
//定义常量
//每次输出旋转的步数
const int STEPS_PER_REV = 200;
//电位器接入A0
const int SPEED_CONTROL = A0;
//使用的引脚是8、9、10、11
//接L298N电机驱动器In1、In2、In3、In4
//按顺序8-9-10-11输入引脚,以进行正确的步骤排序
Stepper stepper_NEMA17(STEPS_PER_REV, 8, 9, 10, 11);
void setup() {
//在虚空设置中什么也不用做
}
void loop() {
//读取传感器值:
int sensorReading = analogRead(SPEED_CONTROL);
//将其映射到0到100的范围
int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
//设置电机速度
if (motorSpeed > 0) {
stepper_NEMA17.setSpeed(motorSpeed);
//旋转的第1/100步
stepper_NEMA17.step(STEPS_PER_REV / 100);
}
}[/code]
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之三:使用10K电位器控制步进电机转速
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之二:使用 L298N控制步进电机正转三圈反转一圈
实验开源代码
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之二:使用 L298N控制步进电机正转三圈反转一圈
*/
#include
//创建stepper类的实例。
//首先指定电机的步数,
//然后指定连接步进器的引脚号
Stepper myStepper1(200, 8, 9, 10, 11);
void setup() {
}
void loop() {
//设置电机速度
myStepper1.setSpeed(150);
//将电机转动特定数量的步数
myStepper1.step(600);
delay(1000);
//将电机转动特定步数
myStepper1.step(-200);
//反向方向
delay(1000);
myStepper1.step(200);
//正向方向
delay(1000);
myStepper1.step(-200);
//反向方向
delay(1000);
}[/code]
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之一:使用 L298N Arduino 的 NEMA 17 步进电机简单控制
实验开源代码
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
项目实验之一:使用 L298N Arduino 的 NEMA 17 步进电机简单控制
*/
#include
const int stepsPerRevolution = 400;
//更改此设置以适应每次旋转的步数
//为您的电动机
//在引脚8至11上初始化步进电机库
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
//电机所走的步数
int stepCount = 0;
int dirStep = 1;
void setup() {
//初始化串行端口:
Serial.begin(9600);
}
void loop() {
//第一步
myStepper.step(dirStep);
Serial.print("步骤:");
Serial.println(stepCount);
stepCount++;
if ( stepCount > 800) {
stepCount = 0;
if ( dirStep == 1) dirStep = -1;
else dirStep = 1;
}
delayMicroseconds(50);
}[/code]