1173浏览
查看: 1173|回复: 29

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

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

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

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

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

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 14:42:55

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

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
  项目实验之四:不使用库,直接改变电压值控制步进电机持续正转

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
  4.   项目实验之四:不使用库,直接改变电压值控制步进电机持续正转
  5. */
  6. // 定义L298N模块的pin输出
  7. int Pin_A  = 8;
  8. int Pin_AA = 9;
  9. int Pin_B  = 10;
  10. int Pin_BB = 11;
  11. int delayTime = 5;   // 设定旋转速度,数值越小速度越快
  12. void setup() {
  13.   pinMode(Pin_A, OUTPUT);
  14.   pinMode(Pin_AA, OUTPUT);
  15.   pinMode(Pin_B, OUTPUT);
  16.   pinMode(Pin_BB, OUTPUT);
  17. }
  18. // 持续正向转动
  19. void loop() {
  20.   digitalWrite(Pin_A, LOW);
  21.   digitalWrite(Pin_AA,HIGH);
  22.   digitalWrite(Pin_B, HIGH);
  23.   digitalWrite(Pin_BB,LOW);
  24.   delay(delayTime);
  25.   digitalWrite(Pin_A, LOW);
  26.   digitalWrite(Pin_AA,HIGH);
  27.   digitalWrite(Pin_B, LOW);
  28.   digitalWrite(Pin_BB,HIGH);
  29.   delay(delayTime);
  30.   digitalWrite(Pin_A, HIGH);
  31.   digitalWrite(Pin_AA,LOW);
  32.   digitalWrite(Pin_B, LOW);
  33.   digitalWrite(Pin_BB,HIGH);
  34.   delay(delayTime);
  35.   digitalWrite(Pin_A, HIGH);
  36.   digitalWrite(Pin_AA,LOW);
  37.   digitalWrite(Pin_B, HIGH);
  38.   digitalWrite(Pin_BB,LOW);
  39.   delay(delayTime);
  40. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 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: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-25 17:26:11

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-25 17:28:11

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

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

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





回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-25 17:30:05

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-25 17:35:00

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

L298N
是专用驱动集成电路,属于H桥集成电路,与L293D的差别是其输出电流增大,功率增强。其输出电流为2A,最高电流4A,最高工作电压50V,可以驱动感性负载,如大功率直流电机,步进电机,电磁阀等,特别是其输入端可以与单片机直接相联,从而很方便地受单片机控制。当驱动直流电机时,可以直接控制步进电机,并可以实现电机正转与反转,实现此功能只需改变输入端的逻辑电平。

L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。

L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7V电压。4脚VS接电源电压,VS电压范围VIH为+2.5~46V。输出电流可达2A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动一台电动机。5,7,10,12脚接输入控制电平,控制电机的正反转。EnA,EnB接控制使能端,控制电机的停转。

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-25 17:37:04

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

L298N特性参数   
      类型: 半桥
  输入类型:非反相
  输出数:4
  电流-输出/通道:2A
  电流-峰值输出:3A
  电源电压:4.5V~46V
  工作温度:-25°C~130°C
  安装类型:通孔
  封装/外壳:MulTIwatt-15(垂直,弯曲和错列引线)
  供应商设备封装:15-MulTIwatt
  包装:管件
  器件型号L298N
  制造商STMicroelectronics
  产品型号MotionMotorControl

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-25 17:39:02

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

L298N电机驱动板模块的参数
1.驱动芯片:L298N双H桥直流电机驱动芯片
2.驱动部分端子供电范围Vs:+5V~+35V ; 如需要板内取电,则供电范围Vs:+7V~+35V
3.驱动部分峰值电流Io:2A
4.逻辑部分端子供电范围Vss:+5V~+7V(可板内取电+5V)
5.逻辑部分工作电流范围:0~36mA
6.控制信号输入电压范围:
   低电平:-0.3V≤Vin≤1.5V
   高电平:2.3V≤Vin≤Vss
7.使能信号输入电压范围:
   低电平:-0.3≤Vin≤1.5V(控制信号无效)
   高电平:2.3V≤Vin≤Vss(控制信号有效)
8.最大功耗:20W(温度T=75℃时)

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

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-25 17:41:54

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

L298N电机驱动模块性能特点:
  1:可实现电机正反转及调速。
  2:启动性能好,启动转矩大。
  3:工作电压可达到36V,4A。
  4:可同时驱动两台直流电机。
  5:适合应用于机器人设计及智能小车的设计。

情况一:用L298N驱动两台直流减速电机的电路。引脚A,B可用于PWM控制。如果机器人项目只要求直行前进,则可将IN1,IN2和IN3,IN4两对引脚分别接高电平和低电平,仅用单片机的两个端口给出PWM信号控制使能端A,B即可实现直行、转弯、加减速等动作。

情况二:用L298实现二相步进电机控制。将IN1,IN2和IN3,IN4两对引脚分别接入单片机的某个端口,输出连续的脉冲信号。信号频率决定了电机的转速。改变绕组脉冲信号的顺序即可实现正反转。

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-25 17:43:36

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

注意事项:
1.当你的驱动电压(上图标识为12V输入,实际可以接受的输入范围是7-12V)为7V-12V的时候,可以使能板载的5V逻辑供电,当使用板载5V供电之后,接口中的+5V供电不要输入电压,但是可以引出5V电压供外部使用。(这种即为常规应用!)
2.当驱动电压高于12V,小于等于24V(芯片手册中提出可以支持到35V,但是按照经验一般298保守应用最大电压支持到24V已经很了不起!)时,比如要驱动额定电压为18V的电机。首先必须拔除板载5V输出使能的跳线帽。然后在5V输出端口外部接入5V,5V使能即 一个电平为5V的控制信号,当此信号输入有效时,且电机驱动模块中电源供电正常时,电机驱动模块输出电流。否则即使电源供电正常,电机上也无电流。电压对L298N内部逻辑电路供电。(这种是高压驱动的非常规应用!)
3、L298N供电的5V如果是用另外电源供电的话,(即不是和单片机的电源共用),那么需要将单片机的GND和模块上的GND连接在一起,只有这样单片机上过来的逻辑信号才有个参考0点。此点非常重要,请注意。

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-25 17:45:12

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-25 18:00:33

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

L298N电机驱动模块与42步进电机实验接线示意图

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 10:42:47

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

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
  项目实验之一:使用 L298N Arduino 的 NEMA 17 步进电机简单控制

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
  4.   项目实验之一:使用 L298N Arduino 的 NEMA 17 步进电机简单控制
  5. */
  6. #include <Stepper.h>
  7. const int stepsPerRevolution = 400;  
  8. //更改此设置以适应每次旋转的步数
  9. //为您的电动机
  10. //在引脚8至11上初始化步进电机库
  11. Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
  12. //电机所走的步数
  13. int stepCount = 0;         
  14. int dirStep = 1;
  15. void setup() {
  16.   //初始化串行端口:
  17.   Serial.begin(9600);
  18. }
  19. void loop() {
  20.   //第一步
  21.   myStepper.step(dirStep);
  22.   Serial.print("步骤:");
  23.   Serial.println(stepCount);
  24.   stepCount++;
  25.   if ( stepCount > 800) {
  26.     stepCount = 0;
  27.     if ( dirStep == 1) dirStep = -1;
  28.     else dirStep = 1;
  29.   }
  30.   delayMicroseconds(50);
  31. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 10:47:45

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

实验串口返回情况

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 10:48:57

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

实验场景图

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 11:11:49

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

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

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
  4.   项目实验之二:使用 L298N控制步进电机正转三圈反转一圈
  5. */
  6. #include <Stepper.h>
  7. //创建stepper类的实例。
  8. //首先指定电机的步数,
  9. //然后指定连接步进器的引脚号
  10. Stepper myStepper1(200, 8, 9, 10, 11);
  11. void setup() {
  12. }
  13. void loop() {
  14.   //设置电机速度
  15.   myStepper1.setSpeed(150);
  16.   //将电机转动特定数量的步数
  17.   myStepper1.step(600);
  18.   delay(1000);
  19.   //将电机转动特定步数
  20.   myStepper1.step(-200);
  21.   //反向方向
  22.   delay(1000);
  23.   myStepper1.step(200);
  24.   //正向方向
  25.   delay(1000);
  26.   myStepper1.step(-200);
  27.   //反向方向
  28.   delay(1000);
  29. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 11:42:04

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

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
  项目实验之三:使用10K电位器控制步进电机转速

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 11:43:27

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

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十六:正反转PWM调速双H桥L298N模块驱动42步进电机
  4.   项目实验之三:使用10K电位器控制步进电机转速
  5. */
  6. //包含Arduino步进器库
  7. #include <Stepper.h>
  8. //定义常量
  9. //每次输出旋转的步数
  10. const int STEPS_PER_REV = 200;
  11. //电位器接入A0
  12. const int SPEED_CONTROL = A0;
  13. //使用的引脚是8、9、10、11
  14. //接L298N电机驱动器In1、In2、In3、In4
  15. //按顺序8-9-10-11输入引脚,以进行正确的步骤排序
  16. Stepper stepper_NEMA17(STEPS_PER_REV, 8, 9, 10, 11);
  17. void setup() {
  18.   //在虚空设置中什么也不用做
  19. }
  20. void loop() {
  21.   //读取传感器值:
  22.   int sensorReading = analogRead(SPEED_CONTROL);
  23.   //将其映射到0到100的范围
  24.   int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
  25.   //设置电机速度
  26.   if (motorSpeed > 0) {
  27.     stepper_NEMA17.setSpeed(motorSpeed);
  28.     //旋转的第1/100步
  29.     stepper_NEMA17.step(STEPS_PER_REV / 100);
  30.   }
  31. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 11:44:56

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

实验场景图

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 15:27:27

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

实验记录视频

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

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





回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-26 16:32:16

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

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

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


回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail